Skip to content

Commit

Permalink
feat: enable reuse for mongodb
Browse files Browse the repository at this point in the history
  • Loading branch information
BounkongK committed Nov 24, 2022
1 parent 7ba6b1c commit d38dcb4
Showing 1 changed file with 22 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -130,19 +130,23 @@ private void checkMongoNodeExitCodeAfterWaiting(final Container.ExecResult execR

@SneakyThrows(value = { IOException.class, InterruptedException.class })
private void initReplicaSet() {
log.debug("Initializing a single node node replica set...");
final ExecResult execResultInitRs = execInContainer(buildMongoEvalCommand("rs.initiate();"));
log.debug(execResultInitRs.getStdout());
checkMongoNodeExitCode(execResultInitRs);

log.debug(
"Awaiting for a single node replica set initialization up to {} attempts",
AWAIT_INIT_REPLICA_SET_ATTEMPTS
);
final ExecResult execResultWaitForMaster = execInContainer(buildMongoEvalCommand(buildMongoWaitCommand()));
log.debug(execResultWaitForMaster.getStdout());
if (isReplicationSetAlreadyInitialized()) {
log.debug("Replica set already initialized.");
} else {
log.debug("Initializing a single node node replica set...");
final ExecResult execResultInitRs = execInContainer(buildMongoEvalCommand("rs.initiate();"));
log.debug(execResultInitRs.getStdout());
checkMongoNodeExitCode(execResultInitRs);

log.debug(
"Awaiting for a single node replica set initialization up to {} attempts",
AWAIT_INIT_REPLICA_SET_ATTEMPTS
);
final ExecResult execResultWaitForMaster = execInContainer(buildMongoEvalCommand(buildMongoWaitCommand()));
log.debug(execResultWaitForMaster.getStdout());

checkMongoNodeExitCodeAfterWaiting(execResultWaitForMaster);
checkMongoNodeExitCodeAfterWaiting(execResultWaitForMaster);
}
}

public static class ReplicaSetInitializationException extends RuntimeException {
Expand All @@ -151,4 +155,10 @@ public static class ReplicaSetInitializationException extends RuntimeException {
super(errorMessage);
}
}

private boolean isReplicationSetAlreadyInitialized() {
// since we are creating a replica set with one node, this node must be primary (state = 1)
final ExecResult execCheckRsInit = execInContainer(buildMongoEvalCommand("if(db.adminCommand({replSetGetStatus: 1})['myState'] != 1) quit(900)"));
return execCheckRsInit.getExitCode() == CONTAINER_EXIT_CODE_OK;
}
}

0 comments on commit d38dcb4

Please sign in to comment.