Skip to content
This repository was archived by the owner on Aug 2, 2021. It is now read-only.

cmd/swarm/swarm-smoke: timeout flag #1041

Closed
wants to merge 45 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
0e53c59
cmd/swarm/swarm-smoke: timeout flag
nonsense Dec 3, 2018
53905cb
added influxdb flags
acud Dec 4, 2018
ad3aef7
correct metrics flags and add metrics init on smoke run
acud Dec 4, 2018
ea987e4
add metrics to upload and sync test
acud Dec 4, 2018
84a5fcf
add feed smoke metrics
acud Dec 4, 2018
7058760
cmd/swarm/swarm-smoke: fix metrics collection
nonsense Dec 4, 2018
0313009
cmd/swarm: use correct import
nonsense Dec 4, 2018
c05de65
add git commit
nonsense Dec 4, 2018
acb3149
cmd/swarm: fix wait for reporter
nonsense Dec 4, 2018
d6ecdfe
measure upload time
nonsense Dec 4, 2018
99a1c30
emit metrics only once
nonsense Dec 4, 2018
cb72c57
address PR comments
acud Dec 5, 2018
1569d4f
return nil on no error
acud Dec 5, 2018
0edb2bb
fix linter errors
acud Dec 5, 2018
eac3fdb
cmd/swarm/swarm-smoke: timeout flag
nonsense Dec 3, 2018
e176fe5
added influxdb flags
acud Dec 4, 2018
8be02fa
correct metrics flags and add metrics init on smoke run
acud Dec 4, 2018
238195a
add metrics to upload and sync test
acud Dec 4, 2018
5f93226
add feed smoke metrics
acud Dec 4, 2018
f9c231c
cmd/swarm/swarm-smoke: fix metrics collection
nonsense Dec 4, 2018
fe3da49
cmd/swarm: use correct import
nonsense Dec 4, 2018
f7b0db6
add git commit
nonsense Dec 4, 2018
f6cd823
cmd/swarm: fix wait for reporter
nonsense Dec 4, 2018
77cc885
measure upload time
nonsense Dec 4, 2018
891f92b
emit metrics only once
nonsense Dec 4, 2018
24b6b95
address PR comments
acud Dec 5, 2018
a2dfa31
return nil on no error
acud Dec 5, 2018
de8a8af
fix linter errors
acud Dec 5, 2018
972e699
cmd/swarm-smoke: inline metrics
nonsense Dec 5, 2018
72a9953
swarm/storage: measure lazy chunk reader chunk get time
nonsense Dec 5, 2018
159d9af
swarm/api: log and measure the same value for request time
nonsense Dec 5, 2018
4f589df
added loglines to http get requests
acud Dec 6, 2018
008ecab
Merge branch 'swarm-smoke-timeout' of github.com:ethersphere/go-ether…
acud Dec 6, 2018
637444c
fix goimports
acud Dec 6, 2018
36d7c2f
added resetting counters
acud Dec 6, 2018
ac8b6d5
added opentracing span injection and extraction over the wire for htt…
acud Dec 6, 2018
c38d250
cleanup and address PR comments
acud Dec 6, 2018
73fc234
add sync-delay and single configurations to swarm smoke tests
nonsense Dec 6, 2018
964ce76
add missing rand seed
nonsense Dec 6, 2018
4dbb41b
replaced upload from swarm binary by upload from swarm client
acud Dec 7, 2018
b38fd0c
moved http client tracer to api/client. added tracing on uploads
acud Dec 7, 2018
a43801c
cmd/swarm/swarm-smoke: metrics for each run (#1049)
holisticode Dec 7, 2018
aef8672
swarm/api/client: address pr comments
acud Dec 10, 2018
07b1092
swarm/api/client: address pr comments
acud Dec 10, 2018
7336446
swarm/api/http: remove opentracing
nonsense Dec 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 56 additions & 8 deletions cmd/swarm/swarm-smoke/feed_upload_and_sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package main

import (
"bytes"
"context"
"crypto/md5"
"fmt"
"io"
"io/ioutil"
"net/http"
"net/http/httptrace"
"os"
"os/exec"
"strings"
Expand All @@ -16,8 +18,13 @@ import (
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/metrics"
"github.com/ethereum/go-ethereum/swarm/api/client"
"github.com/ethereum/go-ethereum/swarm/spancontext"
"github.com/ethereum/go-ethereum/swarm/storage/feed"
"github.com/ethereum/go-ethereum/swarm/testutil"
colorable "github.com/mattn/go-colorable"
opentracing "github.com/opentracing/opentracing-go"
"github.com/pborman/uuid"
cli "gopkg.in/urfave/cli.v1"
)
Expand All @@ -26,11 +33,29 @@ const (
feedRandomDataLength = 8
)

// TODO: retrieve with manifest + extract repeating code
func cliFeedUploadAndSync(c *cli.Context) error {

metrics.GetOrRegisterCounter("feed-and-sync", nil).Inc(1)
log.Root().SetHandler(log.CallerFileHandler(log.LvlFilterHandler(log.Lvl(verbosity), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))))

errc := make(chan error)
go func() {
errc <- feedUploadAndSync(c)
}()

select {
case err := <-errc:
if err != nil {
metrics.GetOrRegisterCounter("feed-and-sync.fail", nil).Inc(1)
}
return err
case <-time.After(time.Duration(timeout) * time.Second):
metrics.GetOrRegisterCounter("feed-and-sync.timeout", nil).Inc(1)
return fmt.Errorf("timeout after %v sec", timeout)
}
}

// TODO: retrieve with manifest + extract repeating code
func feedUploadAndSync(c *cli.Context) error {
defer func(now time.Time) { log.Info("total time", "time", time.Since(now), "size (kb)", filesize) }(time.Now())

generateEndpoints(scheme, cluster, appName, from, to)
Expand Down Expand Up @@ -204,12 +229,12 @@ func cliFeedUploadAndSync(c *cli.Context) error {
log.Info("all endpoints synced random data successfully")

// upload test file
log.Info("uploading to " + endpoints[0] + " and syncing")
seed := int(time.Now().UnixNano() / 1e6)
log.Info("feed uploading to "+endpoints[0]+" and syncing", "seed", seed)

f, cleanup := generateRandomFile(filesize * 1000)
defer cleanup()
randomBytes := testutil.RandomBytes(seed, filesize*1000)

hash, err := upload(f, endpoints[0])
hash, err := upload(&randomBytes, endpoints[0])
if err != nil {
return err
}
Expand All @@ -218,7 +243,7 @@ func cliFeedUploadAndSync(c *cli.Context) error {
return err
}
multihashHex := hexutil.Encode(hashBytes)
fileHash, err := digest(f)
fileHash, err := digest(bytes.NewReader(randomBytes))
if err != nil {
return err
}
Expand Down Expand Up @@ -284,14 +309,37 @@ func cliFeedUploadAndSync(c *cli.Context) error {
}

func fetchFeed(topic string, user string, endpoint string, original []byte, ruid string) error {
ctx, sp := spancontext.StartSpan(context.Background(), "feed-and-sync.fetch")
defer sp.Finish()

log.Trace("sleeping", "ruid", ruid)
time.Sleep(3 * time.Second)

log.Trace("http get request (feed)", "ruid", ruid, "api", endpoint, "topic", topic, "user", user)
res, err := http.Get(endpoint + "/bzz-feed:/?topic=" + topic + "&user=" + user)

var tn time.Time
reqUri := endpoint + "/bzz-feed:/?topic=" + topic + "&user=" + user
req, _ := http.NewRequest("GET", reqUri, nil)

opentracing.GlobalTracer().Inject(
sp.Context(),
opentracing.HTTPHeaders,
opentracing.HTTPHeadersCarrier(req.Header))

trace := client.GetClientTrace("feed-and-sync - http get", "feed-and-sync", ruid, &tn)

req = req.WithContext(httptrace.WithClientTrace(ctx, trace))
transport := http.DefaultTransport

//transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}

tn = time.Now()
res, err := transport.RoundTrip(req)
if err != nil {
log.Error(err.Error(), "ruid", ruid)
return err
}

log.Trace("http get response (feed)", "ruid", ruid, "api", endpoint, "topic", topic, "user", user, "code", res.StatusCode, "len", res.ContentLength)

if res.StatusCode != 200 {
Expand Down
71 changes: 71 additions & 0 deletions cmd/swarm/swarm-smoke/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,38 @@
package main

import (
"fmt"
"os"
"sort"

"github.com/ethereum/go-ethereum/cmd/utils"
gethmetrics "github.com/ethereum/go-ethereum/metrics"
"github.com/ethereum/go-ethereum/metrics/influxdb"
swarmmetrics "github.com/ethereum/go-ethereum/swarm/metrics"
"github.com/ethereum/go-ethereum/swarm/tracing"

"github.com/ethereum/go-ethereum/log"

cli "gopkg.in/urfave/cli.v1"
)

var (
gitCommit string // Git SHA1 commit hash of the release (set via linker flags)
)

var (
endpoints []string
includeLocalhost bool
cluster string
appName string
scheme string
filesize int
syncDelay int
from int
to int
verbosity int
timeout int
single bool
)

func main() {
Expand Down Expand Up @@ -85,14 +99,42 @@ func main() {
Usage: "file size for generated random file in KB",
Destination: &filesize,
},
cli.IntFlag{
Name: "sync-delay",
Value: 5,
Usage: "duration of delay in seconds to wait for content to be synced",
Destination: &syncDelay,
},
cli.IntFlag{
Name: "verbosity",
Value: 1,
Usage: "verbosity",
Destination: &verbosity,
},
cli.IntFlag{
Name: "timeout",
Value: 120,
Usage: "timeout in seconds after which kill the process",
Destination: &timeout,
},
cli.BoolFlag{
Name: "single",
Usage: "whether to fetch content from a single node or from all nodes",
Destination: &single,
},
}

app.Flags = append(app.Flags, []cli.Flag{
utils.MetricsEnabledFlag,
swarmmetrics.MetricsInfluxDBEndpointFlag,
swarmmetrics.MetricsInfluxDBDatabaseFlag,
swarmmetrics.MetricsInfluxDBUsernameFlag,
swarmmetrics.MetricsInfluxDBPasswordFlag,
swarmmetrics.MetricsInfluxDBHostTagFlag,
}...)

app.Flags = append(app.Flags, tracing.Flags...)

app.Commands = []cli.Command{
{
Name: "upload_and_sync",
Expand All @@ -111,9 +153,38 @@ func main() {
sort.Sort(cli.FlagsByName(app.Flags))
sort.Sort(cli.CommandsByName(app.Commands))

app.Before = func(ctx *cli.Context) error {
tracing.Setup(ctx)
return nil
}

app.After = func(ctx *cli.Context) error {
return emitMetrics(ctx)
}

err := app.Run(os.Args)
if err != nil {
log.Error(err.Error())

os.Exit(1)
}
}

func emitMetrics(ctx *cli.Context) error {
if gethmetrics.Enabled {
var (
endpoint = ctx.GlobalString(swarmmetrics.MetricsInfluxDBEndpointFlag.Name)
database = ctx.GlobalString(swarmmetrics.MetricsInfluxDBDatabaseFlag.Name)
username = ctx.GlobalString(swarmmetrics.MetricsInfluxDBUsernameFlag.Name)
password = ctx.GlobalString(swarmmetrics.MetricsInfluxDBPasswordFlag.Name)
hosttag = ctx.GlobalString(swarmmetrics.MetricsInfluxDBHostTagFlag.Name)
)
return influxdb.InfluxDBWithTagsOnce(gethmetrics.DefaultRegistry, endpoint, database, username, password, "swarm-smoke.", map[string]string{
"host": hosttag,
"version": gitCommit,
"filesize": fmt.Sprintf("%v", filesize),
})
}

return nil
}
Loading