From cd3b6cdace43ae4e719dd9dcd8c28fa83891ea10 Mon Sep 17 00:00:00 2001 From: Nigel Small Date: Wed, 25 May 2016 09:21:52 +0100 Subject: [PATCH 1/2] Added ACK_FAILURE --- neo4j/v1/connection.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/neo4j/v1/connection.py b/neo4j/v1/connection.py index cccdd26f9..161e656e0 100644 --- a/neo4j/v1/connection.py +++ b/neo4j/v1/connection.py @@ -42,7 +42,8 @@ # Signature bytes for each message type -INIT = b"\x01" # 0000 0001 // INIT +INIT = b"\x01" # 0000 0001 // INIT +ACK_FAILURE = b"\x0E" # 0000 1110 // ACK_FAILURE RESET = b"\x0F" # 0000 1111 // RESET RUN = b"\x10" # 0001 0000 // RUN DISCARD_ALL = b"\x2F" # 0010 1111 // DISCARD * @@ -57,6 +58,7 @@ message_names = { INIT: "INIT", + ACK_FAILURE: "ACK_FAILURE", RESET: "RESET", RUN: "RUN", DISCARD_ALL: "DISCARD_ALL", @@ -224,7 +226,7 @@ def __init__(self, sock, **config): self.der_encoded_server_certificate = config.get("der_encoded_server_certificate") def on_failure(metadata): - raise ProtocolError(metadata.get("message", "Inititalisation failed")) + raise ProtocolError(metadata.get("message", "Initialisation failed")) response = Response(self) response.on_failure = on_failure @@ -253,6 +255,23 @@ def append(self, signature, fields=(), response=None): self.channel.flush(end_of_message=True) self.responses.append(response) + def acknowledge_failure(self): + """ Add an ACK_FAILURE message to the outgoing queue, send + it and consume all remaining messages. + """ + response = Response(self) + + def on_failure(metadata): + raise ProtocolError("Failure acknowledgement failed") + + response.on_failure = on_failure + + self.append(ACK_FAILURE, response=response) + self.send() + fetch = self.fetch + while not response.complete: + fetch() + def reset(self): """ Add a RESET message to the outgoing queue, send it and consume all remaining messages. @@ -304,7 +323,7 @@ def fetch(self): response.complete = True self.responses.popleft() if signature == FAILURE: - self.reset() + self.acknowledge_failure() handler_name = "on_%s" % message_names[signature].lower() try: handler = getattr(response, handler_name) From d38274cab8aabe3115f0ab1f82a91db52ed2e134 Mon Sep 17 00:00:00 2001 From: Nigel Small Date: Tue, 31 May 2016 12:14:33 +0100 Subject: [PATCH 2/2] Updated failure error messages --- neo4j/v1/connection.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neo4j/v1/connection.py b/neo4j/v1/connection.py index 161e656e0..42f9f0985 100644 --- a/neo4j/v1/connection.py +++ b/neo4j/v1/connection.py @@ -226,7 +226,7 @@ def __init__(self, sock, **config): self.der_encoded_server_certificate = config.get("der_encoded_server_certificate") def on_failure(metadata): - raise ProtocolError(metadata.get("message", "Initialisation failed")) + raise ProtocolError(metadata.get("message", "INIT failed")) response = Response(self) response.on_failure = on_failure @@ -262,7 +262,7 @@ def acknowledge_failure(self): response = Response(self) def on_failure(metadata): - raise ProtocolError("Failure acknowledgement failed") + raise ProtocolError("ACK_FAILURE failed") response.on_failure = on_failure