Skip to content

Commit a329748

Browse files
authored
refactor(NODE-5352): refactor AbstractOperation to use async (#3729)
1 parent 1d31888 commit a329748

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+237
-158
lines changed

src/bulk/common.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import type { CollationOptions, CommandOperationOptions } from '../operations/co
1313
import { DeleteOperation, type DeleteStatement, makeDeleteStatement } from '../operations/delete';
1414
import { executeOperation } from '../operations/execute_operation';
1515
import { InsertOperation } from '../operations/insert';
16-
import { AbstractOperation, type Hint } from '../operations/operation';
16+
import { AbstractCallbackOperation, type Hint } from '../operations/operation';
1717
import { makeUpdateStatement, UpdateOperation, type UpdateStatement } from '../operations/update';
1818
import type { Server } from '../sdam/server';
1919
import type { Topology } from '../sdam/topology';
@@ -881,14 +881,18 @@ export interface BulkWriteOptions extends CommandOperationOptions {
881881
* We would like this logic to simply live inside the BulkWriteOperation class
882882
* @internal
883883
*/
884-
class BulkWriteShimOperation extends AbstractOperation {
884+
class BulkWriteShimOperation extends AbstractCallbackOperation {
885885
bulkOperation: BulkOperationBase;
886886
constructor(bulkOperation: BulkOperationBase, options: BulkWriteOptions) {
887887
super(options);
888888
this.bulkOperation = bulkOperation;
889889
}
890890

891-
execute(server: Server, session: ClientSession | undefined, callback: Callback<any>): void {
891+
executeCallback(
892+
server: Server,
893+
session: ClientSession | undefined,
894+
callback: Callback<any>
895+
): void {
892896
if (this.options.session == null) {
893897
// An implicit session could have been created by 'executeOperation'
894898
// So if we stick it on finalOptions here, each bulk operation

src/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,12 @@ export type {
419419
export type { InsertManyResult, InsertOneOptions, InsertOneResult } from './operations/insert';
420420
export type { CollectionInfo, ListCollectionsOptions } from './operations/list_collections';
421421
export type { ListDatabasesOptions, ListDatabasesResult } from './operations/list_databases';
422-
export type { AbstractOperation, Hint, OperationOptions } from './operations/operation';
422+
export type {
423+
AbstractCallbackOperation,
424+
AbstractOperation,
425+
Hint,
426+
OperationOptions
427+
} from './operations/operation';
423428
export type { ProfilingLevelOptions } from './operations/profiling_level';
424429
export type { RemoveUserOptions } from './operations/remove_user';
425430
export type { RenameOptions } from './operations/rename';

src/operations/add_user.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export class AddUserOperation extends CommandOperation<Document> {
5050
this.options = options ?? {};
5151
}
5252

53-
override execute(
53+
override executeCallback(
5454
server: Server,
5555
session: ClientSession | undefined,
5656
callback: Callback<Document>

src/operations/aggregate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export class AggregateOperation<T = Document> extends CommandOperation<T> {
8888
this.pipeline.push(stage);
8989
}
9090

91-
override execute(
91+
override executeCallback(
9292
server: Server,
9393
session: ClientSession | undefined,
9494
callback: Callback<T>

src/operations/bulk_write.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import type { Collection } from '../collection';
88
import type { Server } from '../sdam/server';
99
import type { ClientSession } from '../sessions';
1010
import type { Callback } from '../utils';
11-
import { AbstractOperation, Aspect, defineAspects } from './operation';
11+
import { AbstractCallbackOperation, Aspect, defineAspects } from './operation';
1212

1313
/** @internal */
14-
export class BulkWriteOperation extends AbstractOperation<BulkWriteResult> {
14+
export class BulkWriteOperation extends AbstractCallbackOperation<BulkWriteResult> {
1515
override options: BulkWriteOptions;
1616
collection: Collection;
1717
operations: AnyBulkWriteOperation[];
@@ -27,7 +27,7 @@ export class BulkWriteOperation extends AbstractOperation<BulkWriteResult> {
2727
this.operations = operations;
2828
}
2929

30-
override execute(
30+
override executeCallback(
3131
server: Server,
3232
session: ClientSession | undefined,
3333
callback: Callback<BulkWriteResult>

src/operations/collections.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import type { Db } from '../db';
33
import type { Server } from '../sdam/server';
44
import type { ClientSession } from '../sessions';
55
import type { Callback } from '../utils';
6-
import { AbstractOperation, type OperationOptions } from './operation';
6+
import { AbstractCallbackOperation, type OperationOptions } from './operation';
77

88
export interface CollectionsOptions extends OperationOptions {
99
nameOnly?: boolean;
1010
}
1111

1212
/** @internal */
13-
export class CollectionsOperation extends AbstractOperation<Collection[]> {
13+
export class CollectionsOperation extends AbstractCallbackOperation<Collection[]> {
1414
override options: CollectionsOptions;
1515
db: Db;
1616

@@ -20,7 +20,7 @@ export class CollectionsOperation extends AbstractOperation<Collection[]> {
2020
this.db = db;
2121
}
2222

23-
override execute(
23+
override executeCallback(
2424
server: Server,
2525
session: ClientSession | undefined,
2626
callback: Callback<Collection[]>

src/operations/command.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
} from '../utils';
1616
import { WriteConcern, type WriteConcernOptions } from '../write_concern';
1717
import type { ReadConcernLike } from './../read_concern';
18-
import { AbstractOperation, Aspect, type OperationOptions } from './operation';
18+
import { AbstractCallbackOperation, Aspect, type OperationOptions } from './operation';
1919

2020
/** @public */
2121
export interface CollationOptions {
@@ -68,7 +68,7 @@ export interface OperationParent {
6868
}
6969

7070
/** @internal */
71-
export abstract class CommandOperation<T> extends AbstractOperation<T> {
71+
export abstract class CommandOperation<T> extends AbstractCallbackOperation<T> {
7272
override options: CommandOperationOptions;
7373
readConcern?: ReadConcern;
7474
writeConcern?: WriteConcern;

src/operations/count.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export class CountOperation extends CommandOperation<number> {
3232
this.query = filter;
3333
}
3434

35-
override execute(
35+
override executeCallback(
3636
server: Server,
3737
session: ClientSession | undefined,
3838
callback: Callback<number>

src/operations/count_documents.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ export class CountDocumentsOperation extends AggregateOperation<number> {
3232
super(collection.s.namespace, pipeline, options);
3333
}
3434

35-
override execute(
35+
override executeCallback(
3636
server: Server,
3737
session: ClientSession | undefined,
3838
callback: Callback<number>
3939
): void {
40-
super.execute(server, session, (err, result) => {
40+
super.executeCallback(server, session, (err, result) => {
4141
if (err || !result) {
4242
callback(err);
4343
return;

src/operations/create_collection.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export class CreateCollectionOperation extends CommandOperation<Collection> {
121121
this.name = name;
122122
}
123123

124-
override execute(
124+
override executeCallback(
125125
server: Server,
126126
session: ClientSession | undefined,
127127
callback: Callback<Collection>
@@ -170,9 +170,7 @@ export class CreateCollectionOperation extends CommandOperation<Collection> {
170170
if (encryptedFields) {
171171
// Create the required index for queryable encryption support.
172172
const createIndexOp = new CreateIndexOperation(db, name, { __safeContent__: 1 }, {});
173-
await new Promise<void>((resolve, reject) => {
174-
createIndexOp.execute(server, session, err => (err ? reject(err) : resolve()));
175-
});
173+
await createIndexOp.execute(server, session);
176174
}
177175

178176
return coll;

src/operations/delete.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,11 @@ export class DeleteOperation extends CommandOperation<DeleteResult> {
6060
return this.statements.every(op => (op.limit != null ? op.limit > 0 : true));
6161
}
6262

63-
override execute(server: Server, session: ClientSession | undefined, callback: Callback): void {
63+
override executeCallback(
64+
server: Server,
65+
session: ClientSession | undefined,
66+
callback: Callback
67+
): void {
6468
const options = this.options ?? {};
6569
const ordered = typeof options.ordered === 'boolean' ? options.ordered : true;
6670
const command: Document = {
@@ -97,12 +101,12 @@ export class DeleteOneOperation extends DeleteOperation {
97101
super(collection.s.namespace, [makeDeleteStatement(filter, { ...options, limit: 1 })], options);
98102
}
99103

100-
override execute(
104+
override executeCallback(
101105
server: Server,
102106
session: ClientSession | undefined,
103107
callback: Callback<DeleteResult>
104108
): void {
105-
super.execute(server, session, (err, res) => {
109+
super.executeCallback(server, session, (err, res) => {
106110
if (err || res == null) return callback(err);
107111
if (res.code) return callback(new MongoServerError(res));
108112
if (res.writeErrors) return callback(new MongoServerError(res.writeErrors[0]));
@@ -121,12 +125,12 @@ export class DeleteManyOperation extends DeleteOperation {
121125
super(collection.s.namespace, [makeDeleteStatement(filter, options)], options);
122126
}
123127

124-
override execute(
128+
override executeCallback(
125129
server: Server,
126130
session: ClientSession | undefined,
127131
callback: Callback<DeleteResult>
128132
): void {
129-
super.execute(server, session, (err, res) => {
133+
super.executeCallback(server, session, (err, res) => {
130134
if (err || res == null) return callback(err);
131135
if (res.code) return callback(new MongoServerError(res));
132136
if (res.writeErrors) return callback(new MongoServerError(res.writeErrors[0]));

src/operations/distinct.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class DistinctOperation extends CommandOperation<any[]> {
3838
this.query = query;
3939
}
4040

41-
override execute(
41+
override executeCallback(
4242
server: Server,
4343
session: ClientSession | undefined,
4444
callback: Callback<any[]>

src/operations/drop.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export class DropCollectionOperation extends CommandOperation<boolean> {
2626
this.name = name;
2727
}
2828

29-
override execute(
29+
override executeCallback(
3030
server: Server,
3131
session: ClientSession | undefined,
3232
callback: Callback<boolean>
@@ -102,7 +102,7 @@ export class DropDatabaseOperation extends CommandOperation<boolean> {
102102
super(db, options);
103103
this.options = options;
104104
}
105-
override execute(
105+
override executeCallback(
106106
server: Server,
107107
session: ClientSession | undefined,
108108
callback: Callback<boolean>

src/operations/estimated_document_count.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class EstimatedDocumentCountOperation extends CommandOperation<number> {
2727
this.collectionName = collection.collectionName;
2828
}
2929

30-
override execute(
30+
override executeCallback(
3131
server: Server,
3232
session: ClientSession | undefined,
3333
callback: Callback<number>

src/operations/eval.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class EvalOperation extends CommandOperation<Document> {
3838
});
3939
}
4040

41-
override execute(
41+
override executeCallback(
4242
server: Server,
4343
session: ClientSession | undefined,
4444
callback: Callback<Document>

src/operations/execute_operation.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ import {
2525
import type { Topology } from '../sdam/topology';
2626
import type { ClientSession } from '../sessions';
2727
import { type Callback, maybeCallback, supportsRetryableWrites } from '../utils';
28-
import { AbstractOperation, Aspect } from './operation';
28+
import { AbstractCallbackOperation, Aspect } from './operation';
2929

3030
const MMAPv1_RETRY_WRITES_ERROR_CODE = MONGODB_ERROR_CODES.IllegalOperation;
3131
const MMAPv1_RETRY_WRITES_ERROR_MESSAGE =
3232
'This MongoDB deployment does not support retryable writes. Please add retryWrites=false to your connection string.';
3333

34-
type ResultTypeFromOperation<TOperation> = TOperation extends AbstractOperation<infer K>
34+
type ResultTypeFromOperation<TOperation> = TOperation extends AbstractCallbackOperation<infer K>
3535
? K
3636
: never;
3737

@@ -61,29 +61,29 @@ export interface ExecutionResult {
6161
* @param callback - The command result callback
6262
*/
6363
export function executeOperation<
64-
T extends AbstractOperation<TResult>,
64+
T extends AbstractCallbackOperation<TResult>,
6565
TResult = ResultTypeFromOperation<T>
6666
>(client: MongoClient, operation: T): Promise<TResult>;
6767
export function executeOperation<
68-
T extends AbstractOperation<TResult>,
68+
T extends AbstractCallbackOperation<TResult>,
6969
TResult = ResultTypeFromOperation<T>
7070
>(client: MongoClient, operation: T, callback: Callback<TResult>): void;
7171
export function executeOperation<
72-
T extends AbstractOperation<TResult>,
72+
T extends AbstractCallbackOperation<TResult>,
7373
TResult = ResultTypeFromOperation<T>
7474
>(client: MongoClient, operation: T, callback?: Callback<TResult>): Promise<TResult> | void;
7575
export function executeOperation<
76-
T extends AbstractOperation<TResult>,
76+
T extends AbstractCallbackOperation<TResult>,
7777
TResult = ResultTypeFromOperation<T>
7878
>(client: MongoClient, operation: T, callback?: Callback<TResult>): Promise<TResult> | void {
7979
return maybeCallback(() => executeOperationAsync(client, operation), callback);
8080
}
8181

8282
async function executeOperationAsync<
83-
T extends AbstractOperation<TResult>,
83+
T extends AbstractCallbackOperation<TResult>,
8484
TResult = ResultTypeFromOperation<T>
8585
>(client: MongoClient, operation: T): Promise<TResult> {
86-
if (!(operation instanceof AbstractOperation)) {
86+
if (!(operation instanceof AbstractCallbackOperation)) {
8787
// TODO(NODE-3483): Extend MongoRuntimeError
8888
throw new MongoRuntimeError('This method requires a valid operation instance');
8989
}
@@ -152,13 +152,13 @@ async function executeOperationAsync<
152152

153153
if (session == null) {
154154
// No session also means it is not retryable, early exit
155-
return operation.executeAsync(server, undefined);
155+
return operation.execute(server, undefined);
156156
}
157157

158158
if (!operation.hasAspect(Aspect.RETRYABLE)) {
159159
// non-retryable operation, early exit
160160
try {
161-
return await operation.executeAsync(server, session);
161+
return await operation.execute(server, session);
162162
} finally {
163163
if (session?.owner != null && session.owner === owner) {
164164
await session.endSession().catch(() => null);
@@ -184,7 +184,7 @@ async function executeOperationAsync<
184184
}
185185

186186
try {
187-
return await operation.executeAsync(server, session);
187+
return await operation.execute(server, session);
188188
} catch (operationError) {
189189
if (willRetry && operationError instanceof MongoError) {
190190
return await retryOperation(operation, operationError, {
@@ -209,7 +209,7 @@ type RetryOptions = {
209209
};
210210

211211
async function retryOperation<
212-
T extends AbstractOperation<TResult>,
212+
T extends AbstractCallbackOperation<TResult>,
213213
TResult = ResultTypeFromOperation<T>
214214
>(
215215
operation: T,
@@ -257,7 +257,7 @@ async function retryOperation<
257257
}
258258

259259
try {
260-
return await operation.executeAsync(server, session);
260+
return await operation.execute(server, session);
261261
} catch (retryError) {
262262
if (
263263
retryError instanceof MongoError &&

src/operations/find.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export class FindOperation extends CommandOperation<Document> {
102102
this.filter = filter != null && filter._bsontype === 'ObjectId' ? { _id: filter } : filter;
103103
}
104104

105-
override execute(
105+
override executeCallback(
106106
server: Server,
107107
session: ClientSession | undefined,
108108
callback: Callback<Document>

src/operations/find_and_modify.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ class FindAndModifyOperation extends CommandOperation<Document> {
179179
this.query = query;
180180
}
181181

182-
override execute(
182+
override executeCallback(
183183
server: Server,
184184
session: ClientSession | undefined,
185185
callback: Callback<Document>

0 commit comments

Comments
 (0)