Skip to content

Commit acf5af8

Browse files
committed
automates one observer in-docker setup
Signed-off-by: Andrey Kononykhin <andkononykhin@gmail.com>
1 parent 843c995 commit acf5af8

8 files changed

+79
-10
lines changed

Makefile

+11-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,11 @@ localnet_init:
5757
/bin/bash ./genlocalnetconfig.sh
5858

5959
localnet_start:
60-
docker-compose up -d
60+
@if [ -d "localnet/observer0" ]; then\
61+
docker-compose --profile observers up -d;\
62+
else\
63+
docker-compose up -d;\
64+
fi
6165

6266
localnet_stop:
6367
docker-compose down
@@ -67,13 +71,19 @@ localnet_export: localnet_stop
6771
docker-compose run node1 dcld export --for-zero-height >genesis.export.node1.json
6872
docker-compose run node2 dcld export --for-zero-height >genesis.export.node2.json
6973
docker-compose run node3 dcld export --for-zero-height >genesis.export.node3.json
74+
@if [ -d "localnet/observer0" ]; then\
75+
docker-compose run observer0 dcld export --for-zero-height >genesis.export.observer0.json;\
76+
fi
7077

7178

7279
localnet_reset: localnet_stop
7380
docker-compose run node0 dcld unsafe-reset-all
7481
docker-compose run node1 dcld unsafe-reset-all
7582
docker-compose run node2 dcld unsafe-reset-all
7683
docker-compose run node3 dcld unsafe-reset-all
84+
@if [ -d "localnet/observer0" ]; then\
85+
docker-compose run observer0 dcld unsafe-reset-all;\
86+
fi
7787

7888
localnet_clean: localnet_stop
7989
rm -rf $(LOCALNET_DIR)

README-DEV.md

+3
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ It's recommended to develop and deploy the App on Ubuntu 18.04 or Ubuntu 20.04.
5151
The easiest way to run a local pool is to start it in Docker:
5252
5353
make install
54+
55+
# DCL_OBSERVERS=1 make localnet_init # to initialize observers as well
5456
make localnet_init
57+
5558
make localnet_start
5659
5760
This will start a local pool of 4 validator nodes in Docker. The nodes will expose their RPC enpoints on ports `26657`, `26659`, `26661`, `26663` correspondingly.

bench/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ By that reason load test uses prepared load data which can be generated as follo
2929

