From 2d43876a70c34fab95bed01778cb464f6e80ab9a Mon Sep 17 00:00:00 2001 From: toptobes Date: Fri, 16 May 2025 15:28:21 +0530 Subject: [PATCH 01/11] start implementing reties --- src/documents/events.ts | 16 +-- src/lib/api/clients/data-api-http-client.ts | 46 ++++--- src/lib/api/clients/devops-api-http-client.ts | 10 +- src/lib/api/retries/adapters/data-api.ts | 39 ++++++ src/lib/api/retries/adapters/devops-api.ts | 40 +++++++ src/lib/api/retries/config.ts | 24 ++++ src/lib/api/retries/contexts/base.ts | 46 +++++++ src/lib/api/retries/contexts/data-api.ts | 35 ++++++ src/lib/api/retries/contexts/devops-api.ts | 38 ++++++ src/lib/api/retries/contexts/internal.ts | 33 ++++++ src/lib/api/retries/manager.ts | 112 ++++++++++++++++++ src/lib/api/retries/policy.ts | 61 ++++++++++ src/lib/api/timeouts/timeouts.ts | 4 + src/lib/types.ts | 10 ++ src/lib/utils.ts | 7 +- 15 files changed, 488 insertions(+), 33 deletions(-) create mode 100644 src/lib/api/retries/adapters/data-api.ts create mode 100644 src/lib/api/retries/adapters/devops-api.ts create mode 100644 src/lib/api/retries/config.ts create mode 100644 src/lib/api/retries/contexts/base.ts create mode 100644 src/lib/api/retries/contexts/data-api.ts create mode 100644 src/lib/api/retries/contexts/devops-api.ts create mode 100644 src/lib/api/retries/contexts/internal.ts create mode 100644 src/lib/api/retries/manager.ts create mode 100644 src/lib/api/retries/policy.ts diff --git a/src/documents/events.ts b/src/documents/events.ts index 6d3a15b4..98c5a1d8 100644 --- a/src/documents/events.ts +++ b/src/documents/events.ts @@ -66,20 +66,6 @@ export type CommandEventTarget = | { url: string, keyspace: string, table?: never, collection: string } | { url: string, keyspace: string, table: string, collection?: never } -const mkCommandEventTarget = (info: DataAPIRequestInfo): Readonly => { - const target = { url: info.url } as CommandEventTarget; - - if (info.keyspace) { - target.keyspace = info.keyspace; - } - - if (info.tOrCType) { - target[info.tOrCType] = info.tOrC; - } - - return target; -}; - /** * Common base class for all command events. * @@ -116,7 +102,7 @@ export abstract class CommandEvent extends BaseClientEvent { protected constructor(name: string, requestId: string, info: DataAPIRequestInfo, extra: Record | undefined) { super(name, requestId, extra); this.command = info.command; - this.target = mkCommandEventTarget(info); + this.target = info.target; } /** diff --git a/src/lib/api/clients/data-api-http-client.ts b/src/lib/api/clients/data-api-http-client.ts index 6a0a52c4..e6dc167c 100644 --- a/src/lib/api/clients/data-api-http-client.ts +++ b/src/lib/api/clients/data-api-http-client.ts @@ -14,14 +14,14 @@ // noinspection ExceptionCaughtLocallyJS import type { InternalLogger } from '@/src/lib/logging/internal-logger.js'; -import type { NonEmpty, RawDataAPIResponse } from '@/src/lib/index.js'; +import type { CommandOptions, NonEmpty, RawDataAPIResponse } from '@/src/lib/index.js'; import { EmbeddingAPIKeyHeaderProvider, HeadersProvider, RerankingAPIKeyHeaderProvider, TokenProvider, } from '@/src/lib/index.js'; -import type { DataAPIWarningDescriptor, SomeDoc, SomeRow, Table } from '@/src/documents/index.js'; +import type { CommandEventTarget, DataAPIWarningDescriptor, SomeDoc, SomeRow, Table } from '@/src/documents/index.js'; import { Collection, DataAPIHttpError, DataAPIResponseError, DataAPITimeoutError } from '@/src/documents/index.js'; import type { HTTPClientOptions, KeyspaceRef } from '@/src/lib/api/clients/types.js'; import { HttpClient } from '@/src/lib/api/clients/http-client.js'; @@ -36,6 +36,8 @@ import { NonErrorError } from '@/src/lib/errors.js'; import type { ParsedTokenProvider } from '@/src/lib/token-providers/token-provider.js'; import type { DevOpsAPIRequestInfo } from '@/src/lib/api/clients/devops-api-http-client.js'; import { isNonEmpty } from '@/src/lib/utils.js'; +import { RetryManager } from '@/src/lib/api/retries/manager.js'; +import { DataAPIRetryAdapter } from '@/src/lib/api/retries/adapters/data-api.js'; /** * @internal @@ -58,10 +60,7 @@ type ExecCmdOpts = (Kind extends 'admin' ? { methodName * @internal */ export interface DataAPIRequestInfo { - url: string, - tOrC: string | undefined, - tOrCType: 'table' | 'collection' | undefined, - keyspace: string | null, + target: CommandEventTarget, command: Record, timeoutManager: TimeoutManager, bigNumsPresent: boolean | undefined, @@ -122,7 +121,7 @@ export const EmissionStrategy: EmissionStrategies = { const adaptInfo4Devops = (info: DataAPIRequestInfo, methodName: DevOpsAPIRequestInfo['methodName']) => ({ method: 'POST', data: info.command, - path: info.url, + path: info.target.url, methodName, }); @@ -173,6 +172,10 @@ export class DataAPIHttpClient extends HttpC this.emissionStrategy = opts.emissionStrategy(opts.logger.internal); } + public rm(isSafelyRetryable: boolean, opts: CommandOptions): RetryManager { + return RetryManager.mk(isSafelyRetryable, opts, new DataAPIRetryAdapter(this.logger), undefined); + } + public forTableSlashCollectionOrWhateverWeWouldCallTheUnionOfTheseTypes(tSlashC: Collection | Table, opts: CollectionOptions | TableOptions | undefined, bigNumHack: BigNumberHack): DataAPIHttpClient { const clone = new DataAPIHttpClient({ ...this.#props, @@ -231,20 +234,17 @@ export class DataAPIHttpClient extends HttpC throw new Error('Keyspace may not be `null` when a table or collection is provided to DataAPIHttpClient.executeCommand()'); } + const keyspacePath = keyspace ? `/${keyspace}` : ''; + const collectionPath = tOrC ? `/${tOrC}` : ''; + const url = this.baseUrl + keyspacePath + collectionPath; + const info: DataAPIRequestInfo = { - url: this.baseUrl, - tOrC: tOrC, - tOrCType: !tOrC ? undefined : tOrC === (options.table || this.tableName) ? 'table' : 'collection', - keyspace: keyspace, command: command, timeoutManager: options.timeoutManager, bigNumsPresent: options.bigNumsPresent, + target: mkCommandEventTarget(url, keyspace, tOrC, tOrC ? (tOrC === (options.table || this.tableName) ? 'table' : 'collection') : undefined), }; - const keyspacePath = info.keyspace ? `/${info.keyspace}` : ''; - const collectionPath = info.tOrC ? `/${info.tOrC}` : ''; - info.url += keyspacePath + collectionPath; - const requestId = this.logger.internal.generateCommandRequestId(); this.emissionStrategy.emitCommandStarted?.(requestId, info, options); @@ -258,7 +258,7 @@ export class DataAPIHttpClient extends HttpC : JSON.stringify(info.command); const resp = await this._request({ - url: info.url, + url: info.target.url, data: serialized, timeoutManager: info.timeoutManager, method: HttpMethods.Post, @@ -304,3 +304,17 @@ export class DataAPIHttpClient extends HttpC } } } + +const mkCommandEventTarget = (url: string, keyspace: string | null, tOrC?: string, tOrCType?: 'table' | 'collection'): Readonly => { + const target = { url } as CommandEventTarget; + + if (keyspace) { + target.keyspace = keyspace; + } + + if (tOrCType) { + target[tOrCType] = tOrC; + } + + return target; +}; diff --git a/src/lib/api/clients/devops-api-http-client.ts b/src/lib/api/clients/devops-api-http-client.ts index 23e33d8d..69faaf0a 100644 --- a/src/lib/api/clients/devops-api-http-client.ts +++ b/src/lib/api/clients/devops-api-http-client.ts @@ -24,8 +24,12 @@ import type { HTTPClientOptions, HttpMethodStrings } from '@/src/lib/api/clients import { jsonTryParse } from '@/src/lib/utils.js'; import type { TimeoutManager } from '@/src/lib/api/timeouts/timeouts.js'; import { NonErrorError } from '@/src/lib/errors.js'; -import { HeadersProvider } from '@/src/lib/index.js'; +import { type CommandOptions, HeadersProvider } from '@/src/lib/index.js'; import type { ParsedTokenProvider } from '@/src/lib/token-providers/token-provider.js'; +import { RetryAdapter, RetryManager } from '@/src/lib/api/retries/manager.js'; +import { DevOpsAPIRetryContext } from '@/src/lib/api/retries/contexts/devops-api.js'; +import type { RetryConfig } from '@/src/lib/api/retries/config.js'; +import { DevOpsAPIRetryAdapter } from '@/src/lib/api/retries/adapters/devops-api.js'; /** * @internal @@ -81,6 +85,10 @@ export class DevOpsAPIHttpClient extends HttpClient { }); } + public rm(isSafelyRetryable: boolean, opts: CommandOptions): RetryManager { + return RetryManager.mk(isSafelyRetryable, opts, new DevOpsAPIRetryAdapter(this.logger), undefined); + } + public async request(req: DevOpsAPIRequestInfo, timeoutManager: TimeoutManager, started = 0): Promise { return this._executeRequest(req, timeoutManager, started, this.logger.internal.generateAdminCommandRequestId()); } diff --git a/src/lib/api/retries/adapters/data-api.ts b/src/lib/api/retries/adapters/data-api.ts new file mode 100644 index 00000000..ff75ef58 --- /dev/null +++ b/src/lib/api/retries/adapters/data-api.ts @@ -0,0 +1,39 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import type { RetryAdapter } from '@/src/lib/api/retries/manager.js'; +import { DataAPIRetryContext } from '@/src/lib/api/retries/contexts/data-api.js'; +import type { DataAPIRequestInfo } from '@/src/lib/api/clients/index.js'; +import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; +import { type CommandEventMap, DataAPITimeoutError } from '@/src/documents/index.js'; +import type { HierarchicalLogger } from '@/src/lib/index.js'; + +export class DataAPIRetryAdapter implements RetryAdapter { + public readonly policy = 'dataAPIPolicy'; + public readonly TimeoutError = DataAPITimeoutError; + + public constructor(private readonly _logger: HierarchicalLogger) {} + + public mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: DataAPIRequestInfo): DataAPIRetryContext { + return new DataAPIRetryContext(ctx, duration, error, req); + } + + public emitRetryEvent(): void { + // TODO + } + + public emitRetryDeclinedEvent(): void { + // TODO + } +} diff --git a/src/lib/api/retries/adapters/devops-api.ts b/src/lib/api/retries/adapters/devops-api.ts new file mode 100644 index 00000000..74fd3c58 --- /dev/null +++ b/src/lib/api/retries/adapters/devops-api.ts @@ -0,0 +1,40 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import type { RetryAdapter } from '@/src/lib/api/retries/manager.js'; +import type { DevOpsAPIRequestInfo } from '@/src/lib/api/clients/index.js'; +import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; +import type { HierarchicalLogger } from '@/src/lib/index.js'; +import type { AdminCommandEventMap } from '@/src/administration/index.js'; +import { DevOpsAPITimeoutError } from '@/src/administration/index.js'; +import { DevOpsAPIRetryContext } from '@/src/lib/api/retries/contexts/devops-api.js'; + +export class DevOpsAPIRetryAdapter implements RetryAdapter { + public readonly policy = 'devOpsAPIPolicy'; + public readonly TimeoutError = DevOpsAPITimeoutError; + + public constructor(private readonly _logger: HierarchicalLogger) {} + + public mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: DevOpsAPIRequestInfo): DevOpsAPIRetryContext { + return new DevOpsAPIRetryContext(ctx, duration, error, req); + } + + public emitRetryEvent(): void { + // TODO + } + + public emitRetryDeclinedEvent(): void { + // TODO + } +} diff --git a/src/lib/api/retries/config.ts b/src/lib/api/retries/config.ts new file mode 100644 index 00000000..9054f996 --- /dev/null +++ b/src/lib/api/retries/config.ts @@ -0,0 +1,24 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import type { RetryPolicy } from '@/src/lib/api/retries/policy.js'; +import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; +import type { DataAPIRetryContext } from '@/src/lib/api/retries/contexts/data-api.js'; +import type { DevOpsAPIRetryContext } from '@/src/lib/api/retries/contexts/devops-api.js'; + +export interface RetryConfig { + defaultPolicy?: RetryPolicy, + dataAPIPolicy?: RetryPolicy, + devOpsAPIPolicy?: RetryPolicy, +} diff --git a/src/lib/api/retries/contexts/base.ts b/src/lib/api/retries/contexts/base.ts new file mode 100644 index 00000000..95ae6542 --- /dev/null +++ b/src/lib/api/retries/contexts/base.ts @@ -0,0 +1,46 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import type { TimeoutDescriptor } from '@/src/lib/index.js'; +import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; +import type { DataAPIRetryContext } from '@/src/lib/api/retries/contexts/data-api.js'; +import type { DevOpsAPIRetryContext } from '@/src/lib/api/retries/contexts/devops-api.js'; + +export abstract class RetryContext { + public declare abstract readonly permits: DataAPIRetryContext | DevOpsAPIRetryContext; + + public readonly retryCount: number; + + public readonly error: Error; + + public readonly isSafelyRetryable: boolean; + + public readonly timeout: Partial; + + public readonly duration: number; + + public readonly userData: Record; + + public readonly requestId: string; + + protected constructor(ctx: InternalRetryContext, duration: number, error: Error) { + this.retryCount = ctx.retryCount; + this.isSafelyRetryable = ctx.isSafelyRetryable; + this.timeout = ctx.timeout; + this.userData = ctx.userData; + this.duration = duration; + this.error = error; + this.requestId = ctx.requestId; + } +} diff --git a/src/lib/api/retries/contexts/data-api.ts b/src/lib/api/retries/contexts/data-api.ts new file mode 100644 index 00000000..f5a87bc9 --- /dev/null +++ b/src/lib/api/retries/contexts/data-api.ts @@ -0,0 +1,35 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; +import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; +import type { DataAPIRequestInfo } from '@/src/lib/api/clients/index.js'; +import type { CommandEventTarget } from '@/src/documents/index.js'; + +export class DataAPIRetryContext extends RetryContext { + public declare readonly permits: this; + + public readonly target: CommandEventTarget; + + public readonly command: Record; + + public readonly commandName: string; + + public constructor(ctx: InternalRetryContext, duration: number, error: Error, req: DataAPIRequestInfo) { + super(ctx, duration, error); + this.target = req.target; + this.command = req.command; + this.commandName = Object.keys(req.command)[0]; + } +} diff --git a/src/lib/api/retries/contexts/devops-api.ts b/src/lib/api/retries/contexts/devops-api.ts new file mode 100644 index 00000000..b67c6463 --- /dev/null +++ b/src/lib/api/retries/contexts/devops-api.ts @@ -0,0 +1,38 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; +import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; +import type { DevOpsAPIRequestInfo, HttpMethodStrings } from '@/src/lib/api/clients/index.js'; +import { EqualityProof } from '@/src/lib/utils.js'; + +export class DevOpsAPIRetryContext extends RetryContext { + public declare readonly permits: this; + + public readonly method: 'GET' | 'POST' | 'DELETE'; + + public readonly methodName: string; + + public readonly path: string; + + public constructor(ctx: InternalRetryContext, duration: number, error: Error, info: DevOpsAPIRequestInfo) { + super(ctx, duration, error); + this.method = info.method; + this.methodName = info.methodName; + this.path = info.path; + } +} + +// ensures that `method` is correctly typed without actually exposing `HttpMethodStrings` +void EqualityProof; diff --git a/src/lib/api/retries/contexts/internal.ts b/src/lib/api/retries/contexts/internal.ts new file mode 100644 index 00000000..73378c5f --- /dev/null +++ b/src/lib/api/retries/contexts/internal.ts @@ -0,0 +1,33 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import type { TimeoutDescriptor } from '@/src/lib/index.js'; + +export class InternalRetryContext { + public retryCount = 0; + + public readonly isSafelyRetryable: boolean; + + public readonly timeout: Partial; + + public readonly userData: Record = {}; + + public readonly requestId: string; + + public constructor(isSafelyRetryable: boolean, timeout: Partial, reqId: string) { + this.isSafelyRetryable = isSafelyRetryable; + this.timeout = timeout; + this.requestId = reqId; + } +} diff --git a/src/lib/api/retries/manager.ts b/src/lib/api/retries/manager.ts new file mode 100644 index 00000000..2f9f2c30 --- /dev/null +++ b/src/lib/api/retries/manager.ts @@ -0,0 +1,112 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; +import type { CommandOptions, SomeConstructor } from '@/src/lib/index.js'; +import { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; +import type { TimeoutManager } from '@/src/lib/api/timeouts/timeouts.js'; +import type { RetryConfig } from '@/src/lib/api/retries/config.js'; +import { RetryPolicy } from '@/src/lib/api/retries/policy.js'; +import { NonErrorError } from '@/src/lib/errors.js'; +import type { SomeDoc } from '@/src/documents/index.js'; +import { DataAPIError } from '@/src/documents/index.js'; + +export interface RetryAdapter { + policy: Exclude, + mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: ReqInfo): Ctx, + emitRetryEvent(ctx: Ctx, info: ReqInfo): void, + emitRetryDeclinedEvent(ctx: Ctx, info: ReqInfo): void, + TimeoutError: SomeConstructor, +} + +export abstract class RetryManager { + public static mk(isSafelyRetryable: boolean, opts: CommandOptions, adapter: RetryAdapter, basePolicy: RetryConfig | undefined): RetryManager { + if (opts.retry ?? basePolicy) { + const policy = opts.retry?.[adapter.policy] ?? opts.retry?.defaultPolicy ?? basePolicy?.[adapter.policy] ?? basePolicy?.defaultPolicy; + + if (policy && !(policy instanceof RetryPolicy.Never)) { + return new RetryingImpl(policy, opts.isSafelyRetryable ?? isSafelyRetryable, adapter); + } + } + + return PassthroughImpl; + } + + public abstract run(info: ReqInfo, started: number, reqId: string, tm: TimeoutManager, fn: () => Promise): Promise; +} + +class RetryingImpl extends RetryManager { + private readonly _adapter: RetryAdapter; + + private readonly _isSafelyRetryable: boolean; + + public readonly _policy: RetryPolicy; + + constructor(policy: RetryPolicy, isSafelyRetryable: boolean, adapter: RetryAdapter) { + super(); + this._policy = policy; + this._isSafelyRetryable = isSafelyRetryable; + this._adapter = adapter; + } + + public override run(info: ReqInfo, started: number, reqId: string, tm: TimeoutManager, fn: () => Promise) { + const baseCtx = new InternalRetryContext(this._isSafelyRetryable, tm.initial(), reqId); + + while (true) { + try { + return fn(); + } catch (caught) { + const error = NonErrorError.asError(caught); + + const ephemeralCtx = this._adapter.mkEphemeralCtx(baseCtx, performance.now() - started, error, info); + + if (!this._passesInitialRetryChecks(ephemeralCtx) || !this._policy.shouldRetry(ephemeralCtx)) { + this._policy.onRetryDeclined(ephemeralCtx); + this._adapter.emitRetryDeclinedEvent(ephemeralCtx, info); + throw error; + } + + if (this._policy.shouldResetTimeout(ephemeralCtx)) { + tm.reset(); + } + + baseCtx.retryCount++; + this._policy.onRetry(ephemeralCtx); + this._adapter.emitRetryEvent(ephemeralCtx, info); + } + } + } + + private _passesInitialRetryChecks(ephemeralCtx: Ctx) { + if (ephemeralCtx.retryCount >= this._policy.maxRetries(ephemeralCtx)) { + return false; + } + + if (ephemeralCtx.error instanceof this._adapter.TimeoutError) { + return false; + } + + if (ephemeralCtx.isSafelyRetryable) { + return !(ephemeralCtx.error instanceof DataAPIError) || (ephemeralCtx.error as SomeDoc).canRetry === true; // TODO: Swap for actual Data API implementation once available + } else { + return ephemeralCtx.error instanceof DataAPIError && (ephemeralCtx.error as SomeDoc).canRetry === true; + } + } +} + +const PassthroughImpl = new class PassthroughImpl extends RetryManager { + public override run(_: never, __: never, ___: never, ____: never, fn: () => Promise) { + return fn(); + } +}(); diff --git a/src/lib/api/retries/policy.ts b/src/lib/api/retries/policy.ts new file mode 100644 index 00000000..d4233381 --- /dev/null +++ b/src/lib/api/retries/policy.ts @@ -0,0 +1,61 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { asMut } from '@/src/lib/utils.js'; +import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; + +export abstract class RetryPolicy { + public static readonly Default: typeof DefaultRetryPolicy; + + public static readonly Never: typeof NeverRetryPolicy; + + public abstract maxRetries(ctx: Ctx): number; + + public abstract retryDelay(ctx: Ctx): number; + + public shouldRetry(_: Ctx): boolean { + return true; + } + + public shouldResetTimeout(_: Ctx): boolean { + return false; + } + + public onRetry(_: Ctx): void {} + + public onRetryDeclined(_: Ctx): void {} +} + +class DefaultRetryPolicy extends RetryPolicy { + public maxRetries(): number { + return 3; + } + + public retryDelay(): number { + return 1000; + } +} + +class NeverRetryPolicy extends RetryPolicy { + public maxRetries(): number { + return 0; + } + + public retryDelay(): number { + return 0; + } +} + +asMut(DefaultRetryPolicy).Default = DefaultRetryPolicy; +asMut(DefaultRetryPolicy).Never = NeverRetryPolicy; diff --git a/src/lib/api/timeouts/timeouts.ts b/src/lib/api/timeouts/timeouts.ts index a1ebf6bb..a7263225 100644 --- a/src/lib/api/timeouts/timeouts.ts +++ b/src/lib/api/timeouts/timeouts.ts @@ -269,6 +269,7 @@ export type MkTimeoutError = (info: HTTPRequestInfo, timeoutType: TimedOutCatego * @internal */ export interface TimeoutManager { + reset(): void, initial(): Partial, advance(info: HTTPRequestInfo): [number, () => Error], } @@ -374,6 +375,9 @@ export class Timeouts { public custom(peek: Partial, advance: () => [number, TimedOutCategories]): TimeoutManager { return { + reset() { + // TODO + }, initial() { return peek; }, diff --git a/src/lib/types.ts b/src/lib/types.ts index d69e9b7a..b562b27f 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -15,6 +15,7 @@ import type { DataAPIEnvironments } from '@/src/lib/constants.js'; import type { TimeoutDescriptor } from '@/src/lib/api/index.js'; +import { RetryConfig } from '@/src/lib/api/retries/config.js'; /** * Shorthand type to represent some nullish value. @@ -38,6 +39,13 @@ export type DataAPIEnvironment = typeof DataAPIEnvironments[number]; */ export interface Ref { ref: T } +/** + * @internal + */ +export type Mut = { + -readonly [K in keyof T]: T[K]; +} + /** * Utility type to represent an empty object without eslint complaining. * @@ -157,4 +165,6 @@ export interface CommandOptions(json: string, otherwise: T, reviver?: (this: unk } } +/** + * @internal + */ +export const asMut = (t: T): Mut => t; + /** * ##### Overview * From c967fa5317941a6f8d9bcff3f227d393cce0f211 Mon Sep 17 00:00:00 2001 From: toptobes Date: Sun, 18 May 2025 20:13:57 +0530 Subject: [PATCH 02/11] refactor of internal http client stuff --- scripts/check.ts | 4 + src/administration/astra-admin.ts | 15 +- src/administration/astra-db-admin.ts | 15 +- src/administration/data-api-db-admin.ts | 2 +- src/administration/errors.ts | 7 - src/administration/events.ts | 46 +-- src/db/db.ts | 5 +- src/documents/collections/collection.ts | 2 +- src/documents/errors.ts | 7 - src/documents/events.ts | 37 +- src/documents/tables/table.ts | 2 +- src/lib/api/clients/data-api-http-client.ts | 320 ---------------- src/lib/api/clients/devops-api-http-client.ts | 206 ---------- src/lib/api/clients/http-client.ts | 89 ----- src/lib/api/clients/impls/base-http-client.ts | 158 ++++++++ .../api/clients/impls/data-api-http-client.ts | 360 ++++++++++++++++++ .../clients/impls/devops-api-http-client.ts | 213 +++++++++++ src/lib/api/clients/index.ts | 6 +- src/lib/api/clients/types.ts | 32 -- .../clients/{ => utils}/headers-resolver.ts | 33 +- src/lib/api/clients/utils/request-id.ts | 26 ++ src/lib/api/retries/adapters/data-api.ts | 9 +- src/lib/api/retries/adapters/devops-api.ts | 11 +- src/lib/api/retries/contexts/base.ts | 5 + src/lib/api/retries/contexts/data-api.ts | 9 +- src/lib/api/retries/contexts/devops-api.ts | 15 +- src/lib/api/retries/contexts/internal.ts | 3 + src/lib/api/retries/manager.ts | 12 + src/lib/api/retries/policy.ts | 11 +- src/lib/api/ser-des/ser-des.ts | 2 +- src/lib/api/timeouts/timeouts.ts | 8 +- src/lib/logging/base-event.ts | 5 +- src/lib/types.ts | 2 +- .../api/clients/data-api-http-client.test.ts | 2 +- .../lib/api/clients/headers-resolver.test.ts | 10 +- tests/unit/lib/api/timeouts.test.ts | 2 +- 36 files changed, 918 insertions(+), 773 deletions(-) delete mode 100644 src/lib/api/clients/data-api-http-client.ts delete mode 100644 src/lib/api/clients/devops-api-http-client.ts delete mode 100644 src/lib/api/clients/http-client.ts create mode 100644 src/lib/api/clients/impls/base-http-client.ts create mode 100644 src/lib/api/clients/impls/data-api-http-client.ts create mode 100644 src/lib/api/clients/impls/devops-api-http-client.ts rename src/lib/api/clients/{ => utils}/headers-resolver.ts (76%) create mode 100644 src/lib/api/clients/utils/request-id.ts diff --git a/scripts/check.ts b/scripts/check.ts index 080ded69..4d3c0f21 100755 --- a/scripts/check.ts +++ b/scripts/check.ts @@ -152,6 +152,10 @@ function LibCheck(): Step { }); } catch (_) { Utils.printFailed('Library compilation failed'); + + await spinner('Rerunning tsc with captured output...', async () => { + await $({ stdio: 'inherit', nothrow: true })`npx tsc`; + }); } } else { Utils.printFailed('Could not set up library for lib-check phase'); diff --git a/src/administration/astra-admin.ts b/src/administration/astra-admin.ts index acfdcb45..75042e82 100644 --- a/src/administration/astra-admin.ts +++ b/src/administration/astra-admin.ts @@ -23,7 +23,7 @@ import { AstraDbAdmin } from '@/src/administration/astra-db-admin.js'; import { Db } from '@/src/db/db.js'; import { buildAstraDatabaseAdminInfo } from '@/src/administration/utils.js'; import { DEFAULT_DEVOPS_API_ENDPOINTS, DEFAULT_KEYSPACE, HttpMethods } from '@/src/lib/api/constants.js'; -import { DevOpsAPIHttpClient } from '@/src/lib/api/clients/devops-api-http-client.js'; +import { DevOpsAPIHttpClient } from '@/src/lib/api/clients/impls/devops-api-http-client.js'; import type { CommandOptions, OpaqueHttpClient } from '@/src/lib/index.js'; import { HierarchicalLogger, TokenProvider } from '@/src/lib/index.js'; import type { AstraFullDatabaseInfo } from '@/src/administration/types/admin/database-info.js'; @@ -283,7 +283,8 @@ export class AstraAdmin extends HierarchicalLogger { method: HttpMethods.Get, path: `/databases/${id}`, methodName: 'admin.dbInfo', - }, tm); + timeoutManager: tm, + }); return buildAstraDatabaseAdminInfo(resp.data!, this.#environment); } @@ -341,7 +342,8 @@ export class AstraAdmin extends HierarchicalLogger { path: `/databases`, params: params, methodName: 'admin.listDatabases', - }, tm); + timeoutManager: tm, + }); return resp.data!.map((d: SomeDoc) => buildAstraDatabaseAdminInfo(d, this.#environment)); } @@ -414,12 +416,12 @@ export class AstraAdmin extends HierarchicalLogger { path: '/databases', data: definition, methodName: 'admin.createDatabase', + timeoutManager: tm, }, { id: (resp) => resp.headers.location, target: 'ACTIVE', legalStates: ['INITIALIZING', 'PENDING'], defaultPollInterval: 10000, - timeoutManager: tm, options, }); @@ -462,12 +464,12 @@ export class AstraAdmin extends HierarchicalLogger { method: HttpMethods.Post, path: `/databases/${id}/terminate`, methodName: 'admin.dropDatabase', + timeoutManager: tm, }, { id: id, target: 'TERMINATED', legalStates: ['TERMINATING'], defaultPollInterval: 10000, - timeoutManager: tm, options, }); } @@ -524,7 +526,8 @@ export class AstraAdmin extends HierarchicalLogger { 'region-type': 'vector', }, methodName: 'admin.findAvailableRegions', - }, tm); + timeoutManager: tm, + }); return resp.data!.map((region: any): AstraAvailableRegionInfo => ({ classification: region.classification, diff --git a/src/administration/astra-db-admin.ts b/src/administration/astra-db-admin.ts index bbb58644..75e68641 100644 --- a/src/administration/astra-db-admin.ts +++ b/src/administration/astra-db-admin.ts @@ -19,8 +19,8 @@ import type { OpaqueHttpClient, CommandOptions } from '@/src/lib/index.js'; import { TokenProvider } from '@/src/lib/index.js'; import { buildAstraDatabaseAdminInfo, extractAstraEnvironment } from '@/src/administration/utils.js'; import { DEFAULT_DEVOPS_API_ENDPOINTS, HttpMethods } from '@/src/lib/api/constants.js'; -import type { DevOpsAPIRequestInfo } from '@/src/lib/api/clients/devops-api-http-client.js'; -import { DevOpsAPIHttpClient } from '@/src/lib/api/clients/devops-api-http-client.js'; +import type { ExecuteDevOpsAPIOperationOptions } from '@/src/lib/api/clients/impls/devops-api-http-client.js'; +import { DevOpsAPIHttpClient } from '@/src/lib/api/clients/impls/devops-api-http-client.js'; import type { Db } from '@/src/db/index.js'; import { $CustomInspect } from '@/src/lib/constants.js'; import type { AstraFullDatabaseInfo } from '@/src/administration/types/admin/database-info.js'; @@ -212,12 +212,12 @@ export class AstraDbAdmin extends DbAdmin { method: HttpMethods.Post, path: `/databases/${this.#db.id}/keyspaces/${keyspace}`, methodName: 'dbAdmin.createKeyspace', + timeoutManager: tm, }, { id: this.#db.id, target: 'ACTIVE', legalStates: ['MAINTENANCE'], defaultPollInterval: 1000, - timeoutManager: tm, options, }); } @@ -260,12 +260,12 @@ export class AstraDbAdmin extends DbAdmin { method: HttpMethods.Delete, path: `/databases/${this.#db.id}/keyspaces/${keyspace}`, methodName: 'dbAdmin.dropKeyspace', + timeoutManager: tm, }, { id: this.#db.id, target: 'ACTIVE', legalStates: ['MAINTENANCE'], defaultPollInterval: 1000, - timeoutManager: tm, options, }); } @@ -298,12 +298,12 @@ export class AstraDbAdmin extends DbAdmin { method: HttpMethods.Post, path: `/databases/${this.#db.id}/terminate`, methodName: 'dbAdmin.drop', + timeoutManager: tm, }, { id: this.#db.id, target: 'TERMINATED', legalStates: ['TERMINATING'], defaultPollInterval: 10000, - timeoutManager: tm, options, }); } @@ -312,12 +312,13 @@ export class AstraDbAdmin extends DbAdmin { return this.#httpClient; } - async #info(methodName: DevOpsAPIRequestInfo['methodName'], tm: TimeoutManager): Promise { + async #info(methodName: ExecuteDevOpsAPIOperationOptions['methodName'], tm: TimeoutManager): Promise { const resp = await this.#httpClient.request({ method: HttpMethods.Get, path: `/databases/${this.#db.id}`, + timeoutManager: tm, methodName, - }, tm); + }); return buildAstraDatabaseAdminInfo(resp.data!, this.#environment); } diff --git a/src/administration/data-api-db-admin.ts b/src/administration/data-api-db-admin.ts index bb74d804..269d53c5 100644 --- a/src/administration/data-api-db-admin.ts +++ b/src/administration/data-api-db-admin.ts @@ -16,7 +16,7 @@ import type { CreateDataAPIKeyspaceOptions } from '@/src/administration/types/index.js'; import { DbAdmin } from '@/src/administration/db-admin.js'; import type { OpaqueHttpClient, CommandOptions } from '@/src/lib/index.js'; -import type { DataAPIHttpClient } from '@/src/lib/api/clients/data-api-http-client.js'; +import type { DataAPIHttpClient } from '@/src/lib/api/clients/impls/data-api-http-client.js'; import type { Db } from '@/src/db/index.js'; import { $CustomInspect } from '@/src/lib/constants.js'; import type { ParsedAdminOptions } from '@/src/client/opts-handlers/admin-opts-handler.js'; diff --git a/src/administration/errors.ts b/src/administration/errors.ts index 9faaea43..2fe39eb8 100644 --- a/src/administration/errors.ts +++ b/src/administration/errors.ts @@ -87,13 +87,6 @@ export class DevOpsAPITimeoutError extends DevOpsAPIError { this.timedOutCategories = types; this.name = 'DevOpsAPITimeoutError'; } - - /** - * @internal - */ - public static mk(this: void, info: HTTPRequestInfo, types: TimedOutCategories): DevOpsAPITimeoutError { - return new DevOpsAPITimeoutError(info, types); - } } /** diff --git a/src/administration/events.ts b/src/administration/events.ts index f4dbd92b..a34c9fa6 100644 --- a/src/administration/events.ts +++ b/src/administration/events.ts @@ -13,7 +13,7 @@ // limitations under the License. // import { DataAPIClientEvent } from '@/src/lib/logging/events'; needs to be like this or it errors -import type { DevOpsAPIRequestInfo } from '@/src/lib/api/clients/devops-api-http-client.js'; +import type { DevOpsAPIRequestMetadata } from '@/src/lib/api/clients/impls/devops-api-http-client.js'; import type { DataAPIWarningDescriptor } from '@/src/documents/index.js'; import { BaseClientEvent } from '@/src/lib/logging/base-event.js'; import type { TimeoutDescriptor } from '@/src/lib/api/timeouts/timeouts.js'; @@ -90,14 +90,14 @@ export abstract class AdminCommandEvent extends BaseClientEvent { * * @internal */ - protected constructor(name: string, requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean) { - super(name, requestId, undefined); - this.url = baseUrl + info.path; - this.requestMethod = info.method; - this.requestBody = info.data; - this.requestParams = info.params; - this.isLongRunning = longRunning; - this.invokingMethod = info.methodName; + protected constructor(name: string, metadata: DevOpsAPIRequestMetadata) { + super(name, metadata.requestId, undefined); + this.url = metadata.baseUrl + metadata.reqOpts.path; + this.requestMethod = metadata.reqOpts.method; + this.requestBody = metadata.reqOpts.data; + this.requestParams = metadata.reqOpts.params; + this.isLongRunning = metadata.isLongRunning; + this.invokingMethod = metadata.reqOpts.methodName; } public override getMessagePrefix() { @@ -135,9 +135,9 @@ export class AdminCommandStartedEvent extends AdminCommandEvent { * * @internal */ - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean, timeout: Partial) { - super('AdminCommandStarted', requestId, baseUrl, info, longRunning); - this.timeout = timeout; + constructor(metadata: DevOpsAPIRequestMetadata) { + super('AdminCommandStarted', metadata); + this.timeout = metadata.timeout; } public override getMessage(): string { @@ -182,9 +182,9 @@ export class AdminCommandPollingEvent extends AdminCommandEvent { * * @internal */ - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, started: number, interval: number, pollCount: number) { - super('AdminCommandPolling', requestId, baseUrl, info, true); - this.elapsed = performance.now() - started; + constructor(metadata: DevOpsAPIRequestMetadata, interval: number, pollCount: number) { + super('AdminCommandPolling', metadata); + this.elapsed = performance.now() - metadata.startTime; this.pollInterval = interval; this.pollCount = pollCount; } @@ -224,9 +224,9 @@ export class AdminCommandSucceededEvent extends AdminCommandEvent { * * @internal */ - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean, data: Record | undefined, started: number) { - super('AdminCommandSucceeded', requestId, baseUrl, info, longRunning); - this.duration = performance.now() - started; + constructor(metadata: DevOpsAPIRequestMetadata, data: Record | undefined) { + super('AdminCommandSucceeded', metadata); + this.duration = performance.now() - metadata.startTime; this.responseBody = data || undefined; } @@ -268,9 +268,9 @@ export class AdminCommandFailedEvent extends AdminCommandEvent { * * @internal */ - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean, error: Error, started: number) { - super('AdminCommandFailed', requestId, baseUrl, info, longRunning); - this.duration = performance.now() - started; + constructor(metadata: DevOpsAPIRequestMetadata, error: Error) { + super('AdminCommandFailed', metadata); + this.duration = performance.now() - metadata.startTime; this.error = error; } @@ -304,8 +304,8 @@ export class AdminCommandWarningsEvent extends AdminCommandEvent { * * @internal */ - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean, warnings: NonEmpty) { - super('AdminCommandWarnings', requestId, baseUrl, info, longRunning); + constructor(metadata: DevOpsAPIRequestMetadata, warnings: NonEmpty) { + super('AdminCommandWarnings', metadata); this.warnings = warnings; } diff --git a/src/db/db.ts b/src/db/db.ts index 1f345cae..3def4b47 100644 --- a/src/db/db.ts +++ b/src/db/db.ts @@ -22,7 +22,7 @@ import { extractDbComponentsFromAstraUrl } from '@/src/documents/utils.js'; import type { DbAdmin } from '@/src/administration/index.js'; import { DataAPIDbAdmin } from '@/src/administration/data-api-db-admin.js'; import type { CreateCollectionOptions } from '@/src/db/types/collections/create.js'; -import { DataAPIHttpClient, EmissionStrategy } from '@/src/lib/api/clients/data-api-http-client.js'; +import { DataAPIHttpClient, EmissionStrategy } from '@/src/lib/api/clients/impls/data-api-http-client.js'; import type { KeyspaceRef } from '@/src/lib/api/clients/types.js'; import type { CommandEventMap, FoundRow, SomePKey, SomeRow, TableDropIndexOptions } from '@/src/documents/index.js'; import { Table } from '@/src/documents/index.js'; @@ -177,9 +177,8 @@ export class Db extends HierarchicalLogger { : endpoint; this.#httpClient = new DataAPIHttpClient({ - baseUrl: endpoint, + baseUrl: endpoint + (this.#defaultOpts.dbOptions.dataApiPath || DEFAULT_DATA_API_PATHS[rootOpts.environment]), tokenProvider: this.#defaultOpts.dbOptions.token, - baseApiPath: this.#defaultOpts.dbOptions.dataApiPath || DEFAULT_DATA_API_PATHS[rootOpts.environment], logger: this, fetchCtx: rootOpts.fetchCtx, keyspace: this.#keyspace, diff --git a/src/documents/collections/collection.ts b/src/documents/collections/collection.ts index e6e01a03..d07ce55a 100644 --- a/src/documents/collections/collection.ts +++ b/src/documents/collections/collection.ts @@ -53,7 +53,7 @@ import type { DropCollectionOptions, WithKeyspace, } from '@/src/db/index.js'; -import type { BigNumberHack, DataAPIHttpClient } from '@/src/lib/api/clients/data-api-http-client.js'; +import type { BigNumberHack, DataAPIHttpClient } from '@/src/lib/api/clients/impls/data-api-http-client.js'; import { HierarchicalLogger } from '@/src/lib/logging/hierarchical-logger.js'; import type { OpaqueHttpClient, CommandOptions } from '@/src/lib/index.js'; import { CommandImpls } from '@/src/documents/commands/command-impls.js'; diff --git a/src/documents/errors.ts b/src/documents/errors.ts index 613c6205..cc327c52 100644 --- a/src/documents/errors.ts +++ b/src/documents/errors.ts @@ -240,13 +240,6 @@ export class DataAPITimeoutError extends DataAPIError { this.timedOutCategories = types; this.name = 'DataAPITimeoutError'; } - - /** - * @internal - */ - public static mk(this: void, info: HTTPRequestInfo, types: TimedOutCategories): DataAPITimeoutError { - return new DataAPITimeoutError(info, types); - } } /** diff --git a/src/documents/events.ts b/src/documents/events.ts index 98c5a1d8..cbd893da 100644 --- a/src/documents/events.ts +++ b/src/documents/events.ts @@ -15,7 +15,7 @@ import type { NonEmpty, ReadonlyNonEmpty } from '@/src/lib/index.js'; import { type RawDataAPIResponse } from '@/src/lib/index.js'; import { BaseClientEvent } from '@/src/lib/logging/base-event.js'; -import type { DataAPIRequestInfo } from '@/src/lib/api/clients/data-api-http-client.js'; +import type { DataAPIRequestMetadata } from '@/src/lib/api/clients/impls/data-api-http-client.js'; import type { DataAPIWarningDescriptor } from '@/src/documents/errors.js'; import { DataAPIError } from '@/src/documents/errors.js'; import type { TimeoutDescriptor } from '@/src/lib/api/timeouts/timeouts.js'; @@ -50,11 +50,6 @@ export type CommandEventMap = { commandWarnings: CommandWarningsEvent, } -// export type CommandEventTarget = { url: string } & ( -// | { keyspace: string } & ({ table: string, collection?: never } | { collection: string, table?: never }) -// | { keyspace?: never, table?: never, collection?: never } -// ) - /** * The target of the command. * @@ -99,10 +94,10 @@ export abstract class CommandEvent extends BaseClientEvent { * * @internal */ - protected constructor(name: string, requestId: string, info: DataAPIRequestInfo, extra: Record | undefined) { - super(name, requestId, extra); - this.command = info.command; - this.target = info.target; + protected constructor(name: string, metadata: DataAPIRequestMetadata) { + super(name, metadata.requestId, metadata.extra); + this.command = metadata.command; + this.target = metadata.target; } /** @@ -166,9 +161,9 @@ export class CommandStartedEvent extends CommandEvent { * * @internal */ - constructor(requestId: string, info: DataAPIRequestInfo, extra: Record | undefined) { - super('CommandStarted', requestId, info, extra); - this.timeout = info.timeoutManager.initial(); + constructor(metadata: DataAPIRequestMetadata) { + super('CommandStarted', metadata); + this.timeout = metadata.timeout; } public override getMessage(): string { @@ -209,9 +204,9 @@ export class CommandSucceededEvent extends CommandEvent { * * @internal */ - constructor(requestId: string, info: DataAPIRequestInfo, extra: Record | undefined, reply: RawDataAPIResponse, started: number) { - super('CommandSucceeded', requestId, info, extra); - this.duration = performance.now() - started; + constructor(metadata: DataAPIRequestMetadata, reply: RawDataAPIResponse) { + super('CommandSucceeded', metadata); + this.duration = performance.now() - metadata.startTime; this.response = reply; } @@ -260,9 +255,9 @@ export class CommandFailedEvent extends CommandEvent { * * @internal */ - constructor(requestId: string, info: DataAPIRequestInfo, extra: Record | undefined, reply: RawDataAPIResponse | undefined, error: Error, started: number) { - super('CommandFailed', requestId, info, extra); - this.duration = performance.now() - started; + constructor(metadata: DataAPIRequestMetadata, reply: RawDataAPIResponse | undefined, error: Error) { + super('CommandFailed', metadata); + this.duration = performance.now() - metadata.startTime; this.response = reply; this.error = error; } @@ -304,8 +299,8 @@ export class CommandWarningsEvent extends CommandEvent { * * @internal */ - constructor(requestId: string, info: DataAPIRequestInfo, extra: Record | undefined, warnings: NonEmpty) { - super('CommandWarnings', requestId, info, extra); + constructor(metadata: DataAPIRequestMetadata, warnings: NonEmpty) { + super('CommandWarnings', metadata); this.warnings = warnings; } diff --git a/src/documents/tables/table.ts b/src/documents/tables/table.ts index 2707a61a..e9dcf13d 100644 --- a/src/documents/tables/table.ts +++ b/src/documents/tables/table.ts @@ -34,7 +34,7 @@ import type { WithSim, } from '@/src/documents/index.js'; import { TableFindCursor, TableInsertManyError } from '@/src/documents/index.js'; -import type { BigNumberHack, DataAPIHttpClient } from '@/src/lib/api/clients/data-api-http-client.js'; +import type { BigNumberHack, DataAPIHttpClient } from '@/src/lib/api/clients/impls/data-api-http-client.js'; import { CommandImpls } from '@/src/documents/commands/command-impls.js'; import type { AlterTableOptions, diff --git a/src/lib/api/clients/data-api-http-client.ts b/src/lib/api/clients/data-api-http-client.ts deleted file mode 100644 index e6dc167c..00000000 --- a/src/lib/api/clients/data-api-http-client.ts +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright DataStax, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// noinspection ExceptionCaughtLocallyJS - -import type { InternalLogger } from '@/src/lib/logging/internal-logger.js'; -import type { CommandOptions, NonEmpty, RawDataAPIResponse } from '@/src/lib/index.js'; -import { - EmbeddingAPIKeyHeaderProvider, - HeadersProvider, - RerankingAPIKeyHeaderProvider, - TokenProvider, -} from '@/src/lib/index.js'; -import type { CommandEventTarget, DataAPIWarningDescriptor, SomeDoc, SomeRow, Table } from '@/src/documents/index.js'; -import { Collection, DataAPIHttpError, DataAPIResponseError, DataAPITimeoutError } from '@/src/documents/index.js'; -import type { HTTPClientOptions, KeyspaceRef } from '@/src/lib/api/clients/types.js'; -import { HttpClient } from '@/src/lib/api/clients/http-client.js'; -import { HttpMethods } from '@/src/lib/api/constants.js'; -import type { CollectionOptions, TableOptions } from '@/src/db/index.js'; -import type { TimeoutManager } from '@/src/lib/api/timeouts/timeouts.js'; -import { Timeouts } from '@/src/lib/api/timeouts/timeouts.js'; -import type { EmptyObj } from '@/src/lib/types.js'; -import type { ParsedAdminOptions } from '@/src/client/opts-handlers/admin-opts-handler.js'; -import type { DbAdmin } from '@/src/administration/index.js'; -import { NonErrorError } from '@/src/lib/errors.js'; -import type { ParsedTokenProvider } from '@/src/lib/token-providers/token-provider.js'; -import type { DevOpsAPIRequestInfo } from '@/src/lib/api/clients/devops-api-http-client.js'; -import { isNonEmpty } from '@/src/lib/utils.js'; -import { RetryManager } from '@/src/lib/api/retries/manager.js'; -import { DataAPIRetryAdapter } from '@/src/lib/api/retries/adapters/data-api.js'; - -/** - * @internal - */ -type ClientKind = 'admin' | 'normal'; - -/** - * @internal - */ -type ExecCmdOpts = (Kind extends 'admin' ? { methodName: DevOpsAPIRequestInfo['methodName'] } : EmptyObj) & { - keyspace?: string | null, - timeoutManager: TimeoutManager, - bigNumsPresent?: boolean, - collection?: string, - table?: string, - extraLogInfo?: Record, -} - -/** - * @internal - */ -export interface DataAPIRequestInfo { - target: CommandEventTarget, - command: Record, - timeoutManager: TimeoutManager, - bigNumsPresent: boolean | undefined, -} - -/** - * @internal - */ -type EmissionStrategy = (logger: InternalLogger) => { - emitCommandStarted?(requestId: string, info: DataAPIRequestInfo, opts: ExecCmdOpts): void, - emitCommandFailed?(requestId: string, info: DataAPIRequestInfo, resp: RawDataAPIResponse | undefined, error: Error, started: number, opts: ExecCmdOpts): void, - emitCommandSucceeded?(requestId: string, info: DataAPIRequestInfo, resp: RawDataAPIResponse, started: number, opts: ExecCmdOpts): void, - emitCommandWarnings?(requestId: string, info: DataAPIRequestInfo, warnings: NonEmpty, opts: ExecCmdOpts): void, -} - -/** - * @internal - */ -interface EmissionStrategies { - Normal: EmissionStrategy<'normal'>, - Admin: EmissionStrategy<'admin'>, -} - -/** - * @internal - */ -export const EmissionStrategy: EmissionStrategies = { - Normal: (logger) => ({ - emitCommandStarted(reqId, info, opts) { - logger.commandStarted?.(reqId, info, opts.extraLogInfo); - }, - emitCommandFailed(reqId, info, resp, error, started, opts) { - logger.commandFailed?.(reqId, info, opts.extraLogInfo, resp, error, started); - }, - emitCommandSucceeded(reqId, info, resp, started, opts) { - logger.commandSucceeded?.(reqId, info, opts.extraLogInfo, resp, started); - }, - emitCommandWarnings(reqId, info, warnings, opts) { - logger.commandWarnings?.(reqId, info, opts.extraLogInfo, warnings); - }, - }), - Admin: (logger) => ({ - emitCommandStarted(reqId, info, opts) { - logger.adminCommandStarted?.(reqId, '', adaptInfo4Devops(info, opts.methodName), true, null!); // TODO - }, - emitCommandFailed(reqId, info, _, error, started, opts) { - logger.adminCommandFailed?.(reqId, '', adaptInfo4Devops(info, opts.methodName), true, error, started); - }, - emitCommandSucceeded(reqId, info, resp, started, opts) { - logger.adminCommandSucceeded?.(reqId, '', adaptInfo4Devops(info, opts.methodName), true, resp, started); - }, - emitCommandWarnings(reqId, info, warnings, opts) { - logger.adminCommandWarnings?.(reqId, '', adaptInfo4Devops(info, opts.methodName), true, warnings); - }, - }), -}; - -const adaptInfo4Devops = (info: DataAPIRequestInfo, methodName: DevOpsAPIRequestInfo['methodName']) => ({ - method: 'POST', - data: info.command, - path: info.target.url, - methodName, -}); - -/** - * @internal - */ -interface DataAPIHttpClientOpts extends Omit { - keyspace: KeyspaceRef, - emissionStrategy: EmissionStrategy, - tokenProvider: ParsedTokenProvider, -} - -/** - * @internal - */ -export interface BigNumberHack { - parseWithBigNumbers(json: string): boolean, - parser: { - parse: (json: string) => SomeDoc, - stringify: (obj: SomeDoc) => string, - }, -} - -/** - * @internal - */ -export class DataAPIHttpClient extends HttpClient { - public collectionName?: string; - public tableName?: string; - public keyspace: KeyspaceRef; - public emissionStrategy: ReturnType>; - public bigNumHack?: BigNumberHack; - - readonly #props: DataAPIHttpClientOpts; - - constructor(opts: DataAPIHttpClientOpts) { - super('data-api', { - ...opts, - additionalHeaders: HeadersProvider.opts.fromObj.concat([ - opts.additionalHeaders, - opts.tokenProvider.toHeadersProvider(), - ]), - mkTimeoutError: DataAPITimeoutError.mk, - }); - - this.keyspace = opts.keyspace; - this.#props = opts; - this.emissionStrategy = opts.emissionStrategy(opts.logger.internal); - } - - public rm(isSafelyRetryable: boolean, opts: CommandOptions): RetryManager { - return RetryManager.mk(isSafelyRetryable, opts, new DataAPIRetryAdapter(this.logger), undefined); - } - - public forTableSlashCollectionOrWhateverWeWouldCallTheUnionOfTheseTypes(tSlashC: Collection | Table, opts: CollectionOptions | TableOptions | undefined, bigNumHack: BigNumberHack): DataAPIHttpClient { - const clone = new DataAPIHttpClient({ - ...this.#props, - emissionStrategy: EmissionStrategy.Normal, - keyspace: { ref: tSlashC.keyspace }, - logger: tSlashC, - additionalHeaders: HeadersProvider.opts.monoid.concat([ - this.#props.additionalHeaders, - HeadersProvider.opts.fromStr(EmbeddingAPIKeyHeaderProvider).parse(opts?.embeddingApiKey), - HeadersProvider.opts.fromStr(RerankingAPIKeyHeaderProvider).parse(opts?.rerankingApiKey), - ]), - }); - - if (tSlashC instanceof Collection) { - clone.collectionName = tSlashC.name; - } else { - clone.tableName = tSlashC.name; - } - - clone.bigNumHack = bigNumHack; - clone.tm = new Timeouts(DataAPITimeoutError.mk, Timeouts.cfg.parse({ ...this.tm.baseTimeouts, ...opts?.timeoutDefaults })); - - return clone; - } - - public forDbAdmin(dbAdmin: DbAdmin, opts: ParsedAdminOptions): DataAPIHttpClient<'admin'> { - const clone = new DataAPIHttpClient({ - ...this.#props, - tokenProvider: TokenProvider.opts.concat([opts.adminToken, this.#props.tokenProvider]), - baseUrl: opts?.endpointUrl ?? this.#props.baseUrl, - baseApiPath: opts?.endpointUrl ? '' : this.#props.baseApiPath, - emissionStrategy: EmissionStrategy.Admin, - logger: dbAdmin, - }); - - clone.collectionName = undefined; - clone.tableName = undefined; - clone.tm = new Timeouts(DataAPITimeoutError.mk, { ...this.tm.baseTimeouts, ...opts?.timeoutDefaults }); - - return clone; - } - - public async executeCommand(command: Record, options: ExecCmdOpts): Promise { - if (options?.collection && options.table) { - throw new Error('Can\'t provide both `table` and `collection` as options to DataAPIHttpClient.executeCommand()'); - } - - const tOrC = options.collection || options.table || this.collectionName || this.tableName; - const keyspace = options.keyspace === undefined ? this.keyspace?.ref : options.keyspace; - - if (keyspace === undefined) { - throw new Error('Db is missing a required keyspace; be sure to set one with client.db(..., { keyspace }), or db.useKeyspace()'); - } - - if (keyspace === null && tOrC) { - throw new Error('Keyspace may not be `null` when a table or collection is provided to DataAPIHttpClient.executeCommand()'); - } - - const keyspacePath = keyspace ? `/${keyspace}` : ''; - const collectionPath = tOrC ? `/${tOrC}` : ''; - const url = this.baseUrl + keyspacePath + collectionPath; - - const info: DataAPIRequestInfo = { - command: command, - timeoutManager: options.timeoutManager, - bigNumsPresent: options.bigNumsPresent, - target: mkCommandEventTarget(url, keyspace, tOrC, tOrC ? (tOrC === (options.table || this.tableName) ? 'table' : 'collection') : undefined), - }; - - const requestId = this.logger.internal.generateCommandRequestId(); - - this.emissionStrategy.emitCommandStarted?.(requestId, info, options); - const started = performance.now(); - - let clonedData: RawDataAPIResponse | undefined; - - try { - const serialized = (info.bigNumsPresent) - ? this.bigNumHack?.parser.stringify(info.command) - : JSON.stringify(info.command); - - const resp = await this._request({ - url: info.target.url, - data: serialized, - timeoutManager: info.timeoutManager, - method: HttpMethods.Post, - }); - - if (resp.status >= 400 && resp.status !== 401) { - throw new DataAPIHttpError(resp); - } - - const data = (resp.body) - ? (this.bigNumHack?.parseWithBigNumbers(resp.body)) - ? this.bigNumHack?.parser.parse(resp.body) - : JSON.parse(resp.body) - /* c8 ignore next: exceptional case */ - : {}; - - clonedData = requestId - ? structuredClone(data) - : undefined; - - const warnings = data?.status?.warnings ?? []; - - if (warnings.length) { - this.emissionStrategy.emitCommandWarnings?.(requestId, info, warnings, options); - } - - if (data.errors && isNonEmpty(data.errors)) { - throw new DataAPIResponseError(info.command, data); - } - - const respData = { - data: data.data, - status: data.status, - errors: data.errors, - }; - - this.emissionStrategy.emitCommandSucceeded?.(requestId, info, clonedData!, started, options); - return respData; - } catch (thrown) { - const err = NonErrorError.asError(thrown); - this.emissionStrategy.emitCommandFailed?.(requestId, info, clonedData, err, started, options); - throw err; - } - } -} - -const mkCommandEventTarget = (url: string, keyspace: string | null, tOrC?: string, tOrCType?: 'table' | 'collection'): Readonly => { - const target = { url } as CommandEventTarget; - - if (keyspace) { - target.keyspace = keyspace; - } - - if (tOrCType) { - target[tOrCType] = tOrC; - } - - return target; -}; diff --git a/src/lib/api/clients/devops-api-http-client.ts b/src/lib/api/clients/devops-api-http-client.ts deleted file mode 100644 index 69faaf0a..00000000 --- a/src/lib/api/clients/devops-api-http-client.ts +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright DataStax, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// noinspection ExceptionCaughtLocallyJS - -import { HttpClient } from '@/src/lib/api/clients/index.js'; -import { - DevOpsAPIResponseError, - DevOpsAPITimeoutError, -} from '@/src/administration/errors.js'; -import type { AstraAdminBlockingOptions } from '@/src/administration/types/index.js'; -import { HttpMethods } from '@/src/lib/api/constants.js'; -import type { HTTPClientOptions, HttpMethodStrings } from '@/src/lib/api/clients/types.js'; -import { jsonTryParse } from '@/src/lib/utils.js'; -import type { TimeoutManager } from '@/src/lib/api/timeouts/timeouts.js'; -import { NonErrorError } from '@/src/lib/errors.js'; -import { type CommandOptions, HeadersProvider } from '@/src/lib/index.js'; -import type { ParsedTokenProvider } from '@/src/lib/token-providers/token-provider.js'; -import { RetryAdapter, RetryManager } from '@/src/lib/api/retries/manager.js'; -import { DevOpsAPIRetryContext } from '@/src/lib/api/retries/contexts/devops-api.js'; -import type { RetryConfig } from '@/src/lib/api/retries/config.js'; -import { DevOpsAPIRetryAdapter } from '@/src/lib/api/retries/adapters/devops-api.js'; - -/** - * @internal - */ -export interface DevOpsAPIRequestInfo { - path: string, - method: HttpMethodStrings, - data?: Record, - params?: Record, - methodName: `${'admin' | 'dbAdmin'}.${string}`, -} - -/** - * @internal - */ -interface LongRunningRequestInfo { - id: string | ((resp: DevopsAPIResponse) => string), - target: string, - legalStates: string[], - defaultPollInterval: number, - options: AstraAdminBlockingOptions | undefined, - timeoutManager: TimeoutManager, -} - -/** - * @internal - */ -interface DevopsAPIResponse { - data?: Record, - headers: Record, - status: number, -} - -/** - * @internal - */ -interface DevOpsAPIHttpClientOpts extends Omit { - tokenProvider: ParsedTokenProvider, -} - -/** - * @internal - */ -export class DevOpsAPIHttpClient extends HttpClient { - constructor(opts: DevOpsAPIHttpClientOpts) { - super('devops-api', { - ...opts, - additionalHeaders: HeadersProvider.opts.fromObj.concat([ - opts.additionalHeaders, - opts.tokenProvider.toHeadersProvider(), - ]), - mkTimeoutError: DevOpsAPITimeoutError.mk, - }); - } - - public rm(isSafelyRetryable: boolean, opts: CommandOptions): RetryManager { - return RetryManager.mk(isSafelyRetryable, opts, new DevOpsAPIRetryAdapter(this.logger), undefined); - } - - public async request(req: DevOpsAPIRequestInfo, timeoutManager: TimeoutManager, started = 0): Promise { - return this._executeRequest(req, timeoutManager, started, this.logger.internal.generateAdminCommandRequestId()); - } - - public async requestLongRunning(req: DevOpsAPIRequestInfo, info: LongRunningRequestInfo): Promise { - const isLongRunning = info.options?.blocking !== false; - const timeoutManager = info.timeoutManager; - - const requestId = this.logger.internal.generateAdminCommandRequestId(); - - this.logger.internal.adminCommandStarted?.(requestId, this.baseUrl, req, isLongRunning, timeoutManager.initial()); - - const started = performance.now(); - const resp = await this._executeRequest(req, timeoutManager, started, requestId); - - const id = (typeof info.id === 'function') - ? info.id(resp) - : info.id; - - await this._awaitStatus(id, req, info, started, requestId); - - this.logger.internal.adminCommandSucceeded?.(requestId, this.baseUrl, req, isLongRunning, resp, started); - - return resp; - } - - private async _executeRequest(req: DevOpsAPIRequestInfo, timeoutManager: TimeoutManager, started: number, requestId: string): Promise { - const isLongRunning = started !== 0; - - try { - const url = this.baseUrl + req.path; - - if (!isLongRunning) { - this.logger.internal.adminCommandStarted?.(requestId, this.baseUrl, req, isLongRunning, timeoutManager.initial()); - } - - started ||= performance.now(); - - const resp = await this._request({ - url: url, - method: req.method, - params: req.params, - data: JSON.stringify(req.data), - forceHttp1: true, - timeoutManager, - }); - - const data = resp.body ? jsonTryParse(resp.body, undefined) : undefined; - - if (resp.status >= 400) { - throw new DevOpsAPIResponseError(resp, data); - } - - if (!isLongRunning) { - this.logger.internal.adminCommandSucceeded?.(requestId, this.baseUrl, req, false, data, started); - } - - return { - data: data, - status: resp.status, - headers: resp.headers, - }; - } catch (thrown) { - const err = NonErrorError.asError(thrown); - this.logger.internal.adminCommandFailed?.(requestId, this.baseUrl, req, isLongRunning, err, started); - throw err; - } - } - - private async _awaitStatus(id: string, req: DevOpsAPIRequestInfo, info: LongRunningRequestInfo, started: number, requestId: string): Promise { - if (info.options?.blocking === false) { - return; - } - - const pollInterval = info.options?.pollInterval || info.defaultPollInterval; - let waiting = false; - - for (let i = 1; i++;) { - /* c8 ignore next 3: exceptional case that can't be manually reproduced */ - if (waiting) { - continue; - } - waiting = true; - - this.logger.internal.adminCommandPolling?.(requestId, this.baseUrl, req, started, pollInterval, i); - - const resp = await this.request({ - method: HttpMethods.Get, - path: `/databases/${id}`, - methodName: req.methodName, - }, info.timeoutManager, started); - - if (resp.data?.status === info.target) { - break; - } - - /* c8 ignore start: exceptional case that can't be manually reproduced */ - if (!info.legalStates.includes(resp.data?.status)) { - const okStates = [info.target, ...info.legalStates]; - const error = new Error(`Created database is not in any legal state [${okStates.join(',')}]; current state: ${resp.data?.status}`); - - this.logger.internal.adminCommandFailed?.(requestId, this.baseUrl, req, true, error, started); - throw error; - } - /* c8 ignore end */ - - await new Promise((resolve) => { - setTimeout(() => { - waiting = false; - resolve(); - }, pollInterval); - }); - } - } -} diff --git a/src/lib/api/clients/http-client.ts b/src/lib/api/clients/http-client.ts deleted file mode 100644 index 49fea7c4..00000000 --- a/src/lib/api/clients/http-client.ts +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright DataStax, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import type { FetchCtx, FetcherResponseInfo } from '@/src/lib/api/fetch/fetcher.js'; -import type { HTTPClientOptions, HTTPRequestInfo } from '@/src/lib/api/clients/index.js'; -import type { DataAPIClientEventMap } from '@/src/lib/logging/index.js'; -import { Timeouts } from '@/src/lib/api/timeouts/timeouts.js'; -import type { HierarchicalLogger } from '@/src/lib/index.js'; -import { HeadersResolver } from '@/src/lib/api/clients/headers-resolver.js'; - -/** - * @internal - */ -export abstract class HttpClient { - readonly baseUrl: string; - readonly logger: HierarchicalLogger; - readonly fetchCtx: FetchCtx; - readonly headersResolver: HeadersResolver; - tm: Timeouts; - - protected constructor(target: 'data-api' | 'devops-api', options: HTTPClientOptions) { - this.baseUrl = options.baseUrl; - this.logger = options.logger; - this.fetchCtx = options.fetchCtx; - - if (options.baseApiPath) { - this.baseUrl += '/' + options.baseApiPath; - } - - // this.baseHeaders = { ...options.additionalHeaders }; - // this.baseHeaders['User-Agent'] = options.caller.userAgent; - // this.baseHeaders['Content-Type'] = 'application/json'; - // - // this.headerProviders = headerProviders; - - this.headersResolver = new HeadersResolver(target, options.additionalHeaders, { - 'User-Agent': options.caller.userAgent, - 'Content-Type': 'application/json', - }); - - this.tm = new Timeouts(options.mkTimeoutError, options.timeoutDefaults); - } - - protected async _request(info: HTTPRequestInfo): Promise { - if (this.fetchCtx.closed.ref) { - throw new Error('Can\'t make requests on a closed client'); - } - - const [msRemaining, mkTimeoutError] = info.timeoutManager.advance(info); - - if (msRemaining <= 0) { - throw mkTimeoutError(); - } - - const params = info.params ?? {}; - - const url = (Object.keys(params).length > 0) - ? `${info.url}?${new URLSearchParams(params).toString()}` - : info.url; - - const maybePromiseHeaders = this.headersResolver.resolve(); - - const headers = (maybePromiseHeaders instanceof Promise) - ? await maybePromiseHeaders - : maybePromiseHeaders; - - return await this.fetchCtx.ctx.fetch({ - url: url, - body: info.data, - method: info.method, - headers: headers, - forceHttp1: !!info.forceHttp1, - timeout: msRemaining, - mkTimeoutError, - }); - } -} - diff --git a/src/lib/api/clients/impls/base-http-client.ts b/src/lib/api/clients/impls/base-http-client.ts new file mode 100644 index 00000000..4d7474ff --- /dev/null +++ b/src/lib/api/clients/impls/base-http-client.ts @@ -0,0 +1,158 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import type { FetchCtx, FetcherResponseInfo } from '@/src/lib/api/fetch/fetcher.js'; +import type { HttpMethodStrings } from '@/src/lib/api/clients/index.js'; +import type { TimeoutAdapter, TimeoutDescriptor } from '@/src/lib/api/timeouts/timeouts.js'; +import { type TimeoutManager, Timeouts } from '@/src/lib/api/timeouts/timeouts.js'; +import type { DataAPIClientEventMap, HierarchicalLogger } from '@/src/lib/index.js'; +import { type CommandOptions, HeadersProvider } from '@/src/lib/index.js'; +import type { HeadersResolverAdapter } from '@/src/lib/api/clients/utils/headers-resolver.js'; +import { HeadersResolver } from '@/src/lib/api/clients/utils/headers-resolver.js'; +import type { ParsedTimeoutDescriptor } from '@/src/lib/api/timeouts/cfg-handler.js'; +import type { ParsedCaller } from '@/src/client/opts-handlers/caller-cfg-handler.js'; +import type { ParsedHeadersProviders } from '@/src/lib/headers-providers/root/opts-handlers.js'; +import type { RetryAdapter } from '@/src/lib/api/retries/manager.js'; +import { RetryManager } from '@/src/lib/api/retries/manager.js'; +import type { ParsedTokenProvider } from '@/src/lib/token-providers/token-provider.js'; +import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; +import { RequestId } from '@/src/lib/api/clients/utils/request-id.js'; + +/** + * @internal + */ +export interface BaseHTTPClientOptions { + baseUrl: string, + logger: HierarchicalLogger, + fetchCtx: FetchCtx, + caller: ParsedCaller, + additionalHeaders: ParsedHeadersProviders, + timeoutDefaults: ParsedTimeoutDescriptor, + tokenProvider: ParsedTokenProvider, +} + +/** + * @internal + */ +export interface BaseExecuteOperationOptions { + timeoutManager: TimeoutManager, +} + +/** + * @internal + */ +export interface BaseRequestMetadata { + timeout: Partial, + requestId: RequestId, + startTime: number, +} + +/** + * @internal + */ +export interface HTTPRequestInfo { + url: string, + data?: string, + params?: Record, + method: HttpMethodStrings, + timeoutManager: TimeoutManager, + forceHttp1?: boolean, +} + +/** + * @internal + */ +export interface HttpClientAdapters { + retryAdapter: RetryAdapter, + headersResolverAdapter: HeadersResolverAdapter, + timeoutAdapter: TimeoutAdapter, +} + +/** + * @internal + */ +export abstract class BaseHttpClient { + protected readonly _baseUrl: string; + protected readonly _logger: HierarchicalLogger; + protected readonly _fetchCtx: FetchCtx; + protected readonly _headersResolver: HeadersResolver; + + public readonly tm: Timeouts; + public readonly rm: (isSafelyRetryable: boolean, opts: CommandOptions) => RetryManager; + + protected constructor(opts: BaseHTTPClientOptions, adapters: HttpClientAdapters) { + this._baseUrl = opts.baseUrl; + this._logger = opts.logger; + this._fetchCtx = opts.fetchCtx; + + const additionalHeaders = HeadersProvider.opts.fromObj.concat([ + opts.additionalHeaders, + opts.tokenProvider.toHeadersProvider(), + ]); + + this._headersResolver = new HeadersResolver(adapters.headersResolverAdapter, additionalHeaders, { + 'User-Agent': opts.caller.userAgent, + 'Content-Type': 'application/json', + }); + + this.tm = new Timeouts(adapters.timeoutAdapter, opts.timeoutDefaults); + + this.rm = (isSafelyRetryable: boolean, opts: CommandOptions) => { + return RetryManager.mk(isSafelyRetryable, opts, adapters.retryAdapter, undefined); + }; + } + + protected _mkRequestMetadata(tm: TimeoutManager, metadata: Omit): Metadata { + return { + ...metadata, + requestId: new RequestId(), + startTime: performance.now(), + timeout: tm.initial(), + } as Metadata; + } + + protected async _request(info: HTTPRequestInfo): Promise { + if (this._fetchCtx.closed.ref) { + throw new Error('Can\'t make requests on a closed client'); + } + + const [msRemaining, mkTimeoutError] = info.timeoutManager.advance(info); + + if (msRemaining <= 0) { + throw mkTimeoutError(); + } + + const params = info.params ?? {}; + + const url = (Object.keys(params).length > 0) + ? `${info.url}?${new URLSearchParams(params).toString()}` + : info.url; + + const maybePromiseHeaders = this._headersResolver.resolve(); + + const headers = (maybePromiseHeaders instanceof Promise) + ? await maybePromiseHeaders + : maybePromiseHeaders; + + return await this._fetchCtx.ctx.fetch({ + url: url, + body: info.data, + method: info.method, + headers: headers, + forceHttp1: !!info.forceHttp1, + timeout: msRemaining, + mkTimeoutError, + }); + } +} diff --git a/src/lib/api/clients/impls/data-api-http-client.ts b/src/lib/api/clients/impls/data-api-http-client.ts new file mode 100644 index 00000000..713f33aa --- /dev/null +++ b/src/lib/api/clients/impls/data-api-http-client.ts @@ -0,0 +1,360 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// noinspection ExceptionCaughtLocallyJS + +import type { InternalLogger } from '@/src/lib/logging/internal-logger.js'; +import type { + DataAPIClientEventMap, EmptyObj, + NonEmpty, + nullish, + RawDataAPIResponse, + TimedOutCategories, +} from '@/src/lib/index.js'; +import { + EmbeddingAPIKeyHeaderProvider, + HeadersProvider, + RerankingAPIKeyHeaderProvider, + TokenProvider, +} from '@/src/lib/index.js'; +import type { CommandEventTarget, DataAPIWarningDescriptor, SomeDoc, SomeRow, Table } from '@/src/documents/index.js'; +import { Collection, DataAPIHttpError, DataAPIResponseError, DataAPITimeoutError } from '@/src/documents/index.js'; +import type { KeyspaceRef } from '@/src/lib/api/clients/types.js'; +import type { + BaseExecuteOperationOptions, + BaseHTTPClientOptions, + BaseRequestMetadata, + HTTPRequestInfo, +} from '@/src/lib/api/clients/impls/base-http-client.js'; +import { BaseHttpClient } from '@/src/lib/api/clients/impls/base-http-client.js'; +import { HttpMethods } from '@/src/lib/api/constants.js'; +import type { CollectionOptions, TableOptions } from '@/src/db/index.js'; +import type { TimeoutAdapter } from '@/src/lib/api/timeouts/timeouts.js'; +import type { ParsedAdminOptions } from '@/src/client/opts-handlers/admin-opts-handler.js'; +import type { DbAdmin } from '@/src/administration/index.js'; +import { NonErrorError } from '@/src/lib/errors.js'; +import { isNonEmpty } from '@/src/lib/utils.js'; +import { DataAPIRetryAdapter } from '@/src/lib/api/retries/adapters/data-api.js'; +import type { HeadersResolverAdapter } from '@/src/lib/api/clients/utils/headers-resolver.js'; +import type { DevOpsAPIRequestMetadata, ExecuteDevOpsAPIOperationOptions } from '@/src/lib/api/clients/index.js'; + +/** + * @internal + */ +type ClientKind = 'admin' | 'normal'; + +/** + * @internal + */ +export interface DataAPIHttpClientOpts extends BaseHTTPClientOptions { + keyspace: KeyspaceRef, + emissionStrategy: EmissionStrategy, + collection?: string, + table?: string, + bigNumHack?: BigNumberHack, +} + +/** + * @internal + */ +export type ExecuteDataAPICommandOptions = BaseExecuteOperationOptions & (Kind extends 'admin' ? { methodName: ExecuteDevOpsAPIOperationOptions['methodName'] } : EmptyObj) & { + keyspace?: string | null, + bigNumsPresent?: boolean, + collection?: string, + table?: string, + extraLogInfo?: Record, +} + +/** + * @internal + */ +export interface DataAPIRequestMetadata extends BaseRequestMetadata { + target: CommandEventTarget, + command: Record, + extra?: Record, +} + +/** + * @internal + */ +export interface BigNumberHack { + parseWithBigNumbers(json: string): boolean, + parser: { + parse: (json: string) => SomeDoc, + stringify: (obj: SomeDoc) => string, + }, +} + +/** + * @internal + */ +export class DataAPIHttpClient extends BaseHttpClient { + public target: InternalRequestTarget; + public emissionStrategy: ReturnType>; + public bigNumHack?: BigNumberHack; + + readonly #baseOpts: DataAPIHttpClientOpts; + + constructor(opts: DataAPIHttpClientOpts) { + super(opts, { + retryAdapter: new DataAPIRetryAdapter(opts.logger), + headersResolverAdapter: DataAPIHeadersResolverAdapter, + timeoutAdapter: DataAPITimeoutAdapter, + }); + + this.target = new InternalRequestTarget(opts.baseUrl, opts.keyspace); + this.emissionStrategy = opts.emissionStrategy(opts.logger.internal, this._baseUrl); + this.#baseOpts = opts; + } + + public forTableSlashCollectionOrWhateverWeWouldCallTheUnionOfTheseTypes(tSlashC: Collection | Table, opts: CollectionOptions | TableOptions | undefined, bigNumHack: BigNumberHack): DataAPIHttpClient { + return new DataAPIHttpClient({ + ...this.#baseOpts, + emissionStrategy: EmissionStrategy.Normal, + keyspace: { ref: tSlashC.keyspace }, + logger: tSlashC, + additionalHeaders: HeadersProvider.opts.monoid.concat([ + this.#baseOpts.additionalHeaders, + HeadersProvider.opts.fromStr(EmbeddingAPIKeyHeaderProvider).parse(opts?.embeddingApiKey), + HeadersProvider.opts.fromStr(RerankingAPIKeyHeaderProvider).parse(opts?.rerankingApiKey), + ]), + timeoutDefaults: { + ...this.#baseOpts.timeoutDefaults, + ...opts?.timeoutDefaults, + }, + collection: tSlashC instanceof Collection ? tSlashC.name : undefined, + table: tSlashC instanceof Collection ? undefined : tSlashC.name, + bigNumHack, + }); + } + + public forDbAdmin(dbAdmin: DbAdmin, opts: ParsedAdminOptions): DataAPIHttpClient<'admin'> { + return new DataAPIHttpClient({ + ...this.#baseOpts, + tokenProvider: TokenProvider.opts.concat([opts.adminToken, this.#baseOpts.tokenProvider]), + baseUrl: opts?.endpointUrl ?? this.#baseOpts.baseUrl, + emissionStrategy: EmissionStrategy.Admin, + logger: dbAdmin, + timeoutDefaults: { + ...this.#baseOpts.timeoutDefaults, + ...opts?.timeoutDefaults, + }, + collection: undefined, + table: undefined, + }); + } + + public async executeCommand(command: Record, opts: ExecuteDataAPICommandOptions): Promise { + const metadata = this._mkRequestMetadata(opts.timeoutManager, { + target: this.target.forRequest(opts), + extra: opts.extraLogInfo, + command: command, + }); + + this.emissionStrategy.emitCommandStarted(metadata, opts); + + let clonedData: RawDataAPIResponse | undefined; + + try { + const serialized = (opts.bigNumsPresent) + ? this.bigNumHack?.parser.stringify(metadata.command) + : JSON.stringify(metadata.command); + + const resp = await this._request({ + url: metadata.target.url, + data: serialized, + timeoutManager: opts.timeoutManager, + method: HttpMethods.Post, + }); + + if (resp.status >= 400 && resp.status !== 401) { + throw new DataAPIHttpError(resp); + } + + const data = (resp.body) + ? (this.bigNumHack?.parseWithBigNumbers(resp.body)) + ? this.bigNumHack?.parser.parse(resp.body) + : JSON.parse(resp.body) + /* c8 ignore next: exceptional case */ + : {}; + + clonedData = data; + + const warnings = data?.status?.warnings ?? []; + + if (warnings.length) { + this.emissionStrategy.emitCommandWarnings(metadata, warnings, opts); + } + + if (data.errors && isNonEmpty(data.errors)) { + throw new DataAPIResponseError(metadata.command, data); + } + + const respData = { + data: data.data, + status: data.status, + errors: data.errors, + }; + + this.emissionStrategy.emitCommandSucceeded(metadata, data, opts); + return respData; + } catch (thrown) { + const err = NonErrorError.asError(thrown); + this.emissionStrategy.emitCommandFailed(metadata, clonedData, err, opts); + throw err; + } + } +} + +/** + * @internal + */ +class InternalRequestTarget { + private _cached: CommandEventTarget; + + constructor(private readonly _baseUrl: string, private readonly _keyspace: KeyspaceRef, coll?: string, table?: string) { + this._cached = this._buildCommandEventTarget(this._keyspace.ref, coll, table); + } + + public forRequest(options: ExecuteDataAPICommandOptions): Readonly { + this._rebuildCacheIfKeyspaceChanged(); + + const keyspace = options.keyspace === undefined ? this._cached.keyspace : options.keyspace; + + if (keyspace === undefined) { + throw new Error('Db is missing a working keyspace; set one with client.db(..., { keyspace }) or db.useKeyspace()'); + } + + return this._buildCommandEventTarget(keyspace, options.collection, options.table); + } + + private _buildCommandEventTarget(keyspace: string | nullish, coll?: string, table?: string) { + if (coll && table) { + throw new Error('Both `table` and `collection` options may not be set at once when making a request to the Data API'); + } + const tOrC = coll || table || this._cached?.collection || this._cached?.table; + + const keyspacePath = keyspace ? `/${keyspace}` : ''; + const collectionPath = tOrC ? `/${tOrC}` : ''; + + const target = { + url: this._baseUrl + keyspacePath + collectionPath, + } as CommandEventTarget; + + if (keyspace) { + target.keyspace = keyspace; + + if (tOrC) { + if (tOrC === coll || tOrC === this._cached.collection) { + target.collection = coll; + } else { + target.table = table; + } + } + } else if (tOrC) { + throw new Error('Keyspace may not be `null` when a table or collection is provided to DataAPIHttpClient.executeCommand()'); + } + + return target; + } + + private _rebuildCacheIfKeyspaceChanged() { + if (this._keyspace.ref !== this._cached.keyspace) { + this._cached = this._buildCommandEventTarget(this._keyspace.ref, this._cached.collection, this._cached.table); + } + } +} + +/** + * @internal + */ +const DataAPIHeadersResolverAdapter: HeadersResolverAdapter = { + target: 'data-api', +}; + +/** + * @internal + */ +const DataAPITimeoutAdapter: TimeoutAdapter = { + mkTimeoutError(info: HTTPRequestInfo, categories: TimedOutCategories): Error { + return new DataAPITimeoutError(info, categories); + }, +}; + +/** + * @internal + */ +type EmissionStrategy = (logger: InternalLogger, baseUrl: string) => { + emitCommandStarted(info: DataAPIRequestMetadata, opts: ExecuteDataAPICommandOptions): void, + emitCommandFailed(info: DataAPIRequestMetadata, resp: RawDataAPIResponse | undefined, error: Error, opts: ExecuteDataAPICommandOptions): void, + emitCommandSucceeded(info: DataAPIRequestMetadata, resp: RawDataAPIResponse, opts: ExecuteDataAPICommandOptions): void, + emitCommandWarnings(info: DataAPIRequestMetadata, warnings: NonEmpty, opts: ExecuteDataAPICommandOptions): void, +} + +/** + * @internal + */ +interface EmissionStrategies { + Normal: EmissionStrategy<'normal'>, + Admin: EmissionStrategy<'admin'>, +} + +/** + * @internal + */ +export const EmissionStrategy: EmissionStrategies = { + Normal: (logger) => ({ + emitCommandStarted(metadata) { + logger.commandStarted?.(metadata); + }, + emitCommandFailed(metadata, resp, error) { + logger.commandFailed?.(metadata, resp, error); + }, + emitCommandSucceeded(metadata, resp) { + logger.commandSucceeded?.(metadata, resp); + }, + emitCommandWarnings(metadata, warnings) { + logger.commandWarnings?.(metadata, warnings); + }, + }), + Admin: (logger, baseUrl) => ({ + emitCommandStarted(metadata, opts) { + logger.adminCommandStarted?.(adaptInfo4Devops(baseUrl, metadata, opts)); + }, + emitCommandFailed(metadata, _, error, opts) { + logger.adminCommandFailed?.(adaptInfo4Devops(baseUrl, metadata, opts), error); + }, + emitCommandSucceeded(metadata, resp, opts) { + logger.adminCommandSucceeded?.(adaptInfo4Devops(baseUrl, metadata, opts), resp); + }, + emitCommandWarnings(metadata, warnings, opts) { + logger.adminCommandWarnings?.(adaptInfo4Devops(baseUrl, metadata, opts), warnings); + }, + }), +}; + +const adaptInfo4Devops = (baseUrl: string, metadata: DataAPIRequestMetadata, opts: ExecuteDataAPICommandOptions<'admin'>): DevOpsAPIRequestMetadata => { + timeout: metadata.timeout, + requestId: metadata.requestId, + startTime: metadata.startTime, + baseUrl: baseUrl, + isLongRunning: false, + methodName: opts.methodName, + reqOpts: { + timeoutManager: opts.timeoutManager, + data: metadata.command, + path: metadata.target.url.replace(baseUrl, ''), + method: HttpMethods.Post, + methodName: opts.methodName, + }, +}; diff --git a/src/lib/api/clients/impls/devops-api-http-client.ts b/src/lib/api/clients/impls/devops-api-http-client.ts new file mode 100644 index 00000000..404b08c1 --- /dev/null +++ b/src/lib/api/clients/impls/devops-api-http-client.ts @@ -0,0 +1,213 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// noinspection ExceptionCaughtLocallyJS + +import type { + BaseExecuteOperationOptions, + BaseHTTPClientOptions, + BaseRequestMetadata, + HttpMethodStrings, +} from '@/src/lib/api/clients/index.js'; +import { BaseHttpClient, type HTTPRequestInfo } from '@/src/lib/api/clients/index.js'; +import { DevOpsAPIResponseError, DevOpsAPITimeoutError } from '@/src/administration/errors.js'; +import type { AstraAdminBlockingOptions } from '@/src/administration/types/index.js'; +import { HttpMethods } from '@/src/lib/api/constants.js'; +import { jsonTryParse } from '@/src/lib/utils.js'; +import type { TimedOutCategories, TimeoutAdapter } from '@/src/lib/api/timeouts/timeouts.js'; +import { NonErrorError } from '@/src/lib/errors.js'; +import { DevOpsAPIRetryAdapter } from '@/src/lib/api/retries/adapters/devops-api.js'; +import type { HeadersResolverAdapter } from '@/src/lib/api/clients/utils/headers-resolver.js'; + +/** + * @internal + */ +export type DevOpsAPIHttpClientOpts = BaseHTTPClientOptions + +/** + * @internal + */ +export interface ExecuteDevOpsAPIOperationOptions extends BaseExecuteOperationOptions { + path: string, + method: HttpMethodStrings, + data?: Record, + params?: Record, + methodName: `${'admin' | 'dbAdmin'}.${string}`, +} + +/** + * @internal + */ +export interface LongRunningOperationOptions { + id: string | ((resp: RawDevOpsAPIResponse) => string), + target: string, + legalStates: string[], + defaultPollInterval: number, + options: AstraAdminBlockingOptions | undefined, +} + +/** + * @internal + */ +export interface DevOpsAPIRequestMetadata extends BaseRequestMetadata { + reqOpts: ExecuteDevOpsAPIOperationOptions, + baseUrl: string, + isLongRunning: boolean, + methodName: string, +} + +/** + * @internal + */ +export interface RawDevOpsAPIResponse { + data?: Record, + headers: Record, + status: number, +} + +/** + * @internal + */ +export class DevOpsAPIHttpClient extends BaseHttpClient { + constructor(opts: DevOpsAPIHttpClientOpts) { + super(opts, { + retryAdapter: new DevOpsAPIRetryAdapter(opts.logger), + headersResolverAdapter: DevOpsAPIHeadersResolverAdapter, + timeoutAdapter: DevOpsAPITimeoutAdapter, + }); + } + + public async request(opts: ExecuteDevOpsAPIOperationOptions): Promise { + return this._executeOperation(opts); + } + + public async requestLongRunning(opts: ExecuteDevOpsAPIOperationOptions, lrInfo: LongRunningOperationOptions): Promise { + return this._executeOperation(opts, lrInfo); + } + + private async _executeOperation(opts: ExecuteDevOpsAPIOperationOptions, lrInfo?: LongRunningOperationOptions): Promise { + const metadata = this._mkRequestMetadata(opts.timeoutManager, { + baseUrl: this._baseUrl, + isLongRunning: !!lrInfo && lrInfo.options?.blocking !== false, + methodName: opts.methodName, + reqOpts: opts, + }); + + this._logger.internal.adminCommandStarted?.(metadata); + + try { + const resp = await this._makeRequest(opts); + + if (metadata.isLongRunning) { + const id = (typeof lrInfo!.id === 'function') + ? lrInfo!.id(resp) + : lrInfo!.id; + + await this._awaitStatus(id, opts, lrInfo!, metadata); + } + + this._logger.internal.adminCommandSucceeded?.(metadata, resp.data); + + return resp; + } catch (thrown) { + const err = NonErrorError.asError(thrown); + this._logger.internal.adminCommandFailed?.(metadata, err); + throw err; + } + } + + private async _awaitStatus(id: string, opts: ExecuteDevOpsAPIOperationOptions, lrInfo: LongRunningOperationOptions, metadata: DevOpsAPIRequestMetadata) { + if (lrInfo.options?.blocking === false) { + return; + } + + const pollInterval = lrInfo.options?.pollInterval || lrInfo.defaultPollInterval; + let waiting = false; + + for (let i = 1; i++;) { + /* c8 ignore next 3: exceptional case that can't be manually reproduced */ + if (waiting) { + continue; + } + waiting = true; + + this._logger.internal.adminCommandPolling?.(metadata, pollInterval, i); + + const resp = await this._makeRequest({ + method: HttpMethods.Get, + path: `/databases/${id}`, + methodName: opts.methodName, + timeoutManager: opts.timeoutManager, + }); + + if (resp.data?.status === lrInfo.target) { + break; + } + + /* c8 ignore start: exceptional case that can't be manually reproduced */ + if (!lrInfo.legalStates.includes(resp.data?.status)) { + const okStates = [lrInfo.target, ...lrInfo.legalStates]; + throw new Error(`Created database is not in any legal state [${okStates.join(',')}]; current state: ${resp.data?.status}`); + } + /* c8 ignore end */ + + await new Promise((resolve) => { + setTimeout(() => { + waiting = false; + resolve(); + }, pollInterval); + }); + } + } + + private async _makeRequest(opts: ExecuteDevOpsAPIOperationOptions): Promise { + const url = this._baseUrl + opts.path; + + const resp = await this._request({ + url: url, + method: opts.method, + params: opts.params, + data: JSON.stringify(opts.data), + forceHttp1: true, + timeoutManager: opts.timeoutManager, + }); + + const data = resp.body ? jsonTryParse(resp.body, undefined) : undefined; + + if (resp.status >= 400) { + throw new DevOpsAPIResponseError(resp, data); + } + + return { + data: data, + status: resp.status, + headers: resp.headers, + }; + } +} + +/** + * @internal + */ +const DevOpsAPIHeadersResolverAdapter: HeadersResolverAdapter = { + target: 'devops-api', +}; + +/** + * @internal + */ +const DevOpsAPITimeoutAdapter: TimeoutAdapter = { + mkTimeoutError(info: HTTPRequestInfo, categories: TimedOutCategories): Error { + return new DevOpsAPITimeoutError(info, categories); + }, +}; diff --git a/src/lib/api/clients/index.ts b/src/lib/api/clients/index.ts index ba7f5925..0c8c0215 100644 --- a/src/lib/api/clients/index.ts +++ b/src/lib/api/clients/index.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -export * from './devops-api-http-client.js'; -export * from './data-api-http-client.js'; -export * from './http-client.js'; +export * from './impls/devops-api-http-client.js'; +export * from './impls/data-api-http-client.js'; +export * from './impls/base-http-client.js'; export type * from './types.js'; diff --git a/src/lib/api/clients/types.ts b/src/lib/api/clients/types.ts index 2fb62374..463104be 100644 --- a/src/lib/api/clients/types.ts +++ b/src/lib/api/clients/types.ts @@ -12,28 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import type { FetchCtx } from '@/src/lib/api/fetch/fetcher.js'; import type { HttpMethods } from '@/src/lib/api/constants.js'; import type { Ref } from '@/src/lib/types.js'; -import type { MkTimeoutError, TimeoutManager } from '@/src/lib/api/timeouts/timeouts.js'; -import type { ParsedTimeoutDescriptor } from '@/src/lib/api/timeouts/cfg-handler.js'; -import type { ParsedCaller } from '@/src/client/opts-handlers/caller-cfg-handler.js'; -import type { DataAPIClientEventMap, HierarchicalLogger } from '@/src/lib/index.js'; -import type { ParsedHeadersProviders } from '@/src/lib/headers-providers/root/opts-handlers.js'; - -/** - * @internal - */ -export interface HTTPClientOptions { - baseUrl: string, - baseApiPath?: string | null, - logger: HierarchicalLogger, - fetchCtx: FetchCtx, - caller: ParsedCaller, - additionalHeaders: ParsedHeadersProviders, - timeoutDefaults: ParsedTimeoutDescriptor, - mkTimeoutError: MkTimeoutError, -} /** * @internal @@ -44,15 +24,3 @@ export type HttpMethodStrings = typeof HttpMethods[keyof typeof HttpMethods]; * @internal */ export type KeyspaceRef = Ref; - -/** - * @internal - */ -export interface HTTPRequestInfo { - url: string, - data?: string, - params?: Record, - method: HttpMethodStrings, - timeoutManager: TimeoutManager, - forceHttp1?: boolean, -} diff --git a/src/lib/api/clients/headers-resolver.ts b/src/lib/api/clients/utils/headers-resolver.ts similarity index 76% rename from src/lib/api/clients/headers-resolver.ts rename to src/lib/api/clients/utils/headers-resolver.ts index 0b51a078..d69fa43a 100644 --- a/src/lib/api/clients/headers-resolver.ts +++ b/src/lib/api/clients/utils/headers-resolver.ts @@ -15,19 +15,23 @@ import type { ParsedHeadersProviders } from '@/src/lib/headers-providers/root/opts-handlers.js'; import { type GetHeadersCtx, HeadersProvider, PureHeadersProvider } from '@/src/lib/index.js'; +export interface HeadersResolverAdapter { + target: GetHeadersCtx['for']; +} + /** * @internal */ export class HeadersResolver { private readonly _resolveStrategy: StaticHeadersResolveStrategy | DynamicHeadersResolveStrategy; - constructor(target: 'data-api' | 'devops-api', additionalHeaders: ParsedHeadersProviders, baseHeaders: Record) { - const queue = this._mkResolveQueue(target, additionalHeaders); + constructor(adapter: HeadersResolverAdapter, additionalHeaders: ParsedHeadersProviders, baseHeaders: Record) { + const queue = this._mkResolveQueue(adapter, additionalHeaders); if (queue.length <= 1 && !(queue[0] instanceof HeadersProvider)) { this._resolveStrategy = new StaticHeadersResolveStrategy({ ...baseHeaders, ...queue[0] }); } else { - this._resolveStrategy = new DynamicHeadersResolveStrategy(target, baseHeaders, queue); + this._resolveStrategy = new DynamicHeadersResolveStrategy(adapter.target, baseHeaders, queue); } } @@ -35,28 +39,27 @@ export class HeadersResolver { return this._resolveStrategy.resolve(); } - private _mkResolveQueue(target: 'data-api' | 'devops-api', headerProviders: ParsedHeadersProviders) { - const ctx: GetHeadersCtx = { for: target }; + private _mkResolveQueue(adapter: HeadersResolverAdapter, headerProviders: ParsedHeadersProviders) { + const ctx: GetHeadersCtx = { for: adapter.target }; const ret = [] as (Record | HeadersProvider)[]; - let acc = {} as Record; + let staticAcc = {} as Record; for (const provider of headerProviders.providers) { // noinspection SuspiciousTypeOfGuard -- the lsp is wrong here if (provider instanceof PureHeadersProvider) { - assignNonUndefined(acc, provider.getHeaders(ctx)); + assignNonUndefined(staticAcc, provider.getHeaders(ctx)); } else { - ret.push(acc); - acc = {}; + ret.push(staticAcc); ret.push(provider); + staticAcc = {}; } } + ret.push(staticAcc); - if (Object.keys(acc).length > 0) { - ret.push(acc); - } - - return ret; + return ret.filter((obj) => { + return Object.keys(obj).length > 0; + }); } } @@ -76,7 +79,7 @@ class StaticHeadersResolveStrategy { */ class DynamicHeadersResolveStrategy { constructor( - private readonly _target: 'data-api' | 'devops-api', + private readonly _target: GetHeadersCtx['for'], private readonly _baseHeaders: Record, private readonly _resolveQueue: (Record | HeadersProvider)[], ) {} diff --git a/src/lib/api/clients/utils/request-id.ts b/src/lib/api/clients/utils/request-id.ts new file mode 100644 index 00000000..ed94681f --- /dev/null +++ b/src/lib/api/clients/utils/request-id.ts @@ -0,0 +1,26 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import * as uuid from 'uuid'; + +/** + * @internal + */ +export class RequestId { + private _id?: string; + + get unwrap() { + return (this._id ??= uuid.v4()); + } +} diff --git a/src/lib/api/retries/adapters/data-api.ts b/src/lib/api/retries/adapters/data-api.ts index ff75ef58..e1d49645 100644 --- a/src/lib/api/retries/adapters/data-api.ts +++ b/src/lib/api/retries/adapters/data-api.ts @@ -14,18 +14,21 @@ import type { RetryAdapter } from '@/src/lib/api/retries/manager.js'; import { DataAPIRetryContext } from '@/src/lib/api/retries/contexts/data-api.js'; -import type { DataAPIRequestInfo } from '@/src/lib/api/clients/index.js'; +import type { DataAPIRequestMetadata } from '@/src/lib/api/clients/index.js'; import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; import { type CommandEventMap, DataAPITimeoutError } from '@/src/documents/index.js'; import type { HierarchicalLogger } from '@/src/lib/index.js'; -export class DataAPIRetryAdapter implements RetryAdapter { +/** + * @internal + */ +export class DataAPIRetryAdapter implements RetryAdapter { public readonly policy = 'dataAPIPolicy'; public readonly TimeoutError = DataAPITimeoutError; public constructor(private readonly _logger: HierarchicalLogger) {} - public mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: DataAPIRequestInfo): DataAPIRetryContext { + public mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: DataAPIRequestMetadata): DataAPIRetryContext { return new DataAPIRetryContext(ctx, duration, error, req); } diff --git a/src/lib/api/retries/adapters/devops-api.ts b/src/lib/api/retries/adapters/devops-api.ts index 74fd3c58..5b92684e 100644 --- a/src/lib/api/retries/adapters/devops-api.ts +++ b/src/lib/api/retries/adapters/devops-api.ts @@ -13,21 +13,24 @@ // limitations under the License. import type { RetryAdapter } from '@/src/lib/api/retries/manager.js'; -import type { DevOpsAPIRequestInfo } from '@/src/lib/api/clients/index.js'; +import type { DevOpsAPIRequestMetadata } from '@/src/lib/api/clients/index.js'; import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; import type { HierarchicalLogger } from '@/src/lib/index.js'; import type { AdminCommandEventMap } from '@/src/administration/index.js'; import { DevOpsAPITimeoutError } from '@/src/administration/index.js'; import { DevOpsAPIRetryContext } from '@/src/lib/api/retries/contexts/devops-api.js'; -export class DevOpsAPIRetryAdapter implements RetryAdapter { +/** + * @internal + */ +export class DevOpsAPIRetryAdapter implements RetryAdapter { public readonly policy = 'devOpsAPIPolicy'; public readonly TimeoutError = DevOpsAPITimeoutError; public constructor(private readonly _logger: HierarchicalLogger) {} - public mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: DevOpsAPIRequestInfo): DevOpsAPIRetryContext { - return new DevOpsAPIRetryContext(ctx, duration, error, req); + public mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, metadata: DevOpsAPIRequestMetadata): DevOpsAPIRetryContext { + return new DevOpsAPIRetryContext(ctx, duration, error, metadata); } public emitRetryEvent(): void { diff --git a/src/lib/api/retries/contexts/base.ts b/src/lib/api/retries/contexts/base.ts index 95ae6542..c47cda1b 100644 --- a/src/lib/api/retries/contexts/base.ts +++ b/src/lib/api/retries/contexts/base.ts @@ -34,6 +34,11 @@ export abstract class RetryContext { public readonly requestId: string; + /** + * Should not be instantiated by the user directly. + * + * @internal + */ protected constructor(ctx: InternalRetryContext, duration: number, error: Error) { this.retryCount = ctx.retryCount; this.isSafelyRetryable = ctx.isSafelyRetryable; diff --git a/src/lib/api/retries/contexts/data-api.ts b/src/lib/api/retries/contexts/data-api.ts index f5a87bc9..1e2a85ec 100644 --- a/src/lib/api/retries/contexts/data-api.ts +++ b/src/lib/api/retries/contexts/data-api.ts @@ -14,7 +14,7 @@ import { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; -import type { DataAPIRequestInfo } from '@/src/lib/api/clients/index.js'; +import type { DataAPIRequestMetadata } from '@/src/lib/api/clients/index.js'; import type { CommandEventTarget } from '@/src/documents/index.js'; export class DataAPIRetryContext extends RetryContext { @@ -26,7 +26,12 @@ export class DataAPIRetryContext extends RetryContext { public readonly commandName: string; - public constructor(ctx: InternalRetryContext, duration: number, error: Error, req: DataAPIRequestInfo) { + /** + * Should not be instantiated by the user directly. + * + * @internal + */ + public constructor(ctx: InternalRetryContext, duration: number, error: Error, req: DataAPIRequestMetadata) { super(ctx, duration, error); this.target = req.target; this.command = req.command; diff --git a/src/lib/api/retries/contexts/devops-api.ts b/src/lib/api/retries/contexts/devops-api.ts index b67c6463..30efef2c 100644 --- a/src/lib/api/retries/contexts/devops-api.ts +++ b/src/lib/api/retries/contexts/devops-api.ts @@ -14,7 +14,7 @@ import { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; import type { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; -import type { DevOpsAPIRequestInfo, HttpMethodStrings } from '@/src/lib/api/clients/index.js'; +import type { DevOpsAPIRequestMetadata, HttpMethodStrings } from '@/src/lib/api/clients/index.js'; import { EqualityProof } from '@/src/lib/utils.js'; export class DevOpsAPIRetryContext extends RetryContext { @@ -26,11 +26,16 @@ export class DevOpsAPIRetryContext extends RetryContext { public readonly path: string; - public constructor(ctx: InternalRetryContext, duration: number, error: Error, info: DevOpsAPIRequestInfo) { + /** + * Should not be instantiated by the user directly. + * + * @internal + */ + public constructor(ctx: InternalRetryContext, duration: number, error: Error, metadata: DevOpsAPIRequestMetadata) { super(ctx, duration, error); - this.method = info.method; - this.methodName = info.methodName; - this.path = info.path; + this.method = metadata.reqOpts.method; + this.methodName = metadata.methodName; + this.path = metadata.reqOpts.path; } } diff --git a/src/lib/api/retries/contexts/internal.ts b/src/lib/api/retries/contexts/internal.ts index 73378c5f..966294d9 100644 --- a/src/lib/api/retries/contexts/internal.ts +++ b/src/lib/api/retries/contexts/internal.ts @@ -14,6 +14,9 @@ import type { TimeoutDescriptor } from '@/src/lib/index.js'; +/** + * @internal + */ export class InternalRetryContext { public retryCount = 0; diff --git a/src/lib/api/retries/manager.ts b/src/lib/api/retries/manager.ts index 2f9f2c30..c6560521 100644 --- a/src/lib/api/retries/manager.ts +++ b/src/lib/api/retries/manager.ts @@ -22,6 +22,9 @@ import { NonErrorError } from '@/src/lib/errors.js'; import type { SomeDoc } from '@/src/documents/index.js'; import { DataAPIError } from '@/src/documents/index.js'; +/** + * @internal + */ export interface RetryAdapter { policy: Exclude, mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: ReqInfo): Ctx, @@ -30,6 +33,9 @@ export interface RetryAdapter { TimeoutError: SomeConstructor, } +/** + * @internal + */ export abstract class RetryManager { public static mk(isSafelyRetryable: boolean, opts: CommandOptions, adapter: RetryAdapter, basePolicy: RetryConfig | undefined): RetryManager { if (opts.retry ?? basePolicy) { @@ -46,6 +52,9 @@ export abstract class RetryManager { public abstract run(info: ReqInfo, started: number, reqId: string, tm: TimeoutManager, fn: () => Promise): Promise; } +/** + * @internal + */ class RetryingImpl extends RetryManager { private readonly _adapter: RetryAdapter; @@ -105,6 +114,9 @@ class RetryingImpl extends RetryManager { public override run(_: never, __: never, ___: never, ____: never, fn: () => Promise) { return fn(); diff --git a/src/lib/api/retries/policy.ts b/src/lib/api/retries/policy.ts index d4233381..a8577fc8 100644 --- a/src/lib/api/retries/policy.ts +++ b/src/lib/api/retries/policy.ts @@ -16,9 +16,8 @@ import { asMut } from '@/src/lib/utils.js'; import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; export abstract class RetryPolicy { - public static readonly Default: typeof DefaultRetryPolicy; - - public static readonly Never: typeof NeverRetryPolicy; + public static readonly Default: typeof RetryPolicy; + public static readonly Never: typeof RetryPolicy; public abstract maxRetries(ctx: Ctx): number; @@ -37,6 +36,9 @@ export abstract class RetryPolicy { public onRetryDeclined(_: Ctx): void {} } +/** + * @internal + */ class DefaultRetryPolicy extends RetryPolicy { public maxRetries(): number { return 3; @@ -47,6 +49,9 @@ class DefaultRetryPolicy extends RetryPolicy { } } +/** + * @internal + */ class NeverRetryPolicy extends RetryPolicy { public maxRetries(): number { return 0; diff --git a/src/lib/api/ser-des/ser-des.ts b/src/lib/api/ser-des/ser-des.ts index d942811a..3a5a5e92 100644 --- a/src/lib/api/ser-des/ser-des.ts +++ b/src/lib/api/ser-des/ser-des.ts @@ -135,7 +135,7 @@ export abstract class SerDes = any, DesCtx extend ) { [this._serializers, this._deserializers] = processCodecs(this._cfg.codecs.flat()); } - + public serialize(obj: unknown, target: SerDesTarget = SerDesTarget.Record): [unknown, boolean] { if (obj === null || obj === undefined) { return [obj, false]; diff --git a/src/lib/api/timeouts/timeouts.ts b/src/lib/api/timeouts/timeouts.ts index a7263225..357789a2 100644 --- a/src/lib/api/timeouts/timeouts.ts +++ b/src/lib/api/timeouts/timeouts.ts @@ -263,7 +263,9 @@ export interface WithTimeout { /** * @internal */ -export type MkTimeoutError = (info: HTTPRequestInfo, timeoutType: TimedOutCategories) => Error; +export interface TimeoutAdapter { + mkTimeoutError(info: HTTPRequestInfo, timeoutType: TimedOutCategories): Error, +} /** * @internal @@ -296,7 +298,7 @@ export class Timeouts { public readonly baseTimeouts: TimeoutDescriptor; - constructor(private readonly _mkTimeoutError: MkTimeoutError, baseTimeouts: ParsedTimeoutDescriptor) { + constructor(private readonly _adapter: TimeoutAdapter, baseTimeouts: ParsedTimeoutDescriptor) { this.baseTimeouts = TimeoutCfgHandler.concat([Timeouts.Default, baseTimeouts]) as TimeoutDescriptor; } @@ -384,7 +386,7 @@ export class Timeouts { advance: (info) => { const advanced = advance() as any; const timeoutType = advanced[1]; - advanced[1] = () => this._mkTimeoutError(info, timeoutType); + advanced[1] = () => this._adapter.mkTimeoutError(info, timeoutType); return advanced; }, }; diff --git a/src/lib/logging/base-event.ts b/src/lib/logging/base-event.ts index 75b59e07..befc1bf2 100644 --- a/src/lib/logging/base-event.ts +++ b/src/lib/logging/base-event.ts @@ -14,6 +14,7 @@ import type { DataAPIClientEvent } from '@/src/lib/index.js'; import type { SomeDoc } from '@/src/documents/index.js'; +import type { RequestId } from '@/src/lib/api/clients/utils/request-id.js'; /** * @internal @@ -213,9 +214,9 @@ export abstract class BaseClientEvent { * * @internal */ - protected constructor(name: string, requestId: string, extra: Record | undefined) { + protected constructor(name: string, requestId: RequestId, extra: Record | undefined) { this.name = name; - this.requestId = requestId; + this.requestId = requestId.unwrap; this.extraLogInfo = (extra && Object.keys(extra).length > 0) ? extra : undefined; this.timestamp = new Date(); diff --git a/src/lib/types.ts b/src/lib/types.ts index b562b27f..fbcc48ce 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -15,7 +15,7 @@ import type { DataAPIEnvironments } from '@/src/lib/constants.js'; import type { TimeoutDescriptor } from '@/src/lib/api/index.js'; -import { RetryConfig } from '@/src/lib/api/retries/config.js'; +import type { RetryConfig } from '@/src/lib/api/retries/config.js'; /** * Shorthand type to represent some nullish value. diff --git a/tests/integration/lib/api/clients/data-api-http-client.test.ts b/tests/integration/lib/api/clients/data-api-http-client.test.ts index 4b0d9eca..a34bb431 100644 --- a/tests/integration/lib/api/clients/data-api-http-client.test.ts +++ b/tests/integration/lib/api/clients/data-api-http-client.test.ts @@ -15,7 +15,7 @@ import { Cfg, describe, initTestObjects, it, parallel } from '@/tests/testlib/index.js'; import assert from 'assert'; -import type { DataAPIHttpClient } from '@/src/lib/api/clients/data-api-http-client.js'; +import type { DataAPIHttpClient } from '@/src/lib/api/clients/impls/data-api-http-client.js'; import { DataAPIHttpError, DataAPIResponseError } from '@/src/documents/index.js'; describe('integration.lib.api.clients.data-api-http-client', ({ db }) => { diff --git a/tests/unit/lib/api/clients/headers-resolver.test.ts b/tests/unit/lib/api/clients/headers-resolver.test.ts index bf89c219..cfe7f470 100644 --- a/tests/unit/lib/api/clients/headers-resolver.test.ts +++ b/tests/unit/lib/api/clients/headers-resolver.test.ts @@ -14,7 +14,7 @@ import assert from 'assert'; import { describe, it } from '@/tests/testlib/index.js'; -import { HeadersResolver } from '@/src/lib/api/clients/headers-resolver.js'; +import { HeadersResolver } from '@/src/lib/api/clients/utils/headers-resolver.js'; import { EmbeddingAPIKeyHeaderProvider, HeadersProvider, TokenProvider } from '@/src/lib/index.js'; import { DEFAULT_DATA_API_AUTH_HEADER } from '@/src/lib/api/constants.js'; import fc from 'fast-check'; @@ -41,7 +41,7 @@ describe('unit.lib.api.clients.headers-resolver', () => { TokenProvider.opts.parse('new').toHeadersProvider(), ]); - const hr = new HeadersResolver('data-api', providers, { + const hr = new HeadersResolver({ target: 'data-api' }, providers, { 'x-foo': 'bar', 'car': 'bus', }); @@ -69,7 +69,7 @@ describe('unit.lib.api.clients.headers-resolver', () => { rawHeaders.map((h) => HeadersProvider.opts.fromObj.parse(h)), ); - const hr = new HeadersResolver('data-api', providers, baseHeaders); + const hr = new HeadersResolver({ target: 'data-api' }, providers, baseHeaders); const headers = hr.resolve(); const expected = mergeObjsIgnoringUndefined(baseHeaders, ...rawHeaders); @@ -105,7 +105,7 @@ describe('unit.lib.api.clients.headers-resolver', () => { TokenProvider.opts.parse('new').toHeadersProvider(), ]); - const hr = new HeadersResolver('data-api', providers, { + const hr = new HeadersResolver({ target: 'data-api' }, providers, { 'x-foo': 'bar', 'car': 'bus', }); @@ -146,7 +146,7 @@ describe('unit.lib.api.clients.headers-resolver', () => { }), ); - const hr = new HeadersResolver('data-api', providers, baseHeaders); + const hr = new HeadersResolver({ target: 'data-api' }, providers, baseHeaders); const headers = hr.resolve(); const expected = mergeObjsIgnoringUndefined(baseHeaders, ...rawHeaders); diff --git a/tests/unit/lib/api/timeouts.test.ts b/tests/unit/lib/api/timeouts.test.ts index a2d94cde..ea589562 100644 --- a/tests/unit/lib/api/timeouts.test.ts +++ b/tests/unit/lib/api/timeouts.test.ts @@ -28,7 +28,7 @@ describe('unit.lib.api.timeouts', () => { } } - const timeouts = new Timeouts((info, timeoutType) => new TimeoutError(info, timeoutType), Timeouts.Default); + const timeouts = new Timeouts({ mkTimeoutError: (info, timeoutType) => new TimeoutError(info, timeoutType) }, Timeouts.Default); const info = (timeoutManager: TimeoutManager) => ({ timeoutManager }) as HTTPRequestInfo; describe('single', () => { From 496b13dc4cb0d721656e0d5a1053f389929dea85 Mon Sep 17 00:00:00 2001 From: toptobes Date: Sun, 18 May 2025 22:58:08 +0530 Subject: [PATCH 03/11] fixed inevitable bugs --- src/db/db.ts | 2 +- .../api/clients/impls/data-api-http-client.ts | 43 +++++++++++------- src/lib/api/clients/utils/headers-resolver.ts | 2 +- .../administration/lifecycle.test.ts | 45 +++++++++++++------ .../client/data-api-client.test.ts | 15 +++---- tests/integration/db/db.test.ts | 2 +- tests/unit/administration/admin.test.ts | 10 ++--- tests/unit/client/data-api-client.test.ts | 16 +++---- tests/unit/db/db.test.ts | 12 ++--- 9 files changed, 86 insertions(+), 61 deletions(-) diff --git a/src/db/db.ts b/src/db/db.ts index 3def4b47..2c1f9d83 100644 --- a/src/db/db.ts +++ b/src/db/db.ts @@ -177,7 +177,7 @@ export class Db extends HierarchicalLogger { : endpoint; this.#httpClient = new DataAPIHttpClient({ - baseUrl: endpoint + (this.#defaultOpts.dbOptions.dataApiPath || DEFAULT_DATA_API_PATHS[rootOpts.environment]), + baseUrl: endpoint + '/' + (this.#defaultOpts.dbOptions.dataApiPath || DEFAULT_DATA_API_PATHS[rootOpts.environment]), tokenProvider: this.#defaultOpts.dbOptions.token, logger: this, fetchCtx: rootOpts.fetchCtx, diff --git a/src/lib/api/clients/impls/data-api-http-client.ts b/src/lib/api/clients/impls/data-api-http-client.ts index 713f33aa..ef9e6445 100644 --- a/src/lib/api/clients/impls/data-api-http-client.ts +++ b/src/lib/api/clients/impls/data-api-http-client.ts @@ -43,7 +43,7 @@ import type { TimeoutAdapter } from '@/src/lib/api/timeouts/timeouts.js'; import type { ParsedAdminOptions } from '@/src/client/opts-handlers/admin-opts-handler.js'; import type { DbAdmin } from '@/src/administration/index.js'; import { NonErrorError } from '@/src/lib/errors.js'; -import { isNonEmpty } from '@/src/lib/utils.js'; +import { isNonEmpty, isNullish } from '@/src/lib/utils.js'; import { DataAPIRetryAdapter } from '@/src/lib/api/retries/adapters/data-api.js'; import type { HeadersResolverAdapter } from '@/src/lib/api/clients/utils/headers-resolver.js'; import type { DevOpsAPIRequestMetadata, ExecuteDevOpsAPIOperationOptions } from '@/src/lib/api/clients/index.js'; @@ -112,8 +112,9 @@ export class DataAPIHttpClient extends BaseH timeoutAdapter: DataAPITimeoutAdapter, }); - this.target = new InternalRequestTarget(opts.baseUrl, opts.keyspace); + this.target = new InternalRequestTarget(opts); this.emissionStrategy = opts.emissionStrategy(opts.logger.internal, this._baseUrl); + this.bigNumHack = opts.bigNumHack; this.#baseOpts = opts; } @@ -188,7 +189,7 @@ export class DataAPIHttpClient extends BaseH /* c8 ignore next: exceptional case */ : {}; - clonedData = data; + clonedData = structuredClone(data); const warnings = data?.status?.warnings ?? []; @@ -206,7 +207,7 @@ export class DataAPIHttpClient extends BaseH errors: data.errors, }; - this.emissionStrategy.emitCommandSucceeded(metadata, data, opts); + this.emissionStrategy.emitCommandSucceeded(metadata, clonedData!, opts); return respData; } catch (thrown) { const err = NonErrorError.asError(thrown); @@ -222,26 +223,38 @@ export class DataAPIHttpClient extends BaseH class InternalRequestTarget { private _cached: CommandEventTarget; - constructor(private readonly _baseUrl: string, private readonly _keyspace: KeyspaceRef, coll?: string, table?: string) { - this._cached = this._buildCommandEventTarget(this._keyspace.ref, coll, table); + private readonly _baseUrl: string; + private readonly _keyspace: KeyspaceRef; + + constructor(opts: DataAPIHttpClientOpts) { + this._baseUrl = opts.baseUrl; + this._keyspace = opts.keyspace; + this._cached = this._buildCommandEventTarget(this._keyspace.ref, opts.collection, opts.table); } - public forRequest(options: ExecuteDataAPICommandOptions): Readonly { + public forRequest(opts: ExecuteDataAPICommandOptions): Readonly { this._rebuildCacheIfKeyspaceChanged(); - const keyspace = options.keyspace === undefined ? this._cached.keyspace : options.keyspace; + const keyspace = opts.keyspace === undefined ? this._cached.keyspace : opts.keyspace; if (keyspace === undefined) { throw new Error('Db is missing a working keyspace; set one with client.db(..., { keyspace }) or db.useKeyspace()'); } - return this._buildCommandEventTarget(keyspace, options.collection, options.table); + if (keyspace === this._cached.keyspace) { + if ((!opts.collection && !opts.table) || (opts.collection === this._cached.collection && opts.table === this._cached.table)) { + return this._cached; + } + } + + return this._buildCommandEventTarget(keyspace, opts.collection, opts.table); } - private _buildCommandEventTarget(keyspace: string | nullish, coll?: string, table?: string) { + private _buildCommandEventTarget(keyspace: string | nullish, coll: string | undefined, table: string | undefined) { if (coll && table) { - throw new Error('Both `table` and `collection` options may not be set at once when making a request to the Data API'); + throw new Error('Can\'t provide both `table` and `collection` as options to DataAPIHttpClient.executeCommand()'); } + const tOrC = coll || table || this._cached?.collection || this._cached?.table; const keyspacePath = keyspace ? `/${keyspace}` : ''; @@ -251,14 +264,14 @@ class InternalRequestTarget { url: this._baseUrl + keyspacePath + collectionPath, } as CommandEventTarget; - if (keyspace) { + if (!isNullish(keyspace)) { target.keyspace = keyspace; if (tOrC) { - if (tOrC === coll || tOrC === this._cached.collection) { - target.collection = coll; + if (tOrC === coll || tOrC === this._cached?.collection) { + target.collection = tOrC; } else { - target.table = table; + target.table = tOrC; } } } else if (tOrC) { diff --git a/src/lib/api/clients/utils/headers-resolver.ts b/src/lib/api/clients/utils/headers-resolver.ts index d69fa43a..6bbaa1c9 100644 --- a/src/lib/api/clients/utils/headers-resolver.ts +++ b/src/lib/api/clients/utils/headers-resolver.ts @@ -58,7 +58,7 @@ export class HeadersResolver { ret.push(staticAcc); return ret.filter((obj) => { - return Object.keys(obj).length > 0; + return (Object.keys(obj).length > 0) || (obj instanceof HeadersProvider); }); } } diff --git a/tests/integration/administration/lifecycle.test.ts b/tests/integration/administration/lifecycle.test.ts index 37f3c08d..8ceea11e 100644 --- a/tests/integration/administration/lifecycle.test.ts +++ b/tests/integration/administration/lifecycle.test.ts @@ -18,6 +18,7 @@ import { DevOpsAPIResponseError } from '@/src/administration/index.js'; import { background, Cfg, initTestObjects, it } from '@/tests/testlib/index.js'; import { DEFAULT_KEYSPACE, HttpMethods } from '@/src/lib/api/constants.js'; import { buildAstraEndpoint } from '@/src/lib/utils.js'; +import { RequestId } from '@/src/lib/api/clients/utils/request-id.js'; background('(ADMIN) (LONG) (NOT-DEV) (ASTRA) integration.administration.lifecycle', () => { it('works', async () => { @@ -133,14 +134,18 @@ background('(ADMIN) (LONG) (NOT-DEV) (ASTRA) integration.administration.lifecycl } { - await asyncDbAdmin._httpClient._awaitStatus(asyncDb.id, {} as any, { + await asyncDbAdmin._httpClient._awaitStatus(asyncDb.id, { + timeoutManager: asyncDbAdmin._httpClient.tm.multipart('generalMethodTimeoutMs', { timeout: 0 }), + }, { target: 'ACTIVE', legalStates: ['PENDING', 'INITIALIZING'], defaultPollInterval: 10000, id: null!, options: undefined, - timeoutManager: asyncDbAdmin._httpClient.tm.multipart('generalMethodTimeoutMs', { timeout: 0 }), - }, 0); + }, { + requestId: new RequestId(), + reqOpts: {}, + }); } for (const [dbAdmin, db, dbType] of [[syncDbAdmin, syncDb, 'sync'], [asyncDbAdmin, asyncDb, 'async']] as const) { @@ -184,14 +189,18 @@ background('(ADMIN) (LONG) (NOT-DEV) (ASTRA) integration.administration.lifecycl { await syncDbAdmin.createKeyspace('other_keyspace'); - await asyncDbAdmin._httpClient._awaitStatus(asyncDb.id, {} as any, { + await asyncDbAdmin._httpClient._awaitStatus(asyncDb.id, { + timeoutManager: asyncDbAdmin._httpClient.tm.multipart('generalMethodTimeoutMs', { timeout: 0 }), + }, { target: 'ACTIVE', legalStates: ['MAINTENANCE'], - defaultPollInterval: 1000, + defaultPollInterval: 10000, id: null!, options: undefined, - timeoutManager: asyncDbAdmin._httpClient.tm.multipart('generalMethodTimeoutMs', { timeout: 0 }), - }, 0); + }, { + requestId: new RequestId(), + reqOpts: {}, + }); } for (const [dbAdmin, db, dbType] of [[syncDbAdmin, syncDb, 'sync'], [asyncDbAdmin, asyncDb, 'async']] as const) { @@ -209,14 +218,18 @@ background('(ADMIN) (LONG) (NOT-DEV) (ASTRA) integration.administration.lifecycl { await syncDbAdmin.dropKeyspace('other_keyspace', { blocking: true }); - await asyncDbAdmin._httpClient._awaitStatus(asyncDb.id, {} as any, { + await asyncDbAdmin._httpClient._awaitStatus(asyncDb.id, { + timeoutManager: asyncDbAdmin._httpClient.tm.multipart('generalMethodTimeoutMs', { timeout: 0 }), + }, { target: 'ACTIVE', legalStates: ['MAINTENANCE'], - defaultPollInterval: 1000, + defaultPollInterval: 10000, id: null!, options: undefined, - timeoutManager: asyncDbAdmin._httpClient.tm.multipart('generalMethodTimeoutMs', { timeout: 0 }), - }, 0); + }, { + requestId: new RequestId(), + reqOpts: {}, + }); } for (const [dbAdmin, db, dbType] of [[syncDbAdmin, syncDb, 'sync'], [asyncDbAdmin, asyncDb, 'async']] as const) { @@ -236,14 +249,18 @@ background('(ADMIN) (LONG) (NOT-DEV) (ASTRA) integration.administration.lifecycl { await admin.dropDatabase(syncDb, { timeout: 1440000 }); - await asyncDbAdmin._httpClient._awaitStatus(asyncDb.id, {} as any, { + await asyncDbAdmin._httpClient._awaitStatus(asyncDb.id, { + timeoutManager: asyncDbAdmin._httpClient.tm.multipart('generalMethodTimeoutMs', { timeout: 0 }), + }, { target: 'TERMINATED', legalStates: ['TERMINATING'], defaultPollInterval: 10000, id: null!, options: undefined, - timeoutManager: asyncDbAdmin._httpClient.tm.multipart('generalMethodTimeoutMs', { timeout: 0 }), - }, 0); + }, { + requestId: new RequestId(), + reqOpts: {}, + }); } for (const [dbAdmin, dbType] of [[syncDbAdmin, 'sync'], [asyncDbAdmin, 'async']] as const) { diff --git a/tests/integration/client/data-api-client.test.ts b/tests/integration/client/data-api-client.test.ts index 38d755fb..66e78e99 100644 --- a/tests/integration/client/data-api-client.test.ts +++ b/tests/integration/client/data-api-client.test.ts @@ -165,7 +165,7 @@ describe('integration.client.data-api-client', () => { assert.deepStrictEqual(stderr, []); }); - it('should allow monitoring of failed commands when enabled', async () => { + it('should allow monitoring of failed commands when enabled', async (key) => { const client = new DataAPIClient(Cfg.DbToken, { environment: Cfg.DbEnvironment }); const db = client.db(Cfg.DbUrl, { logging: ['all', { events: 'commandSucceeded', emits: ['event', 'stdout'] }], keyspace: DEFAULT_KEYSPACE }); const collection = db.collection(Cfg.DefaultCollectionName); @@ -173,7 +173,7 @@ describe('integration.client.data-api-client', () => { let startedEvent: CommandStartedEvent | undefined; let failedEvent: CommandFailedEvent | undefined; - await collection.insertOne({ _id: 0, name: 'Oasis' }); + await collection.insertOne({ _id: key, name: 'Oasis' }); stdout = []; stderr = []; @@ -189,12 +189,7 @@ describe('integration.client.data-api-client', () => { failedEvent = event; }); - try { - await collection.insertOne({ _id: 0, name: 'Oasis' }); - assert.fail('should have thrown an error'); - } catch (e) { - assert.ok(e instanceof Error); - } + await assert.rejects(() => collection.insertOne({ _id: key, name: 'Oasis' })); assert.ok(startedEvent instanceof CommandStartedEvent); assert.ok(failedEvent instanceof CommandFailedEvent); @@ -214,8 +209,8 @@ describe('integration.client.data-api-client', () => { assert.deepStrictEqual(startedEvent.timeout, { generalMethodTimeoutMs: Timeouts.Default.generalMethodTimeoutMs, requestTimeoutMs: Timeouts.Default.requestTimeoutMs }); assert.ok(failedEvent.duration > 0); - assert.deepStrictEqual(startedEvent.command, { insertOne: { document: { _id: 0, name: 'Oasis' } } }); - assert.deepStrictEqual(failedEvent.command, { insertOne: { document: { _id: 0, name: 'Oasis' } } }); + assert.deepStrictEqual(startedEvent.command, { insertOne: { document: { _id: key, name: 'Oasis' } } }); + assert.deepStrictEqual(failedEvent.command, { insertOne: { document: { _id: key, name: 'Oasis' } } }); assert.ok(failedEvent.error instanceof DataAPIResponseError); assert.strictEqual(failedEvent.error.errorDescriptors.length, 1); diff --git a/tests/integration/db/db.test.ts b/tests/integration/db/db.test.ts index ae2857b7..c25526db 100644 --- a/tests/integration/db/db.test.ts +++ b/tests/integration/db/db.test.ts @@ -220,7 +220,7 @@ parallel('integration.db.db', { drop: 'colls:after' }, ({ db }) => { it('should throw an error if no keyspace set', async () => { const { db } = initTestObjects(); db.useKeyspace(undefined!); - await assert.rejects(() => db.command({ findEmbeddingProviders: {} }), { message: 'Db is missing a required keyspace; be sure to set one with client.db(..., { keyspace }), or db.useKeyspace()' }); + await assert.rejects(() => db.command({ findEmbeddingProviders: {} }), { message: 'Db is missing a working keyspace; set one with client.db(..., { keyspace }) or db.useKeyspace()' }); }); it('should not throw an error if no keyspace set but keyspace: null', async () => { diff --git a/tests/unit/administration/admin.test.ts b/tests/unit/administration/admin.test.ts index 9b12f873..5e8db98d 100644 --- a/tests/unit/administration/admin.test.ts +++ b/tests/unit/administration/admin.test.ts @@ -15,7 +15,7 @@ import assert from 'assert'; import { AstraAdmin } from '@/src/administration/index.js'; import { StaticTokenProvider, TokenProvider } from '@/src/lib/index.js'; -import type { AdminOptions, DbOptions } from '@/src/client/index.js'; +import type { AdminOptions, DbOptions } from '@/src/client/index.js'; import { DataAPIClient } from '@/src/client/index.js'; import { describe, it } from '@/tests/testlib/index.js'; import { DEFAULT_DEVOPS_API_ENDPOINTS } from '@/src/lib/api/constants.js'; @@ -33,13 +33,13 @@ describe('unit.administration.admin', () => { it('should properly construct an AstraAdmin object', () => { const admin = new AstraAdmin(internalOps(), AdminOptsHandler.empty); assert.ok(admin); - assert.strictEqual(admin._httpClient.baseUrl, DEFAULT_DEVOPS_API_ENDPOINTS.prod); + assert.strictEqual(admin._httpClient._baseUrl, DEFAULT_DEVOPS_API_ENDPOINTS.prod); }); it('should properly construct an AstraAdmin object with a custom astra environment', () => { const admin = new AstraAdmin(internalOps({}, { astraEnv: 'dev' }), AdminOptsHandler.empty); assert.ok(admin); - assert.strictEqual(admin._httpClient.baseUrl, 'https://api.dev.cloud.datastax.com/v2'); + assert.strictEqual(admin._httpClient._baseUrl, 'https://api.dev.cloud.datastax.com/v2'); }); it('should not throw on missing token', () => { @@ -50,7 +50,7 @@ describe('unit.administration.admin', () => { it('should allow admin construction using default options', () => { const admin = new AstraAdmin(internalOps({}, { endpointUrl: 'https://api.astra.datastax.com/v1' }), AdminOptsHandler.empty); assert.ok(admin); - assert.strictEqual(admin._httpClient.baseUrl, 'https://api.astra.datastax.com/v1'); + assert.strictEqual(admin._httpClient._baseUrl, 'https://api.astra.datastax.com/v1'); }); it('should allow admin construction, overwriting options', () => { @@ -59,7 +59,7 @@ describe('unit.administration.admin', () => { astraEnv: 'dev', })); assert.ok(admin); - assert.strictEqual(admin._httpClient.baseUrl, 'https://api.dev.cloud.datastax.com/v2'); + assert.strictEqual(admin._httpClient._baseUrl, 'https://api.dev.cloud.datastax.com/v2'); }); }); diff --git a/tests/unit/client/data-api-client.test.ts b/tests/unit/client/data-api-client.test.ts index 27a36ecb..639be997 100644 --- a/tests/unit/client/data-api-client.test.ts +++ b/tests/unit/client/data-api-client.test.ts @@ -144,22 +144,22 @@ describe('unit.client.data-api-client', () => { it('uses http2 by default', function () { const client = new DataAPIClient('dummy-token', { httpOptions: { client: 'fetch-h2', fetchH2 } }); const httpClient = client.db(Cfg.DbUrl)._httpClient; - assert.ok(httpClient.fetchCtx.ctx instanceof FetchH2); - assert.ok(httpClient.fetchCtx.ctx._http1 !== httpClient.fetchCtx.ctx._preferred); + assert.ok(httpClient._fetchCtx.ctx instanceof FetchH2); + assert.ok(httpClient._fetchCtx.ctx._http1 !== httpClient._fetchCtx.ctx._preferred); }); it('uses http2 when forced', function () { const client = new DataAPIClient('dummy-token', { httpOptions: { client: 'fetch-h2', fetchH2, preferHttp2: true } }); const httpClient = client.db(Cfg.DbUrl)._httpClient; - assert.ok(httpClient.fetchCtx.ctx instanceof FetchH2); - assert.ok(httpClient.fetchCtx.ctx._http1 !== httpClient.fetchCtx.ctx._preferred); + assert.ok(httpClient._fetchCtx.ctx instanceof FetchH2); + assert.ok(httpClient._fetchCtx.ctx._http1 !== httpClient._fetchCtx.ctx._preferred); }); it('uses http1.1 when forced', () => { const client = new DataAPIClient('dummy-token', { httpOptions: { client: 'fetch-h2', fetchH2, preferHttp2: false } }); const httpClient = client.db(Cfg.DbUrl)._httpClient; - assert.ok(httpClient.fetchCtx.ctx instanceof FetchH2); - assert.ok(httpClient.fetchCtx.ctx._http1 === httpClient.fetchCtx.ctx._preferred); + assert.ok(httpClient._fetchCtx.ctx instanceof FetchH2); + assert.ok(httpClient._fetchCtx.ctx._http1 === httpClient._fetchCtx.ctx._preferred); }); }); @@ -176,8 +176,8 @@ describe('unit.client.data-api-client', () => { }); const httpClient = client.db(Cfg.DbUrl)._httpClient; - assert.strictEqual(await httpClient.fetchCtx.ctx.fetch(null!), 3); - assert.strictEqual(httpClient.fetchCtx.ctx.close, undefined); + assert.strictEqual(await httpClient._fetchCtx.ctx.fetch(null!), 3); + assert.strictEqual(httpClient._fetchCtx.ctx.close, undefined); }); it('should throw if fetcher not properly implemented', () => { diff --git a/tests/unit/db/db.test.ts b/tests/unit/db/db.test.ts index 7d5d3b61..a1c5d034 100644 --- a/tests/unit/db/db.test.ts +++ b/tests/unit/db/db.test.ts @@ -36,13 +36,13 @@ describe('unit.db.db', () => { it('should allow db construction from endpoint', () => { const db = new Db(internalOps(), 'https://id-region.apps.astra.datastax.com', DbOptsHandler.empty); assert.ok(db); - assert.strictEqual(db._httpClient.baseUrl, `https://id-region.apps.astra.datastax.com/${DEFAULT_DATA_API_PATHS.astra}`); + assert.strictEqual(db._httpClient._baseUrl, `https://id-region.apps.astra.datastax.com/${DEFAULT_DATA_API_PATHS.astra}`); }); it('should trim trailing slash in endpoints', () => { for (let i = 0; i < 10; i++) { const db = new Db(internalOps(), `https://id-region.apps.astra.datastax.com${'/'.repeat(i)}`, DbOptsHandler.empty); - assert.strictEqual(db._httpClient.baseUrl, `https://id-region.apps.astra.datastax.com/${DEFAULT_DATA_API_PATHS.astra}`); + assert.strictEqual(db._httpClient._baseUrl, `https://id-region.apps.astra.datastax.com/${DEFAULT_DATA_API_PATHS.astra}`); } }); @@ -56,13 +56,13 @@ describe('unit.db.db', () => { it('should allow db construction from endpoint, using default options', () => { const db = new Db(internalOps(), 'https://id-region.apps.astra.datastax.com', DbOptsHandler.empty); assert.ok(db); - assert.strictEqual(db._httpClient.baseUrl, `https://id-region.apps.astra.datastax.com/${DEFAULT_DATA_API_PATHS.astra}`); + assert.strictEqual(db._httpClient._baseUrl, `https://id-region.apps.astra.datastax.com/${DEFAULT_DATA_API_PATHS.astra}`); }); it('should allow db construction from endpoint, overwriting options', () => { const db = new Db(internalOps({ dataApiPath: 'old', keyspace: 'old' }), 'https://id-region.apps.astra.datastax.com', DbOptsHandler.parse({ dataApiPath: 'new', keyspace: 'new' })); assert.ok(db); - assert.strictEqual(db._httpClient.baseUrl, 'https://id-region.apps.astra.datastax.com/new'); + assert.strictEqual(db._httpClient._baseUrl, 'https://id-region.apps.astra.datastax.com/new'); assert.strictEqual(db.keyspace, 'new'); }); @@ -95,12 +95,12 @@ describe('unit.db.db', () => { it('handles different dataApiPath', () => { const db = new Db(internalOps({ dataApiPath: 'api/json/v2' }), Cfg.DbUrl, DbOptsHandler.empty); - assert.strictEqual(db._httpClient.baseUrl, `${Cfg.DbUrl}/api/json/v2`); + assert.strictEqual(db._httpClient._baseUrl, `${Cfg.DbUrl}/api/json/v2`); }); it('handles different dataApiPath when overridden', () => { const db = new Db(internalOps({ dataApiPath: 'api/json/v2' }), Cfg.DbUrl, DbOptsHandler.parse({ dataApiPath: 'api/json/v3' })); - assert.strictEqual(db._httpClient.baseUrl, `${Cfg.DbUrl}/api/json/v3`); + assert.strictEqual(db._httpClient._baseUrl, `${Cfg.DbUrl}/api/json/v3`); }); it('should accept valid logging', () => { From e09c53953917d74b21e80c9c975525c1ccf111ad Mon Sep 17 00:00:00 2001 From: toptobes Date: Sun, 18 May 2025 23:45:01 +0530 Subject: [PATCH 04/11] run premerge script --- etc/astra-db-ts.api.md | 45 +++++++++++------- examples/astra-db-ts.tgz | Bin 219559 -> 223234 bytes examples/browser/package-lock.json | 2 +- examples/cloudflare-workers/package-lock.json | 2 +- examples/customize-http/package-lock.json | 2 +- examples/logging/package-lock.json | 2 +- examples/nextjs/package-lock.json | 2 +- examples/non-astra-backends/package-lock.json | 2 +- examples/serdes/package-lock.json | 2 +- examples/using-http2/package-lock.json | 2 +- 10 files changed, 35 insertions(+), 26 deletions(-) diff --git a/etc/astra-db-ts.api.md b/etc/astra-db-ts.api.md index c617d219..9cb9ccbc 100644 --- a/etc/astra-db-ts.api.md +++ b/etc/astra-db-ts.api.md @@ -94,10 +94,10 @@ export interface AddVectorizeOperation { // @public export abstract class AdminCommandEvent extends BaseClientEvent { - // Warning: (ae-forgotten-export) The symbol "DevOpsAPIRequestInfo" needs to be exported by the entry point index.d.ts + // Warning: (ae-forgotten-export) The symbol "DevOpsAPIRequestMetadata" needs to be exported by the entry point index.d.ts // // @internal - protected constructor(name: string, requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean); + protected constructor(name: string, metadata: DevOpsAPIRequestMetadata); // (undocumented) getMessagePrefix(): string; readonly invokingMethod: string; @@ -122,7 +122,7 @@ export type AdminCommandEventMap = { // @public export class AdminCommandFailedEvent extends AdminCommandEvent { // @internal - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean, error: Error, started: number); + constructor(metadata: DevOpsAPIRequestMetadata, error: Error); readonly duration: number; readonly error: Error; // (undocumented) @@ -134,7 +134,7 @@ export class AdminCommandFailedEvent extends AdminCommandEvent { // @public export class AdminCommandPollingEvent extends AdminCommandEvent { // @internal - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, started: number, interval: number, pollCount: number); + constructor(metadata: DevOpsAPIRequestMetadata, interval: number, pollCount: number); readonly elapsed: number; // (undocumented) getMessage(): string; @@ -147,7 +147,7 @@ export class AdminCommandPollingEvent extends AdminCommandEvent { // @public export class AdminCommandStartedEvent extends AdminCommandEvent { // @internal - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean, timeout: Partial); + constructor(metadata: DevOpsAPIRequestMetadata); // (undocumented) getMessage(): string; // @internal @@ -158,7 +158,7 @@ export class AdminCommandStartedEvent extends AdminCommandEvent { // @public export class AdminCommandSucceededEvent extends AdminCommandEvent { // @internal - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean, data: Record | undefined, started: number); + constructor(metadata: DevOpsAPIRequestMetadata, data: Record | undefined); readonly duration: number; // (undocumented) getMessage(): string; @@ -170,7 +170,7 @@ export class AdminCommandSucceededEvent extends AdminCommandEvent { // @public export class AdminCommandWarningsEvent extends AdminCommandEvent { // @internal - constructor(requestId: string, baseUrl: string, info: DevOpsAPIRequestInfo, longRunning: boolean, warnings: NonEmpty); + constructor(metadata: DevOpsAPIRequestMetadata, warnings: NonEmpty); // (undocumented) getMessage(): string; // @internal @@ -386,8 +386,10 @@ export class AWSEmbeddingHeadersProvider extends StaticHeadersProvider<'embeddin // @public export abstract class BaseClientEvent { + // Warning: (ae-forgotten-export) The symbol "RequestId" needs to be exported by the entry point index.d.ts + // // @internal - protected constructor(name: string, requestId: string, extra: Record | undefined); + protected constructor(name: string, requestId: RequestId, extra: Record | undefined); readonly extraLogInfo?: Record; format(formatter?: EventFormatter): string; formatVerbose(): string; @@ -855,10 +857,10 @@ export type CollTypeCodecOpts = TypeCodecOpts | undefined); + protected constructor(name: string, metadata: DataAPIRequestMetadata); readonly command: Record; get commandName(): string; // @internal (undocumented) @@ -904,7 +906,7 @@ export type CommandEventTarget = { // @public export class CommandFailedEvent extends CommandEvent { // @internal - constructor(requestId: string, info: DataAPIRequestInfo, extra: Record | undefined, reply: RawDataAPIResponse | undefined, error: Error, started: number); + constructor(metadata: DataAPIRequestMetadata, reply: RawDataAPIResponse | undefined, error: Error); readonly duration: number; readonly error: Error; // (undocumented) @@ -918,8 +920,14 @@ export class CommandFailedEvent extends CommandEvent { // @public export interface CommandOptions> { + // (undocumented) + isSafelyRetryable?: boolean; // @deprecated maxTimeMS?: 'ERROR: The `maxTimeMS` option is no longer available; the timeouts system has been overhauled, and timeouts should now be set using `timeout`'; + // Warning: (ae-forgotten-export) The symbol "RetryConfig" needs to be exported by the entry point index.d.ts + // + // (undocumented) + retry?: RetryConfig; timeout?: number | Pick, 'requestTimeoutMs' | Exclude>; } @@ -932,7 +940,7 @@ export interface CommandOptionsSpec { // @public export class CommandStartedEvent extends CommandEvent { // @internal - constructor(requestId: string, info: DataAPIRequestInfo, extra: Record | undefined); + constructor(metadata: DataAPIRequestMetadata); // (undocumented) getMessage(): string; // @internal @@ -943,7 +951,7 @@ export class CommandStartedEvent extends CommandEvent { // @public export class CommandSucceededEvent extends CommandEvent { // @internal - constructor(requestId: string, info: DataAPIRequestInfo, extra: Record | undefined, reply: RawDataAPIResponse, started: number); + constructor(metadata: DataAPIRequestMetadata, reply: RawDataAPIResponse); readonly duration: number; // (undocumented) getMessage(): string; @@ -955,7 +963,7 @@ export class CommandSucceededEvent extends CommandEvent { // @public export class CommandWarningsEvent extends CommandEvent { // @internal - constructor(requestId: string, info: DataAPIRequestInfo, extra: Record | undefined, warnings: NonEmpty); + constructor(metadata: DataAPIRequestMetadata, warnings: NonEmpty); // (undocumented) getMessage(): string; // @internal @@ -1327,8 +1335,6 @@ export class DataAPITimeoutError extends DataAPIError { // // @internal constructor(info: HTTPRequestInfo, types: TimedOutCategories); - // @internal (undocumented) - static mk(this: void, info: HTTPRequestInfo, types: TimedOutCategories): DataAPITimeoutError; readonly timedOutCategories: TimedOutCategories; readonly timeout: Partial; } @@ -1523,8 +1529,6 @@ export class DevOpsAPIResponseError extends DevOpsAPIError { export class DevOpsAPITimeoutError extends DevOpsAPIError { // @internal constructor(info: HTTPRequestInfo, types: TimedOutCategories); - // @internal (undocumented) - static mk(this: void, info: HTTPRequestInfo, types: TimedOutCategories): DevOpsAPITimeoutError; readonly timedOutCategories: TimedOutCategories; readonly timeout: Partial; readonly url: string; @@ -2228,6 +2232,11 @@ export type MaybeId = NoId & { _id?: IdOf; }; +// @internal (undocumented) +export type Mut = { + -readonly [K in keyof T]: T[K]; +}; + // @public export type NoId = Omit; diff --git a/examples/astra-db-ts.tgz b/examples/astra-db-ts.tgz index b08d0c5896ec9a400c8f5c20fef438960fe1fd2e..053c584978f2550f3992ba6b43b5e818372faea6 100644 GIT binary patch literal 223234 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 Z<-afgefjUpe}Az5{y#zoTgU+F7XS*(kY@k@ literal 219559 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
o!i9f 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

be` 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 U|n8b)%*1iz->}`Frpnt*wE%#UQMG& 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 diff --git a/examples/browser/package-lock.json b/examples/browser/package-lock.json index 45c99d2d..162da9e9 100644 --- a/examples/browser/package-lock.json +++ b/examples/browser/package-lock.json @@ -59,7 +59,7 @@ "node_modules/@datastax/astra-db-ts": { "version": "2.0.1", "resolved": "file:../astra-db-ts.tgz", - "integrity": "sha512-+3ilS93UuowJb0OFm4N/Y+tDrEVlA+Snyda+W/QHABg4Kg3wB6tcYdGEr4iuLK44hoPg4mpgKH5OUXD8cWPUuw==", + "integrity": "sha512-f6VXv36BvqKhdEnMSvDqCeDlC2K1tvWL7bQI/h9gJogXFfgM6FGbCCzwQ/FXeTERfXOPRs2udeP8dx+YabFc+A==", "license": "Apache-2.0", "dependencies": { "bignumber.js": "^9.1.2", diff --git a/examples/cloudflare-workers/package-lock.json b/examples/cloudflare-workers/package-lock.json index db435f31..75028eae 100644 --- a/examples/cloudflare-workers/package-lock.json +++ b/examples/cloudflare-workers/package-lock.json @@ -178,7 +178,7 @@ "node_modules/@datastax/astra-db-ts": { "version": "2.0.1", "resolved": "file:../astra-db-ts.tgz", - "integrity": "sha512-+3ilS93UuowJb0OFm4N/Y+tDrEVlA+Snyda+W/QHABg4Kg3wB6tcYdGEr4iuLK44hoPg4mpgKH5OUXD8cWPUuw==", + "integrity": "sha512-f6VXv36BvqKhdEnMSvDqCeDlC2K1tvWL7bQI/h9gJogXFfgM6FGbCCzwQ/FXeTERfXOPRs2udeP8dx+YabFc+A==", "license": "Apache-2.0", "dependencies": { "bignumber.js": "^9.1.2", diff --git a/examples/customize-http/package-lock.json b/examples/customize-http/package-lock.json index 7a1f6cb1..0f0c5bae 100644 --- a/examples/customize-http/package-lock.json +++ b/examples/customize-http/package-lock.json @@ -83,7 +83,7 @@ "node_modules/@datastax/astra-db-ts": { "version": "2.0.1", "resolved": "file:../astra-db-ts.tgz", - "integrity": "sha512-+3ilS93UuowJb0OFm4N/Y+tDrEVlA+Snyda+W/QHABg4Kg3wB6tcYdGEr4iuLK44hoPg4mpgKH5OUXD8cWPUuw==", + "integrity": "sha512-f6VXv36BvqKhdEnMSvDqCeDlC2K1tvWL7bQI/h9gJogXFfgM6FGbCCzwQ/FXeTERfXOPRs2udeP8dx+YabFc+A==", "license": "Apache-2.0", "dependencies": { "bignumber.js": "^9.1.2", diff --git a/examples/logging/package-lock.json b/examples/logging/package-lock.json index 489caf56..b3a4b10f 100644 --- a/examples/logging/package-lock.json +++ b/examples/logging/package-lock.json @@ -80,7 +80,7 @@ "node_modules/@datastax/astra-db-ts": { "version": "2.0.1", "resolved": "file:../astra-db-ts.tgz", - "integrity": "sha512-+3ilS93UuowJb0OFm4N/Y+tDrEVlA+Snyda+W/QHABg4Kg3wB6tcYdGEr4iuLK44hoPg4mpgKH5OUXD8cWPUuw==", + "integrity": "sha512-f6VXv36BvqKhdEnMSvDqCeDlC2K1tvWL7bQI/h9gJogXFfgM6FGbCCzwQ/FXeTERfXOPRs2udeP8dx+YabFc+A==", "license": "Apache-2.0", "dependencies": { "bignumber.js": "^9.1.2", diff --git a/examples/nextjs/package-lock.json b/examples/nextjs/package-lock.json index ed78014b..1e92c86a 100644 --- a/examples/nextjs/package-lock.json +++ b/examples/nextjs/package-lock.json @@ -64,7 +64,7 @@ "node_modules/@datastax/astra-db-ts": { "version": "2.0.1", "resolved": "file:../astra-db-ts.tgz", - "integrity": "sha512-+3ilS93UuowJb0OFm4N/Y+tDrEVlA+Snyda+W/QHABg4Kg3wB6tcYdGEr4iuLK44hoPg4mpgKH5OUXD8cWPUuw==", + "integrity": "sha512-f6VXv36BvqKhdEnMSvDqCeDlC2K1tvWL7bQI/h9gJogXFfgM6FGbCCzwQ/FXeTERfXOPRs2udeP8dx+YabFc+A==", "license": "Apache-2.0", "dependencies": { "bignumber.js": "^9.1.2", diff --git a/examples/non-astra-backends/package-lock.json b/examples/non-astra-backends/package-lock.json index c5652c61..25184633 100644 --- a/examples/non-astra-backends/package-lock.json +++ b/examples/non-astra-backends/package-lock.json @@ -59,7 +59,7 @@ "node_modules/@datastax/astra-db-ts": { "version": "2.0.1", "resolved": "file:../astra-db-ts.tgz", - "integrity": "sha512-+3ilS93UuowJb0OFm4N/Y+tDrEVlA+Snyda+W/QHABg4Kg3wB6tcYdGEr4iuLK44hoPg4mpgKH5OUXD8cWPUuw==", + "integrity": "sha512-f6VXv36BvqKhdEnMSvDqCeDlC2K1tvWL7bQI/h9gJogXFfgM6FGbCCzwQ/FXeTERfXOPRs2udeP8dx+YabFc+A==", "license": "Apache-2.0", "dependencies": { "bignumber.js": "^9.1.2", diff --git a/examples/serdes/package-lock.json b/examples/serdes/package-lock.json index 913632f1..5b40a251 100644 --- a/examples/serdes/package-lock.json +++ b/examples/serdes/package-lock.json @@ -61,7 +61,7 @@ "node_modules/@datastax/astra-db-ts": { "version": "2.0.1", "resolved": "file:../astra-db-ts.tgz", - "integrity": "sha512-+3ilS93UuowJb0OFm4N/Y+tDrEVlA+Snyda+W/QHABg4Kg3wB6tcYdGEr4iuLK44hoPg4mpgKH5OUXD8cWPUuw==", + "integrity": "sha512-f6VXv36BvqKhdEnMSvDqCeDlC2K1tvWL7bQI/h9gJogXFfgM6FGbCCzwQ/FXeTERfXOPRs2udeP8dx+YabFc+A==", "license": "Apache-2.0", "dependencies": { "bignumber.js": "^9.1.2", diff --git a/examples/using-http2/package-lock.json b/examples/using-http2/package-lock.json index 10d8cc6e..bbc587b4 100644 --- a/examples/using-http2/package-lock.json +++ b/examples/using-http2/package-lock.json @@ -65,7 +65,7 @@ "node_modules/@datastax/astra-db-ts": { "version": "2.0.1", "resolved": "file:../astra-db-ts.tgz", - "integrity": "sha512-+3ilS93UuowJb0OFm4N/Y+tDrEVlA+Snyda+W/QHABg4Kg3wB6tcYdGEr4iuLK44hoPg4mpgKH5OUXD8cWPUuw==", + "integrity": "sha512-f6VXv36BvqKhdEnMSvDqCeDlC2K1tvWL7bQI/h9gJogXFfgM6FGbCCzwQ/FXeTERfXOPRs2udeP8dx+YabFc+A==", "license": "Apache-2.0", "dependencies": { "bignumber.js": "^9.1.2", From 9331975c98c259e3b85664a7cea99032602f3768 Mon Sep 17 00:00:00 2001 From: toptobes Date: Wed, 21 May 2025 17:21:22 +0530 Subject: [PATCH 05/11] fixed some type errors --- .../api/clients/impls/data-api-http-client.ts | 3 +- src/lib/api/retries/contexts/base.ts | 2 +- src/lib/api/retries/contexts/internal.ts | 5 ++- src/lib/api/retries/manager.ts | 43 +++++++++++-------- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/lib/api/clients/impls/data-api-http-client.ts b/src/lib/api/clients/impls/data-api-http-client.ts index ef9e6445..3d73ab84 100644 --- a/src/lib/api/clients/impls/data-api-http-client.ts +++ b/src/lib/api/clients/impls/data-api-http-client.ts @@ -15,7 +15,8 @@ import type { InternalLogger } from '@/src/lib/logging/internal-logger.js'; import type { - DataAPIClientEventMap, EmptyObj, + DataAPIClientEventMap, + EmptyObj, NonEmpty, nullish, RawDataAPIResponse, diff --git a/src/lib/api/retries/contexts/base.ts b/src/lib/api/retries/contexts/base.ts index c47cda1b..1833f058 100644 --- a/src/lib/api/retries/contexts/base.ts +++ b/src/lib/api/retries/contexts/base.ts @@ -46,6 +46,6 @@ export abstract class RetryContext { this.userData = ctx.userData; this.duration = duration; this.error = error; - this.requestId = ctx.requestId; + this.requestId = ctx.requestId.unwrap; } } diff --git a/src/lib/api/retries/contexts/internal.ts b/src/lib/api/retries/contexts/internal.ts index 966294d9..cff65531 100644 --- a/src/lib/api/retries/contexts/internal.ts +++ b/src/lib/api/retries/contexts/internal.ts @@ -13,6 +13,7 @@ // limitations under the License. import type { TimeoutDescriptor } from '@/src/lib/index.js'; +import type { RequestId } from '@/src/lib/api/clients/utils/request-id.js'; /** * @internal @@ -26,9 +27,9 @@ export class InternalRetryContext { public readonly userData: Record = {}; - public readonly requestId: string; + public readonly requestId: RequestId; - public constructor(isSafelyRetryable: boolean, timeout: Partial, reqId: string) { + public constructor(isSafelyRetryable: boolean, timeout: Partial, reqId: RequestId) { this.isSafelyRetryable = isSafelyRetryable; this.timeout = timeout; this.requestId = reqId; diff --git a/src/lib/api/retries/manager.ts b/src/lib/api/retries/manager.ts index c6560521..4b50b02d 100644 --- a/src/lib/api/retries/manager.ts +++ b/src/lib/api/retries/manager.ts @@ -21,56 +21,57 @@ import { RetryPolicy } from '@/src/lib/api/retries/policy.js'; import { NonErrorError } from '@/src/lib/errors.js'; import type { SomeDoc } from '@/src/documents/index.js'; import { DataAPIError } from '@/src/documents/index.js'; +import type { BaseRequestMetadata } from '@/src/lib/api/clients/index.js'; /** * @internal */ -export interface RetryAdapter { +export interface RetryAdapter { policy: Exclude, - mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: ReqInfo): Ctx, - emitRetryEvent(ctx: Ctx, info: ReqInfo): void, - emitRetryDeclinedEvent(ctx: Ctx, info: ReqInfo): void, + mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: ReqMeta): Ctx, + emitRetryEvent(ctx: Ctx, meta: ReqMeta): void, + emitRetryDeclinedEvent(ctx: Ctx, meta: ReqMeta): void, TimeoutError: SomeConstructor, } /** * @internal */ -export abstract class RetryManager { - public static mk(isSafelyRetryable: boolean, opts: CommandOptions, adapter: RetryAdapter, basePolicy: RetryConfig | undefined): RetryManager { +export abstract class RetryManager { + public static mk(isSafelyRetryable: boolean, opts: CommandOptions, adapter: RetryAdapter, basePolicy: RetryConfig | undefined): RetryManager { if (opts.retry ?? basePolicy) { const policy = opts.retry?.[adapter.policy] ?? opts.retry?.defaultPolicy ?? basePolicy?.[adapter.policy] ?? basePolicy?.defaultPolicy; - if (policy && !(policy instanceof RetryPolicy.Never)) { - return new RetryingImpl(policy, opts.isSafelyRetryable ?? isSafelyRetryable, adapter); + if (policy && !(policy as unknown instanceof RetryPolicy.Never)) { + return new RetryingImpl(policy, opts.isSafelyRetryable ?? isSafelyRetryable, adapter); } } return PassthroughImpl; } - public abstract run(info: ReqInfo, started: number, reqId: string, tm: TimeoutManager, fn: () => Promise): Promise; + public abstract run(meta: ReqMeta, tm: TimeoutManager, fn: () => Promise): Promise; } /** * @internal */ -class RetryingImpl extends RetryManager { - private readonly _adapter: RetryAdapter; +class RetryingImpl extends RetryManager { + private readonly _adapter: RetryAdapter; private readonly _isSafelyRetryable: boolean; public readonly _policy: RetryPolicy; - constructor(policy: RetryPolicy, isSafelyRetryable: boolean, adapter: RetryAdapter) { + constructor(policy: RetryPolicy, isSafelyRetryable: boolean, adapter: RetryAdapter) { super(); this._policy = policy; this._isSafelyRetryable = isSafelyRetryable; this._adapter = adapter; } - public override run(info: ReqInfo, started: number, reqId: string, tm: TimeoutManager, fn: () => Promise) { - const baseCtx = new InternalRetryContext(this._isSafelyRetryable, tm.initial(), reqId); + public override async run(metadata: ReqMeta, tm: TimeoutManager, fn: () => Promise) { + const baseCtx = new InternalRetryContext(this._isSafelyRetryable, metadata.timeout, metadata.requestId); while (true) { try { @@ -78,11 +79,11 @@ class RetryingImpl extends RetryManager extends RetryManager setTimeout(resolve, delay)); + } } } } @@ -118,7 +125,7 @@ class RetryingImpl extends RetryManager { - public override run(_: never, __: never, ___: never, ____: never, fn: () => Promise) { + public override run(_: never, __: never, fn: () => Promise) { return fn(); } }(); From 0d2e32dff4817be569a51c6b2c41b65fd6f999b7 Mon Sep 17 00:00:00 2001 From: toptobes Date: Wed, 21 May 2025 22:09:40 +0530 Subject: [PATCH 06/11] maybe inteligent, probably stupid timeout reset implementation --- src/lib/api/retries/manager.ts | 83 ++++++++++++++++++++++++++------ src/lib/api/timeouts/timeouts.ts | 8 +-- 2 files changed, 73 insertions(+), 18 deletions(-) diff --git a/src/lib/api/retries/manager.ts b/src/lib/api/retries/manager.ts index 4b50b02d..885238f0 100644 --- a/src/lib/api/retries/manager.ts +++ b/src/lib/api/retries/manager.ts @@ -59,9 +59,11 @@ export abstract class RetryManager { class RetryingImpl extends RetryManager { private readonly _adapter: RetryAdapter; + private readonly _policy: RetryPolicy; + private readonly _isSafelyRetryable: boolean; - public readonly _policy: RetryPolicy; + private readonly _retryDurationTracker = new RetryDurationTracker(); constructor(policy: RetryPolicy, isSafelyRetryable: boolean, adapter: RetryAdapter) { super(); @@ -74,36 +76,45 @@ class RetryingImpl setTimeout(resolve, delay)); } + + if (this._policy.shouldResetTimeout(ephemeralCtx)) { + ephemeralDurationTracker.end(); + } else { + ephemeralDurationTracker.cancel(); + } } } } + private _mkEphemeralCtx(error: unknown, baseCtx: InternalRetryContext, metadata: ReqMeta) { + return this._adapter.mkEphemeralCtx(baseCtx, performance.now() - metadata.startTime, NonErrorError.asError(error), metadata); + } + + private _shouldRetry(ephemeralCtx: Ctx) { + return this._passesInitialRetryChecks(ephemeralCtx) && this._policy.shouldRetry(ephemeralCtx); + } + private _passesInitialRetryChecks(ephemeralCtx: Ctx) { if (ephemeralCtx.retryCount >= this._policy.maxRetries(ephemeralCtx)) { return false; @@ -119,6 +130,50 @@ class RetryingImpl { + this._runningCount--; + + if (this._runningCount === 0) { + this._debt += (Date.now() - this._retryingStartTime!); + this._retryingStartTime = undefined; + } + }, + cancel: () => { + this._runningCount--; + }, + }; + } + + public consumeAccumulatedTime() { + const debt = this._debt; + this._debt = 0; + return debt; + } } /** diff --git a/src/lib/api/timeouts/timeouts.ts b/src/lib/api/timeouts/timeouts.ts index 357789a2..652e0c0e 100644 --- a/src/lib/api/timeouts/timeouts.ts +++ b/src/lib/api/timeouts/timeouts.ts @@ -271,9 +271,9 @@ export interface TimeoutAdapter { * @internal */ export interface TimeoutManager { - reset(): void, initial(): Partial, advance(info: HTTPRequestInfo): [number, () => Error], + retard(amount: number): void, } /** @@ -377,9 +377,6 @@ export class Timeouts { public custom(peek: Partial, advance: () => [number, TimedOutCategories]): TimeoutManager { return { - reset() { - // TODO - }, initial() { return peek; }, @@ -389,6 +386,9 @@ export class Timeouts { advanced[1] = () => this._adapter.mkTimeoutError(info, timeoutType); return advanced; }, + retard() { + // TODO + }, }; } From 6b039d1921eb8107345d82b2a1aeb2bdbf08c2b9 Mon Sep 17 00:00:00 2001 From: toptobes Date: Wed, 21 May 2025 22:26:10 +0530 Subject: [PATCH 07/11] tiny fixes --- src/lib/api/retries/manager.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/api/retries/manager.ts b/src/lib/api/retries/manager.ts index 885238f0..06826001 100644 --- a/src/lib/api/retries/manager.ts +++ b/src/lib/api/retries/manager.ts @@ -20,7 +20,7 @@ import type { RetryConfig } from '@/src/lib/api/retries/config.js'; import { RetryPolicy } from '@/src/lib/api/retries/policy.js'; import { NonErrorError } from '@/src/lib/errors.js'; import type { SomeDoc } from '@/src/documents/index.js'; -import { DataAPIError } from '@/src/documents/index.js'; +import { DataAPIResponseError } from '@/src/documents/index.js'; import type { BaseRequestMetadata } from '@/src/lib/api/clients/index.js'; /** @@ -125,9 +125,9 @@ class RetryingImpl Date: Thu, 22 May 2025 18:19:59 -0500 Subject: [PATCH 08/11] a --- src/index.ts | 39 ++++++++++++++++++++++++++++++++++ src/lib/api/retries/manager.ts | 3 ++- src/lib/api/retries/policy.ts | 16 +++++--------- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/index.ts b/src/index.ts index 4447521b..9c686151 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,3 +19,42 @@ export * from './administration/index.js'; export * from './lib/index.js'; export * from './version.js'; export { BigNumber } from 'bignumber.js'; + +import { RequestId } from '@/src/lib/api/clients/utils/request-id.js'; +import { RetryManager } from '@/src/lib/api/retries/manager.js'; +import { DataAPIRetryAdapter } from '@/src/lib/api/retries/adapters/data-api.js'; +import { RetryPolicy } from '@/src/lib/api/retries/policy.js'; +import { DataAPIClient } from '@/src/client/index.js'; +import { Timeouts } from '@/src/lib/api/timeouts/timeouts.js'; +import type { HTTPRequestInfo } from '@/src/lib/api/clients/index.js'; + +const rm = RetryManager.mk(true, {}, new DataAPIRetryAdapter(new DataAPIClient()), { + defaultPolicy: new class extends RetryPolicy.Default { + maxRetries = () => 10; + shouldResetTimeout = () => true; + }, +}); + +const dummyMd = { + startTime: 0, + timeout: {}, + target: null!, + requestId: new RequestId(), + extra: {}, + command: {}, +}; + +const dummyTm = new Timeouts({ mkTimeoutError: (info: HTTPRequestInfo) => new Error(JSON.stringify(info)) }, Timeouts.Default) + .single('generalMethodTimeoutMs', {}); + +let i = 0; + +await rm.run(dummyMd, dummyTm, async () => { + await new Promise(resolve => setTimeout(resolve, 500)); + + if (i < 5) { + throw new Error(`${i++}`); + } + + return Promise.resolve(4); +}); diff --git a/src/lib/api/retries/manager.ts b/src/lib/api/retries/manager.ts index 06826001..50dc1855 100644 --- a/src/lib/api/retries/manager.ts +++ b/src/lib/api/retries/manager.ts @@ -79,8 +79,9 @@ class RetryingImpl { - public static readonly Default: typeof RetryPolicy; - public static readonly Never: typeof RetryPolicy; + public static readonly Default: typeof DefaultRetryPolicy; + public static readonly Never: typeof NeverRetryPolicy; public abstract maxRetries(ctx: Ctx): number; @@ -36,22 +36,16 @@ export abstract class RetryPolicy { public onRetryDeclined(_: Ctx): void {} } -/** - * @internal - */ class DefaultRetryPolicy extends RetryPolicy { public maxRetries(): number { return 3; } public retryDelay(): number { - return 1000; + return 0; } } -/** - * @internal - */ class NeverRetryPolicy extends RetryPolicy { public maxRetries(): number { return 0; @@ -62,5 +56,5 @@ class NeverRetryPolicy extends RetryPolicy { } } -asMut(DefaultRetryPolicy).Default = DefaultRetryPolicy; -asMut(DefaultRetryPolicy).Never = NeverRetryPolicy; +asMut(RetryPolicy).Default = DefaultRetryPolicy; +asMut(RetryPolicy).Never = NeverRetryPolicy; From 1b811381f476ba0f1025557443827195351b48b7 Mon Sep 17 00:00:00 2001 From: toptobes Date: Fri, 23 May 2025 16:29:48 -0500 Subject: [PATCH 09/11] work --- src/index.ts | 39 +++++++++++++---- src/lib/api/retries/manager.ts | 42 +++++++++---------- .../integration/lib/logging/lifecycle.test.ts | 10 ++--- 3 files changed, 57 insertions(+), 34 deletions(-) diff --git a/src/index.ts b/src/index.ts index 9c686151..79a46198 100644 --- a/src/index.ts +++ b/src/index.ts @@ -47,14 +47,37 @@ const dummyMd = { const dummyTm = new Timeouts({ mkTimeoutError: (info: HTTPRequestInfo) => new Error(JSON.stringify(info)) }, Timeouts.Default) .single('generalMethodTimeoutMs', {}); -let i = 0; +await Promise.all([ + simulateRetrying('#1', 2), + simulateRetrying('#2', 2), + simulateRetrying('#3', 2), +]); -await rm.run(dummyMd, dummyTm, async () => { - await new Promise(resolve => setTimeout(resolve, 500)); +await simulateRetrying('#4', 2); - if (i < 5) { - throw new Error(`${i++}`); - } +await Promise.all([ + simulateRetrying('#5', 2), + simulateRetrying('#6', 2), + simulateRetrying('#7', 2), +]); - return Promise.resolve(4); -}); +async function simulateRetrying(id: string, retryTimes: number) { + let i = 0; + let startTime = Date.now(); + + await rm.run(dummyMd, dummyTm, async () => { + if (i < retryTimes) { + console.log(`[${id}] Starting retry run after ${Date.now() - startTime}ms`); + } else { + console.log(`[${id}] Starting successful run after ${Date.now() - startTime}ms`); + } + + await new Promise(resolve => setTimeout(resolve, 500)); + + if (i < retryTimes) { + throw new Error(`${i++}`); + } + + return Promise.resolve(4); + }); +} diff --git a/src/lib/api/retries/manager.ts b/src/lib/api/retries/manager.ts index 50dc1855..8184fc1b 100644 --- a/src/lib/api/retries/manager.ts +++ b/src/lib/api/retries/manager.ts @@ -43,7 +43,7 @@ export abstract class RetryManager { const policy = opts.retry?.[adapter.policy] ?? opts.retry?.defaultPolicy ?? basePolicy?.[adapter.policy] ?? basePolicy?.defaultPolicy; if (policy && !(policy as unknown instanceof RetryPolicy.Never)) { - return new RetryingImpl(policy, opts.isSafelyRetryable ?? isSafelyRetryable, adapter); + return new RetryingImpl(policy, opts.isSafelyRetryable ?? isSafelyRetryable, adapter); } } @@ -79,8 +79,6 @@ class RetryingImpl { - this._runningCount--; - - if (this._runningCount === 0) { - this._debt += (Date.now() - this._retryingStartTime!); - this._retryingStartTime = undefined; - } + updateRetryDebt: () => { + this._updateDebt(this._debt + (Date.now() - this._debtLastUpdated!)); }, - cancel: () => { + endAndConsumeDebt: () => { this._runningCount--; + const debt = this._debt; + this._updateDebt(0); + return debt; }, }; } - public consumeAccumulatedTime() { - const debt = this._debt; - this._debt = 0; - return debt; + private _updateDebt(debt: number) { + this._debt = debt; + + if (this._runningCount) { + this._debtLastUpdated = Date.now(); + } else { + this._debtLastUpdated = undefined; + } } } diff --git a/tests/integration/lib/logging/lifecycle.test.ts b/tests/integration/lib/logging/lifecycle.test.ts index 9e7758b3..2a819c14 100644 --- a/tests/integration/lib/logging/lifecycle.test.ts +++ b/tests/integration/lib/logging/lifecycle.test.ts @@ -230,7 +230,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('should work for the lifecycle of a collection', { pickEmitter: (objs) => objs.collection, - events: { start: 'commandStarted', end: 'commandFailed' }, + events: { start: 'commandStarted', updateRetryDebt: 'commandFailed' }, async generateEvents(collection) { await collection.insertOne({ '': '' }); }, @@ -248,7 +248,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('should work for the lifecycle of a table', { pickEmitter: (objs) => objs.table, - events: { start: 'commandStarted', end: 'commandWarnings' }, + events: { start: 'commandStarted', updateRetryDebt: 'commandWarnings' }, async generateEvents(table) { await table.findOne({}); }, @@ -266,7 +266,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('should work for the lifecycle of a db', { pickEmitter: (objs) => objs.db, - events: { start: 'commandStarted', end: 'commandSucceeded' }, + events: { start: 'commandStarted', updateRetryDebt: 'commandSucceeded' }, async generateEvents(db) { await db.listTables(); }, @@ -284,7 +284,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('(ASTRA) should work for the lifecycle of an admin', { pickEmitter: (objs) => objs.admin, - events: { start: 'adminCommandStarted', end: 'adminCommandSucceeded' }, + events: { start: 'adminCommandStarted', updateRetryDebt: 'adminCommandSucceeded' }, async generateEvents(admin) { await admin.listDatabases(); }, @@ -302,7 +302,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('should work for the lifecycle of a dbAdmin', { pickEmitter: (objs) => objs.dbAdmin, - events: { start: 'adminCommandStarted', end: 'adminCommandSucceeded' }, + events: { start: 'adminCommandStarted', updateRetryDebt: 'adminCommandSucceeded' }, async generateEvents(dbAdmin) { await dbAdmin.listKeyspaces(); }, From ed317fe6cd29f068c4f05bbfce26a1434df581bb Mon Sep 17 00:00:00 2001 From: toptobes Date: Sat, 24 May 2025 01:52:57 -0500 Subject: [PATCH 10/11] a --- src/index.ts | 122 +++++++++--------- src/lib/api/clients/impls/base-http-client.ts | 3 +- src/lib/api/retries/cfg-handler.ts | 74 +++++++++++ src/lib/api/retries/config.ts | 4 +- src/lib/api/retries/manager.ts | 17 ++- .../integration/lib/logging/lifecycle.test.ts | 10 +- 6 files changed, 155 insertions(+), 75 deletions(-) create mode 100644 src/lib/api/retries/cfg-handler.ts diff --git a/src/index.ts b/src/index.ts index 79a46198..1c0e8c41 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,64 +20,64 @@ export * from './lib/index.js'; export * from './version.js'; export { BigNumber } from 'bignumber.js'; -import { RequestId } from '@/src/lib/api/clients/utils/request-id.js'; -import { RetryManager } from '@/src/lib/api/retries/manager.js'; -import { DataAPIRetryAdapter } from '@/src/lib/api/retries/adapters/data-api.js'; -import { RetryPolicy } from '@/src/lib/api/retries/policy.js'; -import { DataAPIClient } from '@/src/client/index.js'; -import { Timeouts } from '@/src/lib/api/timeouts/timeouts.js'; -import type { HTTPRequestInfo } from '@/src/lib/api/clients/index.js'; - -const rm = RetryManager.mk(true, {}, new DataAPIRetryAdapter(new DataAPIClient()), { - defaultPolicy: new class extends RetryPolicy.Default { - maxRetries = () => 10; - shouldResetTimeout = () => true; - }, -}); - -const dummyMd = { - startTime: 0, - timeout: {}, - target: null!, - requestId: new RequestId(), - extra: {}, - command: {}, -}; - -const dummyTm = new Timeouts({ mkTimeoutError: (info: HTTPRequestInfo) => new Error(JSON.stringify(info)) }, Timeouts.Default) - .single('generalMethodTimeoutMs', {}); - -await Promise.all([ - simulateRetrying('#1', 2), - simulateRetrying('#2', 2), - simulateRetrying('#3', 2), -]); - -await simulateRetrying('#4', 2); - -await Promise.all([ - simulateRetrying('#5', 2), - simulateRetrying('#6', 2), - simulateRetrying('#7', 2), -]); - -async function simulateRetrying(id: string, retryTimes: number) { - let i = 0; - let startTime = Date.now(); - - await rm.run(dummyMd, dummyTm, async () => { - if (i < retryTimes) { - console.log(`[${id}] Starting retry run after ${Date.now() - startTime}ms`); - } else { - console.log(`[${id}] Starting successful run after ${Date.now() - startTime}ms`); - } - - await new Promise(resolve => setTimeout(resolve, 500)); - - if (i < retryTimes) { - throw new Error(`${i++}`); - } - - return Promise.resolve(4); - }); -} +// import { RequestId } from '@/src/lib/api/clients/utils/request-id.js'; +// import { RetryManager } from '@/src/lib/api/retries/manager.js'; +// import { DataAPIRetryAdapter } from '@/src/lib/api/retries/adapters/data-api.js'; +// import { RetryPolicy } from '@/src/lib/api/retries/policy.js'; +// import { DataAPIClient } from '@/src/client/index.js'; +// import { Timeouts } from '@/src/lib/api/timeouts/timeouts.js'; +// import type { HTTPRequestInfo } from '@/src/lib/api/clients/index.js'; +// +// const rm = RetryManager.mk(true, {}, new DataAPIRetryAdapter(new DataAPIClient()), { +// defaultPolicy: new class extends RetryPolicy.Default { +// maxRetries = () => 10; +// shouldResetTimeout = () => true; +// }, +// } as any); +// +// const dummyMd = { +// startTime: 0, +// timeout: {}, +// target: null!, +// requestId: new RequestId(), +// extra: {}, +// command: {}, +// }; +// +// const dummyTm = new Timeouts({ mkTimeoutError: (info: HTTPRequestInfo) => new Error(JSON.stringify(info)) }, Timeouts.Default) +// .single('generalMethodTimeoutMs', {}); +// +// await Promise.all([ +// simulateRetrying('#1', 2), +// simulateRetrying('#2', 2), +// simulateRetrying('#3', 2), +// ]); +// +// await simulateRetrying('#4', 2); +// +// await Promise.all([ +// simulateRetrying('#5', 2), +// simulateRetrying('#6', 2), +// simulateRetrying('#7', 2), +// ]); +// +// async function simulateRetrying(id: string, retryTimes: number) { +// let i = 0; +// const startTime = Date.now(); +// +// await rm.run(dummyMd, dummyTm, async () => { +// if (i < retryTimes) { +// console.log(`[${id}] Starting retry run after ${Date.now() - startTime}ms`); +// } else { +// console.log(`[${id}] Starting successful run after ${Date.now() - startTime}ms`); +// } +// +// await new Promise(resolve => setTimeout(resolve, 500)); +// +// if (i < retryTimes) { +// throw new Error(`${i++}`); +// } +// +// return Promise.resolve(4); +// }); +// } diff --git a/src/lib/api/clients/impls/base-http-client.ts b/src/lib/api/clients/impls/base-http-client.ts index 4d7474ff..c895621c 100644 --- a/src/lib/api/clients/impls/base-http-client.ts +++ b/src/lib/api/clients/impls/base-http-client.ts @@ -28,6 +28,7 @@ import { RetryManager } from '@/src/lib/api/retries/manager.js'; import type { ParsedTokenProvider } from '@/src/lib/token-providers/token-provider.js'; import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; import { RequestId } from '@/src/lib/api/clients/utils/request-id.js'; +import { RetryCfgHandler } from '@/src/lib/api/retries/cfg-handler.js'; /** * @internal @@ -109,7 +110,7 @@ export abstract class BaseHttpClient { this.tm = new Timeouts(adapters.timeoutAdapter, opts.timeoutDefaults); this.rm = (isSafelyRetryable: boolean, opts: CommandOptions) => { - return RetryManager.mk(isSafelyRetryable, opts, adapters.retryAdapter, undefined); + return RetryManager.mk(isSafelyRetryable, opts, adapters.retryAdapter, RetryCfgHandler.empty); }; } diff --git a/src/lib/api/retries/cfg-handler.ts b/src/lib/api/retries/cfg-handler.ts new file mode 100644 index 00000000..53b5e094 --- /dev/null +++ b/src/lib/api/retries/cfg-handler.ts @@ -0,0 +1,74 @@ +// Copyright DataStax, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import type { OptionsHandlerTypes, Parsed } from '@/src/lib/opts-handlers.js'; +import { MonoidalOptionsHandler, monoids } from '@/src/lib/opts-handlers.js'; +import { either, exact, nullish, optional } from 'decoders'; +import type { RetryConfig, ExplicitRetryConfig } from '@/src/lib/api/retries/config.js'; +import { RetryPolicy } from '@/src/lib/api/retries/policy.js'; +import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; +import type { DataAPIRetryContext } from '@/src/lib/api/retries/contexts/data-api.js'; +import type { DevOpsAPIRetryContext } from '@/src/lib/api/retries/contexts/devops-api.js'; +import { anyInstanceOf } from '@/src/lib/utils.js'; + +/** + * @internal + */ +interface Type extends OptionsHandlerTypes { + Parsed: ParsedRetryConfig, + Parseable: RetryConfig | undefined | null, +} + +/** + * @internal + */ +export type ParsedRetryConfig = ExplicitRetryConfig & Parsed<'RetryConfig'>; + +const monoid = monoids.object({ + defaultPolicy: monoids.optional>(), + dataAPIPolicy: monoids.optional>(), + devOpsAPIPolicy: monoids.optional>(), +}); + +/** + * @internal + */ +const decoder = nullish(either( + anyInstanceOf(RetryPolicy), + exact({ + defaultPolicy: optional(anyInstanceOf(RetryPolicy)), + dataAPIPolicy: optional(anyInstanceOf(RetryPolicy)), + devOpsAPIPolicy: optional(anyInstanceOf(RetryPolicy)), + }), +), {}); + +/** + * @internal + */ +const transformer = decoder.transform((config) => { + if (!config) { + return monoid.empty; + } + + if (config instanceof RetryPolicy) { + return { defaultPolicy: config }; + } + + return config; +}); + +/** + * @internal + */ +export const RetryCfgHandler = new MonoidalOptionsHandler(transformer, monoid); diff --git a/src/lib/api/retries/config.ts b/src/lib/api/retries/config.ts index 9054f996..3bd66974 100644 --- a/src/lib/api/retries/config.ts +++ b/src/lib/api/retries/config.ts @@ -17,7 +17,9 @@ import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; import type { DataAPIRetryContext } from '@/src/lib/api/retries/contexts/data-api.js'; import type { DevOpsAPIRetryContext } from '@/src/lib/api/retries/contexts/devops-api.js'; -export interface RetryConfig { +export type RetryConfig = ExplicitRetryConfig | RetryPolicy; + +export interface ExplicitRetryConfig { defaultPolicy?: RetryPolicy, dataAPIPolicy?: RetryPolicy, devOpsAPIPolicy?: RetryPolicy, diff --git a/src/lib/api/retries/manager.ts b/src/lib/api/retries/manager.ts index 8184fc1b..7fa5eeef 100644 --- a/src/lib/api/retries/manager.ts +++ b/src/lib/api/retries/manager.ts @@ -16,18 +16,20 @@ import type { RetryContext } from '@/src/lib/api/retries/contexts/base.js'; import type { CommandOptions, SomeConstructor } from '@/src/lib/index.js'; import { InternalRetryContext } from '@/src/lib/api/retries/contexts/internal.js'; import type { TimeoutManager } from '@/src/lib/api/timeouts/timeouts.js'; -import type { RetryConfig } from '@/src/lib/api/retries/config.js'; +import type { ParsedRetryConfig} from '@/src/lib/api/retries/cfg-handler.js'; +import { RetryCfgHandler } from '@/src/lib/api/retries/cfg-handler.js'; import { RetryPolicy } from '@/src/lib/api/retries/policy.js'; import { NonErrorError } from '@/src/lib/errors.js'; import type { SomeDoc } from '@/src/documents/index.js'; import { DataAPIResponseError } from '@/src/documents/index.js'; import type { BaseRequestMetadata } from '@/src/lib/api/clients/index.js'; +import type { ExplicitRetryConfig } from '@/src/lib/api/retries/config.js'; /** * @internal */ export interface RetryAdapter { - policy: Exclude, + policy: Exclude, mkEphemeralCtx(ctx: InternalRetryContext, duration: number, error: Error, req: ReqMeta): Ctx, emitRetryEvent(ctx: Ctx, meta: ReqMeta): void, emitRetryDeclinedEvent(ctx: Ctx, meta: ReqMeta): void, @@ -38,9 +40,10 @@ export interface RetryAdapter { - public static mk(isSafelyRetryable: boolean, opts: CommandOptions, adapter: RetryAdapter, basePolicy: RetryConfig | undefined): RetryManager { + public static mk(isSafelyRetryable: boolean, opts: CommandOptions, adapter: RetryAdapter, basePolicy: ParsedRetryConfig): RetryManager { if (opts.retry ?? basePolicy) { - const policy = opts.retry?.[adapter.policy] ?? opts.retry?.defaultPolicy ?? basePolicy?.[adapter.policy] ?? basePolicy?.defaultPolicy; + const policies = RetryCfgHandler.concatParseWithin([basePolicy], opts, 'retry'); + const policy = policies?.[adapter.policy] ?? policies?.defaultPolicy; if (policy && !(policy as unknown instanceof RetryPolicy.Never)) { return new RetryingImpl(policy, opts.isSafelyRetryable ?? isSafelyRetryable, adapter); @@ -150,12 +153,12 @@ class RetryDurationTracker { this._runningCount++; if (this._debtLastUpdated === undefined) { - this._debtLastUpdated = Date.now(); + this._debtLastUpdated = performance.now(); } return { updateRetryDebt: () => { - this._updateDebt(this._debt + (Date.now() - this._debtLastUpdated!)); + this._updateDebt(this._debt + (performance.now() - this._debtLastUpdated!)); }, endAndConsumeDebt: () => { this._runningCount--; @@ -170,7 +173,7 @@ class RetryDurationTracker { this._debt = debt; if (this._runningCount) { - this._debtLastUpdated = Date.now(); + this._debtLastUpdated = performance.now(); } else { this._debtLastUpdated = undefined; } diff --git a/tests/integration/lib/logging/lifecycle.test.ts b/tests/integration/lib/logging/lifecycle.test.ts index 2a819c14..9e7758b3 100644 --- a/tests/integration/lib/logging/lifecycle.test.ts +++ b/tests/integration/lib/logging/lifecycle.test.ts @@ -230,7 +230,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('should work for the lifecycle of a collection', { pickEmitter: (objs) => objs.collection, - events: { start: 'commandStarted', updateRetryDebt: 'commandFailed' }, + events: { start: 'commandStarted', end: 'commandFailed' }, async generateEvents(collection) { await collection.insertOne({ '': '' }); }, @@ -248,7 +248,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('should work for the lifecycle of a table', { pickEmitter: (objs) => objs.table, - events: { start: 'commandStarted', updateRetryDebt: 'commandWarnings' }, + events: { start: 'commandStarted', end: 'commandWarnings' }, async generateEvents(table) { await table.findOne({}); }, @@ -266,7 +266,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('should work for the lifecycle of a db', { pickEmitter: (objs) => objs.db, - events: { start: 'commandStarted', updateRetryDebt: 'commandSucceeded' }, + events: { start: 'commandStarted', end: 'commandSucceeded' }, async generateEvents(db) { await db.listTables(); }, @@ -284,7 +284,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('(ASTRA) should work for the lifecycle of an admin', { pickEmitter: (objs) => objs.admin, - events: { start: 'adminCommandStarted', updateRetryDebt: 'adminCommandSucceeded' }, + events: { start: 'adminCommandStarted', end: 'adminCommandSucceeded' }, async generateEvents(admin) { await admin.listDatabases(); }, @@ -302,7 +302,7 @@ parallel('integration.lib.logging.lifecycle', () => { defineLifecycleTest('should work for the lifecycle of a dbAdmin', { pickEmitter: (objs) => objs.dbAdmin, - events: { start: 'adminCommandStarted', updateRetryDebt: 'adminCommandSucceeded' }, + events: { start: 'adminCommandStarted', end: 'adminCommandSucceeded' }, async generateEvents(dbAdmin) { await dbAdmin.listKeyspaces(); }, From 738cbf6bd51c25e33d44c35f80fff6b46d43a599 Mon Sep 17 00:00:00 2001 From: toptobes Date: Sat, 24 May 2025 03:04:07 -0500 Subject: [PATCH 11/11] maybe? --- src/lib/api/timeouts/timeouts.ts | 71 +++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 15 deletions(-) diff --git a/src/lib/api/timeouts/timeouts.ts b/src/lib/api/timeouts/timeouts.ts index 652e0c0e..21730d14 100644 --- a/src/lib/api/timeouts/timeouts.ts +++ b/src/lib/api/timeouts/timeouts.ts @@ -311,8 +311,26 @@ export class Timeouts { [key]: timeout, }; + let started: number; + let retardAmount = 0; + return this.custom(initial, () => { - return [timeout, 'provided']; + if (!started) { + started = Date.now(); + } + + const elapsed = Date.now() - started; + const adjustedOverallTimeout = timeout + retardAmount; + const overallLeft = adjustedOverallTimeout - elapsed; + const effectiveTimeout = Math.min(timeout, overallLeft); // Request timeout stays same, but can't exceed overall left + + if (effectiveTimeout <= 0) { + return [0, 'provided']; + } + + return [effectiveTimeout, 'provided']; + }, (amount) => { + retardAmount += amount; }); } @@ -321,17 +339,35 @@ export class Timeouts { [key]: (override?.timeout?.[key] ?? this.baseTimeouts[key]) || EffectivelyInfinity, }; - const timeout = Math.min(timeouts.requestTimeoutMs, timeouts[key]); - - const type: TimedOutCategories = - (timeouts.requestTimeoutMs === timeouts[key]) - ? ['requestTimeoutMs', key] : - (timeouts.requestTimeoutMs < timeouts[key]) - ? ['requestTimeoutMs'] - : [key]; + let started: number; + let retardAmount = 0; return this.custom(timeouts, () => { - return [timeout, type]; + if (!started) { + started = performance.now(); + } + + const elapsed = performance.now() - started; + const adjustedOverallTimeout = timeouts[key] + retardAmount; + const overallLeft = adjustedOverallTimeout - elapsed; + + // Request timeout stays constant, but check against remaining overall time + const effectiveRequestTimeout = Math.min(timeouts.requestTimeoutMs, overallLeft); + + if (overallLeft <= 0) { + return [0, [key]]; + } + + const type: TimedOutCategories = + (effectiveRequestTimeout === overallLeft) + ? ['requestTimeoutMs', key] : + (effectiveRequestTimeout < overallLeft) + ? ['requestTimeoutMs'] + : [key]; + + return [effectiveRequestTimeout, type]; + }, (amount) => { + retardAmount += amount; }); } @@ -357,13 +393,16 @@ export class Timeouts { }; let started: number; + let retardAmount = 0; return this.custom(initial, () => { if (!started) { - started = Date.now(); + started = performance.now(); } - const overallLeft = overallTimeout - (Date.now() - started); + const elapsed = performance.now() - started; + const adjustedOverallTimeout = overallTimeout + retardAmount; + const overallLeft = adjustedOverallTimeout - elapsed; if (overallLeft < requestTimeout) { return [overallLeft, [key]]; @@ -372,10 +411,12 @@ export class Timeouts { } else { return [overallLeft, ['requestTimeoutMs', key]]; } + }, (amount) => { + retardAmount += amount; }); } - public custom(peek: Partial, advance: () => [number, TimedOutCategories]): TimeoutManager { + public custom(peek: Partial, advance: () => [number, TimedOutCategories], retard?: (amount: number) => void): TimeoutManager { return { initial() { return peek; @@ -386,8 +427,8 @@ export class Timeouts { advanced[1] = () => this._adapter.mkTimeoutError(info, timeoutType); return advanced; }, - retard() { - // TODO + retard(amount: number) { + retard?.(amount); }, }; }