diff --git a/contrib/embargo/.gitignore b/contrib/embargo/.gitignore deleted file mode 100644 index fc103718a63..00000000000 --- a/contrib/embargo/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.embargo -/embargo diff --git a/contrib/embargo/.python-version b/contrib/embargo/.python-version deleted file mode 100644 index bae90b4cae9..00000000000 --- a/contrib/embargo/.python-version +++ /dev/null @@ -1 +0,0 @@ -embargo diff --git a/contrib/embargo/embargo.yml b/contrib/embargo/embargo.yml deleted file mode 100644 index bc25f8513c9..00000000000 --- a/contrib/embargo/embargo.yml +++ /dev/null @@ -1,102 +0,0 @@ -# Embargo config for testing network failures and network partiions. -# Embargo (fork of blockade) docs: https://blockade.readthedocs.io -# Usage: -# embargo up -# To partition zero1 and dg1 from the rest of the cluster: -# embargo partition zero1,dg1 - -containers: - zero1: - image: dgraph/dgraph:latest - hostname: "zero1" - # Needed for DNS with network set to udn - container_name: "zero1" - ports: - - 5080 - - 6080 - expose: - - 5080 - - 6080 - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero --my=zero1:5080 --replicas 3 --raft="idx=1;" --bindall --expose_trace --logtostderr -v=3 - volumes: - # Note: Any environment variables must use the ${} syntax. - # ${GOPATH} works, $GOPATH does not. - "${GOPATH}/bin": "/gobin" - - zero2: - image: dgraph/dgraph:latest - hostname: "zero2" - container_name: "zero2" - ports: - - 5082 - - 6082 - expose: - - 5082 - - 6082 - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero -o 2 --my=zero2:5082 --replicas 3 --peer=zero1:5080 --raft="idx=2;" --bindall --expose_trace --logtostderr -v=3 - volumes: - "${GOPATH}/bin": "/gobin" - - zero3: - image: dgraph/dgraph:latest - hostname: "zero3" - container_name: "zero3" - ports: - - 5083 - - 6083 - expose: - - 5083 - - 6083 - command: /gobin/dgraph ${COVERAGE_OUTPUT} zero -o 3 --my=zero3:5083 --replicas 3 --peer=zero1:5080 --raft="idx=3;" --bindall --expose_trace --logtostderr -v=3 - volumes: - "${GOPATH}/bin": "/gobin" - - dg1: - image: dgraph/dgraph:latest - hostname: "dg1" - container_name: "dg1" - ports: - - 8180 - - 9180 - expose: - - 8180 - - 9180 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --my=dg1:7180 --zero=zero1:5080,zero2:5082,zero3:5083 -o 100 --expose_trace --logtostderr -v=3 - --trace "ratio=1.0;" - volumes: - "${GOPATH}/bin": "/gobin" - - dg2: - image: dgraph/dgraph:latest - hostname: "dg2" - container_name: "dg2" - ports: - - 8182 - - 9182 - expose: - - 8182 - - 9182 - start_delay: 8 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --my=dg2:7182 --zero=zero1:5080,zero2:5082,zero3:5083 -o 102 --expose_trace --logtostderr -v=3 - --trace "ratio=1.0;" - volumes: - "${GOPATH}/bin": "/gobin" - - dg3: - image: dgraph/dgraph:latest - hostname: "dg3" - container_name: "dg3" - ports: - - 8183 - - 9183 - expose: - - 8183 - - 9183 - start_delay: 16 - command: /gobin/dgraph ${COVERAGE_OUTPUT} alpha --my=dg3:7183 --zero=zero1:5080,zero2:5082,zero3:5083 -o 103 --expose_trace --logtostderr -v=3 - --trace "ratio=1.0;" - volumes: - "${GOPATH}/bin": "/gobin" - -network: - driver: "udn" diff --git a/contrib/embargo/main.go b/contrib/embargo/main.go deleted file mode 100644 index ac15da0635b..00000000000 --- a/contrib/embargo/main.go +++ /dev/null @@ -1,221 +0,0 @@ -package main - -import ( - "bytes" - "context" - "fmt" - "log" - "math/rand" - "os" - "os/exec" - "strings" - "time" - - "github.com/pkg/errors" -) - -var ctxb = context.Background() - -func run(ctx context.Context, command string) error { - args := strings.Split(command, " ") - var checkedArgs []string - for _, arg := range args { - if len(arg) > 0 { - checkedArgs = append(checkedArgs, arg) - } - } - cmd := exec.CommandContext(ctx, checkedArgs[0], checkedArgs[1:]...) - var out bytes.Buffer - cmd.Stdout = &out - cmd.Stderr = &out - if err := cmd.Run(); err != nil { - fmt.Printf("[%v] ERROR. Command %q. Error: %v. Output:\n%s\n", - time.Now().UTC(), command, err, out.String()) - return err - } - fmt.Printf("[%v] Command %q. Output:\n%s\n", time.Now().UTC(), command, out.String()) - return nil -} - -func increment(atLeast int, args string) error { - errCh := make(chan error, 1) - ctx, cancel := context.WithTimeout(ctxb, 1*time.Minute) - defer cancel() - - addrs := []string{"localhost:9180", "localhost:9182", "localhost:9183"} - for _, addr := range addrs { - go func(addr string) { - errCh <- run(ctx, fmt.Sprintf("dgraph increment --alpha=%s %s", addr, args)) - }(addr) - } - start := time.Now() - var ok int - for i := 0; i < len(addrs) && ok < atLeast; i++ { - if err := <-errCh; err == nil { - ok++ - } else { - fmt.Printf("[%v] Got error during increment: %v\n", time.Now().UTC(), err) - } - } - if ok < atLeast { - return errors.Errorf("Increment with atLeast=%d failed. OK: %d", atLeast, ok) - } - dur := time.Since(start).Round(time.Millisecond) - fmt.Printf("\n[%v] ===> TIME taken to converge %d alphas: %s\n\n", - time.Now().UTC(), atLeast, dur) - return nil -} - -func getStatus(zero string) error { - cmd := exec.Command("http", "GET", fmt.Sprintf("%s/state", zero)) - var out bytes.Buffer - cmd.Stdout = &out - cmd.Stderr = &out - if err := cmd.Run(); err != nil { - fmt.Printf("ERROR. Status at %s. Error: %v. Output:\n%s\n", zero, err, out.String()) - return err - } - output := out.String() - if strings.Contains(output, "errors") { - fmt.Printf("ERROR. Status at %s. Output:\n%s\n", zero, output) - return errors.Errorf(output) - } - // var m map[string]interface{} - // if err := json.Unmarshal([]byte(output), &m); err != nil { - // return err - // } - // pretty, err := json.MarshalIndent(m, "", " ") - // if err != nil { - // return err - // } - fmt.Printf("Status at %s:\n%s\n", zero, output) - return nil -} - -func testCommon(remove, join, incrementArgs string, nodes []string, minAlphasUp int) error { - fmt.Printf("Nodes: %+v\n", nodes) - for _, node := range nodes { - if err := getStatus("localhost:6080"); err != nil { - return err - } - fmt.Printf("\n==> Remove cmd %q on NODES: %s\n", remove, node) - if err := run(ctxb, remove+" "+node); err != nil { - return err - } - if err := run(ctxb, "embargo status"); err != nil { - return err - } - if err := increment(minAlphasUp, incrementArgs); err != nil { - return err - } - // Then join, if available. - if len(join) == 0 { - continue - } - if err := run(ctxb, join); err != nil { - return err - } - if err := increment(3, incrementArgs); err != nil { - return err - } - } - return nil -} - -func waitForHealthy() error { - for _, zero := range []string{"localhost:6080", "localhost:6082", "localhost:6083"} { - if err := getStatus(zero); err != nil { - return err - } - } - for _, alpha := range []string{"localhost:9180", "localhost:9182", "localhost:9183"} { - if err := run(ctxb, "dgraph increment --alpha="+alpha); err != nil { - return err - } - } - return nil -} - -func runTests() error { - for { - if err := waitForHealthy(); err != nil { - fmt.Printf("Error while waitForHealthy: %v\n.", err) - time.Sleep(5 * time.Second) - fmt.Println("Retrying...") - } else { - break - } - } - - var nodes []string - for i := 1; i <= 3; i++ { - for j := 1; j <= 3; j++ { - nodes = append(nodes, fmt.Sprintf("zero%d dg%d", i, j)) - } - } - - var alphaNodes []string - for i := 1; i <= 3; i++ { - alphaNodes = append(alphaNodes, fmt.Sprintf("dg%d", i)) - } - - // Setting flaky --all just does not converge. Too many network interruptions. - // if err := testCommon("embargo flaky", "embargo fast --all", 3); err != nil { - // fmt.Printf("Error testFlaky: %v\n", err) - // return err - // } - // fmt.Println("===> Flaky TEST: OK") - - // if err := testCommon("embargo slow", "embargo fast --all", 3); err != nil { - // fmt.Printf("Error testSlow: %v\n", err) - // return err - // } - // fmt.Println("===> Slow TEST: OK") - - if err := testCommon("embargo stop", "embargo start --all", "", nodes, 2); err != nil { - fmt.Printf("Error testStop: %v\n", err) - return err - } - fmt.Println("===> Stop TEST: OK") - - if err := testCommon("embargo restart", "", "", nodes, 3); err != nil { - fmt.Printf("Error testRestart with restart: %v\n", err) - return err - } - fmt.Println("===> Restart TEST: OK") - - if err := testCommon("embargo partition", "embargo join", "", nodes, 2); err != nil { - fmt.Printf("Error testPartitions: %v\n", err) - return err - } - fmt.Println("===> Partition TEST: OK") - - if err := testCommon("embargo partition", "embargo join", "--be", alphaNodes, 3); err != nil { - fmt.Printf("Error testPartitionsBestEffort: %v\n", err) - return err - } - fmt.Println("===> Partition best-effort TEST: OK") - - return nil -} - -func main() { - rand.Seed(time.Now().UnixNano()) - fmt.Println("Starting embargo") - if err := run(ctxb, "embargo up"); err != nil { - log.Fatal(err) - } - // This defer can be moved within runTests, if we want to destroy embargo, - // in case our tests fail. We don't want to do that, because then we won't - // be able to get the logs. - defer func() { - if err := run(ctxb, "embargo destroy"); err != nil { - log.Fatalf("While destroying: %v", err) - } - }() - - if err := runTests(); err != nil { - os.Exit(1) - } - fmt.Println("embargo tests: OK") -} diff --git a/contrib/embargo/requirements.txt b/contrib/embargo/requirements.txt deleted file mode 100644 index ad3a0085ea2..00000000000 --- a/contrib/embargo/requirements.txt +++ /dev/null @@ -1,23 +0,0 @@ -args==0.1.0 -certifi==2023.7.22 -chardet==3.0.4 -click==7.1.2 -clint==0.5.1 -docker==4.2.0 -embargo==0.1.1 -Flask==2.3.2 -gevent==1.4.0 -greenlet==0.4.15 -httpie==3.1.0 -idna==2.9 -itsdangerous==1.1.0 -Jinja2==2.11.3 -MarkupSafe==1.1.1 -Pygments==2.15.0 -PyYAML==5.4 -requests==2.31.0 -six==1.15.0 -urllib3==1.26.5 -websocket-client==0.57.0 -Werkzeug==2.2.3 - diff --git a/contrib/embargo/run.sh b/contrib/embargo/run.sh deleted file mode 100755 index 9250548849c..00000000000 --- a/contrib/embargo/run.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -# Builds ./embargo and runs the embargo tests. -# -# Usage: -# Run the test 32 times (about 8 hours): -# ./run.sh -# Run the test once: -# ./run.sh 1 - -function cleanup_embargo { - embargo destroy || true - docker container prune -f - if docker network ls | grep -q 'embargo_net'; then - docker network ls | - awk '/embargo_net/ { print $1 }' | - xargs docker network rm - fi -} - - -set -x -o pipefail - -times=${1:-32} - -go build -v . - -cleanup_embargo -# Each run takes about 15 minutes, so running 32 times will take about 8 hours. -for i in $(seq 1 $times) -do - echo "===> Running Embargo #$i" - if ! ./embargo 2>&1 | tee embargo$i.log; then - echo "===> Embargo test failed" - docker logs zero1 2>&1 | tee zero1.log - docker logs zero2 2>&1 | tee zero2.log - docker logs zero3 2>&1 | tee zero3.log - docker logs dg1 2>&1 | tee dg1.log - docker logs dg2 2>&1 | tee dg2.log - docker logs dg3 2>&1 | tee dg3.log - - cleanup_embargo - exit 1 - fi -done - -echo "Embargo log summary:" -grep '===>' embargo*.log - -cleanup_embargo