Skip to content

Commit 8e5340d

Browse files
committed
Merge pull request #69 from neo4j/1.0-ack-failure
Added ACK_FAILURE
2 parents ad33403 + d38274c commit 8e5340d

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

neo4j/v1/connection.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@
4242

4343

4444
# Signature bytes for each message type
45-
INIT = b"\x01" # 0000 0001 // INIT <user_agent>
45+
INIT = b"\x01" # 0000 0001 // INIT <user_agent> <auth>
46+
ACK_FAILURE = b"\x0E" # 0000 1110 // ACK_FAILURE
4647
RESET = b"\x0F" # 0000 1111 // RESET
4748
RUN = b"\x10" # 0001 0000 // RUN <statement> <parameters>
4849
DISCARD_ALL = b"\x2F" # 0010 1111 // DISCARD *
@@ -57,6 +58,7 @@
5758

5859
message_names = {
5960
INIT: "INIT",
61+
ACK_FAILURE: "ACK_FAILURE",
6062
RESET: "RESET",
6163
RUN: "RUN",
6264
DISCARD_ALL: "DISCARD_ALL",
@@ -224,7 +226,7 @@ def __init__(self, sock, **config):
224226
self.der_encoded_server_certificate = config.get("der_encoded_server_certificate")
225227

226228
def on_failure(metadata):
227-
raise ProtocolError(metadata.get("message", "Inititalisation failed"))
229+
raise ProtocolError(metadata.get("message", "INIT failed"))
228230

229231
response = Response(self)
230232
response.on_failure = on_failure
@@ -253,6 +255,23 @@ def append(self, signature, fields=(), response=None):
253255
self.channel.flush(end_of_message=True)
254256
self.responses.append(response)
255257

258+
def acknowledge_failure(self):
259+
""" Add an ACK_FAILURE message to the outgoing queue, send
260+
it and consume all remaining messages.
261+
"""
262+
response = Response(self)
263+
264+
def on_failure(metadata):
265+
raise ProtocolError("ACK_FAILURE failed")
266+
267+
response.on_failure = on_failure
268+
269+
self.append(ACK_FAILURE, response=response)
270+
self.send()
271+
fetch = self.fetch
272+
while not response.complete:
273+
fetch()
274+
256275
def reset(self):
257276
""" Add a RESET message to the outgoing queue, send
258277
it and consume all remaining messages.
@@ -304,7 +323,7 @@ def fetch(self):
304323
response.complete = True
305324
self.responses.popleft()
306325
if signature == FAILURE:
307-
self.reset()
326+
self.acknowledge_failure()
308327
handler_name = "on_%s" % message_names[signature].lower()
309328
try:
310329
handler = getattr(response, handler_name)

0 commit comments

Comments
 (0)