updatetesting.sh raw

   1  #!/bin/bash
   2  set -euo pipefail
   3  
   4  # updatetesting.sh - Rebuild the relay and restart it. Smesh hot-reloads automatically.
   5  #
   6  # Requires localtesting.sh to have been run first.
   7  
   8  TESTDIR="/tmp/orly-localtest"
   9  PIDDIR="$TESTDIR/pids"
  10  LOGDIR="$TESTDIR/logs"
  11  BINARY="$TESTDIR/orly"
  12  SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
  13  REPODIR="$(cd "$SCRIPTDIR/.." && pwd)"
  14  
  15  if [[ ! -f "$PIDDIR/relay.pid" ]]; then
  16      echo "error: no local testing instance found"
  17      echo "Run scripts/localtesting.sh first"
  18      exit 1
  19  fi
  20  
  21  RELAY_PID=$(cat "$PIDDIR/relay.pid")
  22  
  23  if ! kill -0 "$RELAY_PID" 2>/dev/null; then
  24      echo "warning: relay process $RELAY_PID is not running"
  25      echo "Will rebuild and start fresh"
  26  fi
  27  
  28  # Rebuild relay
  29  echo "Building relay..."
  30  cd "$REPODIR"
  31  CGO_ENABLED=0 go build -o "$BINARY" ./cmd/orly
  32  echo "Relay built: $BINARY"
  33  
  34  # Kill relay process tree (launcher + all children)
  35  if kill -0 "$RELAY_PID" 2>/dev/null; then
  36      echo "Stopping relay (PID $RELAY_PID)..."
  37      # Kill the entire process group spawned by the launcher
  38      kill -- -"$RELAY_PID" 2>/dev/null || kill "$RELAY_PID" 2>/dev/null || true
  39      # Wait for it to exit
  40      for i in $(seq 1 10); do
  41          if ! kill -0 "$RELAY_PID" 2>/dev/null; then
  42              break
  43          fi
  44          sleep 0.5
  45      done
  46      # Force kill if still alive
  47      if kill -0 "$RELAY_PID" 2>/dev/null; then
  48          echo "Force killing relay..."
  49          kill -9 -- -"$RELAY_PID" 2>/dev/null || kill -9 "$RELAY_PID" 2>/dev/null || true
  50      fi
  51  fi
  52  
  53  if [[ -z "${SUPERUSER:-}" ]]; then
  54      echo "error: SUPERUSER environment variable not set"
  55      exit 1
  56  fi
  57  
  58  # Restart relay with same config
  59  echo "Starting relay..."
  60  ORLY_DATA_DIR="$TESTDIR/data" \
  61  ORLY_PORT=3334 \
  62  ORLY_LISTEN=127.0.0.1 \
  63  ORLY_LOG_LEVEL=info \
  64  ORLY_ADMINS="$SUPERUSER" \
  65  ORLY_OWNERS="$SUPERUSER" \
  66  ORLY_AUTH_REQUIRED=false \
  67  ORLY_AUTH_TO_WRITE=false \
  68  ORLY_LAUNCHER_DB_DRIVER=badger \
  69  ORLY_LAUNCHER_DB_LISTEN=127.0.0.1:50061 \
  70  ORLY_LAUNCHER_ACL_ENABLED=true \
  71  ORLY_LAUNCHER_ACL_LISTEN=127.0.0.1:50062 \
  72  ORLY_LAUNCHER_ACL_READY_TIMEOUT=600s \
  73  ORLY_ACL_MODE=follows \
  74  ORLY_DB_TYPE=grpc \
  75  ORLY_GRPC_SERVER=127.0.0.1:50061 \
  76  ORLY_ACL_TYPE=grpc \
  77  ORLY_GRPC_ACL=127.0.0.1:50062 \
  78  ORLY_NEGENTROPY_ENABLED=false \
  79  ORLY_LAUNCHER_SYNC_NEGENTROPY_ENABLED=false \
  80  ORLY_FOLLOW_LIST_FREQUENCY=1h \
  81  ORLY_DB_BLOCK_CACHE_MB=256 \
  82  ORLY_DB_INDEX_CACHE_MB=128 \
  83  ORLY_QUERY_CACHE_DISABLED=false \
  84  ORLY_QUERY_CACHE_SIZE_MB=64 \
  85  ORLY_SERIAL_CACHE_PUBKEYS=50000 \
  86  ORLY_SERIAL_CACHE_EVENT_IDS=200000 \
  87  ORLY_GC_ENABLED=false \
  88  ORLY_MAX_CONN_PER_IP=50 \
  89  ORLY_QUERY_RESULT_LIMIT=256 \
  90  ORLY_WEB_DISABLE=true \
  91  "$BINARY" launcher > "$LOGDIR/relay.log" 2>&1 &
  92  
  93  NEW_PID=$!
  94  echo "$NEW_PID" > "$PIDDIR/relay.pid"
  95  
  96  # Wait for relay to be ready
  97  echo -n "Waiting for relay..."
  98  for i in $(seq 1 30); do
  99      if curl -s -o /dev/null http://127.0.0.1:3334 2>/dev/null; then
 100          echo " ready"
 101          break
 102      fi
 103      if ! kill -0 "$NEW_PID" 2>/dev/null; then
 104          echo " failed (process exited)"
 105          echo "Check logs: $LOGDIR/relay.log"
 106          exit 1
 107      fi
 108      echo -n "."
 109      sleep 1
 110  done
 111  
 112  echo "Relay updated and running (PID $NEW_PID)"
 113