Skip to content

Commit e769798

Browse files
Added filter to remove duplicate serverSelections performed during bulkWrite for spec tests
1 parent d05f23e commit e769798

File tree

6 files changed

+31
-23
lines changed

6 files changed

+31
-23
lines changed

src/sdam/server_selection_events.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,8 @@ export class ServerSelectionSucceededEvent extends ServerSelectionEvent {
9898
/** @internal */
9999
name = SERVER_SELECTION_SUCCEEDED;
100100
message = 'Server selection succeeded';
101-
/** The hostname, IP address, or Unix domain socket path for the selected server.*/
102-
serverHost: string;
103-
/** The port for the selected server. Optional; not present for Unix domain sockets.
104-
* When the user does not specify a port and the default (27017) is used
105-
* */
106-
serverPort: number;
101+
/** The address (host/port pair) of the pool */
102+
address: string;
107103

108104
/** @internal */
109105
constructor(
@@ -113,9 +109,7 @@ export class ServerSelectionSucceededEvent extends ServerSelectionEvent {
113109
operation?: string
114110
) {
115111
super(selector, topologyDescription, operation);
116-
const { host, port } = HostAddress.fromString(address).toHostPort();
117-
this.serverHost = host;
118-
this.serverPort = port;
112+
this.address = address;
119113
}
120114
}
121115

src/sdam/topology.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export interface ServerSelectionRequest {
107107
[kCancelled]?: boolean;
108108
timeoutController: TimeoutController;
109109
operationName?: string;
110+
waitingLogged: boolean;
110111
}
111112

112113
/** @internal */
@@ -591,7 +592,8 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
591592
transaction,
592593
callback,
593594
timeoutController: new TimeoutController(options.serverSelectionTimeoutMS),
594-
operationName: options?.operationName
595+
operationName: options?.operationName,
596+
waitingLogged: false
595597
};
596598

597599
waitQueueMember.timeoutController.signal.addEventListener('abort', () => {
@@ -614,14 +616,6 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
614616
});
615617

616618
this[kWaitQueue].push(waitQueueMember);
617-
this.client.mongoLogger.info(
618-
MongoLoggableComponent.SERVER_SELECTION,
619-
new WaitingForSuitableServerEvent(
620-
selector,
621-
this.description,
622-
waitQueueMember.timeoutController.getRemainingTimeMS()
623-
)
624-
);
625619
processWaitQueue(this);
626620
}
627621

@@ -951,6 +945,18 @@ function processWaitQueue(topology: Topology) {
951945

952946
let selectedServer: Server | undefined;
953947
if (selectedDescriptions.length === 0) {
948+
if (!waitQueueMember.waitingLogged) {
949+
topology.client.mongoLogger.info(
950+
MongoLoggableComponent.SERVER_SELECTION,
951+
new WaitingForSuitableServerEvent(
952+
waitQueueMember.serverSelector,
953+
topology.description,
954+
waitQueueMember.timeoutController.getRemainingTimeMS(),
955+
waitQueueMember?.operationName
956+
)
957+
);
958+
waitQueueMember.waitingLogged = true;
959+
}
954960
topology[kWaitQueue].push(waitQueueMember);
955961
continue;
956962
} else if (selectedDescriptions.length === 1) {

src/utils.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1272,13 +1272,15 @@ export async function request(
12721272
export class TimeoutController extends AbortController {
12731273
/** time that timeout begins */
12741274
private startTime: number;
1275+
private timeoutTimeMS: number;
12751276

12761277
constructor(
12771278
timeout = 0,
12781279
private timeoutId = timeout > 0 ? setTimeout(() => this.abort(), timeout) : null
12791280
) {
12801281
super();
12811282
this.startTime = Date.now();
1283+
this.timeoutTimeMS = timeout;
12821284
}
12831285

12841286
clear() {
@@ -1289,7 +1291,7 @@ export class TimeoutController extends AbortController {
12891291
}
12901292

12911293
getRemainingTimeMS() {
1292-
return this.timeoutId ? Infinity : (Date.now() - this.startTime) / 1000;
1294+
return Math.max(this.timeoutTimeMS - (Date.now() - this.startTime) / 1000, 0);
12931295
}
12941296
}
12951297

test/integration/server-selection/server_selection.spec.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as path from 'path';
33
import { loadSpecTests } from '../../spec';
44
import { runUnifiedSuite } from '../../tools/unified-spec-runner/runner';
55

6-
describe('Server Selection Tests - Unified', function () {
6+
describe.only('Server Selection Tests - Unified', function () {
77
const tests = loadSpecTests(path.join('server-selection', 'logging'));
88
runUnifiedSuite(tests, test => {
99
if (

test/tools/unified-spec-runner/match.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -604,8 +604,7 @@ export function compareLogs(
604604
actual: ExpectedLogMessage[],
605605
entities: EntitiesMap
606606
): void {
607-
console.log('ACTUAL:', actual);
608-
console.log('EXPECTED:', expected);
607+
609608
expect(actual).to.have.lengthOf(expected.length);
610609

611610
for (const [index, actualLog] of actual.entries()) {

test/tools/unified-spec-runner/runner.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,14 @@ async function runUnifiedTest(
232232
const testClient = clientList.get(clientId);
233233

234234
expect(testClient, `No client entity found with id ${clientId}`).to.exist;
235-
compareLogs(expectedLogsForClient.messages, testClient!.collectedLogs, entities);
235+
236+
// TODO NODE-2471 and NODE-5774
237+
const filteredLogs = testClient!.collectedLogs.filter(
238+
log =>
239+
testClient!.mongoLogger.componentSeverities.serverSelection === 'off' ||
240+
log?.data?.operation !== 'n/a'
241+
);
242+
compareLogs(expectedLogsForClient.messages, filteredLogs, entities);
236243
}
237244
}
238245

0 commit comments

Comments
 (0)