Skip to content

Commit a8d7c5f

Browse files
feat(NODE-4243): drop collection checks ns not found (#4742)
Co-authored-by: bailey <[email protected]>
1 parent b6ce345 commit a8d7c5f

38 files changed

+105
-198
lines changed

src/operations/drop.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { type Connection, MongoServerError } from '..';
1+
import { type Connection, type MongoError, MongoServerError } from '..';
22
import type { Document } from '../bson';
33
import { MongoDBResponse } from '../cmap/wire_protocol/responses';
44
import { CursorTimeoutContext } from '../cursor/abstract_cursor';
@@ -40,6 +40,13 @@ export class DropCollectionOperation extends CommandOperation<boolean> {
4040
override handleOk(_response: InstanceType<typeof this.SERVER_COMMAND_RESPONSE_TYPE>): boolean {
4141
return true;
4242
}
43+
44+
override handleError(error: MongoError): boolean {
45+
if (!(error instanceof MongoServerError)) throw error;
46+
if (Number(error.code) !== MONGODB_ERROR_CODES.NamespaceNotFound) throw error;
47+
48+
return false;
49+
}
4350
}
4451

4552
export async function dropCollections(
@@ -83,16 +90,7 @@ export async function dropCollections(
8390
for (const collectionName of [escCollection, ecocCollection]) {
8491
// Drop auxilliary collections, ignoring potential NamespaceNotFound errors.
8592
const dropOp = new DropCollectionOperation(db, collectionName, options);
86-
try {
87-
await executeOperation(db.client, dropOp, timeoutContext);
88-
} catch (err) {
89-
if (
90-
!(err instanceof MongoServerError) ||
91-
err.code !== MONGODB_ERROR_CODES.NamespaceNotFound
92-
) {
93-
throw err;
94-
}
95-
}
93+
await executeOperation(db.client, dropOp, timeoutContext);
9694
}
9795
}
9896

test/benchmarks/driver_bench/src/driver.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ export class DriverTester {
202202
const utilClient = new MongoClient(MONGODB_URI, MONGODB_CLIENT_OPTIONS);
203203
const db = utilClient.db(DB_NAME);
204204
const collection = db.collection(COLLECTION_NAME);
205-
await collection.drop().catch(() => null);
205+
await collection.drop();
206206
await db.dropDatabase().catch(() => null);
207207
await utilClient.close();
208208
}

test/benchmarks/driver_bench/src/suites/multi_bench/grid_fs_download.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export async function before() {
2020

2121
bucket = driver.bucket(driver.client.db(driver.DB_NAME));
2222

23-
await bucket.drop().catch(() => null);
23+
await bucket.drop();
2424

2525
// Create the bucket.
2626
const stream = bucket.openUploadStream('gridfstest');

test/benchmarks/driver_bench/src/suites/multi_bench/grid_fs_upload.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export async function before() {
1818

1919
bucket = driver.bucket(driver.client.db(driver.DB_NAME));
2020

21-
await bucket.drop().catch(() => null);
21+
await bucket.drop();
2222
}
2323

2424
export async function beforeEach() {

test/benchmarks/driver_bench/src/suites/parallel_bench/gridfs_multi_file_download.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export async function before() {
1515
await driver.resetTmpDir();
1616

1717
bucket = driver.bucket(driver.client.db(driver.DB_NAME));
18-
await bucket.drop().catch(() => null);
18+
await bucket.drop();
1919

2020
const gridfs_multi = path.resolve(PARALLEL_DIRECTORY, 'gridfs_multi');
2121

test/benchmarks/driver_bench/src/suites/parallel_bench/gridfs_multi_file_upload.mts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export async function before() {
1818

1919
bucket = driver.bucket(driver.client.db(driver.DB_NAME));
2020

21-
await bucket.drop().catch(() => null);
21+
await bucket.drop();
2222
}
2323

2424
export async function beforeEach() {

test/integration/change-streams/change_stream.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ describe('Change Streams', function () {
563563
async test() {
564564
const collection = db.collection('resumeAfterTest2');
565565

566-
await collection.drop().catch(() => null);
566+
await collection.drop();
567567

568568
let resumeToken;
569569
const docs = [{ a: 0 }, { a: 1 }, { a: 2 }];

test/integration/client-side-encryption/client_side_encryption.prose.06.corpus.test.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,7 @@ describe('Client Side Encryption Prose Corpus Test', function () {
143143
await client.connect();
144144
// 3. Using ``client``, drop the collection ``keyvault.datakeys``. Insert the documents `corpus/corpus-key-local.json <../corpus/corpus-key-local.json>`_ and `corpus/corpus-key-aws.json <../corpus/corpus-key-aws.json>`_.
145145
const keyDb = client.db(keyVaultDbName);
146-
await keyDb
147-
.dropCollection(keyVaultCollName, { writeConcern: new WriteConcern('majority') })
148-
.catch((e: Error) => {
149-
if (!/ns/i.test(e.message)) {
150-
throw e;
151-
}
152-
});
146+
await keyDb.dropCollection(keyVaultCollName, { writeConcern: new WriteConcern('majority') });
153147
const keyColl = keyDb.collection(keyVaultCollName);
154148
await keyColl.insertMany(
155149
[corpusKeyLocal, corpusKeyAws, corpusKeyAzure, corpusKeyGcp, corpusKeyKmip],
@@ -164,13 +158,7 @@ describe('Client Side Encryption Prose Corpus Test', function () {
164158
beforeEach(async function () {
165159
// 2. Using ``client``, drop and create the collection ``db.coll`` configured with the included JSON schema `corpus/corpus-schema.json <../corpus/corpus-schema.json>`_.
166160
const dataDb = client.db(dataDbName);
167-
await dataDb
168-
.dropCollection(dataCollName, { writeConcern: new WriteConcern('majority') })
169-
.catch((e: Error) => {
170-
if (!/ns/i.test(e.message)) {
171-
throw e;
172-
}
173-
});
161+
await dataDb.dropCollection(dataCollName, { writeConcern: new WriteConcern('majority') });
174162
await dataDb.createCollection(dataCollName, {
175163
validator: { $jsonSchema: corpusSchema },
176164
writeConcern: new WriteConcern('majority')

test/integration/client-side-encryption/client_side_encryption.prose.14.decryption_events.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ describe('14. Decryption Events', metadata, function () {
4343
.collection('decryption_events')
4444
.deleteMany({})
4545
.catch(() => null);
46-
await db.dropCollection('decryption_events').catch(() => null);
46+
await db.dropCollection('decryption_events');
4747
await db.createCollection('decryption_events');
4848
// Create a ClientEncryption object named ``clientEncryption`` with these options:
4949
// ClientEncryptionOpts {

test/integration/client-side-encryption/client_side_encryption.prose.22.range_explicit_encryption.test.ts

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -171,26 +171,12 @@ describe('Range Explicit Encryption', function () {
171171

172172
await utilClient.db('db').dropDatabase();
173173

174-
await utilClient
175-
.db('db')
176-
.dropCollection('explicit_encryption')
177-
.catch(e => {
178-
if (!/ns not found/.test(e.message)) {
179-
throw e;
180-
}
181-
});
174+
await utilClient.db('db').dropCollection('explicit_encryption');
182175
await utilClient.db('db').createCollection('explicit_encryption', {
183176
encryptedFields
184177
});
185178

186-
await utilClient
187-
.db('keyvault')
188-
.dropCollection('datakeys')
189-
.catch(e => {
190-
if (!/ns not found/.test(e.message)) {
191-
throw e;
192-
}
193-
});
179+
await utilClient.db('keyvault').dropCollection('datakeys');
194180

195181
await utilClient.db('keyvault').createCollection('datakeys');
196182

0 commit comments

Comments
 (0)