cmd/swarm/swarm-smoke: finalize trigger to chunk debug

This commit is contained in:
Fabio Barone 2019-02-12 14:57:17 -05:00
parent 554aa7e3e0
commit 5b16c05479

View file

@ -18,13 +18,19 @@ package main
import ( import (
"bytes" "bytes"
"context"
"fmt" "fmt"
"io/ioutil"
"math/rand" "math/rand"
"os"
"sync" "sync"
"time" "time"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/metrics"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/swarm/api"
"github.com/ethereum/go-ethereum/swarm/storage"
"github.com/ethereum/go-ethereum/swarm/testutil" "github.com/ethereum/go-ethereum/swarm/testutil"
"github.com/pborman/uuid" "github.com/pborman/uuid"
@ -50,14 +56,69 @@ func uploadAndSyncCmd(ctx *cli.Context, tuid string) error {
metrics.GetOrRegisterCounter(fmt.Sprintf("%s.timeout", commandName), nil).Inc(1) metrics.GetOrRegisterCounter(fmt.Sprintf("%s.timeout", commandName), nil).Inc(1)
// trigger debug functionality on randomBytes // trigger debug functionality on randomBytes
// get all references err := triggerChunkDebug(randomBytes)
//httpEndpoint(hosts[0]) if err != nil {
// has-chunks log.Error("test timed out and triggerChunkDebug also produced error", "err", err)
}
return fmt.Errorf("timeout after %v sec", timeout) return fmt.Errorf("timeout after %v sec", timeout)
} }
} }
func triggerChunkDebug(testData []byte) error {
log.Warn("Test timed out; running chunk debug sequence")
addrs, err := getAllRefs(testData)
if err != nil {
return err
}
// has-chunks
for _, host := range hosts {
rpcClient, err := rpc.Dial(host + ":8545")
if err != nil {
return err
}
var hasInfo []api.HasInfo
err = rpcClient.Call(&hasInfo, "bzz_has", addrs)
if err != nil {
return err
}
count := 0
for _, info := range hasInfo {
if !info.Has {
count++
log.Error("Host does not have chunk", "host", host, "chunk", info.Addr)
}
}
if count == 0 {
log.Info("Host reported to have all chunks", "host", host)
}
}
return nil
}
func getAllRefs(testData []byte) (storage.AddressCollection, error) {
datadir, err := ioutil.TempDir("", "chunk-debug")
if err != nil {
return nil, fmt.Errorf("unable to create temp dir: %v", err)
}
defer os.RemoveAll(datadir)
fileStore, err := storage.NewLocalFileStore(datadir, make([]byte, 32))
if err != nil {
return nil, err
}
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
reader := bytes.NewReader(testData)
addrs, err := fileStore.GetAllReferences(ctx, reader, false)
if err != nil {
return nil, err
}
return addrs, err
}
func uplaodAndSync(c *cli.Context, randomBytes []byte, tuid string) error { func uplaodAndSync(c *cli.Context, randomBytes []byte, tuid string) error {
log.Info("uploading to "+httpEndpoint(hosts[0])+" and syncing", "tuid", tuid, "seed", seed) log.Info("uploading to "+httpEndpoint(hosts[0])+" and syncing", "tuid", tuid, "seed", seed)