Skip to content

Commit 14a9e20

Browse files
PR requested changes 0
1 parent afa135d commit 14a9e20

File tree

4 files changed

+56
-46
lines changed

4 files changed

+56
-46
lines changed

src/mongo_logger.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,8 @@ function defaultLogTransform(
379379
return log;
380380
case SERVER_SELECTION_SUCCEEDED:
381381
log = attachServerSelectionFields(log, logObject, maxDocumentLength);
382-
log = attachConnectionFields(log, logObject);
382+
log.serverHost = logObject.serverHost;
383+
log.serverPort = logObject.serverPort;
383384
return log;
384385
case WAITING_FOR_SUITABLE_SERVER:
385386
log = attachServerSelectionFields(log, logObject, maxDocumentLength);

src/sdam/server_selection_events.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { HostAddress } from '.././utils';
12
import {
23
SERVER_SELECTION_FAILED,
34
SERVER_SELECTION_STARTED,
@@ -36,10 +37,10 @@ export abstract class ServerSelectionEvent {
3637
constructor(
3738
selector: string | ReadPreference | ServerSelector,
3839
topologyDescription: TopologyDescription,
39-
operation?: string
40+
operation: string
4041
) {
4142
this.selector = selector;
42-
this.operation = operation ?? 'n/a';
43+
this.operation = operation;
4344
this.topologyDescription = topologyDescription;
4445
}
4546
}
@@ -58,7 +59,7 @@ export class ServerSelectionStartedEvent extends ServerSelectionEvent {
5859
constructor(
5960
selector: string | ReadPreference | ServerSelector,
6061
topologyDescription: TopologyDescription,
61-
operation?: string
62+
operation: string
6263
) {
6364
super(selector, topologyDescription, operation);
6465
}
@@ -81,7 +82,7 @@ export class ServerSelectionFailedEvent extends ServerSelectionEvent {
8182
selector: string | ReadPreference | ServerSelector,
8283
topologyDescription: TopologyDescription,
8384
error: Error,
84-
operation?: string
85+
operation: string
8586
) {
8687
super(selector, topologyDescription, operation);
8788
this.failure = error;
@@ -97,18 +98,22 @@ export class ServerSelectionSucceededEvent extends ServerSelectionEvent {
9798
/** @internal */
9899
name = SERVER_SELECTION_SUCCEEDED;
99100
message = 'Server selection succeeded';
100-
/** The address (host/port pair) of the pool */
101-
address: string;
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. When the user does not specify a port and the default (27017) is used, the driver SHOULD include it here. */
104+
serverPort: number | undefined;
102105

103106
/** @internal */
104107
constructor(
105108
selector: string | ReadPreference | ServerSelector,
106109
topologyDescription: TopologyDescription,
107110
address: string,
108-
operation?: string
111+
operation: string
109112
) {
110113
super(selector, topologyDescription, operation);
111-
this.address = address;
114+
const { host, port } = HostAddress.fromString(address).toHostPort();
115+
this.serverHost = host;
116+
this.serverPort = port;
112117
}
113118
}
114119

@@ -129,7 +134,7 @@ export class WaitingForSuitableServerEvent extends ServerSelectionEvent {
129134
selector: string | ReadPreference | ServerSelector,
130135
topologyDescription: TopologyDescription,
131136
remainingTimeMS: number,
132-
operation?: string
137+
operation: string
133138
) {
134139
super(selector, topologyDescription, operation);
135140
this.remainingTimeMS = remainingTimeMS;

src/sdam/topology.ts

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ export interface ServerSelectionRequest {
106106
callback: ServerSelectionCallback;
107107
[kCancelled]?: boolean;
108108
timeoutController: TimeoutController;
109-
operationName?: string;
109+
operationName: string;
110110
waitingLogged: boolean;
111111
}
112112

@@ -172,7 +172,7 @@ export interface SelectServerOptions {
172172
/** How long to block for server selection before throwing an error */
173173
serverSelectionTimeoutMS?: number;
174174
session?: ClientSession;
175-
operationName?: string;
175+
operationName: string;
176176
}
177177

178178
/** @public */
@@ -455,36 +455,40 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
455455
callback ? callback(error) : this.emit(Topology.ERROR, error);
456456

457457
const readPreference = options.readPreference ?? ReadPreference.primary;
458-
options = Object.assign({ operationName: 'ping' }, options);
459-
this.selectServer(readPreferenceServerSelector(readPreference), options, (err, server) => {
460-
if (err) {
461-
return this.close({ force: false }, () => exitWithError(err));
462-
}
458+
const selectServerOptions = { operationName: 'ping', ...options };
459+
this.selectServer(
460+
readPreferenceServerSelector(readPreference),
461+
selectServerOptions,
462+
(err, server) => {
463+
if (err) {
464+
return this.close({ force: false }, () => exitWithError(err));
465+
}
463466

464-
// TODO: NODE-2471
465-
const skipPingOnConnect = this.s.options[Symbol.for('@@mdb.skipPingOnConnect')] === true;
466-
if (!skipPingOnConnect && server && this.s.credentials) {
467-
server.command(ns('admin.$cmd'), { ping: 1 }, {}, err => {
468-
if (err) {
469-
return exitWithError(err);
470-
}
467+
// TODO: NODE-2471
468+
const skipPingOnConnect = this.s.options[Symbol.for('@@mdb.skipPingOnConnect')] === true;
469+
if (!skipPingOnConnect && server && this.s.credentials) {
470+
server.command(ns('admin.$cmd'), { ping: 1 }, {}, err => {
471+
if (err) {
472+
return exitWithError(err);
473+
}
471474

472-
stateTransition(this, STATE_CONNECTED);
473-
this.emit(Topology.OPEN, this);
474-
this.emit(Topology.CONNECT, this);
475+
stateTransition(this, STATE_CONNECTED);
476+
this.emit(Topology.OPEN, this);
477+
this.emit(Topology.CONNECT, this);
475478

476-
callback?.(undefined, this);
477-
});
479+
callback?.(undefined, this);
480+
});
478481

479-
return;
480-
}
482+
return;
483+
}
481484

482-
stateTransition(this, STATE_CONNECTED);
483-
this.emit(Topology.OPEN, this);
484-
this.emit(Topology.CONNECT, this);
485+
stateTransition(this, STATE_CONNECTED);
486+
this.emit(Topology.OPEN, this);
487+
this.emit(Topology.CONNECT, this);
485488

486-
callback?.(undefined, this);
487-
});
489+
callback?.(undefined, this);
490+
}
491+
);
488492
}
489493

490494
/** Close this topology */
@@ -559,7 +563,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
559563

560564
this.client.mongoLogger.debug(
561565
MongoLoggableComponent.SERVER_SELECTION,
562-
new ServerSelectionStartedEvent(selector, this.description, options?.operationName)
566+
new ServerSelectionStartedEvent(selector, this.description, options.operationName)
563567
);
564568

565569
options = Object.assign(
@@ -579,7 +583,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
579583
selector,
580584
this.description,
581585
transaction.server.pool.address,
582-
options?.operationName
586+
options.operationName
583587
)
584588
);
585589
callback(undefined, transaction.server);
@@ -593,7 +597,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
593597
transaction,
594598
callback,
595599
timeoutController: new TimeoutController(options.serverSelectionTimeoutMS),
596-
operationName: options?.operationName,
600+
operationName: options.operationName,
597601
waitingLogged: false
598602
};
599603

@@ -610,7 +614,7 @@ export class Topology extends TypedEventEmitter<TopologyEvents> {
610614
selector,
611615
this.description,
612616
timeoutError,
613-
options?.operationName
617+
options.operationName
614618
)
615619
);
616620
waitQueueMember.callback(timeoutError);
@@ -895,7 +899,7 @@ function drainWaitQueue(queue: List<ServerSelectionRequest>, err?: MongoDriverEr
895899
waitQueueMember.serverSelector,
896900
waitQueueMember.topologyDescription,
897901
err,
898-
waitQueueMember?.operationName
902+
waitQueueMember.operationName
899903
)
900904
);
901905
}
@@ -937,7 +941,7 @@ function processWaitQueue(topology: Topology) {
937941
waitQueueMember.serverSelector,
938942
topology.description,
939943
e,
940-
waitQueueMember?.operationName
944+
waitQueueMember.operationName
941945
)
942946
);
943947
waitQueueMember.callback(e);
@@ -953,7 +957,7 @@ function processWaitQueue(topology: Topology) {
953957
waitQueueMember.serverSelector,
954958
topology.description,
955959
waitQueueMember.timeoutController.getRemainingTimeMS(),
956-
waitQueueMember?.operationName
960+
waitQueueMember.operationName
957961
)
958962
);
959963
waitQueueMember.waitingLogged = true;
@@ -984,7 +988,7 @@ function processWaitQueue(topology: Topology) {
984988
waitQueueMember.serverSelector,
985989
topology.description,
986990
error,
987-
waitQueueMember?.operationName
991+
waitQueueMember.operationName
988992
)
989993
);
990994
waitQueueMember.callback(error);
@@ -1003,7 +1007,7 @@ function processWaitQueue(topology: Topology) {
10031007
waitQueueMember.serverSelector,
10041008
waitQueueMember.topologyDescription,
10051009
selectedServer.pool.address,
1006-
waitQueueMember?.operationName
1010+
waitQueueMember.operationName
10071011
)
10081012
);
10091013
waitQueueMember.callback(undefined, selectedServer);

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

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

4-
describe.only('Server Selection Unified Tests (Node Driver)', function () {
4+
describe('Server Selection Unified Tests (Node Driver)', function () {
55
/* TODO(NODE-2471) ping on connect
66
* TODO(NODE-5774) duplicate server selection for bulkWrite and other wrapper operations
77
* Remove once the actual unified tests (test/spec/server-selection/logging) are passing

0 commit comments

Comments
 (0)