3030
```bash
3131
sudo make localnet_clean
32+
33+
# DCL_OBSERVERS=1 make localnet_init # to initialize observers as well
3234
make localnet_init
3335

3436
# ./gentestaccounts.sh [<NUM-USERS>]

bench/prometheus.yml

+2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ scrape_configs:
3131
scrape_interval: 5s
3232

3333
static_configs:
34+
# TODO use different labels for nodes and observers
3435
- targets: ['localhost:26650']
3536
- targets: ['localhost:26651']
3637
- targets: ['localhost:26652']
3738
- targets: ['localhost:26653']
39+
- targets: ['localhost:26654']

docker-compose.yml

+21
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,27 @@ services:
7575
# Please use the following as the entry point if you want to start this node in debug mode for easy debugging
7676
# command: dlv --listen=:2345 --headless=true --log=true --log-output=debugger,debuglineerr,gdbwire,lldbout,rpc --accept-multiclient --api-version=2 exec /usr/bin/dcld start
7777

78+
observer0:
79+
image: dcledger
80+
build: .
81+
profiles:
82+
- observers
83+
container_name: observer0
84+
ports:
85+
- "26664-26665:26656-26657"
86+
- "26654:26660"
87+
# uncomment following line if starting in debug mode
88+
# - "2345:2345"
89+
volumes:
90+
- ./localnet/observer0:/root/.dcld:Z
91+
networks:
92+
localnet:
93+
ipv4_address: 192.167.10.6
94+
command: dcld start
95+
# Please use the following as the entry point if you want to start this node in debug mode for easy debugging
96+
# command: dlv --listen=:2345 --headless=true --log=true --log-output=debugger,debuglineerr,gdbwire,lldbout,rpc --accept-multiclient --api-version=2 exec /usr/bin/dcld start
97+
98+
7899
networks:
79100
localnet:
80101
driver: bridge

docs/design/benchmarking.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
* `response time` (percentiles): the time between client's initial request and the last byte of a validator response
2020
* `requests per second (RPS)`: number of requests per second
2121
* `transactions per second (TPS)`: number of write requests (txns) per second
22-
* **Note** to measure that on client side write requests should use to `broadcast_tx_commit` requetss
22+
* **Note** to measure that on a client side write requests should use `broadcast_tx_commit` requests
2323
* `number of clients`: number of concurrent clients that ledger serves
2424
* (optional) `throughtput` (in/out): number of KB per second. Marked as optional since we don't expect much in/out data due to relatively small txns payloads.
2525

genlocalnetconfig.sh

+34-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
set -euo pipefail
1717

18+
DCL_OBSERVERS="${DCL_OBSERVERS:-}"
19+
1820
SED_EXT=
1921
if [ "$(uname)" == "Darwin" ]; then
2022
# Mac OS X sed needs the file extension when -i flag is used. Keeping it empty as we don't need backupfile
@@ -27,6 +29,10 @@ rm -rf ~/.dcld
2729
rm -rf localnet
2830
mkdir localnet localnet/client localnet/node0 localnet/node1 localnet/node2 localnet/node3
2931

32+
if [[ -n "$DCL_OBSERVERS" ]]; then
33+
mkdir localnet/observer0
34+
fi
35+
3036
# client
3137

3238
dclcli config chain-id dclchain
@@ -105,8 +111,24 @@ echo 'test1234' | dcld gentx --from anna
105111

106112
cp -r ~/.dcld/* localnet/node3
107113

114+
115+
if [[ -d "localnet/observer0" ]]; then
116+
rm -rf ~/.dcld/*
117+
# observer0
118+
119+
dcld init observer0 --chain-id dclchain
120+
121+
dcld add-genesis-account --address=$jack_address --pubkey=$jack_pubkey --roles="Trustee,NodeAdmin"
122+
dcld add-genesis-account --address=$alice_address --pubkey=$alice_pubkey --roles="Trustee,NodeAdmin"
123+
dcld add-genesis-account --address=$bob_address --pubkey=$bob_pubkey --roles="Trustee,NodeAdmin"
124+
dcld add-genesis-account --address=$anna_address --pubkey=$anna_pubkey --roles="NodeAdmin"
125+
126+
cp -r ~/.dcld/* localnet/observer0
127+
fi
128+
108129
# Collect all validator creation transactions
109130

131+
mkdir -p ~/.dcld/config/gentx
110132
cp localnet/node0/config/gentx/* ~/.dcld/config/gentx
111133
cp localnet/node1/config/gentx/* ~/.dcld/config/gentx
112134
cp localnet/node2/config/gentx/* ~/.dcld/config/gentx
@@ -124,6 +146,10 @@ cp ~/.dcld/config/genesis.json localnet/node1/config/
124146
cp ~/.dcld/config/genesis.json localnet/node2/config/
125147
cp ~/.dcld/config/genesis.json localnet/node3/config/
126148

149+
if [[ -d "localnet/observer0" ]]; then
150+
cp ~/.dcld/config/genesis.json localnet/observer0/config/
151+
fi
152+
127153
# Find out node ids
128154

129155
id0=$(ls localnet/node0/config/gentx | sed 's/gentx-\(.*\).json/\1/')
@@ -136,10 +162,14 @@ peers="$id0@192.167.10.2:26656,$id1@192.167.10.3:26656,$id2@192.167.10.4:26656,$
136162

137163
# Update address book of the first node
138164
sed -i $SED_EXT "s/persistent_peers = \"\"/persistent_peers = \"$peers\"/g" localnet/node0/config/config.toml
165+
if [[ -d "localnet/observer0" ]]; then
166+
sed -i $SED_EXT "s/persistent_peers = \"\"/persistent_peers = \"$peers\"/g" localnet/observer0/config/config.toml
167+
fi
139168

140169
# Make RPC endpoint available externally
141-
sed -i $SED_EXT "s/persistent_peers = \"\"/persistent_peers = \"$peers\"/g" localnet/node0/config/config.toml
142-
for idx in 0 1 2 3; do
143-
sed -i $SED_EXT 's/laddr = "tcp:\/\/127.0.0.1:26657"/laddr = "tcp:\/\/0.0.0.0:26657"/g' "localnet/node${idx}/config/config.toml"
144-
sed -i $SED_EXT 's/prometheus = false/prometheus = true/g' "localnet/node${idx}/config/config.toml"
170+
for node_id in node0 node1 node2 node3 observer0; do
171+
if [[ -d "localnet/${node_id}" ]]; then
172+
sed -i $SED_EXT 's/laddr = "tcp:\/\/127.0.0.1:26657"/laddr = "tcp:\/\/0.0.0.0:26657"/g' "localnet/${node_id}/config/config.toml"
173+
sed -i $SED_EXT 's/prometheus = false/prometheus = true/g' "localnet/${node_id}/config/config.toml"
174+
fi
145175
done

gentestaccounts.sh

+5-4
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ done
4141
dcld validate-genesis
4242

4343
cp -r ~/.dclcli/* localnet/client
44-
cp -f ~/.dcld/config/genesis.json localnet/node0/config/
45-
cp -f ~/.dcld/config/genesis.json localnet/node1/config/
46-
cp -f ~/.dcld/config/genesis.json localnet/node2/config/
47-
cp -f ~/.dcld/config/genesis.json localnet/node3/config/
44+
for node_id in node0 node1 node2 node3 observer0; do
45+
if [[ -d "localnet/${node_id}" ]]; then
46+
cp -f ~/.dcld/config/genesis.json "localnet/${node_id}/config/"
47+
fi
48+
done

0 commit comments

Comments
 (0)