Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(NODE-5745): Ignore Read/Write Concern in Atlas Search Index Helpers #4042

Merged
merged 21 commits into from
Apr 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
7d510a3
synced tests
aditi-khare-mongoDB Mar 15, 2024
a1160e2
changed error message
aditi-khare-mongoDB Mar 19, 2024
d1ba807
Merge branch 'main' into NODE-5745/avoid-wr-append-in-atlas-search-in…
aditi-khare-mongoDB Mar 19, 2024
7aa7c86
explicitly remove readConcern and writeConcern from ListSearchIndex h…
aditi-khare-mongoDB Mar 19, 2024
3c8fd8b
added documentation and explicit removal of write/readConcern in list…
aditi-khare-mongoDB Mar 19, 2024
dd4179d
Merge branch 'main' into NODE-5745/avoid-wr-append-in-atlas-search-in…
aditi-khare-mongoDB Mar 19, 2024
27c38dd
added in custom transaction unified test
aditi-khare-mongoDB Mar 20, 2024
a82af7e
Rename search-index-management-with-transaction.json to searchIndexIg…
aditi-khare-mongoDB Mar 20, 2024
7cc6072
lint fix and requested changes
aditi-khare-mongoDB Mar 20, 2024
59ed066
omit readconcern and writeConcern
aditi-khare-mongoDB Mar 20, 2024
0504cad
Merge branch 'main' into NODE-5745/avoid-wr-append-in-atlas-search-in…
aditi-khare-mongoDB Mar 20, 2024
e2a863f
temporary transaction tests
aditi-khare-mongoDB Mar 25, 2024
d7340a3
added ttests to skip in NODE-6047
aditi-khare-mongoDB Mar 25, 2024
e5cf60e
Merge branch 'main' into NODE-5745/avoid-wr-append-in-atlas-search-in…
aditi-khare-mongoDB Apr 5, 2024
fa9d356
flipped assertions and fixed test logic
aditi-khare-mongoDB Apr 5, 2024
f00e3df
Merge branch 'main' into NODE-5745/avoid-wr-append-in-atlas-search-in…
aditi-khare-mongoDB Apr 5, 2024
9111fdc
fixed error assertions
aditi-khare-mongoDB Apr 5, 2024
79600b0
removed extraneous test - not relevant anymore
aditi-khare-mongoDB Apr 5, 2024
259863a
update ListSearchIndexOptions
aditi-khare-mongoDB Apr 10, 2024
515bf74
Merge branch 'main' into NODE-5745/avoid-wr-append-in-atlas-search-in…
aditi-khare-mongoDB Apr 10, 2024
8eb289c
Merge branch 'main' into NODE-5745/avoid-wr-append-in-atlas-search-in…
nbbeeken Apr 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/collection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1074,6 +1074,7 @@ export class Collection<TSchema extends Document = Document> {
): ListSearchIndexesCursor {
options =
typeof indexNameOrOptions === 'object' ? indexNameOrOptions : options == null ? {} : options;

const indexName =
indexNameOrOptions == null
? null
Expand Down
2 changes: 1 addition & 1 deletion src/cursor/list_search_indexes_cursor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { AggregateOptions } from '../operations/aggregate';
import { AggregationCursor } from './aggregation_cursor';

/** @public */
export type ListSearchIndexesOptions = AggregateOptions;
export type ListSearchIndexesOptions = Omit<AggregateOptions, 'readConcern' | 'writeConcern'>;

/** @public */
export class ListSearchIndexesCursor extends AggregationCursor<{ name: string }> {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import { expect } from 'chai';

import { type Collection, type CommandStartedEvent, type MongoClient } from '../../mongodb';

describe('Search Index Management Integration Tests', function () {
describe('read concern and write concern ', function () {
let client: MongoClient;
let collection: Collection;
let commandStartedEvents: CommandStartedEvent[];

beforeEach(async function () {
client = this.configuration.newClient({}, { monitorCommands: true });
await client.connect();
collection = client.db('client').collection('searchIndexManagement');
commandStartedEvents = [];
client.on('commandStarted', e => commandStartedEvents.push(e));
});

afterEach(async function () {
await client.close();
});

context('when listSearchIndexes operation is run with causalConsistency', function () {
it('should not include write concern or read concern in command', {
metadata: {
requires: {
topology: '!single',
mongodb: '>=7.0',
serverless: 'forbid'
}
},
test: async function () {
await client.withSession({ causalConsistency: true }, async session => {
const res = collection.listSearchIndexes({ session });
await res.toArray().catch(e => expect(e.errmsg).to.match(/^.*Atlas.*$/));
expect(commandStartedEvents[0]).to.exist;
expect(commandStartedEvents[0]?.command?.readConcern).to.not.exist;
expect(commandStartedEvents[0]?.command?.writeConcern).to.not.exist;
});
}
});
});

context('when listSearchIndexes operation is run with snapshot on', function () {
// TODO(NODE-6047): Ignore read/write concern in applySession for Atlas Search Index Helpers
it('should include write concern or read concern in command - TODO(NODE-6047)', {
metadata: {
requires: {
topology: ['replicaset', 'sharded'],
nbbeeken marked this conversation as resolved.
Show resolved Hide resolved
mongodb: '>=7.0',
serverless: 'forbid'
}
},
test: async function () {
await client.withSession({ snapshot: true }, async session => {
const res = collection.listSearchIndexes({ session });
const error = await res.toArray().catch(e => e);
expect(error.errmsg).to.match(/^.*snapshot.*$/);
expect(commandStartedEvents[0]).to.exist;
// flip assertion after NODE-6047 implementation
expect(commandStartedEvents[0]?.command?.readConcern).to.exist;
expect(commandStartedEvents[0]?.command?.writeConcern).to.not.exist;
});
}
});
});
});
});
252 changes: 252 additions & 0 deletions test/spec/index-management/searchIndexIgnoresReadWriteConcern.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
{
"description": "search index operations ignore read and write concern",
"schemaVersion": "1.4",
"createEntities": [
{
"client": {
"id": "client0",
"useMultipleMongoses": false,
"uriOptions": {
"readConcernLevel": "local",
"w": 1
},
"observeEvents": [
"commandStartedEvent"
]
}
},
{
"database": {
"id": "database0",
"client": "client0",
"databaseName": "database0"
}
},
{
"collection": {
"id": "collection0",
"database": "database0",
"collectionName": "collection0"
}
}
],
"runOnRequirements": [
{
"minServerVersion": "7.0.0",
"topologies": [
"replicaset",
"load-balanced",
"sharded"
],
"serverless": "forbid"
}
],
"tests": [
{
"description": "createSearchIndex ignores read and write concern",
"operations": [
{
"name": "createSearchIndex",
"object": "collection0",
"arguments": {
"model": {
"definition": {
"mappings": {
"dynamic": true
}
}
}
},
"expectError": {
"isError": true,
"errorContains": "Atlas"
}
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"createSearchIndexes": "collection0",
"indexes": [
{
"definition": {
"mappings": {
"dynamic": true
}
}
}
],
"$db": "database0",
"writeConcern": {
"$$exists": false
},
"readConcern": {
"$$exists": false
}
}
}
}
]
}
]
},
{
"description": "createSearchIndexes ignores read and write concern",
"operations": [
{
"name": "createSearchIndexes",
"object": "collection0",
"arguments": {
"models": []
},
"expectError": {
"isError": true,
"errorContains": "Atlas"
}
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"createSearchIndexes": "collection0",
"indexes": [],
"$db": "database0",
"writeConcern": {
"$$exists": false
},
"readConcern": {
"$$exists": false
}
}
}
}
]
}
]
},
{
"description": "dropSearchIndex ignores read and write concern",
"operations": [
{
"name": "dropSearchIndex",
"object": "collection0",
"arguments": {
"name": "test index"
},
"expectError": {
"isError": true,
"errorContains": "Atlas"
}
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"dropSearchIndex": "collection0",
"name": "test index",
"$db": "database0",
"writeConcern": {
"$$exists": false
},
"readConcern": {
"$$exists": false
}
}
}
}
]
}
]
},
{
"description": "listSearchIndexes ignores read and write concern",
"operations": [
{
"name": "listSearchIndexes",
"object": "collection0",
"expectError": {
"isError": true,
"errorContains": "Atlas"
}
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"aggregate": "collection0",
"pipeline": [
{
"$listSearchIndexes": {}
}
],
"writeConcern": {
"$$exists": false
},
"readConcern": {
"$$exists": false
}
}
}
}
]
}
]
},
{
"description": "updateSearchIndex ignores the read and write concern",
"operations": [
{
"name": "updateSearchIndex",
"object": "collection0",
"arguments": {
"name": "test index",
"definition": {}
},
"expectError": {
"isError": true,
"errorContains": "Atlas"
}
}
],
"expectEvents": [
{
"client": "client0",
"events": [
{
"commandStartedEvent": {
"command": {
"updateSearchIndex": "collection0",
"name": "test index",
"definition": {},
"$db": "database0",
"writeConcern": {
"$$exists": false
},
"readConcern": {
"$$exists": false
}
}
}
}
]
}
]
}
]
}
Loading
Loading