mongodb-runner 6.9.0 → 6.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/.esm-wrapper.mjs +9 -0
- package/dist/cli.js +28 -3
- package/dist/cli.js.map +1 -1
- package/dist/docker-compose.d.ts +15 -0
- package/dist/docker-compose.d.ts.map +1 -0
- package/dist/docker-compose.js +75 -0
- package/dist/docker-compose.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/mongocluster.d.ts +25 -1
- package/dist/mongocluster.d.ts.map +1 -1
- package/dist/mongocluster.js +149 -27
- package/dist/mongocluster.js.map +1 -1
- package/dist/mongologreader.d.ts.map +1 -1
- package/dist/mongologreader.js +0 -18
- package/dist/mongologreader.js.map +1 -1
- package/dist/mongoserver.d.ts +2 -0
- package/dist/mongoserver.d.ts.map +1 -1
- package/dist/mongoserver.js +11 -2
- package/dist/mongoserver.js.map +1 -1
- package/dist/oidc.d.ts.map +1 -1
- package/dist/oidc.js +3 -2
- package/dist/oidc.js.map +1 -1
- package/dist/sls.d.ts +49 -0
- package/dist/sls.d.ts.map +1 -0
- package/dist/sls.js +200 -0
- package/dist/sls.js.map +1 -0
- package/dist/util.d.ts +1 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +12 -1
- package/dist/util.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -109,6 +109,13 @@ You can specify a config file for the CLI using `--config`:
|
|
|
109
109
|
$ npx mongodb-runner start --config <path/to/config.json>
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
+
## DSC clusters
|
|
113
|
+
|
|
114
|
+
mongodb-runner can launch clusters that use DSC, backed by an SLS storage
|
|
115
|
+
layer, managing the storage backend's docker compose project alongside the
|
|
116
|
+
mongod processes. See
|
|
117
|
+
[docs/disaggregated-storage.md](./docs/disaggregated-storage.md).
|
|
118
|
+
|
|
112
119
|
## License
|
|
113
120
|
|
|
114
121
|
Apache 2.0
|
package/dist/.esm-wrapper.mjs
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import mod from "./index.js";
|
|
2
2
|
|
|
3
3
|
export default mod;
|
|
4
|
+
export const DockerComposeProject = mod.DockerComposeProject;
|
|
4
5
|
export const MongoCluster = mod.MongoCluster;
|
|
5
6
|
export const MongoServer = mod.MongoServer;
|
|
7
|
+
export const SLS_CELL1 = mod.SLS_CELL1;
|
|
8
|
+
export const SLS_CELL2 = mod.SLS_CELL2;
|
|
9
|
+
export const SLS_CELL3 = mod.SLS_CELL3;
|
|
10
|
+
export const SLS_HOSTNAME = mod.SLS_HOSTNAME;
|
|
11
|
+
export const createSLSDisaggregatedStorageConfig = mod.createSLSDisaggregatedStorageConfig;
|
|
12
|
+
export const createSLSDisaggregatedStorageOptions = mod.createSLSDisaggregatedStorageOptions;
|
|
13
|
+
export const createSLSMultiCellEnvironment = mod.createSLSMultiCellEnvironment;
|
|
6
14
|
export const exec = mod.exec;
|
|
7
15
|
export const instances = mod.instances;
|
|
16
|
+
export const parseSLSComposeServices = mod.parseSLSComposeServices;
|
|
8
17
|
export const prune = mod.prune;
|
|
9
18
|
export const start = mod.start;
|
|
10
19
|
export const stop = mod.stop;
|
package/dist/cli.js
CHANGED
|
@@ -73,6 +73,10 @@ const mongodb_connection_string_url_1 = require("mongodb-connection-string-url")
|
|
|
73
73
|
.option('version', {
|
|
74
74
|
type: 'string',
|
|
75
75
|
describe: 'MongoDB server version to use',
|
|
76
|
+
})
|
|
77
|
+
.option('downloadUrl', {
|
|
78
|
+
type: 'string',
|
|
79
|
+
describe: 'Direct URL to a MongoDB tarball to download (takes precedence over --version)',
|
|
76
80
|
})
|
|
77
81
|
.option('logDir', {
|
|
78
82
|
type: 'string',
|
|
@@ -111,6 +115,15 @@ const mongodb_connection_string_url_1 = require("mongodb-connection-string-url")
|
|
|
111
115
|
.option('oidc', {
|
|
112
116
|
type: 'string',
|
|
113
117
|
describe: 'Configure OIDC authentication on the server',
|
|
118
|
+
})
|
|
119
|
+
.option('slsCompose', {
|
|
120
|
+
type: 'string',
|
|
121
|
+
describe: 'Path to an SLS multi-cell docker-compose.yml; launches the SLS DSC project and configures mongod to use it (requires a DSC-capable mongod via --binDir or --downloadUrl)',
|
|
122
|
+
implies: 'slsImageTag',
|
|
123
|
+
})
|
|
124
|
+
.option('slsImageTag', {
|
|
125
|
+
type: 'string',
|
|
126
|
+
describe: 'SLS docker image tag to use with --slsCompose (e.g. the pinned_sls_commit from the server repo manifest)',
|
|
114
127
|
})
|
|
115
128
|
.option('debug', { type: 'boolean', describe: 'Enable debug output' })
|
|
116
129
|
.option('verbose', { type: 'boolean', describe: 'Enable verbose output' })
|
|
@@ -126,10 +139,10 @@ const mongodb_connection_string_url_1 = require("mongodb-connection-string-url")
|
|
|
126
139
|
args.push(...argv.args.map(String));
|
|
127
140
|
}
|
|
128
141
|
if (argv.debug || argv.verbose) {
|
|
129
|
-
debug_1.default.enable('mongodb-runner');
|
|
142
|
+
debug_1.default.enable('mongodb-runner,mongodb-downloader');
|
|
130
143
|
}
|
|
131
144
|
if (argv.verbose) {
|
|
132
|
-
debug_1.default.enable('mongodb-runner
|
|
145
|
+
debug_1.default.enable('mongodb-runner*,mongodb-downloader*');
|
|
133
146
|
}
|
|
134
147
|
if (argv.oidc && process.platform !== 'linux') {
|
|
135
148
|
console.warn('OIDC authentication is currently only supported on Linux platforms.');
|
|
@@ -138,7 +151,19 @@ const mongodb_connection_string_url_1 = require("mongodb-connection-string-url")
|
|
|
138
151
|
console.warn('OIDC authentication is currently only supported on Enterprise server versions.');
|
|
139
152
|
}
|
|
140
153
|
async function start() {
|
|
141
|
-
const
|
|
154
|
+
const disaggregatedStorage = argv.slsCompose
|
|
155
|
+
? await utilities.createSLSDisaggregatedStorageOptions({
|
|
156
|
+
composeFile: argv.slsCompose,
|
|
157
|
+
imageTag: argv.slsImageTag,
|
|
158
|
+
})
|
|
159
|
+
: undefined;
|
|
160
|
+
if (disaggregatedStorage && 'sls' in disaggregatedStorage) {
|
|
161
|
+
console.error('Allocated SLS service ports:');
|
|
162
|
+
for (const [serviceName, { addr }] of Object.entries(disaggregatedStorage.sls.services)) {
|
|
163
|
+
console.error(` ${serviceName}: ${addr}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const { cluster, id } = await utilities.start({ ...argv, disaggregatedStorage }, args);
|
|
142
167
|
const cs = new mongodb_connection_string_url_1.ConnectionString(cluster.connectionString);
|
|
143
168
|
console.error(`Server started and running at ${cs.toString()}`);
|
|
144
169
|
if (cluster.oidcIssuer) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface DockerComposeProjectOptions {
|
|
2
|
+
env?: Record<string, string>;
|
|
3
|
+
projectName?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class DockerComposeProject {
|
|
6
|
+
private readonly composeFile;
|
|
7
|
+
private readonly projectName;
|
|
8
|
+
private readonly env?;
|
|
9
|
+
private constructor();
|
|
10
|
+
static start(composeFile: string, options?: DockerComposeProjectOptions): Promise<DockerComposeProject>;
|
|
11
|
+
close(): Promise<void>;
|
|
12
|
+
serialize(): unknown;
|
|
13
|
+
static deserialize(serialized: any): DockerComposeProject;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=docker-compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-compose.d.ts","sourceRoot":"","sources":["../src/docker-compose.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,2BAA2B;IAK1C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAM7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqCD,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IAHvB,OAAO;WAMM,KAAK,CAChB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,oBAAoB,CAAC;IAqB1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B,SAAS,IAAI,OAAO;IAQpB,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,oBAAoB;CAO1D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DockerComposeProject = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const events_1 = require("events");
|
|
6
|
+
const util_1 = require("./util");
|
|
7
|
+
async function runDockerCompose(composeFile, projectName, env, args) {
|
|
8
|
+
const proc = (0, child_process_1.spawn)('docker', ['compose', '-f', composeFile, '-p', projectName, ...args], {
|
|
9
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
10
|
+
env: { ...process.env, ...env },
|
|
11
|
+
});
|
|
12
|
+
await (0, events_1.once)(proc, 'spawn');
|
|
13
|
+
(0, util_1.debug)('docker compose: spawned', { pid: proc.pid, args });
|
|
14
|
+
let stderr = '';
|
|
15
|
+
proc.stderr.setEncoding('utf8');
|
|
16
|
+
proc.stderr.on('data', (chunk) => {
|
|
17
|
+
stderr += chunk;
|
|
18
|
+
for (const line of chunk.split('\n')) {
|
|
19
|
+
if (line.trim())
|
|
20
|
+
(0, util_1.debug)('docker compose stderr:', line);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
proc.stdout.setEncoding('utf8');
|
|
24
|
+
proc.stdout.on('data', (chunk) => {
|
|
25
|
+
for (const line of chunk.split('\n')) {
|
|
26
|
+
if (line.trim())
|
|
27
|
+
(0, util_1.debug)('docker compose stdout:', line);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const [code] = await (0, events_1.once)(proc, 'exit');
|
|
31
|
+
(0, util_1.debug)('docker compose: exited', { code });
|
|
32
|
+
return { code: code, stderr };
|
|
33
|
+
}
|
|
34
|
+
class DockerComposeProject {
|
|
35
|
+
constructor(composeFile, projectName, env) {
|
|
36
|
+
this.composeFile = composeFile;
|
|
37
|
+
this.projectName = projectName;
|
|
38
|
+
this.env = env;
|
|
39
|
+
}
|
|
40
|
+
static async start(composeFile, options = {}) {
|
|
41
|
+
const projectName = options.projectName ??
|
|
42
|
+
options.env?.COMPOSE_PROJECT_NAME ??
|
|
43
|
+
`mongodb-runner-${(0, util_1.uuid)()}`;
|
|
44
|
+
(0, util_1.debug)('starting docker compose project', { composeFile, projectName });
|
|
45
|
+
const { code, stderr } = await runDockerCompose(composeFile, projectName, options.env, ['up', '-d']);
|
|
46
|
+
if (code !== 0) {
|
|
47
|
+
throw new Error(`docker compose up failed with exit code ${String(code)}: ${stderr}`);
|
|
48
|
+
}
|
|
49
|
+
(0, util_1.debug)('docker compose project started');
|
|
50
|
+
return new DockerComposeProject(composeFile, projectName, options.env);
|
|
51
|
+
}
|
|
52
|
+
async close() {
|
|
53
|
+
(0, util_1.debug)('stopping docker compose project', {
|
|
54
|
+
composeFile: this.composeFile,
|
|
55
|
+
projectName: this.projectName,
|
|
56
|
+
});
|
|
57
|
+
const { code, stderr } = await runDockerCompose(this.composeFile, this.projectName, this.env, ['down', '--volumes']);
|
|
58
|
+
if (code !== 0) {
|
|
59
|
+
(0, util_1.debug)('docker compose down failed', { code: String(code), stderr });
|
|
60
|
+
}
|
|
61
|
+
(0, util_1.debug)('docker compose project stopped');
|
|
62
|
+
}
|
|
63
|
+
serialize() {
|
|
64
|
+
return {
|
|
65
|
+
composeFile: this.composeFile,
|
|
66
|
+
projectName: this.projectName,
|
|
67
|
+
env: this.env,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
static deserialize(serialized) {
|
|
71
|
+
return new DockerComposeProject(serialized.composeFile, serialized.projectName, serialized.env);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.DockerComposeProject = DockerComposeProject;
|
|
75
|
+
//# sourceMappingURL=docker-compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-compose.js","sourceRoot":"","sources":["../src/docker-compose.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { MongoServer, type MongoServerEvents, MongoServerOptions, } from './mongoserver';
|
|
2
|
-
export { MongoCluster, type MongoClusterEvents, MongoClusterOptions, MongoDBUserDoc, RSMemberOptions as MongoClusterRSMemberOptions, RSOptions as MongoClusterRSOptions, CommonOptions as MongoClusterCommonOptions, ShardedOptions as MongoClusterShardedOptions, } from './mongocluster';
|
|
2
|
+
export { MongoCluster, type MongoClusterEvents, MongoClusterOptions, MongoDBUserDoc, RSMemberOptions as MongoClusterRSMemberOptions, RSOptions as MongoClusterRSOptions, CommonOptions as MongoClusterCommonOptions, ShardedOptions as MongoClusterShardedOptions, type ShardDescriptor, type DisaggregatedStorageOptions, } from './mongocluster';
|
|
3
|
+
export { createSLSMultiCellEnvironment, createSLSDisaggregatedStorageConfig, createSLSDisaggregatedStorageOptions, type SLSDisaggregatedStorageConfigOptions, type SLSDisaggregatedStorageSetupOptions, parseSLSComposeServices, SLS_HOSTNAME, SLS_CELL1, SLS_CELL2, SLS_CELL3, type SLSCell, type SLSServiceInfo, type SLSMultiCellEnvironment, type SLSMultiCellEnvironmentOptions, } from './sls';
|
|
4
|
+
export { DockerComposeProject, type DockerComposeProjectOptions, } from './docker-compose';
|
|
3
5
|
export type { LogEntry } from './mongologreader';
|
|
4
6
|
export type { ConnectionString } from 'mongodb-connection-string-url';
|
|
5
7
|
export { prune, start, stop, exec, instances } from './runner-helpers';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,cAAc,EACd,eAAe,IAAI,2BAA2B,EAC9C,SAAS,IAAI,qBAAqB,EAClC,aAAa,IAAI,yBAAyB,EAC1C,cAAc,IAAI,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,cAAc,EACd,eAAe,IAAI,2BAA2B,EAC9C,SAAS,IAAI,qBAAqB,EAClC,aAAa,IAAI,yBAAyB,EAC1C,cAAc,IAAI,0BAA0B,EAC5C,KAAK,eAAe,EACpB,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,6BAA6B,EAC7B,mCAAmC,EACnC,oCAAoC,EACpC,KAAK,oCAAoC,EACzC,KAAK,mCAAmC,EACxC,uBAAuB,EACvB,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,GACpC,MAAM,OAAO,CAAC;AACf,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.instances = exports.exec = exports.start = exports.prune = exports.MongoCluster = exports.MongoServer = void 0;
|
|
3
|
+
exports.instances = exports.exec = exports.start = exports.prune = exports.DockerComposeProject = exports.SLS_CELL3 = exports.SLS_CELL2 = exports.SLS_CELL1 = exports.SLS_HOSTNAME = exports.parseSLSComposeServices = exports.createSLSDisaggregatedStorageOptions = exports.createSLSDisaggregatedStorageConfig = exports.createSLSMultiCellEnvironment = exports.MongoCluster = exports.MongoServer = void 0;
|
|
4
4
|
var mongoserver_1 = require("./mongoserver");
|
|
5
5
|
Object.defineProperty(exports, "MongoServer", { enumerable: true, get: function () { return mongoserver_1.MongoServer; } });
|
|
6
6
|
var mongocluster_1 = require("./mongocluster");
|
|
7
7
|
Object.defineProperty(exports, "MongoCluster", { enumerable: true, get: function () { return mongocluster_1.MongoCluster; } });
|
|
8
|
+
var sls_1 = require("./sls");
|
|
9
|
+
Object.defineProperty(exports, "createSLSMultiCellEnvironment", { enumerable: true, get: function () { return sls_1.createSLSMultiCellEnvironment; } });
|
|
10
|
+
Object.defineProperty(exports, "createSLSDisaggregatedStorageConfig", { enumerable: true, get: function () { return sls_1.createSLSDisaggregatedStorageConfig; } });
|
|
11
|
+
Object.defineProperty(exports, "createSLSDisaggregatedStorageOptions", { enumerable: true, get: function () { return sls_1.createSLSDisaggregatedStorageOptions; } });
|
|
12
|
+
Object.defineProperty(exports, "parseSLSComposeServices", { enumerable: true, get: function () { return sls_1.parseSLSComposeServices; } });
|
|
13
|
+
Object.defineProperty(exports, "SLS_HOSTNAME", { enumerable: true, get: function () { return sls_1.SLS_HOSTNAME; } });
|
|
14
|
+
Object.defineProperty(exports, "SLS_CELL1", { enumerable: true, get: function () { return sls_1.SLS_CELL1; } });
|
|
15
|
+
Object.defineProperty(exports, "SLS_CELL2", { enumerable: true, get: function () { return sls_1.SLS_CELL2; } });
|
|
16
|
+
Object.defineProperty(exports, "SLS_CELL3", { enumerable: true, get: function () { return sls_1.SLS_CELL3; } });
|
|
17
|
+
var docker_compose_1 = require("./docker-compose");
|
|
18
|
+
Object.defineProperty(exports, "DockerComposeProject", { enumerable: true, get: function () { return docker_compose_1.DockerComposeProject; } });
|
|
8
19
|
var runner_helpers_1 = require("./runner-helpers");
|
|
9
20
|
Object.defineProperty(exports, "prune", { enumerable: true, get: function () { return runner_helpers_1.prune; } });
|
|
10
21
|
Object.defineProperty(exports, "start", { enumerable: true, get: function () { return runner_helpers_1.start; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAIuB;AAHrB,0GAAA,WAAW,OAAA;AAIb,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAIuB;AAHrB,0GAAA,WAAW,OAAA;AAIb,+CAWwB;AAVtB,4GAAA,YAAY,OAAA;AAWd,6BAee;AAdb,oHAAA,6BAA6B,OAAA;AAC7B,0HAAA,mCAAmC,OAAA;AACnC,2HAAA,oCAAoC,OAAA;AAGpC,8GAAA,uBAAuB,OAAA;AACvB,mGAAA,YAAY,OAAA;AACZ,gGAAA,SAAS,OAAA;AACT,gGAAA,SAAS,OAAA;AACT,gGAAA,SAAS,OAAA;AAMX,mDAG0B;AAFxB,sHAAA,oBAAoB,OAAA;AAKtB,mDAAuE;AAA9D,uGAAA,KAAK,OAAA;AAAE,uGAAA,KAAK,OAAA;AAAE,sGAAA,IAAI,OAAA;AAAE,sGAAA,IAAI,OAAA;AAAE,2GAAA,SAAS,OAAA"}
|
package/dist/mongocluster.d.ts
CHANGED
|
@@ -25,10 +25,12 @@ export interface CommonOptions {
|
|
|
25
25
|
downloadOptions?: DownloadOptions;
|
|
26
26
|
oidc?: string;
|
|
27
27
|
version?: string;
|
|
28
|
+
downloadUrl?: string;
|
|
28
29
|
users?: MongoDBUserDoc[];
|
|
29
30
|
tlsAddClientKey?: boolean;
|
|
30
31
|
requireApiVersion?: number;
|
|
31
32
|
topology: 'standalone' | 'replset' | 'sharded';
|
|
33
|
+
disaggregatedStorage?: DisaggregatedStorageOptions;
|
|
32
34
|
}
|
|
33
35
|
export type RSOptions = {
|
|
34
36
|
arbiters?: number;
|
|
@@ -39,6 +41,25 @@ export type ShardedOptions = {
|
|
|
39
41
|
mongosArgs?: string[][];
|
|
40
42
|
shards?: number | Partial<MongoClusterOptions>[];
|
|
41
43
|
};
|
|
44
|
+
export interface ShardMemberDescriptor {
|
|
45
|
+
host: string;
|
|
46
|
+
port: number;
|
|
47
|
+
priority: number;
|
|
48
|
+
arbiterOnly: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface ShardDescriptor {
|
|
51
|
+
index: number;
|
|
52
|
+
isConfigServer: boolean;
|
|
53
|
+
replSetName?: string;
|
|
54
|
+
members: ShardMemberDescriptor[];
|
|
55
|
+
}
|
|
56
|
+
export interface DisaggregatedStorageOptions {
|
|
57
|
+
composeFile: string;
|
|
58
|
+
env?: Record<string, string>;
|
|
59
|
+
config: string | Record<string, unknown> | ((shard: ShardDescriptor) => string | Record<string, unknown>);
|
|
60
|
+
waitForReady?: () => Promise<void>;
|
|
61
|
+
setupShard?: (shard: ShardDescriptor) => Promise<void>;
|
|
62
|
+
}
|
|
42
63
|
export type MongoClusterOptions = Pick<MongoServerOptions, 'logDir' | 'tmpDir' | 'args' | 'binDir' | 'docker' | 'internalClientOptions' | 'host' | 'detached'> & CommonOptions & RSOptions & ShardedOptions;
|
|
43
64
|
export type MongoClusterEvents = {
|
|
44
65
|
[k in keyof MongoServerEvents]: [serverUUID: string, ...MongoServerEvents[k]];
|
|
@@ -52,6 +73,7 @@ export declare class MongoCluster extends EventEmitter<MongoClusterEvents> {
|
|
|
52
73
|
private servers;
|
|
53
74
|
private shards;
|
|
54
75
|
private oidcMockProviderProcess?;
|
|
76
|
+
private dockerComposeProject?;
|
|
55
77
|
private defaultConnectionOptions;
|
|
56
78
|
private users;
|
|
57
79
|
private constructor();
|
|
@@ -65,7 +87,9 @@ export declare class MongoCluster extends EventEmitter<MongoClusterEvents> {
|
|
|
65
87
|
get connectionStringUrl(): ConnectionString;
|
|
66
88
|
get serverVersion(): string;
|
|
67
89
|
get serverVariant(): 'enterprise' | 'community';
|
|
68
|
-
static start(
|
|
90
|
+
static start(options: MongoClusterOptions): Promise<MongoCluster>;
|
|
91
|
+
private static _start;
|
|
92
|
+
private static _startServers;
|
|
69
93
|
private children;
|
|
70
94
|
private allServers;
|
|
71
95
|
assertAllServersHaveInsertedLocalMetadata(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongocluster.d.ts","sourceRoot":"","sources":["../src/mongocluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAClB,MAAM,EACN,oBAAoB,EACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mongocluster.d.ts","sourceRoot":"","sources":["../src/mongocluster.ts"],"names":[],"mappings":"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"}
|
package/dist/mongocluster.js
CHANGED
|
@@ -10,6 +10,7 @@ const mongodb_downloader_1 = require("@mongodb-js/mongodb-downloader");
|
|
|
10
10
|
const mongodb_1 = require("mongodb");
|
|
11
11
|
const util_1 = require("./util");
|
|
12
12
|
const oidc_1 = require("./oidc");
|
|
13
|
+
const docker_compose_1 = require("./docker-compose");
|
|
13
14
|
const events_1 = require("events");
|
|
14
15
|
const assert_1 = __importDefault(require("assert"));
|
|
15
16
|
const tls_helpers_1 = require("./tls-helpers");
|
|
@@ -65,6 +66,29 @@ function processRSMembers(options) {
|
|
|
65
66
|
replSetName,
|
|
66
67
|
};
|
|
67
68
|
}
|
|
69
|
+
function buildDisaggregatedArgs(ds, shard, baseArgs) {
|
|
70
|
+
const raw = typeof ds.config === 'function' ? ds.config(shard) : ds.config;
|
|
71
|
+
const value = typeof raw === 'string' ? raw : JSON.stringify(raw);
|
|
72
|
+
return [
|
|
73
|
+
...baseArgs,
|
|
74
|
+
'--setParameter',
|
|
75
|
+
`disaggregatedStorageConfig=${value}`,
|
|
76
|
+
'--setParameter',
|
|
77
|
+
'disaggregatedStorageEnabled=true',
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
function stripPortArg(args) {
|
|
81
|
+
return removePortArg(args).filter((arg) => arg !== '--port');
|
|
82
|
+
}
|
|
83
|
+
function getPortArg(args) {
|
|
84
|
+
if (!args)
|
|
85
|
+
return undefined;
|
|
86
|
+
const splitArgIndex = args.indexOf('--port');
|
|
87
|
+
if (splitArgIndex !== -1)
|
|
88
|
+
return +args[splitArgIndex + 1] || undefined;
|
|
89
|
+
const arg = args.find((a) => a.startsWith('--port='));
|
|
90
|
+
return arg ? +arg.split('=')[1] || undefined : undefined;
|
|
91
|
+
}
|
|
68
92
|
function processShardOptions(options) {
|
|
69
93
|
const shards = typeof options.shards === 'number' || !options.shards
|
|
70
94
|
? (0, util_1.range)((options.shards ?? 3) + 1).map(() => ({}))
|
|
@@ -110,12 +134,13 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
110
134
|
}
|
|
111
135
|
});
|
|
112
136
|
}
|
|
113
|
-
static downloadMongoDb(tmpdir, targetVersionSemverSpecifier, options) {
|
|
137
|
+
static downloadMongoDb(tmpdir, targetVersionSemverSpecifier, options, downloadUrl) {
|
|
114
138
|
return (0, mongodb_downloader_1.downloadMongoDb)({
|
|
115
139
|
directory: tmpdir,
|
|
116
140
|
version: targetVersionSemverSpecifier,
|
|
117
141
|
downloadOptions: options,
|
|
118
142
|
useLockfile: true,
|
|
143
|
+
downloadUrl,
|
|
119
144
|
});
|
|
120
145
|
}
|
|
121
146
|
serialize() {
|
|
@@ -125,13 +150,14 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
125
150
|
servers: this.servers.map((srv) => srv.serialize()),
|
|
126
151
|
shards: this.shards.map((shard) => shard.serialize()),
|
|
127
152
|
oidcMockProviderProcess: this.oidcMockProviderProcess?.serialize(),
|
|
153
|
+
dockerComposeProject: this.dockerComposeProject?.serialize(),
|
|
128
154
|
defaultConnectionOptions: (0, util_1.jsonClone)(this.defaultConnectionOptions ?? {}),
|
|
129
155
|
users: (0, util_1.jsonClone)(this.users),
|
|
130
156
|
};
|
|
131
157
|
}
|
|
132
158
|
isClosed() {
|
|
133
159
|
for (const _ of this.children())
|
|
134
|
-
return
|
|
160
|
+
return false;
|
|
135
161
|
return true;
|
|
136
162
|
}
|
|
137
163
|
static async deserialize(serialized) {
|
|
@@ -145,6 +171,9 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
145
171
|
cluster.oidcMockProviderProcess = serialized.oidcMockProviderProcess
|
|
146
172
|
? oidc_1.OIDCMockProviderProcess.deserialize(serialized.oidcMockProviderProcess)
|
|
147
173
|
: undefined;
|
|
174
|
+
cluster.dockerComposeProject = serialized.dockerComposeProject
|
|
175
|
+
? docker_compose_1.DockerComposeProject.deserialize(serialized.dockerComposeProject)
|
|
176
|
+
: undefined;
|
|
148
177
|
return cluster;
|
|
149
178
|
}
|
|
150
179
|
get hostport() {
|
|
@@ -165,7 +194,10 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
165
194
|
get serverVariant() {
|
|
166
195
|
return this.servers[0].serverVariant;
|
|
167
196
|
}
|
|
168
|
-
static async start(
|
|
197
|
+
static async start(options) {
|
|
198
|
+
return await MongoCluster._start(options, undefined);
|
|
199
|
+
}
|
|
200
|
+
static async _start({ ...options }, parentClusterContext) {
|
|
169
201
|
options = { ...options, ...(await (0, tls_helpers_1.handleTLSClientKeyOptions)(options)) };
|
|
170
202
|
const cluster = new MongoCluster();
|
|
171
203
|
cluster.topology = options.topology;
|
|
@@ -174,7 +206,7 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
174
206
|
if (!options.binDir) {
|
|
175
207
|
options.binDir = await this.downloadMongoDb(options.downloadDir ??
|
|
176
208
|
process.env.MONGODB_RUNNER_DOWNLOAD_DIR ??
|
|
177
|
-
options.tmpDir, options.version, options.downloadOptions);
|
|
209
|
+
options.tmpDir, options.version, options.downloadOptions, options.downloadUrl);
|
|
178
210
|
}
|
|
179
211
|
if (options.oidc !== undefined) {
|
|
180
212
|
cluster.oidcMockProviderProcess = await oidc_1.OIDCMockProviderProcess.start(options.oidc || '--port=0');
|
|
@@ -198,7 +230,62 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
198
230
|
'enableTestCommands=true',
|
|
199
231
|
];
|
|
200
232
|
}
|
|
233
|
+
let disaggregatedStorage = parentClusterContext?.disaggregatedStorage;
|
|
234
|
+
if (!disaggregatedStorage && options.disaggregatedStorage) {
|
|
235
|
+
disaggregatedStorage = options.disaggregatedStorage;
|
|
236
|
+
delete options.disaggregatedStorage;
|
|
237
|
+
cluster.dockerComposeProject = await docker_compose_1.DockerComposeProject.start(disaggregatedStorage.composeFile, { env: disaggregatedStorage.env });
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
if (disaggregatedStorage) {
|
|
241
|
+
if (cluster.dockerComposeProject) {
|
|
242
|
+
await disaggregatedStorage.waitForReady?.();
|
|
243
|
+
}
|
|
244
|
+
if (options.secondaries === undefined)
|
|
245
|
+
options.secondaries = 1;
|
|
246
|
+
}
|
|
247
|
+
return await this._startServers(cluster, options, disaggregatedStorage, parentClusterContext?.shardContext ?? {
|
|
248
|
+
index: 0,
|
|
249
|
+
isConfigServer: false,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
if (cluster.dockerComposeProject) {
|
|
254
|
+
try {
|
|
255
|
+
await cluster.dockerComposeProject.close();
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
throw err;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
static async _startServers(cluster, options, disaggregatedStorage, shardContext) {
|
|
201
264
|
if (options.topology === 'standalone') {
|
|
265
|
+
if (disaggregatedStorage) {
|
|
266
|
+
let port = getPortArg(options.args);
|
|
267
|
+
if (!port) {
|
|
268
|
+
port = await (0, util_1.allocatePort)();
|
|
269
|
+
options.args = [
|
|
270
|
+
...stripPortArg(options.args ?? []),
|
|
271
|
+
'--port',
|
|
272
|
+
String(port),
|
|
273
|
+
];
|
|
274
|
+
}
|
|
275
|
+
const descriptor = {
|
|
276
|
+
...shardContext,
|
|
277
|
+
members: [
|
|
278
|
+
{
|
|
279
|
+
host: options.host ?? '127.0.0.1',
|
|
280
|
+
port,
|
|
281
|
+
priority: 1,
|
|
282
|
+
arbiterOnly: false,
|
|
283
|
+
},
|
|
284
|
+
],
|
|
285
|
+
};
|
|
286
|
+
await disaggregatedStorage.setupShard?.(descriptor);
|
|
287
|
+
options.args = buildDisaggregatedArgs(disaggregatedStorage, descriptor, options.args ?? []);
|
|
288
|
+
}
|
|
202
289
|
cluster.servers.push(await mongoserver_1.MongoServer.start({
|
|
203
290
|
...options,
|
|
204
291
|
binary: 'mongod',
|
|
@@ -206,6 +293,35 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
206
293
|
}
|
|
207
294
|
else if (options.topology === 'replset') {
|
|
208
295
|
const { rsMembers, replSetName } = processRSMembers(options);
|
|
296
|
+
if (disaggregatedStorage) {
|
|
297
|
+
const members = [];
|
|
298
|
+
for (const member of rsMembers) {
|
|
299
|
+
let port = getPortArg(member.args);
|
|
300
|
+
if (!port) {
|
|
301
|
+
port = await (0, util_1.allocatePort)();
|
|
302
|
+
member.args = [
|
|
303
|
+
...stripPortArg(member.args ?? []),
|
|
304
|
+
'--port',
|
|
305
|
+
String(port),
|
|
306
|
+
];
|
|
307
|
+
}
|
|
308
|
+
members.push({
|
|
309
|
+
host: options.host ?? '127.0.0.1',
|
|
310
|
+
port,
|
|
311
|
+
priority: member.priority ?? 0,
|
|
312
|
+
arbiterOnly: member.arbiterOnly ?? false,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
const descriptor = {
|
|
316
|
+
...shardContext,
|
|
317
|
+
replSetName,
|
|
318
|
+
members,
|
|
319
|
+
};
|
|
320
|
+
await disaggregatedStorage.setupShard?.(descriptor);
|
|
321
|
+
for (const member of rsMembers) {
|
|
322
|
+
member.args = buildDisaggregatedArgs(disaggregatedStorage, descriptor, member.args ?? []);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
209
325
|
(0, util_1.debug)('Starting replica set nodes', {
|
|
210
326
|
replSetName,
|
|
211
327
|
secondaries: rsMembers.filter((m) => !m.arbiterOnly).length - 1,
|
|
@@ -227,24 +343,26 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
227
343
|
cluster.servers.push(...nodes.map(([srv]) => srv));
|
|
228
344
|
const primary = cluster.servers[primaryIndex];
|
|
229
345
|
await primary.withClient(async (client) => {
|
|
230
|
-
(
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
346
|
+
if (!disaggregatedStorage) {
|
|
347
|
+
(0, util_1.debug)('Running rs.initiate');
|
|
348
|
+
const rsConf = {
|
|
349
|
+
_id: replSetName,
|
|
350
|
+
configsvr: rsMembers.some((m) => m.args?.includes('--configsvr')),
|
|
351
|
+
members: nodes.map(([srv, member], i) => {
|
|
352
|
+
return {
|
|
353
|
+
_id: i,
|
|
354
|
+
host: srv.hostport,
|
|
355
|
+
arbiterOnly: member.arbiterOnly ?? false,
|
|
356
|
+
priority: member.priority ?? (i === primaryIndex ? 1 : 0),
|
|
357
|
+
tags: member.tags || {},
|
|
358
|
+
};
|
|
359
|
+
}),
|
|
360
|
+
};
|
|
361
|
+
(0, util_1.debugVerbose)('replSetInitiate:', rsConf);
|
|
362
|
+
await client.db('admin').command({
|
|
363
|
+
replSetInitiate: rsConf,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
248
366
|
for (let i = 0; i < 60; i++) {
|
|
249
367
|
const status = await client.db('admin').command({
|
|
250
368
|
replSetGetStatus: 1,
|
|
@@ -262,16 +380,19 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
262
380
|
else if (options.topology === 'sharded') {
|
|
263
381
|
const { shards, mongosArgs } = processShardOptions(options);
|
|
264
382
|
(0, util_1.debug)('starting config server and shard servers', shards);
|
|
265
|
-
const allShards = await (0, util_1.safePromiseAll)(shards.map(async (s) => {
|
|
266
|
-
const
|
|
267
|
-
const
|
|
383
|
+
const allShards = await (0, util_1.safePromiseAll)(shards.map(async (s, i) => {
|
|
384
|
+
const isConfigServer = s.args?.includes('--configsvr') ?? false;
|
|
385
|
+
const shardCluster = await MongoCluster._start({
|
|
268
386
|
...options,
|
|
269
387
|
...s,
|
|
270
388
|
topology: 'replset',
|
|
271
389
|
requireApiVersion: undefined,
|
|
272
|
-
users:
|
|
390
|
+
users: isConfigServer ? undefined : options.users,
|
|
391
|
+
}, {
|
|
392
|
+
disaggregatedStorage,
|
|
393
|
+
shardContext: { index: i, isConfigServer },
|
|
273
394
|
});
|
|
274
|
-
return [
|
|
395
|
+
return [shardCluster, isConfigServer];
|
|
275
396
|
}));
|
|
276
397
|
const configsvr = allShards.find(([, isConfig]) => isConfig)[0];
|
|
277
398
|
const shardsvrs = allShards
|
|
@@ -372,6 +493,7 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
372
493
|
}
|
|
373
494
|
async close() {
|
|
374
495
|
await (0, util_1.safePromiseAll)([...this.children(), this.oidcMockProviderProcess].map((closable) => closable?.close()));
|
|
496
|
+
await this.dockerComposeProject?.close();
|
|
375
497
|
this.servers = [];
|
|
376
498
|
this.shards = [];
|
|
377
499
|
}
|