From 3f8d420802445c554c6877fa1cb1709dee2a26bb Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Wed, 26 Oct 2022 11:13:54 +0200 Subject: [PATCH 1/3] Fail fast on rediscovery when 'Neo.ClientError.Statement.ArgumentError' failure When trying to impersonate an invalid user, the routing procedure returns `Neo.ClientError.Statement.ArgumentError`. This type of failure is not in the fail fast list, thus this is wrapped up in the generic rediscovery error triggering the retry in the transaction functions. Since this kind of error is not recoverable, retrying on it is not need and desirable. Then, failing fast on `Neo.ClientError.Statement.ArgumentError` failures speeds up the error bubbling and avoids unnecessary load in the client and server. --- .../src/connection-provider/connection-provider-routing.js | 4 +++- .../connection-provider/connection-provider-routing.test.js | 1 + .../connection-provider/connection-provider-routing.js | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/bolt-connection/src/connection-provider/connection-provider-routing.js b/packages/bolt-connection/src/connection-provider/connection-provider-routing.js index dc772cfda..a0cff5e73 100644 --- a/packages/bolt-connection/src/connection-provider/connection-provider-routing.js +++ b/packages/bolt-connection/src/connection-provider/connection-provider-routing.js @@ -48,6 +48,7 @@ const INVALID_BOOKMARK_MIXTURE_CODE = 'Neo.ClientError.Transaction.InvalidBookmarkMixture' const AUTHORIZATION_EXPIRED_CODE = 'Neo.ClientError.Security.AuthorizationExpired' +const INVALID_ARGUMENT_ERROR = 'Neo.ClientError.Statement.ArgumentError' const SYSTEM_DB_NAME = 'system' const DEFAULT_DB_NAME = null @@ -703,7 +704,8 @@ function _isFailFastError (error) { return [ DATABASE_NOT_FOUND_CODE, INVALID_BOOKMARK_CODE, - INVALID_BOOKMARK_MIXTURE_CODE + INVALID_BOOKMARK_MIXTURE_CODE, + INVALID_ARGUMENT_ERROR ].includes(error.code) } diff --git a/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js b/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js index 3055be8b1..a98e9d48d 100644 --- a/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js +++ b/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js @@ -1669,6 +1669,7 @@ describe.each([ 'Neo.ClientError.Database.DatabaseNotFound', 'Neo.ClientError.Transaction.InvalidBookmark', 'Neo.ClientError.Transaction.InvalidBookmarkMixture', + 'Neo.ClientError.Statement.ArgumentError', 'Neo.ClientError.Security.Forbidden', 'Neo.ClientError.Security.IWontTellYou' ])('with "%s"', errorCode => { diff --git a/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js b/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js index d07010cfc..0bf12afe9 100644 --- a/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js +++ b/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js @@ -48,6 +48,7 @@ const INVALID_BOOKMARK_MIXTURE_CODE = 'Neo.ClientError.Transaction.InvalidBookmarkMixture' const AUTHORIZATION_EXPIRED_CODE = 'Neo.ClientError.Security.AuthorizationExpired' +const INVALID_ARGUMENT_ERROR = 'Neo.ClientError.Statement.ArgumentError' const SYSTEM_DB_NAME = 'system' const DEFAULT_DB_NAME = null @@ -703,7 +704,8 @@ function _isFailFastError (error) { return [ DATABASE_NOT_FOUND_CODE, INVALID_BOOKMARK_CODE, - INVALID_BOOKMARK_MIXTURE_CODE + INVALID_BOOKMARK_MIXTURE_CODE, + INVALID_ARGUMENT_ERROR ].includes(error.code) } From 4be1ea48b2acffe1cb3e16aa7b989b3a52adf2d2 Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Fri, 28 Oct 2022 10:48:41 +0200 Subject: [PATCH 2/3] Fail fast on 'Neo.ClientError.Request.Invalid' --- .../src/connection-provider/connection-provider-routing.js | 4 +++- .../connection-provider/connection-provider-routing.test.js | 1 + .../connection-provider/connection-provider-routing.js | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/bolt-connection/src/connection-provider/connection-provider-routing.js b/packages/bolt-connection/src/connection-provider/connection-provider-routing.js index a0cff5e73..64d10223a 100644 --- a/packages/bolt-connection/src/connection-provider/connection-provider-routing.js +++ b/packages/bolt-connection/src/connection-provider/connection-provider-routing.js @@ -49,6 +49,7 @@ const INVALID_BOOKMARK_MIXTURE_CODE = const AUTHORIZATION_EXPIRED_CODE = 'Neo.ClientError.Security.AuthorizationExpired' const INVALID_ARGUMENT_ERROR = 'Neo.ClientError.Statement.ArgumentError' +const INVALID_REQUEST_ERROR = 'Neo.ClientError.Request.Invalid' const SYSTEM_DB_NAME = 'system' const DEFAULT_DB_NAME = null @@ -705,7 +706,8 @@ function _isFailFastError (error) { DATABASE_NOT_FOUND_CODE, INVALID_BOOKMARK_CODE, INVALID_BOOKMARK_MIXTURE_CODE, - INVALID_ARGUMENT_ERROR + INVALID_ARGUMENT_ERROR, + INVALID_REQUEST_ERROR ].includes(error.code) } diff --git a/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js b/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js index a98e9d48d..b77a129e1 100644 --- a/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js +++ b/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js @@ -1669,6 +1669,7 @@ describe.each([ 'Neo.ClientError.Database.DatabaseNotFound', 'Neo.ClientError.Transaction.InvalidBookmark', 'Neo.ClientError.Transaction.InvalidBookmarkMixture', + 'Neo.ClientError.Request.Invalid', 'Neo.ClientError.Statement.ArgumentError', 'Neo.ClientError.Security.Forbidden', 'Neo.ClientError.Security.IWontTellYou' diff --git a/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js b/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js index 0bf12afe9..8f2bfbe53 100644 --- a/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js +++ b/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js @@ -49,6 +49,7 @@ const INVALID_BOOKMARK_MIXTURE_CODE = const AUTHORIZATION_EXPIRED_CODE = 'Neo.ClientError.Security.AuthorizationExpired' const INVALID_ARGUMENT_ERROR = 'Neo.ClientError.Statement.ArgumentError' +const INVALID_REQUEST_ERROR = 'Neo.ClientError.Request.Invalid' const SYSTEM_DB_NAME = 'system' const DEFAULT_DB_NAME = null @@ -705,7 +706,8 @@ function _isFailFastError (error) { DATABASE_NOT_FOUND_CODE, INVALID_BOOKMARK_CODE, INVALID_BOOKMARK_MIXTURE_CODE, - INVALID_ARGUMENT_ERROR + INVALID_ARGUMENT_ERROR, + INVALID_REQUEST_ERROR ].includes(error.code) } From 1703009bb3339ee7aa434e1cd797588bdd69ceb9 Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Thu, 24 Nov 2022 10:14:04 +0100 Subject: [PATCH 3/3] Add `Neo.ClientError.Statement.TypeError` as failing fast error --- .../src/connection-provider/connection-provider-routing.js | 4 +++- .../connection-provider/connection-provider-routing.test.js | 1 + .../connection-provider/connection-provider-routing.js | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/bolt-connection/src/connection-provider/connection-provider-routing.js b/packages/bolt-connection/src/connection-provider/connection-provider-routing.js index 64d10223a..f0442ab23 100644 --- a/packages/bolt-connection/src/connection-provider/connection-provider-routing.js +++ b/packages/bolt-connection/src/connection-provider/connection-provider-routing.js @@ -50,6 +50,7 @@ const AUTHORIZATION_EXPIRED_CODE = 'Neo.ClientError.Security.AuthorizationExpired' const INVALID_ARGUMENT_ERROR = 'Neo.ClientError.Statement.ArgumentError' const INVALID_REQUEST_ERROR = 'Neo.ClientError.Request.Invalid' +const STATEMENT_TYPE_ERROR = 'Neo.ClientError.Statement.TypeError' const SYSTEM_DB_NAME = 'system' const DEFAULT_DB_NAME = null @@ -707,7 +708,8 @@ function _isFailFastError (error) { INVALID_BOOKMARK_CODE, INVALID_BOOKMARK_MIXTURE_CODE, INVALID_ARGUMENT_ERROR, - INVALID_REQUEST_ERROR + INVALID_REQUEST_ERROR, + STATEMENT_TYPE_ERROR ].includes(error.code) } diff --git a/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js b/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js index b77a129e1..96dc5c7ab 100644 --- a/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js +++ b/packages/bolt-connection/test/connection-provider/connection-provider-routing.test.js @@ -1671,6 +1671,7 @@ describe.each([ 'Neo.ClientError.Transaction.InvalidBookmarkMixture', 'Neo.ClientError.Request.Invalid', 'Neo.ClientError.Statement.ArgumentError', + 'Neo.ClientError.Statement.TypeError', 'Neo.ClientError.Security.Forbidden', 'Neo.ClientError.Security.IWontTellYou' ])('with "%s"', errorCode => { diff --git a/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js b/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js index 8f2bfbe53..95480286c 100644 --- a/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js +++ b/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-routing.js @@ -50,6 +50,7 @@ const AUTHORIZATION_EXPIRED_CODE = 'Neo.ClientError.Security.AuthorizationExpired' const INVALID_ARGUMENT_ERROR = 'Neo.ClientError.Statement.ArgumentError' const INVALID_REQUEST_ERROR = 'Neo.ClientError.Request.Invalid' +const STATEMENT_TYPE_ERROR = 'Neo.ClientError.Statement.TypeError' const SYSTEM_DB_NAME = 'system' const DEFAULT_DB_NAME = null @@ -707,7 +708,8 @@ function _isFailFastError (error) { INVALID_BOOKMARK_CODE, INVALID_BOOKMARK_MIXTURE_CODE, INVALID_ARGUMENT_ERROR, - INVALID_REQUEST_ERROR + INVALID_REQUEST_ERROR, + STATEMENT_TYPE_ERROR ].includes(error.code) }