Skip to content

Commit 401163c

Browse files
committed
fixup: full flexibility for individual shards
1 parent acfe911 commit 401163c

File tree

2 files changed

+35
-45
lines changed

2 files changed

+35
-45
lines changed

packages/mongodb-runner/src/mongocluster.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -500,9 +500,9 @@ describe('MongoCluster', function () {
500500
topology: 'sharded',
501501
tmpDir,
502502
secondaries: 0,
503-
shardArgs: [
504-
['--setParameter', 'cursorTimeoutMillis=60000'],
505-
['--setParameter', 'cursorTimeoutMillis=50000'],
503+
shards: [
504+
{ args: ['--setParameter', 'cursorTimeoutMillis=60000'] },
505+
{ args: ['--setParameter', 'cursorTimeoutMillis=50000'] },
506506
],
507507
});
508508

packages/mongodb-runner/src/mongocluster.ts

Lines changed: 32 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -51,30 +51,16 @@ export interface CommonOptions {
5151
topology: 'standalone' | 'replset' | 'sharded';
5252
}
5353

54-
export type RSOptions =
55-
| {
56-
arbiters?: number;
57-
secondaries?: number;
58-
rsMembers?: never;
59-
}
60-
| {
61-
arbiters?: never;
62-
secondaries?: never;
63-
rsMembers: RSMemberOptions[];
64-
};
54+
export type RSOptions = {
55+
arbiters?: number;
56+
secondaries?: number;
57+
rsMembers?: RSMemberOptions[];
58+
};
6559

6660
export type ShardedOptions = {
6761
mongosArgs?: string[][];
68-
} & (
69-
| {
70-
shards?: number;
71-
shardArgs?: never;
72-
}
73-
| {
74-
shards?: never;
75-
shardArgs?: string[][];
76-
}
77-
);
62+
shards?: number | Partial<MongoClusterOptions>[];
63+
};
7864

7965
export type MongoClusterOptions = Pick<
8066
MongoServerOptions,
@@ -167,25 +153,29 @@ function processRSMembers(options: MongoClusterOptions): {
167153
}
168154

169155
function processShardOptions(options: MongoClusterOptions): {
170-
shardArgs: string[][];
156+
shards: Partial<MongoClusterOptions>[];
171157
mongosArgs: string[][];
172158
} {
173-
const {
174-
shardArgs = range((options.shards ?? 3) + 1).map(() => []),
175-
mongosArgs = [[]],
176-
args = [],
177-
} = options;
159+
const shards: Partial<MongoClusterOptions>[] =
160+
typeof options.shards === 'number' || !options.shards
161+
? range((options.shards ?? 3) + 1).map(
162+
() => ({}) as Partial<MongoClusterOptions>,
163+
)
164+
: options.shards;
165+
const { mongosArgs = [[]], args = [] } = options;
178166
return {
179-
shardArgs: shardArgs.map((perShardArgs, i) => [
180-
...removePortArg(args),
181-
...perShardArgs,
182-
...(perShardArgs.includes('--configsvr') ||
183-
perShardArgs.includes('--shardsvr')
184-
? []
185-
: i === 0
186-
? ['--configsvr']
187-
: ['--shardsvr']),
188-
]),
167+
shards: shards.map(({ args = [], ...perShardOpts }, i) => ({
168+
...perShardOpts,
169+
args: [
170+
...removePortArg(args),
171+
...args,
172+
...(args.includes('--configsvr') || args.includes('--shardsvr')
173+
? []
174+
: i === 0
175+
? ['--configsvr']
176+
: ['--shardsvr']),
177+
],
178+
})),
189179
mongosArgs: mongosArgs.map((perMongosArgs, i) => [
190180
...(i === 0 && !hasPortArg(perMongosArgs) ? args : removePortArg(args)),
191181
...perMongosArgs,
@@ -414,14 +404,14 @@ export class MongoCluster extends EventEmitter<MongoClusterEvents> {
414404
}
415405
});
416406
} else if (options.topology === 'sharded') {
417-
const { shardArgs, mongosArgs } = processShardOptions(options);
418-
debug('starting config server and shard servers', shardArgs);
407+
const { shards, mongosArgs } = processShardOptions(options);
408+
debug('starting config server and shard servers', shards);
419409
const allShards = await Promise.all(
420-
shardArgs.map(async (args) => {
421-
const isConfig = args.includes('--configsvr');
410+
shards.map(async (s) => {
411+
const isConfig = s.args?.includes('--configsvr');
422412
const cluster = await MongoCluster.start({
423413
...options,
424-
args,
414+
...s,
425415
topology: 'replset',
426416
users: isConfig ? undefined : options.users, // users go on the mongos/config server only for the config set
427417
});

0 commit comments

Comments
 (0)