@@ -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