diff --git a/packages/bolt-connection/src/connection-provider/connection-provider-pooled.js b/packages/bolt-connection/src/connection-provider/connection-provider-pooled.js index b8143bfac..a78864f0b 100644 --- a/packages/bolt-connection/src/connection-provider/connection-provider-pooled.js +++ b/packages/bolt-connection/src/connection-provider/connection-provider-pooled.js @@ -249,7 +249,8 @@ export default class PooledConnectionProvider extends ConnectionProvider { const handled = this._authenticationProvider.handleError({ connection, code: error.code }) if (handled) { - error.retriable = true + error.retriable = true // remove in 7.0 + error.retryable = true } if (error.code === 'Neo.ClientError.Security.AuthorizationExpired') { diff --git a/packages/bolt-connection/test/connection-provider/connection-provider-direct.test.js b/packages/bolt-connection/test/connection-provider/connection-provider-direct.test.js index 83cb42519..d9f16aa76 100644 --- a/packages/bolt-connection/test/connection-provider/connection-provider-direct.test.js +++ b/packages/bolt-connection/test/connection-provider/connection-provider-direct.test.js @@ -205,7 +205,7 @@ it('should call authenticationAuthProvider.handleError when TokenExpired happens expect(handleError).toBeCalledWith({ connection: conn, code: 'Neo.ClientError.Security.TokenExpired' }) }) -it('should change error to retriable when error when TokenExpired happens and staticAuthTokenManager is not being used', async () => { +it('should change error to retriyable when error when TokenExpired happens and staticAuthTokenManager is not being used', async () => { const address = ServerAddress.fromUrl('localhost:123') const pool = newPool() const connectionProvider = newDirectConnectionProvider(address, pool, authTokenManagers.bearer({ tokenProvider: () => null })) @@ -222,10 +222,10 @@ it('should change error to retriable when error when TokenExpired happens and st const error = conn.handleAndTransformError(expectedError, address) - expect(error.retriable).toBe(true) + expect(error.retryable).toBe(true) }) -it('should not change error to retriable when error when TokenExpired happens and staticAuthTokenManager is being used', async () => { +it('should not change error to retryable when error when TokenExpired happens and staticAuthTokenManager is being used', async () => { const address = ServerAddress.fromUrl('localhost:123') const pool = newPool() const connectionProvider = newDirectConnectionProvider(address, pool, staticAuthTokenManager({ authToken: null })) @@ -242,10 +242,10 @@ it('should not change error to retriable when error when TokenExpired happens an const error = conn.handleAndTransformError(expectedError, address) - expect(error.retriable).toBe(false) + expect(error.retryable).toBe(false) }) -it('should not change error to retriable when error when TokenExpired happens and authTokenManagers.basic is being used', async () => { +it('should not change error to retryable when error when TokenExpired happens and authTokenManagers.basic is being used', async () => { const address = ServerAddress.fromUrl('localhost:123') const pool = newPool() const connectionProvider = newDirectConnectionProvider(address, pool, authTokenManagers.basic({ tokenProvider: () => null })) @@ -262,7 +262,7 @@ it('should not change error to retriable when error when TokenExpired happens an const error = conn.handleAndTransformError(expectedError, address) - expect(error.retriable).toBe(false) + expect(error.retryable).toBe(false) }) describe('constructor', () => { 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 c22f3462a..e3b0e3f33 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 @@ -1704,7 +1704,7 @@ describe.each([ expect(error).toBe(expectedError) }) - it.each(usersDataSet)('should change error to retriable when error when TokenExpired happens and staticAuthTokenManager is not being used [user=%s]', async (user) => { + it.each(usersDataSet)('should change error to retryable when error when TokenExpired happens and staticAuthTokenManager is not being used [user=%s]', async (user) => { const pool = newPool() const connectionProvider = newRoutingConnectionProvider( [ @@ -1740,11 +1740,11 @@ describe.each([ const error1 = server3Connection.handleAndTransformError(error, server3) const error2 = server2Connection.handleAndTransformError(error, server2) - expect(error1.retriable).toBe(true) - expect(error2.retriable).toBe(true) + expect(error1.retryable).toBe(true) + expect(error2.retryable).toBe(true) }) - it.each(usersDataSet)('should not change error to retriable when error when TokenExpired happens and staticAuthTokenManager is being used [user=%s]', async (user) => { + it.each(usersDataSet)('should not change error to retryable when error when TokenExpired happens and staticAuthTokenManager is being used [user=%s]', async (user) => { const pool = newPool() const connectionProvider = newRoutingConnectionProvider( [ @@ -1781,11 +1781,11 @@ describe.each([ const error1 = server3Connection.handleAndTransformError(error, server3) const error2 = server2Connection.handleAndTransformError(error, server2) - expect(error1.retriable).toBe(false) - expect(error2.retriable).toBe(false) + expect(error1.retryable).toBe(false) + expect(error2.retryable).toBe(false) }) - it.each(usersDataSet)('should not change error to retriable when error when TokenExpired happens and authTokenManagers.basic is being used [user=%s]', async (user) => { + it.each(usersDataSet)('should not change error to retryable when error when TokenExpired happens and authTokenManagers.basic is being used [user=%s]', async (user) => { const pool = newPool() const connectionProvider = newRoutingConnectionProvider( [ @@ -1822,8 +1822,8 @@ describe.each([ const error1 = server3Connection.handleAndTransformError(error, server3) const error2 = server2Connection.handleAndTransformError(error, server2) - expect(error1.retriable).toBe(false) - expect(error2.retriable).toBe(false) + expect(error1.retryable).toBe(false) + expect(error2.retryable).toBe(false) }) it.each(usersDataSet)('should use resolved seed router after accepting table with no writers [user=%s]', (user, done) => { diff --git a/packages/bolt-connection/test/connection/connection-channel.test.js b/packages/bolt-connection/test/connection/connection-channel.test.js index d14630fab..da33d4075 100644 --- a/packages/bolt-connection/test/connection/connection-channel.test.js +++ b/packages/bolt-connection/test/connection/connection-channel.test.js @@ -371,7 +371,7 @@ describe('ChannelConnection', () => { expect(loggerFunction).toHaveBeenCalledWith( 'error', `${connection} experienced a fatal error caused by Neo4jError: some error ` + - '({"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. some error","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"C","retriable":false})' + '({"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. some error","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"C","retriable":false,"retryable":false})' ) }) }) @@ -419,7 +419,7 @@ describe('ChannelConnection', () => { expect(loggerFunction).toHaveBeenCalledWith( 'error', `${connection} experienced a fatal error caused by Neo4jError: current failure ` + - '({"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. current failure","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"ongoing","retriable":false})' + '({"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. current failure","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"ongoing","retriable":false,"retryable":false})' ) }) }) diff --git a/packages/core/src/driver.ts b/packages/core/src/driver.ts index 2e0f687d3..728866220 100644 --- a/packages/core/src/driver.ts +++ b/packages/core/src/driver.ts @@ -536,7 +536,7 @@ class Driver { } /** - * Executes a query in a retriable context and returns a {@link EagerResult}. + * Executes a query in a retryable context and returns a {@link EagerResult}. * * This method is a shortcut for a {@link Session#executeRead} and {@link Session#executeWrite}. * diff --git a/packages/core/src/error.ts b/packages/core/src/error.ts index a1df60d1d..883f2b22a 100644 --- a/packages/core/src/error.ts +++ b/packages/core/src/error.ts @@ -174,9 +174,17 @@ class Neo4jError extends GQLError { /** * Whether the request that caused this error can be safely retried without duplicate commits on the server. * This does not apply when running auto-commit transactions using {@link Session#run} + * + * @deprecated members using the spelling 'retriable' will be removed in 7.0. Use {@link retryable} instead. */ retriable: boolean + /** + * Whether the request that caused this error can be safely retried without duplicate commits on the server. + * This does not apply when running auto-commit transactions using {@link Session#run} + */ + retryable: boolean + /** * @constructor * @param {string} message - the error message @@ -211,23 +219,44 @@ class Neo4jError extends GQLError { * If the error is considered retriable. * This does not apply when running auto-commit transactions using {@link Session#run} * + * @deprecated members using the spelling 'retriable' will be removed in 7.0. Use {@link retryable} instead. + * @type {boolean} + * @public + */ + this.retriable = _isRetryableCode(code) + + /** + * If the error is considered retryable. + * This does not apply when running auto-commit transactions using {@link Session#run} + * * @type {boolean} * @public */ - this.retriable = _isRetriableCode(code) + this.retryable = _isRetryableCode(code) } /** * Verifies if the given error is retriable. * + * @deprecated members using the spelling 'retriable' will be removed in 7.0. Use {@link isRetryable} instead. * @param {object|undefined|null} error the error object * @returns {boolean} true if the error is retriable */ static isRetriable (error?: any | null): boolean { + return this.isRetryable(error) + } + + /** + * Verifies if the given error is retryable. + * + * @param {object|undefined|null} error the error object + * @returns {boolean} true if the error is retryable + */ + static isRetryable (error?: any | null): boolean { return error !== null && error !== undefined && error instanceof Neo4jError && - error.retriable + error.retryable } } @@ -263,18 +292,28 @@ function newGQLError (message: string, cause?: Error, gqlStatus?: string, gqlSta /** * Verifies if the given error is retriable. * + * @deprecated members using the spelling 'retriable' will be removed in 7.0. Use {@link isRetryableError} instead. * @public * @param {object|undefined|null} error the error object * @returns {boolean} true if the error is retriable */ const isRetriableError = Neo4jError.isRetriable +/** + * Verifies if the given error is retryable. + * + * @public + * @param {object|undefined|null} error the error object + * @returns {boolean} true if the error is retryable + */ +const isRetryableError = Neo4jError.isRetryable + /** * @private * @param {string} code the error code * @returns {boolean} true if the error is a retriable error */ -function _isRetriableCode (code?: Neo4jErrorCode): boolean { +function _isRetryableCode (code?: Neo4jErrorCode): boolean { return code === SERVICE_UNAVAILABLE || code === SESSION_EXPIRED || _isAuthorizationExpired(code) || @@ -313,6 +352,7 @@ export { newError, newGQLError, isRetriableError, + isRetryableError, Neo4jError, GQLError, SERVICE_UNAVAILABLE, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 226dc9ad9..83fc1400b 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -20,6 +20,7 @@ import { Neo4jError, newGQLError, GQLError, + isRetryableError, isRetriableError, PROTOCOL_ERROR, SERVICE_UNAVAILABLE, @@ -121,6 +122,7 @@ const forExport = { Neo4jError, newGQLError, GQLError, + isRetryableError, isRetriableError, error, Integer, @@ -196,6 +198,7 @@ export { Neo4jError, newGQLError, GQLError, + isRetryableError, isRetriableError, error, Integer, diff --git a/packages/core/src/internal/transaction-executor.ts b/packages/core/src/internal/transaction-executor.ts index 724c4c314..dfbb9a670 100644 --- a/packages/core/src/internal/transaction-executor.ts +++ b/packages/core/src/internal/transaction-executor.ts @@ -15,7 +15,7 @@ * limitations under the License. */ /* eslint-disable @typescript-eslint/promise-function-async */ -import { newError, isRetriableError } from '../error' +import { newError, isRetryableError } from '../error' import Transaction, { NonAutoCommitApiTelemetryConfig, NonAutoCommitTelemetryApis } from '../transaction' import TransactionPromise from '../transaction-promise' import { TELEMETRY_APIS } from './constants' @@ -151,7 +151,7 @@ export class TransactionExecutor { ): Promise { const elapsedTimeMs = Date.now() - retryStartTime - if (elapsedTimeMs > this._maxRetryTimeMs || !isRetriableError(error)) { + if (elapsedTimeMs > this._maxRetryTimeMs || !isRetryableError(error)) { return Promise.reject(error) } diff --git a/packages/core/test/__snapshots__/json.test.ts.snap b/packages/core/test/__snapshots__/json.test.ts.snap index d5add173b..9df8d3977 100644 --- a/packages/core/test/__snapshots__/json.test.ts.snap +++ b/packages/core/test/__snapshots__/json.test.ts.snap @@ -102,11 +102,11 @@ exports[`json .stringify should handle object with custom toString in list 1`] = exports[`json .stringify should handle object with custom toString in object 1`] = `"{"key":{"identity":"1"}}"`; -exports[`json .stringify should handle objects created with createBrokenObject 1`] = `"{"__isBrokenObject__":true,"__reason__":{"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. some error","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"N/A","retriable":false}}"`; +exports[`json .stringify should handle objects created with createBrokenObject 1`] = `"{"__isBrokenObject__":true,"__reason__":{"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. some error","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"N/A","retriable":false,"retryable":false}}"`; -exports[`json .stringify should handle objects created with createBrokenObject in list 1`] = `"[{"__isBrokenObject__":true,"__reason__":{"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. some error","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"N/A","retriable":false}}]"`; +exports[`json .stringify should handle objects created with createBrokenObject in list 1`] = `"[{"__isBrokenObject__":true,"__reason__":{"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. some error","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"N/A","retriable":false,"retryable":false}}]"`; -exports[`json .stringify should handle objects created with createBrokenObject inside other object 1`] = `"{"number":1,"broken":{"__isBrokenObject__":true,"__reason__":{"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. some error","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"N/A","retriable":false}}}"`; +exports[`json .stringify should handle objects created with createBrokenObject inside other object 1`] = `"{"number":1,"broken":{"__isBrokenObject__":true,"__reason__":{"gqlStatus":"50N42","gqlStatusDescription":"error: general processing exception - unexpected error. some error","diagnosticRecord":{"OPERATION":"","OPERATION_CODE":"0","CURRENT_SCHEMA":"/"},"classification":"UNKNOWN","name":"Neo4jError","code":"N/A","retriable":false,"retryable":false}}}"`; exports[`json .stringify should handle string 1`] = `""my string""`; diff --git a/packages/core/test/error.test.ts b/packages/core/test/error.test.ts index 8f06745a6..447fe3b16 100644 --- a/packages/core/test/error.test.ts +++ b/packages/core/test/error.test.ts @@ -16,7 +16,7 @@ */ import { Neo4jError, - isRetriableError, + isRetryableError, newError, newGQLError, PROTOCOL_ERROR, @@ -123,13 +123,13 @@ describe('newError', () => { }) }) -describe('isRetriableError()', () => { - it.each(getRetriableErrorsFixture())('should return true for error with code %s', error => { - expect(isRetriableError(error)).toBe(true) +describe('isRetryableError()', () => { + it.each(getRetryableErrorsFixture())('should return true for error with code %s', error => { + expect(isRetryableError(error)).toBe(true) }) - it.each(getNonRetriableErrorsFixture())('should return false for error with code %s', error => { - expect(isRetriableError(error)).toBe(false) + it.each(getNonRetryableErrorsFixture())('should return false for error with code %s', error => { + expect(isRetryableError(error)).toBe(false) }) }) @@ -178,45 +178,45 @@ describe('Neo4jError', () => { expect(error.constructor).toEqual(Neo4jError) }) - test.each(getRetriableCodes())('should define retriable as true for error with code %s', code => { + test.each(getRetryableCodes())('should define retryable as true for error with code %s', code => { const error = new Neo4jError('message', code, 'gqlStatus', 'gqlStatusDescription') - expect(error.retriable).toBe(true) + expect(error.retryable).toBe(true) }) - test.each(getNonRetriableCodes())('should define retriable as false for error with code %s', code => { + test.each(getNonRetryableCodes())('should define retryable as false for error with code %s', code => { const error = new Neo4jError('message', code, 'gqlStatus', 'gqlStatusDescription') - expect(error.retriable).toBe(false) + expect(error.retryable).toBe(false) }) - describe('.isRetriable()', () => { - it.each(getRetriableErrorsFixture())('should return true for error with code %s', error => { - expect(Neo4jError.isRetriable(error)).toBe(true) + describe('.isRetryable()', () => { + it.each(getRetryableErrorsFixture())('should return true for error with code %s', error => { + expect(Neo4jError.isRetryable(error)).toBe(true) }) - it.each(getNonRetriableErrorsFixture())('should return false for error with code %s', error => { - expect(Neo4jError.isRetriable(error)).toBe(false) + it.each(getNonRetryableErrorsFixture())('should return false for error with code %s', error => { + expect(Neo4jError.isRetryable(error)).toBe(false) }) }) }) -function getRetriableErrorsFixture (): Array<[Neo4jError]> { - return getRetriableCodes().map(code => [newError('message', code)]) +function getRetryableErrorsFixture (): Array<[Neo4jError]> { + return getRetryableCodes().map(code => [newError('message', code)]) } -function getNonRetriableErrorsFixture (): any[] { +function getNonRetryableErrorsFixture (): any[] { return [ null, undefined, '', 'Neo.TransientError.Transaction.DeadlockDetected', new Error('Neo.ClientError.Security.AuthorizationExpired'), - ...getNonRetriableCodes().map(code => [newError('message', code)]) + ...getNonRetryableCodes().map(code => [newError('message', code)]) ] } -function getRetriableCodes (): string[] { +function getRetryableCodes (): string[] { return [ SERVICE_UNAVAILABLE, SESSION_EXPIRED, @@ -228,7 +228,7 @@ function getRetriableCodes (): string[] { ] } -function getNonRetriableCodes (): string[] { +function getNonRetryableCodes (): string[] { return [ 'Neo.DatabaseError.General.UnknownError', 'Neo.DatabaseError.General.OutOfMemoryError', diff --git a/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-pooled.js b/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-pooled.js index 53902b722..699dffaf1 100644 --- a/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-pooled.js +++ b/packages/neo4j-driver-deno/lib/bolt-connection/connection-provider/connection-provider-pooled.js @@ -249,7 +249,8 @@ export default class PooledConnectionProvider extends ConnectionProvider { const handled = this._authenticationProvider.handleError({ connection, code: error.code }) if (handled) { - error.retriable = true + error.retriable = true // remove in 7.0 + error.retryable = true } if (error.code === 'Neo.ClientError.Security.AuthorizationExpired') { diff --git a/packages/neo4j-driver-deno/lib/core/driver.ts b/packages/neo4j-driver-deno/lib/core/driver.ts index 8028734d3..c4e13dfcc 100644 --- a/packages/neo4j-driver-deno/lib/core/driver.ts +++ b/packages/neo4j-driver-deno/lib/core/driver.ts @@ -536,7 +536,7 @@ class Driver { } /** - * Executes a query in a retriable context and returns a {@link EagerResult}. + * Executes a query in a retryable context and returns a {@link EagerResult}. * * This method is a shortcut for a {@link Session#executeRead} and {@link Session#executeWrite}. * diff --git a/packages/neo4j-driver-deno/lib/core/error.ts b/packages/neo4j-driver-deno/lib/core/error.ts index 43a38216f..76330e408 100644 --- a/packages/neo4j-driver-deno/lib/core/error.ts +++ b/packages/neo4j-driver-deno/lib/core/error.ts @@ -174,9 +174,17 @@ class Neo4jError extends GQLError { /** * Whether the request that caused this error can be safely retried without duplicate commits on the server. * This does not apply when running auto-commit transactions using {@link Session#run} + * + * @deprecated members using the spelling 'retriable' will be removed in 7.0. Use {@link retryable} instead. */ retriable: boolean + /** + * Whether the request that caused this error can be safely retried without duplicate commits on the server. + * This does not apply when running auto-commit transactions using {@link Session#run} + */ + retryable: boolean + /** * @constructor * @param {string} message - the error message @@ -211,23 +219,44 @@ class Neo4jError extends GQLError { * If the error is considered retriable. * This does not apply when running auto-commit transactions using {@link Session#run} * + * @deprecated members using the spelling 'retriable' will be removed in 7.0. Use {@link retryable} instead. + * @type {boolean} + * @public + */ + this.retriable = _isRetryableCode(code) + + /** + * If the error is considered retryable. + * This does not apply when running auto-commit transactions using {@link Session#run} + * * @type {boolean} * @public */ - this.retriable = _isRetriableCode(code) + this.retryable = _isRetryableCode(code) } /** * Verifies if the given error is retriable. * + * @deprecated members using the spelling 'retriable' will be removed in 7.0. Use {@link isRetryable} instead. * @param {object|undefined|null} error the error object * @returns {boolean} true if the error is retriable */ static isRetriable (error?: any | null): boolean { + return this.isRetryable(error) + } + + /** + * Verifies if the given error is retryable. + * + * @param {object|undefined|null} error the error object + * @returns {boolean} true if the error is retryable + */ + static isRetryable (error?: any | null): boolean { return error !== null && error !== undefined && error instanceof Neo4jError && - error.retriable + error.retryable } } @@ -263,18 +292,28 @@ function newGQLError (message: string, cause?: Error, gqlStatus?: string, gqlSta /** * Verifies if the given error is retriable. * + * @deprecated members using the spelling 'retriable' will be removed in 7.0. Use {@link isRetryableError} instead. * @public * @param {object|undefined|null} error the error object * @returns {boolean} true if the error is retriable */ const isRetriableError = Neo4jError.isRetriable +/** + * Verifies if the given error is retryable. + * + * @public + * @param {object|undefined|null} error the error object + * @returns {boolean} true if the error is retryable + */ +const isRetryableError = Neo4jError.isRetryable + /** * @private * @param {string} code the error code * @returns {boolean} true if the error is a retriable error */ -function _isRetriableCode (code?: Neo4jErrorCode): boolean { +function _isRetryableCode (code?: Neo4jErrorCode): boolean { return code === SERVICE_UNAVAILABLE || code === SESSION_EXPIRED || _isAuthorizationExpired(code) || @@ -313,6 +352,7 @@ export { newError, newGQLError, isRetriableError, + isRetryableError, Neo4jError, GQLError, SERVICE_UNAVAILABLE, diff --git a/packages/neo4j-driver-deno/lib/core/index.ts b/packages/neo4j-driver-deno/lib/core/index.ts index 135e19afb..b22a6600b 100644 --- a/packages/neo4j-driver-deno/lib/core/index.ts +++ b/packages/neo4j-driver-deno/lib/core/index.ts @@ -20,6 +20,7 @@ import { Neo4jError, newGQLError, GQLError, + isRetryableError, isRetriableError, PROTOCOL_ERROR, SERVICE_UNAVAILABLE, @@ -121,6 +122,7 @@ const forExport = { Neo4jError, newGQLError, GQLError, + isRetryableError, isRetriableError, error, Integer, @@ -196,6 +198,7 @@ export { Neo4jError, newGQLError, GQLError, + isRetryableError, isRetriableError, error, Integer, diff --git a/packages/neo4j-driver-deno/lib/core/internal/transaction-executor.ts b/packages/neo4j-driver-deno/lib/core/internal/transaction-executor.ts index 5e0e2ea87..ad8248a7d 100644 --- a/packages/neo4j-driver-deno/lib/core/internal/transaction-executor.ts +++ b/packages/neo4j-driver-deno/lib/core/internal/transaction-executor.ts @@ -15,7 +15,7 @@ * limitations under the License. */ /* eslint-disable @typescript-eslint/promise-function-async */ -import { newError, isRetriableError } from '../error.ts' +import { newError, isRetryableError } from '../error.ts' import Transaction, { NonAutoCommitApiTelemetryConfig, NonAutoCommitTelemetryApis } from '../transaction.ts' import TransactionPromise from '../transaction-promise.ts' import { TELEMETRY_APIS } from './constants.ts' @@ -151,7 +151,7 @@ export class TransactionExecutor { ): Promise { const elapsedTimeMs = Date.now() - retryStartTime - if (elapsedTimeMs > this._maxRetryTimeMs || !isRetriableError(error)) { + if (elapsedTimeMs > this._maxRetryTimeMs || !isRetryableError(error)) { return Promise.reject(error) } diff --git a/packages/neo4j-driver-deno/lib/mod.ts b/packages/neo4j-driver-deno/lib/mod.ts index bc07fae11..0ef597e35 100644 --- a/packages/neo4j-driver-deno/lib/mod.ts +++ b/packages/neo4j-driver-deno/lib/mod.ts @@ -49,6 +49,7 @@ import { isPoint, isRelationship, isRetriableError, + isRetryableError, isTime, isUnboundRelationship, LocalDateTime, @@ -398,6 +399,7 @@ const forExport = { integer, Neo4jError, isRetriableError, + isRetryableError, auth, logging, types, @@ -471,6 +473,7 @@ export { integer, Neo4jError, isRetriableError, + isRetryableError, auth, logging, types, diff --git a/packages/neo4j-driver-lite/src/index.ts b/packages/neo4j-driver-lite/src/index.ts index fa1bbae2a..cc78c3140 100644 --- a/packages/neo4j-driver-lite/src/index.ts +++ b/packages/neo4j-driver-lite/src/index.ts @@ -49,6 +49,7 @@ import { isPoint, isRelationship, isRetriableError, + isRetryableError, isTime, isUnboundRelationship, LocalDateTime, @@ -397,6 +398,7 @@ const forExport = { integer, Neo4jError, isRetriableError, + isRetryableError, auth, logging, types, @@ -470,6 +472,7 @@ export { integer, Neo4jError, isRetriableError, + isRetryableError, auth, logging, types, diff --git a/packages/neo4j-driver/src/index.js b/packages/neo4j-driver/src/index.js index fb3affcba..bd767a000 100644 --- a/packages/neo4j-driver/src/index.js +++ b/packages/neo4j-driver/src/index.js @@ -20,6 +20,7 @@ import VERSION from './version' import { authTokenManagers, Neo4jError, + isRetriableError, isRetryableError, error, Integer, @@ -360,6 +361,7 @@ const forExport = { isUnboundRelationship, integer, Neo4jError, + isRetriableError, isRetryableError, auth, logging, @@ -431,6 +433,7 @@ export { isUnboundRelationship, integer, Neo4jError, + isRetriableError, isRetryableError, auth, logging, diff --git a/packages/neo4j-driver/src/internal/retry-logic-rx.js b/packages/neo4j-driver/src/internal/retry-logic-rx.js index c2f0d7707..60cb3dd77 100644 --- a/packages/neo4j-driver/src/internal/retry-logic-rx.js +++ b/packages/neo4j-driver/src/internal/retry-logic-rx.js @@ -15,7 +15,7 @@ * limitations under the License. */ -import { newError, error, internal, isRetriableError } from 'neo4j-driver-core' +import { newError, error, internal, isRetryableError } from 'neo4j-driver-core' // eslint-disable-next-line no-unused-vars import { Observable, throwError, of } from 'rxjs' import { retryWhen, mergeMap, delay } from 'rxjs/operators' @@ -79,7 +79,7 @@ export default class RxRetryLogic { return failedWork.pipe( mergeMap(err => { - if (!isRetriableError(err)) { + if (!isRetryableError(err)) { return throwError(() => err) } diff --git a/packages/neo4j-driver/types/index.d.ts b/packages/neo4j-driver/types/index.d.ts index 659ea07bf..d41bf5783 100644 --- a/packages/neo4j-driver/types/index.d.ts +++ b/packages/neo4j-driver/types/index.d.ts @@ -20,6 +20,7 @@ import { AuthTokenManagers, Neo4jError, isRetriableError, + isRetryableError, error, Integer, inSafeRange, @@ -242,6 +243,7 @@ declare const forExport: { SessionMode: SessionMode Neo4jError: typeof Neo4jError isRetriableError: typeof isRetriableError + isRetryableError: typeof isRetryableError Node: typeof Node Relationship: typeof Relationship UnboundRelationship: typeof UnboundRelationship @@ -322,6 +324,7 @@ export { SessionMode, Neo4jError, isRetriableError, + isRetryableError, Node, Relationship, UnboundRelationship, diff --git a/packages/testkit-backend/deno/controller.ts b/packages/testkit-backend/deno/controller.ts index 310b70a65..2e5b6fbac 100644 --- a/packages/testkit-backend/deno/controller.ts +++ b/packages/testkit-backend/deno/controller.ts @@ -97,7 +97,7 @@ function writeDriverError(id, e, binder) { cause: cause, classification: e.classification, rawClassification: e.rawClassification, - retryable: e.retriable, + retryable: e.retryable, }, }; } diff --git a/packages/testkit-backend/src/controller/local.js b/packages/testkit-backend/src/controller/local.js index d061ea6a0..40398121a 100644 --- a/packages/testkit-backend/src/controller/local.js +++ b/packages/testkit-backend/src/controller/local.js @@ -97,7 +97,7 @@ function writeDriverError (id, e, binder) { cause, classification: e.classification, rawClassification: e.rawClassification, - retryable: e.retriable + retryable: e.retryable }) }