From 93e86b32804a9363bf2be3ade06c03af7fdc9cab Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Fri, 25 Apr 2025 16:26:10 -0700 Subject: [PATCH] wait for primary --- docker/prod/mongo/init/init.js | 64 ++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/docker/prod/mongo/init/init.js b/docker/prod/mongo/init/init.js index 81d501bc7..34b90ced3 100644 --- a/docker/prod/mongo/init/init.js +++ b/docker/prod/mongo/init/init.js @@ -1,31 +1,41 @@ -function waitForPrimary() { - while (true) { - try { - rs.initiate({ - _id: "rs0", - members: [{ _id: 0, host: "localhost:27017" }], - }); - break; - } catch (e) { - print("Replica set initiation failed, retrying in 2s..."); - sleep(2000); - } +function initiateReplicaSet() { + try { + rs.initiate({ + _id: "rs0", + members: [{ _id: 0, host: "localhost:27017" }], + }); + } catch (e) { + print("Replica set already initiated or error occurred: " + e); } } +function waitForPrimary() { + while (true) { + const isMaster = db.isMaster(); + if (isMaster.ismaster) { + print("This node is now PRIMARY."); + break; + } + print("Waiting to become PRIMARY..."); + sleep(2000); + } +} + +function createUser() { + db = db.getSiblingDB("uptime_db"); + + var username = process.env.USERNAME_ENV_VAR; + var password = process.env.PASSWORD_ENV_VAR; + + db.createUser({ + user: username, + pwd: password, + roles: [{ role: "readWrite", db: "uptime_db" }], + }); + + print("User '" + username + "' created successfully"); +} + +initiateReplicaSet(); waitForPrimary(); - -// Switch to uptime_db -db = db.getSiblingDB("uptime_db"); - -// Create app user -var username = _getEnv("USERNAME_ENV_VAR"); -var password = _getEnv("PASSWORD_ENV_VAR"); - -db.createUser({ - user: username, - pwd: password, - roles: [{ role: "readWrite", db: "uptime_db" }], -}); - -print("User '" + username + "' created successfully"); +createUser();