From 9f035b40bdfec0eb508f1531972ef0e9bd65d827 Mon Sep 17 00:00:00 2001 From: ftocal <46001274+ftocal@users.noreply.github.com> Date: Thu, 15 Dec 2022 12:51:15 -0300 Subject: [PATCH] fix: MongoDB Replica Set when Titl is restarted (#43) --- Tiltfile | 16 +++---- devnet/api.yaml | 2 +- devnet/fly.yaml | 2 +- devnet/mongo-configure-job.yaml | 82 --------------------------------- devnet/mongo-express.yaml | 2 +- devnet/mongo-rs-config.yaml | 27 +++++++++++ devnet/mongo.yaml | 2 +- devnet/onchain-data.yaml | 2 +- devnet/server.yaml | 2 +- devnet/spy.yaml | 2 +- 10 files changed, 42 insertions(+), 97 deletions(-) delete mode 100644 devnet/mongo-configure-job.yaml create mode 100644 devnet/mongo-rs-config.yaml diff --git a/Tiltfile b/Tiltfile index 394cb6ba..b2d67b21 100644 --- a/Tiltfile +++ b/Tiltfile @@ -41,10 +41,10 @@ if mongo: ] ) - k8s_yaml("devnet/mongo-configure-job.yaml") + k8s_yaml("devnet/mongo-rs-config.yaml") k8s_resource( - "mongo-configure-job", + "mongo-rs-config", resource_deps = ["mongo"] ) @@ -56,7 +56,7 @@ if mongoExpress: port_forwards = [ port_forward(8081, name = "Mongo Express [:8081]", host = webHost), ], - resource_deps = ["mongo"] + resource_deps = ["mongo-rs-config"] ) if fly: @@ -73,7 +73,7 @@ if fly: port_forwards = [ port_forward(8001, name = "Server [:8001]", host = webHost), ], - resource_deps = ["mongo"] + resource_deps = ["mongo-rs-config"] ) if server: @@ -90,7 +90,7 @@ if server: port_forwards = [ port_forward(4000, name = "Server [:4000]", host = webHost), ], - resource_deps = ["mongo"] + resource_deps = ["mongo-rs-config"] ) if api: @@ -107,7 +107,7 @@ if api: port_forwards = [ port_forward(8000, name = "Server [:8000]", host = webHost), ], - resource_deps = ["mongo"] + resource_deps = ["mongo-rs-config"] ) if web: @@ -149,7 +149,7 @@ if onchain_data: k8s_resource( "onchain-data", - resource_deps = ["mongo"], + resource_deps = ["mongo-rs-config"], ) if spy: @@ -166,5 +166,5 @@ if spy: port_forwards = [ port_forward(7777, name = "Spy [:7777]", host = webHost), ], - resource_deps = ["mongo"] + resource_deps = ["mongo-rs-config"] ) diff --git a/devnet/api.yaml b/devnet/api.yaml index 5b3c06d8..eb9393bf 100644 --- a/devnet/api.yaml +++ b/devnet/api.yaml @@ -34,7 +34,7 @@ spec: image: indexer-api:latest env: - name: WORMSCAN_DB_URL - value: mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo/?replicaSet=rs0 + value: mongodb://mongo-0.mongo/?replicaSet=rs0 - name: WORMSCAN_PORT value: "8000" readinessProbe: diff --git a/devnet/fly.yaml b/devnet/fly.yaml index 9f6b38c3..fad605f0 100644 --- a/devnet/fly.yaml +++ b/devnet/fly.yaml @@ -36,7 +36,7 @@ spec: args: ["-local"] env: - name: MONGODB_URI - value: mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo/?replicaSet=rs0 + value: mongodb://mongo-0.mongo/?replicaSet=rs0 - name: API_PORT value: "8001" readinessProbe: diff --git a/devnet/mongo-configure-job.yaml b/devnet/mongo-configure-job.yaml deleted file mode 100644 index 4231f308..00000000 --- a/devnet/mongo-configure-job.yaml +++ /dev/null @@ -1,82 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: mongodb-account - namespace: 'default' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: mongodb-role -rules: -- apiGroups: ["*"] - resources: ["services"] - verbs: ["*"] -- apiGroups: ["*"] - resources: ["pods"] - verbs: ["get","list", "watch"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: mongodb-role-binding -subjects: -- kind: ServiceAccount - name: mongodb-account - namespace: 'default' -roleRef: - kind: ClusterRole - name: mongodb-role - apiGroup: rbac.authorization.k8s.io ---- -apiVersion: batch/v1 -kind: Job -metadata: - name: mongo-configure-job -spec: - template: - metadata: - name: mongo-configure-job - spec: - serviceAccountName: mongodb-account - initContainers: - - name: mongo-configure-dependency - image: ylonkar/pod-dependency-init-container:1.0.2 - env: - - name: POD_LABELS - value: "app=mongo,statefulset.kubernetes.io/pod-name=mongo-2" - - name: MAX_RETRY - value: "10" - - name: RETRY_TIME_OUT - value: "30000" - containers: - - name: mongo - image: mongo:latest - command: - - mongosh - - mongo-0.mongo - - "--eval" - - | - rs.initiate({ - _id : "rs0", - members: [ - { - "_id": 0, - "host": "mongo-0.mongo", - "priority": 4 - }, - { - "_id": 1, - "host": "mongo-1.mongo", - "priority": 2 - }, - { - "_id": 2, - "host": "mongo-2.mongo", - "priority": 1 - } - ] - }) - restartPolicy: Never - backoffLimit: 4 \ No newline at end of file diff --git a/devnet/mongo-express.yaml b/devnet/mongo-express.yaml index 5680e005..e8ada744 100644 --- a/devnet/mongo-express.yaml +++ b/devnet/mongo-express.yaml @@ -39,7 +39,7 @@ spec: - name: ME_CONFIG_MONGODB_ADMINPASSWORD value: example - name: ME_CONFIG_MONGODB_URL - value: mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo/?replicaSet=rs0 + value: mongodb://mongo-0.mongo/?replicaSet=rs0 readinessProbe: tcpSocket: port: 8081 diff --git a/devnet/mongo-rs-config.yaml b/devnet/mongo-rs-config.yaml new file mode 100644 index 00000000..1f74fe0f --- /dev/null +++ b/devnet/mongo-rs-config.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: mongo-rs-config +spec: + template: + metadata: + name: mongo-rs-config + spec: + containers: + - name: mongo + image: mongo:latest + command: + - /bin/bash + - -c + - |- + config='{_id : "rs0", members: [{"_id": 0,"host": "mongo-0.mongo","priority": 3 }]}' + if [ ! $(mongosh mongo-0.mongo --eval "rs.status().ok" --quiet) ]; then + echo "**** Cluster initiate ..." + if [ ! $(mongosh mongo-0.mongo --eval "rs.initiate($config).ok" --quiet) ]; then + echo "**** Cluster reconfig ..." + mongosh mongo-0.mongo --eval "cfg = rs.conf(); cfg.members[0].priority = cfg.members[0].priority + 1; rs.reconfig(cfg, {force: true})" + fi; + fi; + restartPolicy: Never + backoffLimit: 4 \ No newline at end of file diff --git a/devnet/mongo.yaml b/devnet/mongo.yaml index a3cdcd20..f6086353 100644 --- a/devnet/mongo.yaml +++ b/devnet/mongo.yaml @@ -23,7 +23,7 @@ spec: matchLabels: app: mongo serviceName: mongo - replicas: 3 + replicas: 1 template: metadata: labels: diff --git a/devnet/onchain-data.yaml b/devnet/onchain-data.yaml index 635a8406..bf38d9d3 100644 --- a/devnet/onchain-data.yaml +++ b/devnet/onchain-data.yaml @@ -31,7 +31,7 @@ spec: image: onchain-data:latest env: - name: MONGODB_URI - value: mongodb://root:example@mongo:27017/ + value: mongodb://mongo-0.mongo/?replicaSet=rs0 - name: allowlist value: "true" readinessProbe: diff --git a/devnet/server.yaml b/devnet/server.yaml index 7a55f4bd..1e18cbac 100644 --- a/devnet/server.yaml +++ b/devnet/server.yaml @@ -35,7 +35,7 @@ spec: image: server:latest env: - name: MONGODB_URI - value: mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo/?replicaSet=rs0 + value: mongodb://mongo-0.mongo/?replicaSet=rs0 readinessProbe: tcpSocket: port: 4000 diff --git a/devnet/spy.yaml b/devnet/spy.yaml index 29aa958f..fdc4d5af 100644 --- a/devnet/spy.yaml +++ b/devnet/spy.yaml @@ -35,7 +35,7 @@ spec: image: spy:latest env: - name: MONGODB_URI - value: mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo/?replicaSet=rs0 + value: mongodb://mongo-0.mongo/?replicaSet=rs0 - name: MONGODB_DATABASE value: wormhole - name: GRPC_ADDRESS