Skip to content

Commit f52f7a8

Browse files
committed
feat: change image path after wacther deects changes
1 parent bb46202 commit f52f7a8

3 files changed

Lines changed: 41 additions & 28 deletions

File tree

Dockerfile

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# syntax=docker.io/docker/dockerfile:1.4
22
ARG CM_VERSION=0.19-preview2
33
ARG NONODO_VERSION=2.10.1-beta
4-
ARG CM_CALLER_VERSION=0.2.0
4+
ARG CM_CALLER_VERSION=0.2.1
55
ARG TRAEFIK_VERSION=3.1.6
66
ARG S6_OVERLAY_VERSION=3.2.0.2
77

@@ -95,62 +95,64 @@ ENV DATA_PATH ${DATA_PATH}
9595
RUN <<EOF
9696
mkdir -p /etc/s6-overlay/s6-rc.d/prepare-dirs
9797
echo "oneshot" > /etc/s6-overlay/s6-rc.d/prepare-dirs/type
98-
echo "
98+
echo "#!/command/with-contenv sh
9999
mkdir -p \${DATA_PATH}/db
100100
mkdir -p \${DATA_PATH}/advance
101101
mkdir -p \${DATA_PATH}/inspect
102-
" > /etc/s6-overlay/s6-rc.d/prepare-dirs/up
102+
" > /etc/s6-overlay/s6-rc.d/prepare-dirs/run.sh
103+
chmod +x /etc/s6-overlay/s6-rc.d/prepare-dirs/run.sh
104+
echo "/etc/s6-overlay/s6-rc.d/prepare-dirs/run.sh" \
105+
> /etc/s6-overlay/s6-rc.d/prepare-dirs/up
103106
mkdir -p /etc/s6-overlay/s6-rc.d/advance/dependencies.d
104107
touch /etc/s6-overlay/s6-rc.d/advance/dependencies.d/prepare-dirs
105108
echo "longrun" > /etc/s6-overlay/s6-rc.d/advance/type
106-
echo "#!/bin/sh
107-
nonodo_chain_args=
108-
if [ -z \"${FROM_BLOCK}\" ] && [ -z \"${RPC_URL}\" ] && [ -z \"${APP_ADDRESS}\" ]; then
109-
nonodo_chain_args=\"--from-block=${FROM_BLOCK} --rpc-url=${RPC_URL} --contracts-application-address=${APP_ADDRESS}\"
110-
else
111-
nonodo_chain_args='--anvil-port=8546'
109+
echo "#!/command/with-contenv sh
110+
nonodo_chain_args='--anvil-port=8546'
111+
if [ ! -z \"\${FROM_BLOCK}\" ] && [ ! -z \"\${RPC_URL}\" ] && [ ! -z \"\${APP_ADDRESS}\" ]; then
112+
nonodo_chain_args=\"--from-block=\${FROM_BLOCK} --rpc-url=\${RPC_URL} --contracts-application-address=\${APP_ADDRESS}\"
112113
fi
113114
exec nonodo \
114115
--http-rollups-port=5004 --http-port=8080 \
115-
--sqlite-file=${DATA_PATH}/db/database.sqlite \
116-
${nonodo_chain_args} \
116+
--sqlite-file=\${DATA_PATH}/db/database.sqlite \
117+
\${nonodo_chain_args} \
117118
--disable-inspect -- \
118119
cm-caller \
119120
-image=\${IMAGE_SNAPSHOT_PATH} \
120-
-store-path=${DATA_PATH}/advance \
121+
-store-path=\${DATA_PATH}/advance \
121122
-disable-inspect -disable-consistency-checks -disable-remote
122123
" > /etc/s6-overlay/s6-rc.d/advance/run
123124
mkdir -p /etc/s6-overlay/s6-rc.d/inspect/dependencies.d
124125
touch /etc/s6-overlay/s6-rc.d/inspect/dependencies.d/advance
125126
touch /etc/s6-overlay/s6-rc.d/inspect/dependencies.d/prepare-dirs
126127
echo "longrun" > /etc/s6-overlay/s6-rc.d/inspect/type
127-
echo "#!/bin/sh
128+
echo "#!/command/with-contenv sh
128129
exec nonodo \
129130
--http-rollups-port=5005 \
130131
--http-port=8081 \
131132
--disable-devnet --disable-advance -- \
132133
cm-caller \
133134
-image=\${IMAGE_SNAPSHOT_PATH} \
134-
-store-path=${DATA_PATH}/inspect \
135-
-enable-watcher -watcher-path=${DATA_PATH}/advance/latest \
135+
-store-path=\${DATA_PATH}/inspect \
136+
-enable-watcher -watcher-path=\${DATA_PATH}/advance/local_image \
136137
-disable-advance -disable-consistency-checks -disable-remote
137138
" > /etc/s6-overlay/s6-rc.d/inspect/run
138-
mkdir -p /etc/s6-overlay/s6-rc.d/traefik/dependencies.d
139-
touch /etc/s6-overlay/s6-rc.d/traefik/dependencies.d/advance \
140-
/etc/s6-overlay/s6-rc.d/traefik/dependencies.d/inspect
139+
mkdir -p /etc/s6-overlay/s6-rc.d/traefik
141140
echo "longrun" > /etc/s6-overlay/s6-rc.d/traefik/type
142141
echo "#!/bin/sh
143142
exec traefik
144143
" > /etc/s6-overlay/s6-rc.d/traefik/run
145144
mkdir -p /etc/s6-overlay/s6-rc.d/user/contents.d
146-
touch /etc/s6-overlay/s6-rc.d/user/contents.d/advance \
147-
/etc/s6-overlay/s6-rc.d/user/contents.d/inspect \
148-
/etc/s6-overlay/s6-rc.d/user/contents.d/traefik
145+
touch /etc/s6-overlay/s6-rc.d/user/contents.d/traefik \
146+
/etc/s6-overlay/s6-rc.d/user/contents.d/prepare-dirs \
147+
/etc/s6-overlay/s6-rc.d/user/contents.d/advance \
148+
/etc/s6-overlay/s6-rc.d/user/contents.d/inspect
149149
EOF
150150

151151

152152
FROM node-base as node
153153

154154
USER app
155155

156+
COPY nonodo /usr/local/bin/nonodo
157+
156158
CMD ["/init"]

README.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,26 @@ The starting snapshot was saved to `image` directory. This snapshot is used by c
6363
First build the node image
6464

6565
```shell
66-
mkdir node
67-
docker run --rm -p8080:80 -p8545:8545 -v $PWD/image:/mnt/snapshots/0 -v $PWD/node:/mnt/node cm-caller-node /init
66+
docker build -t cm-caller-node .
6867
```
6968

7069
Then you can go to your apps directory and start a node on the snapshot (considered as `image` here)
7170

7271
```shell
73-
mkdir node-data
72+
mkdir -m 777 node-data
7473
docker run --rm -p8080:80 -p8545:8545 -v $PWD/image:/mnt/snapshots/0 -v $PWD/node-data:/mnt/node cm-caller-node /init
7574
```
7675

7776
You can also connect to an external rpc and start the node
7877

79-
80-
78+
```shell
79+
docker run --rm -p8080:80 --add-host host.docker.internal=host-gateway \
80+
-v $PWD/image:/mnt/snapshots/0 -v $PWD/node-data:/mnt/node \
81+
-e RPC_URL=<rpc url> \
82+
-e APP_ADDRESS=<application contract address> \
83+
-e FROM_BLOCK=<application contract deploy block> \
84+
cm-caller-node /init
85+
```
8186

8287
### Build Image with the App
8388

cm_caller.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -957,7 +957,8 @@ func RestartRemoteCM() error {
957957
return nil
958958
}
959959

960-
func StartWatcher(w *watcher.Watcher, watcherInterval uint64, pathToWatch string) error {
960+
func StartWatcher(w *watcher.Watcher, watcherInterval uint64,
961+
pathToWatch string, watcherDelay float64) error {
961962

962963
parent := filepath.Dir(pathToWatch)
963964
pattern := regexp.MustCompile(filepath.Base(pathToWatch))
@@ -988,6 +989,8 @@ func StartWatcher(w *watcher.Watcher, watcherInterval uint64, pathToWatch string
988989
((e.FileInfo.Mode()&os.ModeSymlink) == os.ModeSymlink &&
989990
e.Op == watcher.Write)) {
990991
infolog.Printf("watcher: image changed")
992+
time.Sleep(time.Duration(watcherDelay * float64(time.Second)))
993+
imagePath = e.Path
991994

992995
err := RestartRemoteCM()
993996
if err != nil {
@@ -1028,6 +1031,7 @@ func StartWatcher(w *watcher.Watcher, watcherInterval uint64, pathToWatch string
10281031
func main() {
10291032
var help, disableInspect, disableAdvance, resetLatestLink, enableWatcher bool
10301033
var watcherInterval uint64 = 1000
1034+
var watcherDelay float64 = 0.5
10311035

10321036
flag.StringVar(&storePath, "store-path", ".", "Path where data and images are stored")
10331037
flag.StringVar(&imagePath, "image", "image", "Path to the cartesi machine image")
@@ -1061,6 +1065,8 @@ func main() {
10611065
"Path where for the watcher watch new images (deafault: image path)")
10621066
flag.Uint64Var(&watcherInterval, "watcher-interval", watcherInterval,
10631067
"Watcher polling interval")
1068+
flag.Float64Var(&watcherDelay, "watcher-delay", watcherDelay,
1069+
"Delay to wait after path change")
10641070
flag.Uint64Var(&baseRemoteCMPort, "base-remote-port", baseRemoteCMPort,
10651071
"Starting remote port")
10661072
flag.StringVar(&cmOutput, "remote-output", cmOutput,
@@ -1130,7 +1136,7 @@ func main() {
11301136
pathToWatch = watcherPath
11311137
}
11321138

1133-
err = StartWatcher(w,watcherInterval,pathToWatch)
1139+
err = StartWatcher(w,watcherInterval,pathToWatch,watcherDelay)
11341140
if err != nil {
11351141
errorWaitGroup.Go(func() error {
11361142
return fmt.Errorf("start watcher error: %s", err)

0 commit comments

Comments
 (0)