Skip to content

Commit ce7f344

Browse files
move endSessions to own file
1 parent afe12bb commit ce7f344

2 files changed

Lines changed: 46 additions & 24 deletions

File tree

src/mongo_client.ts

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { promises as fs } from 'fs';
22
import type { TcpNetConnectOpts } from 'net';
33
import type { ConnectionOptions as TLSConnectionOptions, TLSSocketOptions } from 'tls';
44

5-
import { type ServerCommandOptions, type TimeoutContext, TopologyType } from '.';
5+
import { TopologyType } from '.';
66
import { type BSONSerializeOptions, type Document, resolveBSONOptions } from './bson';
77
import { ChangeStream, type ChangeStreamDocument, type ChangeStreamOptions } from './change_stream';
88
import type { AutoEncrypter, AutoEncryptionOptions } from './client-side-encryption/auto_encrypter';
@@ -22,7 +22,6 @@ import {
2222
makeClientMetadata
2323
} from './cmap/handshake/client_metadata';
2424
import type { CompressorName } from './cmap/wire_protocol/compression';
25-
import { MongoDBResponse } from './cmap/wire_protocol/responses';
2625
import { parseOptions, resolveSRVRecord } from './connection_string';
2726
import { MONGO_CLIENT_EVENTS } from './constants';
2827
import { type AbstractCursor } from './cursor/abstract_cursor';
@@ -44,8 +43,8 @@ import {
4443
type ClientBulkWriteResult
4544
} from './operations/client_bulk_write/common';
4645
import { ClientBulkWriteExecutor } from './operations/client_bulk_write/executor';
46+
import { EndSessionsOperation } from './operations/end_sessions';
4747
import { executeOperation } from './operations/execute_operation';
48-
import { AbstractOperation } from './operations/operation';
4948
import type { ReadConcern, ReadConcernLevel, ReadConcernLike } from './read_concern';
5049
import { ReadPreference, type ReadPreferenceMode } from './read_preference';
5150
import { type AsyncDisposable, configureResourceManagement } from './resource_management';
@@ -63,7 +62,7 @@ import {
6362
type HostAddress,
6463
hostMatchesWildcards,
6564
isHostMatch,
66-
MongoDBNamespace,
65+
type MongoDBNamespace,
6766
noop,
6867
ns,
6968
resolveOptions,
@@ -827,26 +826,7 @@ export class MongoClient extends TypedEventEmitter<MongoClientEvents> implements
827826
const endSessions = Array.from(client.s.sessionPool.sessions, ({ id }) => id);
828827
if (endSessions.length !== 0) {
829828
try {
830-
class EndSessionsOperation extends AbstractOperation<void> {
831-
override ns = MongoDBNamespace.fromString('admin.$cmd');
832-
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
833-
override buildCommand(_connection: Connection, _session?: ClientSession): Document {
834-
return {
835-
endSessions
836-
};
837-
}
838-
override buildOptions(timeoutContext: TimeoutContext): ServerCommandOptions {
839-
return {
840-
timeoutContext,
841-
readPreference: ReadPreference.primaryPreferred,
842-
noResponse: true
843-
};
844-
}
845-
override get commandName(): string {
846-
return 'endSessions';
847-
}
848-
}
849-
await executeOperation(client, new EndSessionsOperation());
829+
await executeOperation(client, new EndSessionsOperation(endSessions));
850830
} catch (error) {
851831
squashError(error);
852832
}

src/operations/end_sessions.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
type ClientSession,
3+
type Connection,
4+
type ServerCommandOptions,
5+
type ServerSessionId,
6+
type TimeoutContext
7+
} from '..';
8+
import { type Document } from '../bson';
9+
import { MongoDBResponse } from '../cmap/wire_protocol/responses';
10+
import { ReadPreference } from '../read_preference';
11+
import { MongoDBNamespace } from '../utils';
12+
import { AbstractOperation } from './operation';
13+
14+
export class EndSessionsOperation extends AbstractOperation<void> {
15+
override ns = MongoDBNamespace.fromString('admin.$cmd');
16+
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
17+
18+
private sessions: Array<ServerSessionId>;
19+
20+
constructor(sessions: Array<ServerSessionId>) {
21+
super();
22+
this.sessions = sessions;
23+
}
24+
25+
override buildCommand(_connection: Connection, _session?: ClientSession): Document {
26+
return {
27+
endSessions: this.sessions
28+
};
29+
}
30+
31+
override buildOptions(timeoutContext: TimeoutContext): ServerCommandOptions {
32+
return {
33+
timeoutContext,
34+
readPreference: ReadPreference.primaryPreferred,
35+
noResponse: true
36+
};
37+
}
38+
39+
override get commandName(): string {
40+
return 'endSessions';
41+
}
42+
}

0 commit comments

Comments
 (0)