Skip to content

Commit bdd0836

Browse files
author
Alexey Zorkaltsev
committed
chore: added processing of deleteSession into Query service
1 parent d3ff782 commit bdd0836

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

src/__tests__/e2e/query-service/query-service-client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ describe('Query client', () => {
6060
expect(session.txId).toBeDefined();
6161

6262
// force new attempt
63-
if (count < 3) throw new errors.Unavailable('test'); // an fast backoff error
63+
if (count < 3) throw new errors.Aborted('test'); // an fast backoff error
6464

6565
res = await session.execute({
6666
txControl: {commitTx: true},
@@ -117,7 +117,7 @@ describe('Query client', () => {
117117
expect(session.txId).toBeDefined();
118118

119119
// force new attempt
120-
if (count < 2) throw new errors.Unavailable('test'); // an fast backoff error
120+
if (count < 2) throw new errors.Aborted('test'); // an fast backoff error
121121

122122
await expect(async () =>
123123
await session.commitTransaction()

src/errors.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ export class Aborted extends YdbError {
175175

176176
export class Unavailable extends YdbError {
177177
static status = StatusCode.UNAVAILABLE;
178-
public readonly [RetryPolicySymbol] = retryPolicy(Backoff.Fast, false, true, true);
178+
// TODO: Requires extra logic - see https://github.com/ydb-platform/ydb-go-sdk/blob/e1ba79620427a66c1564a52abe7e1ff10787d442/retry/errors_data_test.go#L197
179+
public readonly [RetryPolicySymbol] = retryPolicy(Backoff.Fast, false, true, false);
179180
}
180181

181182
export class Overloaded extends YdbError {

src/query/query-client.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {ensureContext} from "../context";
2121
import {Logger} from "../logger/simple-logger";
2222
import {RetryStrategy} from "../retries/retryStrategy";
2323
import {RetryParameters} from "../retries/retryParameters";
24+
import {RetryPolicySymbol} from "../retries/symbols";
2425

2526
export interface IQueryClientSettings {
2627
database: string;
@@ -78,7 +79,7 @@ export class QueryClient extends EventEmitter {
7879
session[isIdempotentDoLevelSymbol] = true;
7980
session[isIdempotentSymbol] = opts.idempotent;
8081
}
81-
let error;
82+
let error: Error;
8283
try {
8384
if (opts.txSettings) session[sessionTxSettingsSymbol] = opts.txSettings;
8485
let res: T;
@@ -101,15 +102,16 @@ export class QueryClient extends EventEmitter {
101102
}
102103
return {result: res};
103104
} catch (err) {
104-
error = err;
105-
return {err: err as Error, idempotent: session[isIdempotentSymbol]}
105+
error = err as Error;
106+
return {err: error, idempotent: session[isIdempotentSymbol]}
106107
} finally {
107108
delete session[ctxSymbol];
108109
delete session[sessionTxSettingsSymbol];
109110
delete session[sessionCurrentOperationSymbol];
110111
delete session[isIdempotentDoLevelSymbol];
111112
delete session[isIdempotentSymbol];
112-
if (error instanceof BadSession || error instanceof SessionBusy) {
113+
// @ts-ignore
114+
if (error && (error as any)[RetryPolicySymbol]?.deleteSession) {
113115
this.logger.debug('Encountered bad or busy session, re-creating the session');
114116
session.emit(SessionEvent.SESSION_BROKEN);
115117
} else {

0 commit comments

Comments
 (0)