@mwcp/kmore
Version:
midway component for knex, supports declarative transaction and OpenTelemetry
70 lines • 4.96 kB
TypeScript
import { IMidwayContainer } from '@midwayjs/core';
import { type TraceContext, TraceService } from '@mwcp/otel';
import type { ScopeType } from '@mwcp/share';
import { Kmore, KmoreQueryBuilder, KmoreTransaction, PropagationType, TrxPropagateOptions } from 'kmore';
import { CallerService } from './caller.service.js';
import { CallerKey, CallerKeyPropagationMapIndex, DbSourceName, EntryCallerKeyTrxMapIndex, PropagatingOptions, PropagatingRet, RegisterTrxPropagateOptions, StartNewTrxOptions } from './propagation/trx-status.types.js';
/**
* Declarative transaction status manager
*/
export declare class TrxStatusService {
readonly applicationContext: IMidwayContainer;
readonly appDir: string;
protected readonly traceSvc: TraceService;
protected readonly callerSvc: CallerService;
readonly scope2TraceContextMap: WeakMap<ScopeType, TraceContext>;
protected readonly dbInstanceList: Map<string, Kmore<any>>;
protected readonly callerKeyPropagationMapIndex: CallerKeyPropagationMapIndex;
protected readonly entryCallerKeyTrxMapIndex: EntryCallerKeyTrxMapIndex;
getName(): string;
registerDbInstance(dbId: string, db: Kmore): void;
/**
* If dbId is undefined or empty
* - return the only on instance
* - throw error if multiple instance exists
*/
getDbInstance(dbId: string | undefined): Kmore | undefined;
getDbInstanceCount(): number;
listDbInstanceNames(): DbSourceName[];
unregisterDbInstance(dbId: string): void;
registerPropagation(options: RegisterTrxPropagateOptions): CallerKey;
retrieveUniqueTopCallerKey(sourceName: DbSourceName | undefined, scope: ScopeType, key: CallerKey): CallerKey | undefined;
/**
* Is decorator `Transactional()` registered with current scope and callerKey
*/
isRegistered(dbSourceName: DbSourceName, scope: ScopeType, key: CallerKey): boolean;
startNewTrx(this: TrxStatusService, options: StartNewTrxOptions): Promise<KmoreTransaction>;
/**
* Only top caller can commit
*/
tryCommitTrxIfKeyIsEntryTop(sourceName: DbSourceName | undefined, scope: ScopeType, callerKey: CallerKey): Promise<void>;
trxRollbackEntry(sourceName: DbSourceName | undefined, scope: ScopeType, callerKey: CallerKey): Promise<void>;
bindBuilderPropagationData(dbSourceName: DbSourceName, builder: KmoreQueryBuilder, distance?: number): void;
propagating(options: PropagatingOptions): Promise<PropagatingRet>;
protected _propagatingRequired(options: PropagatingOptions, trxPropagateOptions: TrxPropagateOptions): Promise<KmoreTransaction>;
protected _propagatingSupports(options: PropagatingOptions, trxPropagateOptions: TrxPropagateOptions): Promise<KmoreTransaction | undefined>;
cleanAfterRequestFinished(scope: ScopeType): void;
protected cleanAfterTrx(dbSourceName: DbSourceName | undefined, scope: ScopeType, callerKey: CallerKey): void;
protected builderLinkTrx(options: PropagatingOptions, trx: KmoreTransaction | undefined): void;
protected getTrxArrayByEntryKey(dbSourceName: DbSourceName, scope: ScopeType, key: CallerKey): KmoreTransaction[] | undefined;
protected getCurrentTrxByEntryKey(dbSourceName: DbSourceName, scope: ScopeType, key: CallerKey): KmoreTransaction | undefined;
protected updateEntryCallerKeyTrxMap(dbSourceName: DbSourceName, scope: ScopeType, key: CallerKey, trx: KmoreTransaction): void;
protected removeEntryCallerKeyTrxMap(scope: ScopeType): void;
protected cleanEntryCallerKeyTrxMapByKey(dbSourceName: DbSourceName, scope: ScopeType, key: CallerKey): void;
protected removeTrxFromEntryCallerKeyTrxMap(dbSourceName: DbSourceName, scope: ScopeType, trxId: symbol): void;
getCurrentTrxId(dbSourceName: DbSourceName, scope: ScopeType, callerKey: CallerKey): symbol | undefined;
getCurrentTrx(dbSourceName: DbSourceName, scope: ScopeType, callerKey: CallerKey): KmoreTransaction | undefined;
protected getPropagationOptions(dbSourceName: DbSourceName, scope: ScopeType, key: CallerKey): RegisterTrxPropagateOptions | undefined;
protected setPropagationOptions(key: CallerKey, options: RegisterTrxPropagateOptions): void;
protected getPropagationOptionsCount(dbSourceName: DbSourceName, scope: ScopeType): number;
protected getPropagationType(dbSourceName: DbSourceName, scope: ScopeType, key: CallerKey): PropagationType | undefined;
protected delPropagationOptions(dbSourceName: DbSourceName, scope: ScopeType, key: CallerKey): void;
protected retrieveRegisteredTopCallerKeyFromCallStack(dbSourceName: DbSourceName, scope: ScopeType, limit?: number): CallerKey | undefined;
getTraceContextByScope(scope: ScopeType): TraceContext | undefined;
/**
* @param scope kmoreTrxId or kmoreQueryId
*/
setTraceContextByScope(scope: ScopeType, traceContext: TraceContext): void;
removeTraceContextByScope(scope: ScopeType): void;
}
//# sourceMappingURL=trx-status.service.d.ts.map