diff --git a/.gitignore b/.gitignore index 34022ef..5a5243b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target +build detee_challenge_nodes diff --git a/scripts/Dockerfile b/scripts/Dockerfile new file mode 100644 index 0000000..6e80e44 --- /dev/null +++ b/scripts/Dockerfile @@ -0,0 +1,4 @@ +FROM alpine:edge +COPY start.sh /start.sh +COPY hacker-challenge /hacker-challenge +ENTRYPOINT ["/start.sh"] diff --git a/scripts/start.sh b/scripts/start.sh new file mode 100755 index 0000000..64de8fc --- /dev/null +++ b/scripts/start.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# This script start the hacker challenge from within the docker container. +# It's only purpose is to help bootstrap a test network. + +echo $INIT_NODES > /detee_challenge_nodes + +/hacker-challenge diff --git a/scripts/testnet.sh b/scripts/testnet.sh new file mode 100755 index 0000000..c8439fc --- /dev/null +++ b/scripts/testnet.sh @@ -0,0 +1,21 @@ +#!/bin/bash +cd "$(dirname "$0")"/.. +set -e +cargo build --release --target x86_64-unknown-linux-musl +rm -rf build +mkdir -p build +cp ./target/x86_64-unknown-linux-musl/release/hacker-challenge build/ +cp scripts/start.sh build/ +cp scripts/Dockerfile build/ +cd build + +docker build -t hacker-challenge:latest . + +docker ps -a | grep 'hacker-challenge' | awk '{ print $NF }' | xargs docker rm -f || true + +for i in {0..10} +do + docker run -d --name "hacker-challenge_$i" \ + --env INIT_NODES="172.17.0.2 172.17.0.3 172.17.0.4" \ + hacker-challenge:latest +done diff --git a/src/datastore.rs b/src/datastore.rs index bfe6e71..5742170 100644 --- a/src/datastore.rs +++ b/src/datastore.rs @@ -250,6 +250,9 @@ impl Store { use rand::RngCore; let nodes = self.nodes.lock().await; let len = nodes.len(); + if len == 0 { + return Vec::new(); + } let skip = OsRng.next_u64().try_into().unwrap_or(0) % len; let mut iter = nodes.iter().cycle().skip(skip); let mut random_nodes = vec![]; diff --git a/src/grpc/client.rs b/src/grpc/client.rs index 205c661..d50abf2 100644 --- a/src/grpc/client.rs +++ b/src/grpc/client.rs @@ -27,7 +27,7 @@ impl ConnManager { } async fn connect(self, node_ip: String) { - let mut client = UpdateClient::connect(format!("http://{node_ip}:50051")) + let mut client = UpdateClient::connect(format!("{node_ip}:31373")) .await .unwrap();