cmd/swarm/swarm-smoke: fix error handling

This commit is contained in:
Elad Nachmias 2019-01-25 11:31:08 +07:00
parent 2555743a62
commit ca37153f3a

View file

@ -20,6 +20,7 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"math/rand" "math/rand"
"sync"
"time" "time"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
@ -58,7 +59,6 @@ func slidingWindow(c *cli.Context) error {
uploadedBytes := 0 uploadedBytes := 0
networkDepth := 0 networkDepth := 0
errored := false errored := false
outer: outer:
for { for {
seed := int(time.Now().UnixNano() / 1e6) seed := int(time.Now().UnixNano() / 1e6)
@ -84,8 +84,22 @@ outer:
hashes = append(hashes, uploadResult{hash: hash, digest: fhash}) hashes = append(hashes, uploadResult{hash: hash, digest: fhash})
time.Sleep(time.Duration(syncDelay) * time.Second) time.Sleep(time.Duration(syncDelay) * time.Second)
uploadedBytes += filesize * 1000 uploadedBytes += filesize * 1000
var wg sync.WaitGroup
for i, v := range hashes { for i, v := range hashes {
timeout := time.After(30 * time.Second)
errored = false
wg.Add(1)
go func(i int, v uploadResult) {
defer wg.Done()
for {
select {
case <-timeout:
errored = true
log.Error("error retrieving hash. timeout", "hash idx", i, "err", err)
metrics.GetOrRegisterCounter("sliding-window.single.error", nil).Inc(1)
return
default:
}
rand.Seed(time.Now().UTC().UnixNano()) rand.Seed(time.Now().UTC().UnixNano())
randIndex := 1 + rand.Intn(len(endpoints)-1) randIndex := 1 + rand.Intn(len(endpoints)-1)
ruid := uuid.New()[:8] ruid := uuid.New()[:8]
@ -93,14 +107,16 @@ outer:
err := fetch(v.hash, endpoints[randIndex], v.digest, ruid) err := fetch(v.hash, endpoints[randIndex], v.digest, ruid)
fetchTime := time.Since(start) fetchTime := time.Since(start)
if err != nil { if err != nil {
errored = true continue
log.Error("error retrieving hash", "hash idx", i, "err", err) }
metrics.GetOrRegisterCounter("sliding-window.single.error", nil).Inc(1) metrics.GetOrRegisterMeter("sliding-window.single.fetch-time", nil).Mark(int64(fetchTime))
networkDepth = i }
}(i, v)
wg.Wait()
if errored {
break outer break outer
} }
networkDepth = i
metrics.GetOrRegisterMeter("sliding-window.single.fetch-time", nil).Mark(int64(fetchTime))
} }
} }