Skip to content

Commit d38dcb4

Browse files
committed
feat: enable reuse for mongodb
1 parent 7ba6b1c commit d38dcb4

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

modules/mongodb/src/main/java/org/testcontainers/containers/MongoDBContainer.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -130,19 +130,23 @@ private void checkMongoNodeExitCodeAfterWaiting(final Container.ExecResult execR
130130

131131
@SneakyThrows(value = { IOException.class, InterruptedException.class })
132132
private void initReplicaSet() {
133-
log.debug("Initializing a single node node replica set...");
134-
final ExecResult execResultInitRs = execInContainer(buildMongoEvalCommand("rs.initiate();"));
135-
log.debug(execResultInitRs.getStdout());
136-
checkMongoNodeExitCode(execResultInitRs);
137-
138-
log.debug(
139-
"Awaiting for a single node replica set initialization up to {} attempts",
140-
AWAIT_INIT_REPLICA_SET_ATTEMPTS
141-
);
142-
final ExecResult execResultWaitForMaster = execInContainer(buildMongoEvalCommand(buildMongoWaitCommand()));
143-
log.debug(execResultWaitForMaster.getStdout());
133+
if (isReplicationSetAlreadyInitialized()) {
134+
log.debug("Replica set already initialized.");
135+
} else {
136+
log.debug("Initializing a single node node replica set...");
137+
final ExecResult execResultInitRs = execInContainer(buildMongoEvalCommand("rs.initiate();"));
138+
log.debug(execResultInitRs.getStdout());
139+
checkMongoNodeExitCode(execResultInitRs);
140+
141+
log.debug(
142+
"Awaiting for a single node replica set initialization up to {} attempts",
143+
AWAIT_INIT_REPLICA_SET_ATTEMPTS
144+
);
145+
final ExecResult execResultWaitForMaster = execInContainer(buildMongoEvalCommand(buildMongoWaitCommand()));
146+
log.debug(execResultWaitForMaster.getStdout());
144147

145-
checkMongoNodeExitCodeAfterWaiting(execResultWaitForMaster);
148+
checkMongoNodeExitCodeAfterWaiting(execResultWaitForMaster);
149+
}
146150
}
147151

148152
public static class ReplicaSetInitializationException extends RuntimeException {
@@ -151,4 +155,10 @@ public static class ReplicaSetInitializationException extends RuntimeException {
151155
super(errorMessage);
152156
}
153157
}
158+
159+
private boolean isReplicationSetAlreadyInitialized() {
160+
// since we are creating a replica set with one node, this node must be primary (state = 1)
161+
final ExecResult execCheckRsInit = execInContainer(buildMongoEvalCommand("if(db.adminCommand({replSetGetStatus: 1})['myState'] != 1) quit(900)"));
162+
return execCheckRsInit.getExitCode() == CONTAINER_EXIT_CODE_OK;
163+
}
154164
}

0 commit comments

Comments
 (0)