Skip to content

Commit 1d435a9

Browse files
musitdevnicholasflintwillow
authored andcommitted
feat: Backup / restore follower DB (#1051)
1 parent 63e9323 commit 1d435a9

File tree

23 files changed

+941
-377
lines changed

23 files changed

+941
-377
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ ledger_db/
1212
state_merkle_db/
1313
.etc
1414
.movement
15-
.movement-*
15+
.movement*
1616
.idea
1717
.vscode
1818
.data

Cargo.lock

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
services:
2+
setup:
3+
image: ghcr.io/movementlabsxyz/movement-full-node-setup:${CONTAINER_REV}
4+
container_name: setup
5+
environment:
6+
DOT_MOVEMENT_PATH: /.movement
7+
# needs to have a connection to the movement-celestia-da-light-node
8+
MOVEMENT_DA_LIGHT_NODE_CONNECTION_PROTOCOL: ${MOVEMENT_DA_LIGHT_NODE_CONNECTION_PROTOCOL:?MOVEMENT_DA_LIGHT_NODE_CONNECTION_PROTOCOL is not set}
9+
MOVEMENT_DA_LIGHT_NODE_CONNECTION_HOSTNAME: ${MOVEMENT_DA_LIGHT_NODE_CONNECTION_HOSTNAME:?MOVEMENT_DA_LIGHT_NODE_CONNECTION_HOSTNAME is not set}
10+
MOVEMENT_DA_LIGHT_NODE_CONNECTION_PORT: ${MOVEMENT_DA_LIGHT_NODE_CONNECTION_PORT:?MOVEMENT_DA_LIGHT_NODE_CONNECTION_PORT is not set}
11+
INDEXER_PROCESSOR_POSTGRES_CONNECTION_STRING: postgres://postgres:password@postgres:5432/postgres
12+
AWS_REGION: ${AWS_REGION:?AWS_REGION is not set}
13+
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
14+
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
15+
MOVEMENT_SYNC: ${MOVEMENT_SYNC} #:?MOVEMENT_SYNC is not set}
16+
MAYBE_RUN_LOCAL: "false"
17+
MOVEMENT_DA_LIGHT_NODE_HTTP1: ${MOVEMENT_DA_LIGHT_NODE_HTTP1}
18+
RUST_LOG: info,aws_sdk_s3=debug
19+
volumes:
20+
- ${DOT_MOVEMENT_PATH}:/.movement
21+
# mount if exists
22+
- ~/.aws/:/root/.aws:ro
23+
24+
healthcheck:
25+
test: [ "CMD-SHELL", "echo 'health check'" ]
26+
retries: 10
27+
interval: 10s
28+
timeout: 5s
29+
30+
# turn off underlying da light nodes
31+
celestia-light-node:
32+
image: busybox
33+
container_name: celestia-light-node
34+
command: sleep infinity
35+
environment:
36+
- DOT_MOVEMENT_PATH=/.movement
37+
- CELESTIA_RPC_ADDRESS=celestia-light-node:26657
38+
volumes:
39+
- ${DOT_MOVEMENT_PATH}:/.movement
40+
depends_on:
41+
setup:
42+
condition: service_healthy
43+
healthcheck:
44+
test: [ "CMD-SHELL", "echo 'health check'" ]
45+
retries: 3
46+
start_period: 3s
47+
restart: on-failure:3
48+
49+
# turn off celestia-light-node-synced
50+
celestia-light-node-synced:
51+
image: busybox
52+
container_name: celestia-light-node-synced
53+
command: echo "No sync check when following."
54+
environment:
55+
- DOT_MOVEMENT_PATH=/.movement
56+
volumes:
57+
- ${DOT_MOVEMENT_PATH}:/.movement
58+
depends_on:
59+
celestia-light-node:
60+
condition: service_healthy
61+
62+
# turn off movement-celestia-da-light-node
63+
movement-celestia-da-light-node:
64+
image: busybox
65+
container_name: movement-celestia-da-light-node
66+
command: sleep infinity
67+
healthcheck:
68+
test: [ "CMD-SHELL", "echo 'health check'" ]
69+
retries: 3
70+
start_period: 3s
71+
72+
# turn off movement-faucet-service
73+
movement-faucet-service:
74+
image: busybox
75+
container_name: movement-faucet-service
76+
command: sleep infinity
77+
healthcheck:
78+
test: [ "CMD-SHELL", "echo 'health check'" ]
79+
retries: 3
80+
start_period: 3s
81+
82+
movement-snapshot-node:
83+
image: ghcr.io/movementlabsxyz/movement-full-node:${CONTAINER_REV}
84+
container_name: movement-snapshot-node
85+
environment:
86+
- DOT_MOVEMENT_PATH=/.movement
87+
- MOVEMENT_TIMING=info
88+
- SUZUKA_TIMING_LOG=/.movement/movement-timing.log
89+
- RUST_BACKTRACE=1
90+
- SYNC_PATTERN=${SYNC_PATTERN}
91+
- SYNC_BUCKET=${SYNC_BUCKET}
92+
- SYNC_ARCHIVE=${SYNC_ARCHIVE}
93+
entrypoint: /bin/sh
94+
command: |
95+
sh -c '
96+
while true; do
97+
timeout 60s movement-full-node run || echo "Node run timed out"
98+
echo "Taking snapshot..."
99+
movement-full-node backup save-and-push $SYNC_BUCKET $SYNC_PATTERN $SYNC_ARCHIVE || echo "Snapshot failed"
100+
done
101+
'
102+
volumes:
103+
- ${DOT_MOVEMENT_PATH}:/.movement
104+
depends_on:
105+
- movement-celestia-da-light-node
106+
ports:
107+
- "30731:30731"
108+
- "30734:30734"
109+
healthcheck:
110+
test: [ "CMD-SHELL", "nc -zv 0.0.0.0 39731" ]
111+
retries: 10
112+
interval: 10s
113+
timeout: 5s
114+
restart: on-failure:5
115+
116+
movement-full-node:
117+
image: ghcr.io/movementlabsxyz/movement-full-node:${CONTAINER_REV}
118+
container_name: movement-full-node
119+
depends_on:
120+
movement-snapshot-node:
121+
condition: service_healthy
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
version: "3.8"
2+
3+
services:
4+
5+
movement-backup-db:
6+
image: ghcr.io/movementlabsxyz/movement-full-node:${CONTAINER_REV}
7+
container_name: movement-backup-db
8+
environment:
9+
- DOT_MOVEMENT_PATH=/.movement
10+
- MOVEMENT_TIMING=info
11+
- SUZUKA_TIMING_LOG=/.movement/movement-timing.log
12+
- RUST_BACKTRACE=1
13+
- AWS_REGION=us-west-1
14+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
15+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
16+
- SYNC_BUCKET=${SYNC_BUCKET}
17+
- SYNC_ARCHIVE=${SYNC_BUCKET}
18+
command: backup push $SYNC_BUCKET $SYNC_ARCHIVE
19+
volumes:
20+
- ${DOT_MOVEMENT_PATH}:/.movement
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
version: "3.8"
2+
3+
services:
4+
5+
movement-restore-db:
6+
image: ghcr.io/movementlabsxyz/movement-full-node:${CONTAINER_REV}
7+
container_name: movement-restore-db
8+
environment:
9+
- DOT_MOVEMENT_PATH=/.movement
10+
- MOVEMENT_TIMING=info
11+
- SUZUKA_TIMING_LOG=/.movement/movement-timing.log
12+
- RUST_BACKTRACE=1
13+
- AWS_REGION=us-west-1
14+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
15+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
16+
- SYNC_BUCKET=${SYNC_BUCKET}
17+
- SYNC_PATTERN=${SYNC_PATTERN}
18+
command: backup restore $SYNC_BUCKET $SYNC_PATTERN
19+
volumes:
20+
- ${DOT_MOVEMENT_PATH}:/.movement
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
version: "3.8"
2+
3+
services:
4+
5+
movement-backup-db:
6+
image: ghcr.io/movementlabsxyz/movement-full-node:${CONTAINER_REV}
7+
container_name: movement-backup-db
8+
environment:
9+
- DOT_MOVEMENT_PATH=/.movement
10+
- MOVEMENT_TIMING=info
11+
- SUZUKA_TIMING_LOG=/.movement/movement-timing.log
12+
- RUST_BACKTRACE=1
13+
- AWS_REGION=us-west-1
14+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
15+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
16+
- SYNC_PATTERN=${SYNC_PATTERN}
17+
- SYNC_BUCKET=${SYNC_BUCKET}
18+
- SYNC_ARCHIVE=${SYNC_BUCKET}
19+
command: backup save-and-push $SYNC_BUCKET $SYNC_PATTERN $SYNC_ARCHIVE
20+
volumes:
21+
- ${DOT_MOVEMENT_PATH}:/.movement
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
version: "3.8"
2+
3+
services:
4+
5+
movement-backup-db:
6+
image: ghcr.io/movementlabsxyz/movement-full-node:${CONTAINER_REV}
7+
container_name: movement-backup-db
8+
environment:
9+
- DOT_MOVEMENT_PATH=/.movement
10+
- MOVEMENT_TIMING=info
11+
- SUZUKA_TIMING_LOG=/.movement/movement-timing.log
12+
- RUST_BACKTRACE=1
13+
- AWS_REGION=us-west-1
14+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
15+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
16+
- MOVEMENT_SYNC=${MOVEMENT_SYNC}
17+
- SYNC_PATTERN=${SYNC_PATTERN}
18+
command: backup save $SYNC_PATTERN
19+
volumes:
20+
- ${DOT_MOVEMENT_PATH}:/.movement

networks/movement/movement-full-node/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ movement-da-light-node-client = { workspace = true}
4545
aptos-framework-elsa-to-biarritz-rc1-migration = { workspace = true }
4646
movement-signer = { workspace = true }
4747
movement-signer-loader = { workspace = true }
48+
syncador = { workspace = true }
49+
syncup = { workspace = true }
4850

4951
[features]
5052
default = []

0 commit comments

Comments
 (0)