Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
neoppod
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jérome Perrin
neoppod
Commits
cf413589
Commit
cf413589
authored
9 years ago
by
Julien Muchembled
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
storage: fix crash when a client tries to "steal" the UUID of another client
parent
11debaa9
master
cache
doc
dont_invalidate_new
drop
ivan
load-lock
prodxxx
setup-from-anywhere
web-admin
zstd
web-admin-2
web-admin-1
v1.12
v1.11
v1.10
v1.9
v1.8.1
v1.8
v1.7.1
v1.7.0
v1.6.3
v1.6.2
v1.6.1
v1.6
v1.5.1
v1.5
v1.4
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
3 deletions
+33
-3
neo/lib/node.py
neo/lib/node.py
+1
-0
neo/storage/handlers/identification.py
neo/storage/handlers/identification.py
+5
-3
neo/tests/threaded/test.py
neo/tests/threaded/test.py
+27
-0
No files found.
neo/lib/node.py
View file @
cf413589
...
...
@@ -409,6 +409,7 @@ class NodeManager(object):
# XXX: It's probably a bug to include connecting nodes but there's
# no API yet to update manager when connection is established.
if
node
.
isConnected
(
connecting
=
True
):
assert
node
in
self
.
_node_set
,
node
self
.
_identified_dict
[
uuid
]
=
node
else
:
self
.
_identified_dict
.
pop
(
uuid
,
None
)
...
...
This diff is collapsed.
Click to expand it.
neo/storage/handlers/identification.py
View file @
cf413589
...
...
@@ -52,9 +52,11 @@ class IdentificationHandler(EventHandler):
if
node
is
None
:
node
=
app
.
nm
.
createClient
(
uuid
=
uuid
)
elif
node
.
isConnected
():
# cut previous connection
node
.
getConnection
().
close
()
assert
not
node
.
isConnected
()
# This can happen if we haven't processed yet a notification
# from the master, telling us the existing node is not
# running anymore. If we accept the new client, we won't
# know what to do with this late notification.
raise
NotReadyError
(
'uuid conflict: retry later'
)
node
.
setRunning
()
elif
node_type
==
NodeTypes
.
STORAGE
:
if
node
is
None
:
...
...
This diff is collapsed.
Click to expand it.
neo/tests/threaded/test.py
View file @
cf413589
...
...
@@ -800,5 +800,32 @@ class Test(NEOThreadedTest):
finally
:
cluster
.
stop
()
def
testRecycledClientUUID
(
self
):
def
delayNotifyInformation
(
conn
,
packet
):
return
isinstance
(
packet
,
Packets
.
NotifyNodeInformation
)
def
notReady
(
orig
,
*
args
):
m2s
.
remove
(
delayNotifyInformation
)
return
orig
(
*
args
)
cluster
=
NEOCluster
()
try
:
cluster
.
start
()
cluster
.
getTransaction
()
with
cluster
.
master
.
filterConnection
(
cluster
.
storage
)
as
m2s
:
m2s
.
add
(
delayNotifyInformation
)
cluster
.
client
.
master_conn
.
close
()
cluster
.
client
.
setPoll
(
0
)
client
=
ClientApplication
(
name
=
cluster
.
name
,
master_nodes
=
cluster
.
master_nodes
)
p
=
Patch
(
client
.
storage_bootstrap_handler
,
notReady
=
notReady
)
try
:
client
.
setPoll
(
1
)
x
=
client
.
load
(
ZERO_TID
)
finally
:
del
p
client
.
close
()
self
.
assertNotIn
(
delayNotifyInformation
,
m2s
)
finally
:
cluster
.
stop
()
if
__name__
==
"__main__"
:
unittest
.
main
()
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment