Skip to content

Commit

Permalink
Merge pull request #379 from ydb-platform/retryer2
Browse files Browse the repository at this point in the history
New retryer
  • Loading branch information
Zork33 committed May 13, 2024
2 parents b001d6c + 43ce40b commit d3ff782
Show file tree
Hide file tree
Showing 25 changed files with 958 additions and 385 deletions.
416 changes: 208 additions & 208 deletions package-lock.json

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion src/__tests__/e2e/query-service/method-execute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ import {Ydb} from "ydb-sdk-proto";
import StatsMode = Ydb.Query.StatsMode;
import ExecMode = Ydb.Query.ExecMode;
import {getDefaultLogger} from "../../../logger/get-default-logger";
import {Context} from "../../../context";
import {ctxSymbol} from "../../../query/symbols";

const DATABASE = '/local';
const ENDPOINT = 'grpcs://localhost:2136';
const ENDPOINT = 'grpc://localhost:2136';
const TABLE_NAME = 'test_table_1'

describe('Query.execute()', () => {
Expand Down Expand Up @@ -242,6 +244,7 @@ describe('Query.execute()', () => {
);

session = await sessionBuilder.create();
session[ctxSymbol] = Context.createNew().ctx;
}

async function drainExecuteResult(res: IExecuteResult) {
Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/e2e/query-service/query-service-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ describe('Query client', () => {

afterAll(async () => await driver?.destroy());

it.only('Query client do()', async () => {
it('Query client do()', async () => {
let count = 0;
let prevSession: QuerySession;
const res = await driver.queryClient.do({
Expand Down
3 changes: 3 additions & 0 deletions src/__tests__/e2e/query-service/rows-conversion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import {SessionBuilder} from "../../../query/query-session-pool";
import {declareType, TypedData, TypedValues, Types} from "../../../types";
import {Ydb} from "ydb-sdk-proto";
import {getDefaultLogger} from "../../../logger/get-default-logger";
import {ctxSymbol} from "../../../query/symbols";
import {Context} from "../../../context";

const DATABASE = '/local';
const ENDPOINT = 'grpcs://localhost:2136';
Expand Down Expand Up @@ -158,5 +160,6 @@ describe('Rows conversion', () => {
);

session = await sessionBuilder.create();
session[ctxSymbol] = Context.createNew().ctx;
}
});
5 changes: 4 additions & 1 deletion src/__tests__/e2e/query-service/transactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import {SessionBuilder} from "../../../query/query-session-pool";
import {QuerySession, IExecuteResult} from "../../../query";
import * as symbols from "../../../query/symbols";
import {getDefaultLogger} from "../../../logger/get-default-logger";
import {ctxSymbol} from "../../../query/symbols";
import {Context} from "../../../context";

const DATABASE = '/local';
const ENDPOINT = 'grpc://localhost:2136';
Expand All @@ -24,7 +26,7 @@ describe('Query service transactions', () => {
await session.delete();
});

it.only('implicit transactions', async () => {
it('implicit transactions', async () => {

// open transaction
expect(session.txId).toBeUndefined();
Expand Down Expand Up @@ -131,5 +133,6 @@ describe('Query service transactions', () => {
);

session = await sessionBuilder.create();
session[ctxSymbol] = Context.createNew().ctx;
}
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Driver from '../../../driver';
import Driver from '../../driver';
import {
Aborted,
BadRequest,
Expand All @@ -17,12 +17,12 @@ import {
Unavailable,
Undetermined,
YdbError,
} from '../../../errors';
import {retryable, RetryParameters} from '../../../retries_obsoleted';
import {Endpoint} from "../../../discovery";
import {pessimizable} from "../../../utils";
import {destroyDriver, initDriver} from "../../../utils/test";
import {LogLevel, SimpleLogger} from "../../../logger/simple-logger";
} from '../../errors';
import {retryable, RetryParameters} from '../../retries_obsoleted';
import {Endpoint} from "../../discovery";
import {pessimizable} from "../../utils";
import {destroyDriver, initDriver} from "../../utils/test";
import {LogLevel, SimpleLogger} from "../../logger/simple-logger";

const logger = new SimpleLogger({level: LogLevel.error});
class ErrorThrower {
Expand Down
2 changes: 1 addition & 1 deletion src/__tests__/e2e/table-service/types.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ describe('Types', () => {

describe('Convert from native to YDB value', () => {
describe('Primitive values', () => {
it('Numeric values', () => {
it.only('Numeric values', () => {
expect(TypedValues.bool(true)).toEqual({
type: {typeId: Ydb.Type.PrimitiveTypeId.BOOL},
value: {boolValue: true},
Expand Down
56 changes: 53 additions & 3 deletions src/__tests__/unit/context.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// @ts-ignore
import {Context, setContextIdGenerator} from '../../context/Context';
import {Context, setContextIdGenerator} from '../../context';
// @ts-ignore
import {ensureContext} from '../../context/ensureContext';
// @ts-ignore
Expand Down Expand Up @@ -69,12 +69,12 @@ describe('Context', () => {
expect(done2).toBeUndefined();

const {ctx: ctx3, cancel: cancel3, dispose: dispose3, done: done3} =
ctx1.createChild();
ctx1.createChild({force: true});
expect(ctx3).toBeDefined();
expect(ctx3.err).toBeUndefined();
expect(ctx3.onCancel).toBeDefined(); // because parent ctx has cancel
expect(cancel3).toBeUndefined(); // cancel was not requested through options
expect(dispose3).toBeDefined(); // dispose cancel chain
expect(dispose3).toBeDefined(); // dispose cancel
expect(done3).toBeUndefined();

const testCancel = new Error('Test cancel');
Expand Down Expand Up @@ -295,6 +295,56 @@ describe('Context', () => {
expect(ctx2[Symbol1]).toBe('aaa');
});

it('keep using old context if possible', () => {
const {ctx} = Context.createNew();
expect(ctx.createChild().ctx).toBe(ctx);

expect(ctx.createChild({}).ctx).toBe(ctx);
expect(ctx.createChild({timeout: -1}).ctx).toBe(ctx);
expect(ctx.createChild({timeout: undefined}).ctx).toBe(ctx);

expect(ctx.createChild({cancel: true}).ctx).not.toBe(ctx);
expect(ctx.createChild({cancel: false}).ctx).not.toBe(ctx);
expect(ctx.createChild({timeout: 12}).ctx).not.toBe(ctx);
expect(ctx.createChild({done: true}).ctx).not.toBe(ctx);
});

for (const scenario of ['ok', 'failed', 'cancel'])
it(`'cancellablePromise: scenario: ${scenario}`, async () => {
let promiseResolve: (value: unknown) => void, promiseReject: (reason?: any) => void;
const promise = new Promise((resolve, reject) => {
promiseResolve = resolve;
promiseReject = reject;
})
const {ctx} = Context.createNew();
expect(ctx.cancelRace(promise)).toBe(promise);

const {ctx: ctx2, cancel} = ctx.createChild({
cancel: true,
});

const promise2 = ctx2.cancelRace(promise);
expect(promise2).not.toBe(promise);

switch (scenario) {
case 'ok': {
promiseResolve!(12);
expect(await promise2).toBe(12);
}
break;
case 'failed': {
promiseReject!(new Error('test'));
await expect(promise2).rejects.toThrow('test');
}
break;
case 'cancel': {
cancel!();
await expect(promise2).rejects.toThrow('Unknown');
}
break;
}
});

it('make 100% coverage', () => {
{
const {ctx} = Context.createNew({id: 'test'});
Expand Down
Loading

0 comments on commit d3ff782

Please sign in to comment.