From f6b1a98f757b5c0946d90b8b5e23615c74875a05 Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Thu, 4 Apr 2019 14:30:22 +0300
Subject: [PATCH 1/9] Remove gossip
---
cmd/thanos/flags.go | 93 +------
cmd/thanos/query.go | 57 +---
cmd/thanos/rule.go | 70 +----
cmd/thanos/sidecar.go | 28 +-
cmd/thanos/store.go | 32 +--
go.mod | 1 -
go.sum | 10 +-
pkg/cluster/cluster.go | 569 ----------------------------------------
pkg/cluster/data.go | 42 ---
pkg/cluster/delegate.go | 95 -------
10 files changed, 22 insertions(+), 975 deletions(-)
delete mode 100644 pkg/cluster/cluster.go
delete mode 100644 pkg/cluster/data.go
delete mode 100644 pkg/cluster/delegate.go
diff --git a/cmd/thanos/flags.go b/cmd/thanos/flags.go
index 36f7b7db32..184fbfadd5 100644
--- a/cmd/thanos/flags.go
+++ b/cmd/thanos/flags.go
@@ -3,16 +3,9 @@ package main
import (
"fmt"
"io/ioutil"
- "net"
- "strconv"
"strings"
- "time"
- "github.com/go-kit/kit/log"
- "github.com/go-kit/kit/log/level"
- "github.com/improbable-eng/thanos/pkg/cluster"
"github.com/pkg/errors"
- "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/common/model"
kingpin "gopkg.in/alecthomas/kingpin.v2"
)
@@ -36,102 +29,22 @@ func regGRPCFlags(cmd *kingpin.CmdClause) (
grpcTLSSrvClientCA
}
+// TODO(povilasv): we don't need this anymore.
func regCommonServerFlags(cmd *kingpin.CmdClause) (
grpcBindAddr *string,
httpBindAddr *string,
grpcTLSSrvCert *string,
grpcTLSSrvKey *string,
- grpcTLSSrvClientCA *string,
- peerFunc func(log.Logger, *prometheus.Registry, bool, string, bool) (cluster.Peer, error)) {
+ grpcTLSSrvClientCA *string) {
httpBindAddr = regHTTPAddrFlag(cmd)
grpcBindAddr, grpcTLSSrvCert, grpcTLSSrvKey, grpcTLSSrvClientCA = regGRPCFlags(cmd)
- grpcAdvertiseAddr := cmd.Flag("grpc-advertise-address", "Deprecated(gossip will be removed from v0.5.0): Explicit (external) host:port address to advertise for gRPC StoreAPI in gossip cluster. If empty, 'grpc-address' will be used.").
- String()
-
- clusterBindAddr := cmd.Flag("cluster.address", "Deprecated(gossip will be removed from v0.5.0): Listen ip:port address for gossip cluster.").
- Default("0.0.0.0:10900").String()
-
- clusterAdvertiseAddr := cmd.Flag("cluster.advertise-address", "Deprecated(gossip will be removed from v0.5.0): Explicit (external) ip:port address to advertise for gossip in gossip cluster. Used internally for membership only.").
- String()
-
- peers := cmd.Flag("cluster.peers", "Deprecated(gossip will be removed from v0.5.0): Initial peers to join the cluster. It can be either , or . A lookup resolution is done only at the startup.").Strings()
-
- gossipInterval := modelDuration(cmd.Flag("cluster.gossip-interval", "Deprecated(gossip will be removed from v0.5.0): Interval between sending gossip messages. By lowering this value (more frequent) gossip messages are propagated across the cluster more quickly at the expense of increased bandwidth. Default is used from a specified network-type.").
- PlaceHolder(""))
-
- pushPullInterval := modelDuration(cmd.Flag("cluster.pushpull-interval", "Deprecated(gossip will be removed from v0.5.0): Interval for gossip state syncs. Setting this interval lower (more frequent) will increase convergence speeds across larger clusters at the expense of increased bandwidth usage. Default is used from a specified network-type.").
- PlaceHolder(""))
-
- refreshInterval := modelDuration(cmd.Flag("cluster.refresh-interval", "Deprecated(gossip will be removed from v0.5.0): Interval for membership to refresh cluster.peers state, 0 disables refresh.").Default(cluster.DefaultRefreshInterval.String()))
-
- secretKey := cmd.Flag("cluster.secret-key", "Deprecated(gossip will be removed from v0.5.0): Initial secret key to encrypt cluster gossip. Can be one of AES-128, AES-192, or AES-256 in hexadecimal format.").HexBytes()
-
- networkType := cmd.Flag("cluster.network-type",
- fmt.Sprintf("Deprecated(gossip will be removed from v0.5.0): Network type with predefined peers configurations. Sets of configurations accounting the latency differences between network types: %s.",
- strings.Join(cluster.NetworkPeerTypes, ", "),
- ),
- ).
- Default(cluster.LanNetworkPeerType).
- Enum(cluster.NetworkPeerTypes...)
-
- gossipDisabled := cmd.Flag("cluster.disable", "Deprecated(gossip will be removed from v0.5.0): If true gossip will be disabled and no cluster related server will be started.").Default("true").Bool()
return grpcBindAddr,
httpBindAddr,
grpcTLSSrvCert,
grpcTLSSrvKey,
- grpcTLSSrvClientCA,
- func(logger log.Logger, reg *prometheus.Registry, waitIfEmpty bool, httpAdvertiseAddr string, queryAPIEnabled bool) (cluster.Peer, error) {
- if *gossipDisabled {
- level.Info(logger).Log("msg", "gossip is disabled")
- return cluster.NewNoop(), nil
- }
-
- host, port, err := cluster.CalculateAdvertiseAddress(*grpcBindAddr, *grpcAdvertiseAddr)
- if err != nil {
- return nil, errors.Wrapf(err, "calculate advertise StoreAPI addr for gossip based on bindAddr: %s and advAddr: %s", *grpcBindAddr, *grpcAdvertiseAddr)
- }
-
- advStoreAPIAddress := net.JoinHostPort(host, strconv.Itoa(port))
- if cluster.IsUnroutable(advStoreAPIAddress) {
- level.Warn(logger).Log("msg", "this component advertises its gRPC StoreAPI on an unroutable address. This will not work cross-cluster", "addr", advStoreAPIAddress)
- level.Warn(logger).Log("msg", "provide --grpc-address as routable ip:port or --grpc-advertise-address as a routable host:port")
- }
-
- level.Info(logger).Log("msg", "StoreAPI address that will be propagated through gossip", "address", advStoreAPIAddress)
-
- advQueryAPIAddress := httpAdvertiseAddr
- if queryAPIEnabled {
- host, port, err := cluster.CalculateAdvertiseAddress(*httpBindAddr, advQueryAPIAddress)
- if err != nil {
- return nil, errors.Wrapf(err, "calculate advertise QueryAPI addr for gossip based on bindAddr: %s and advAddr: %s", *httpBindAddr, advQueryAPIAddress)
- }
-
- advQueryAPIAddress = net.JoinHostPort(host, strconv.Itoa(port))
- if cluster.IsUnroutable(advQueryAPIAddress) {
- level.Warn(logger).Log("msg", "this component advertises its HTTP QueryAPI on an unroutable address. This will not work cross-cluster", "addr", advQueryAPIAddress)
- level.Warn(logger).Log("msg", "provide --http-address as routable ip:port or --http-advertise-address as a routable host:port")
- }
-
- level.Info(logger).Log("msg", "QueryAPI address that will be propagated through gossip", "address", advQueryAPIAddress)
- }
-
- return cluster.New(logger,
- reg,
- *clusterBindAddr,
- *clusterAdvertiseAddr,
- advStoreAPIAddress,
- advQueryAPIAddress,
- *peers,
- waitIfEmpty,
- time.Duration(*gossipInterval),
- time.Duration(*pushPullInterval),
- time.Duration(*refreshInterval),
- *secretKey,
- *networkType,
- )
- }
+ grpcTLSSrvClientCA
}
func regHTTPAddrFlag(cmd *kingpin.CmdClause) *string {
diff --git a/cmd/thanos/query.go b/cmd/thanos/query.go
index 1e229bc789..e5b4291fb7 100644
--- a/cmd/thanos/query.go
+++ b/cmd/thanos/query.go
@@ -16,7 +16,6 @@ import (
"github.com/go-kit/kit/log/level"
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
- "github.com/improbable-eng/thanos/pkg/cluster"
"github.com/improbable-eng/thanos/pkg/component"
"github.com/improbable-eng/thanos/pkg/discovery/cache"
"github.com/improbable-eng/thanos/pkg/discovery/dns"
@@ -46,10 +45,7 @@ import (
func registerQuery(m map[string]setupFunc, app *kingpin.Application, name string) {
cmd := app.Command(name, "query node exposing PromQL enabled Query API with data retrieved from multiple store nodes")
- grpcBindAddr, httpBindAddr, srvCert, srvKey, srvClientCA, newPeerFn := regCommonServerFlags(cmd)
-
- httpAdvertiseAddr := cmd.Flag("http-advertise-address", "Explicit (external) host:port address to advertise for HTTP QueryAPI in gossip cluster. If empty, 'http-address' will be used.").
- String()
+ grpcBindAddr, httpBindAddr, srvCert, srvKey, srvClientCA := regCommonServerFlags(cmd)
secure := cmd.Flag("grpc-client-tls-secure", "Use TLS when talking to the gRPC server").Default("false").Bool()
cert := cmd.Flag("grpc-client-tls-cert", "TLS Certificates to use to identify this client to the server").Default("").String()
@@ -102,10 +98,6 @@ func registerQuery(m map[string]setupFunc, app *kingpin.Application, name string
storeResponseTimeout := modelDuration(cmd.Flag("store.response-timeout", "If a Store doesn't send any data in this specified duration then a Store will be ignored and partial data will be returned if it's enabled. 0 disables timeout.").Default("0ms"))
m[name] = func(g *run.Group, logger log.Logger, reg *prometheus.Registry, tracer opentracing.Tracer, _ bool) error {
- peer, err := newPeerFn(logger, reg, true, *httpAdvertiseAddr, true)
- if err != nil {
- return errors.Wrap(err, "new cluster peer")
- }
selectorLset, err := parseFlagLabels(*selectorLabels)
if err != nil {
return errors.Wrap(err, "parse federation labels")
@@ -153,7 +145,6 @@ func registerQuery(m map[string]setupFunc, app *kingpin.Application, name string
time.Duration(*queryTimeout),
time.Duration(*storeResponseTimeout),
*replicaLabel,
- peer,
selectorLset,
*stores,
*enableAutodownsampling,
@@ -271,7 +262,6 @@ func runQuery(
queryTimeout time.Duration,
storeResponseTimeout time.Duration,
replicaLabel string,
- peer cluster.Peer,
selectorLset labels.Labels,
storeAddrs []string,
enableAutodownsampling bool,
@@ -305,16 +295,6 @@ func runQuery(
logger,
reg,
func() (specs []query.StoreSpec) {
- // Add store specs from gossip.
- for id, ps := range peer.PeerStates(cluster.PeerTypesStoreAPIs()...) {
- if ps.StoreAPIAddr == "" {
- level.Error(logger).Log("msg", "Gossip found peer that propagates empty address, ignoring.", "lset", fmt.Sprintf("%v", ps.Metadata.Labels))
- continue
- }
-
- specs = append(specs, &gossipSpec{id: id, addr: ps.StoreAPIAddr, stateFetcher: peer})
- }
-
// Add DNS resolved addresses from static flags and file SD.
for _, addr := range dnsProvider.Addresses() {
specs = append(specs, query.NewGRPCStoreSpec(addr))
@@ -388,21 +368,6 @@ func runQuery(
close(fileSDUpdates)
})
}
- {
- ctx, cancel := context.WithCancel(context.Background())
- g.Add(func() error {
- // New gossip cluster.
- if err := peer.Join(cluster.PeerTypeQuery, cluster.PeerMetadata{}); err != nil {
- return errors.Wrap(err, "join cluster")
- }
-
- <-ctx.Done()
- return nil
- }, func(error) {
- cancel()
- peer.Close(5 * time.Second)
- })
- }
// Periodically update the addresses from static flags and file SD by resolving them using DNS SD if necessary.
{
ctx, cancel := context.WithCancel(context.Background())
@@ -507,23 +472,3 @@ func removeDuplicateStoreSpecs(logger log.Logger, duplicatedStores prometheus.Co
}
return deduplicated
}
-
-type gossipSpec struct {
- id string
- addr string
-
- stateFetcher cluster.PeerStateFetcher
-}
-
-func (s *gossipSpec) Addr() string {
- return s.addr
-}
-
-// Metadata method for gossip store tries get current peer state.
-func (s *gossipSpec) Metadata(_ context.Context, _ storepb.StoreClient) (labels []storepb.Label, mint int64, maxt int64, err error) {
- state, ok := s.stateFetcher.PeerState(s.id)
- if !ok {
- return nil, 0, 0, errors.Errorf("peer %s is no longer in gossip cluster", s.id)
- }
- return state.Metadata.Labels, state.Metadata.MinTime, state.Metadata.MaxTime, nil
-}
diff --git a/cmd/thanos/rule.go b/cmd/thanos/rule.go
index e4085d9caa..737aad81ff 100644
--- a/cmd/thanos/rule.go
+++ b/cmd/thanos/rule.go
@@ -3,7 +3,6 @@ package main
import (
"context"
"fmt"
- "math"
"math/rand"
"net"
"net/http"
@@ -12,7 +11,6 @@ import (
"os/signal"
"path"
"path/filepath"
- "sort"
"strconv"
"strings"
"sync"
@@ -23,7 +21,6 @@ import (
"github.com/go-kit/kit/log/level"
"github.com/improbable-eng/thanos/pkg/alert"
"github.com/improbable-eng/thanos/pkg/block/metadata"
- "github.com/improbable-eng/thanos/pkg/cluster"
"github.com/improbable-eng/thanos/pkg/component"
"github.com/improbable-eng/thanos/pkg/discovery/cache"
"github.com/improbable-eng/thanos/pkg/discovery/dns"
@@ -60,7 +57,7 @@ import (
func registerRule(m map[string]setupFunc, app *kingpin.Application, name string) {
cmd := app.Command(name, "ruler evaluating Prometheus rules against given Query nodes, exposing Store API and storing old blocks in bucket")
- grpcBindAddr, httpBindAddr, cert, key, clientCA, newPeerFn := regCommonServerFlags(cmd)
+ grpcBindAddr, httpBindAddr, cert, key, clientCA := regCommonServerFlags(cmd)
labelStrs := cmd.Flag("label", "Labels to be applied to all generated metrics (repeated). Similar to external labels for Prometheus, used to identify ruler and its blocks as unique source.").
PlaceHolder("=\"\"").Strings()
@@ -112,10 +109,6 @@ func registerRule(m map[string]setupFunc, app *kingpin.Application, name string)
if err != nil {
return errors.Wrap(err, "parse labels")
}
- peer, err := newPeerFn(logger, reg, false, "", false)
- if err != nil {
- return errors.Wrap(err, "new cluster peer")
- }
alertQueryURL, err := url.Parse(*alertQueryURL)
if err != nil {
return errors.Wrap(err, "parse alert query url")
@@ -146,8 +139,8 @@ func registerRule(m map[string]setupFunc, app *kingpin.Application, name string)
fileSD = file.NewDiscovery(conf, logger)
}
- if len(*queries) < 1 && peer.Name() == "no gossip" && fileSD == nil {
- return errors.Errorf("Gossip is disabled and no --query parameter was given.")
+ if fileSD == nil {
+ return errors.Errorf("No --query parameter was given.")
}
return runRule(g,
@@ -168,7 +161,6 @@ func registerRule(m map[string]setupFunc, app *kingpin.Application, name string)
time.Duration(*evalInterval),
*dataDir,
*ruleFiles,
- peer,
objStoreConfig,
tsdbOpts,
alertQueryURL,
@@ -202,7 +194,6 @@ func runRule(
evalInterval time.Duration,
dataDir string,
ruleFiles []string,
- peer cluster.Peer,
objStoreConfig *pathOrContent,
tsdbOpts *tsdb.Options,
alertQueryURL *url.URL,
@@ -326,7 +317,7 @@ func runRule(
opts := opts
opts.Registerer = extprom.WrapRegistererWith(prometheus.Labels{"strategy": strings.ToLower(s.String())}, reg)
opts.Context = ctx
- opts.QueryFunc = queryFunc(logger, peer, dnsProvider, duplicatedQuery, ruleEvalWarnings, s)
+ opts.QueryFunc = queryFunc(logger, dnsProvider, duplicatedQuery, ruleEvalWarnings, s)
ruleMgrs[s] = rules.NewManager(&opts)
g.Add(func() error {
@@ -340,32 +331,6 @@ func runRule(
})
}
}
- {
- var storeLset []storepb.Label
- for _, l := range lset {
- storeLset = append(storeLset, storepb.Label{Name: l.Name, Value: l.Value})
- }
-
- ctx, cancel := context.WithCancel(context.Background())
- g.Add(func() error {
- // New gossip cluster.
- if err = peer.Join(cluster.PeerTypeSource, cluster.PeerMetadata{
- Labels: storeLset,
- // Start out with the full time range. The shipper will constrain it later.
- // TODO(fabxc): minimum timestamp is never adjusted if shipping is disabled.
- MinTime: 0,
- MaxTime: math.MaxInt64,
- }); err != nil {
- return errors.Wrap(err, "join cluster")
- }
-
- <-ctx.Done()
- return nil
- }, func(error) {
- cancel()
- peer.Close(5 * time.Second)
- })
- }
{
// TODO(bwplotka): https://github.com/improbable-eng/thanos/issues/660
sdr := alert.NewSender(logger, reg, alertmgrs.get, nil, alertmgrsTimeout)
@@ -622,13 +587,6 @@ func runRule(
if _, err := s.Sync(ctx); err != nil {
level.Warn(logger).Log("err", err)
}
-
- minTime, _, err := s.Timestamps()
- if err != nil {
- level.Warn(logger).Log("msg", "reading timestamps failed", "err", err)
- } else {
- peer.SetTimestamps(minTime, math.MaxInt64)
- }
return nil
})
}, func(error) {
@@ -636,7 +594,7 @@ func runRule(
})
}
- level.Info(logger).Log("msg", "starting rule node", "peer", peer.Name())
+ level.Info(logger).Log("msg", "starting rule node")
return nil
}
@@ -765,7 +723,6 @@ func removeDuplicateQueryAddrs(logger log.Logger, duplicatedQueriers prometheus.
// back or the context get canceled.
func queryFunc(
logger log.Logger,
- peer cluster.Peer,
dnsProvider *dns.Provider,
duplicatedQuery prometheus.Counter,
ruleEvalWarnings *prometheus.CounterVec,
@@ -784,24 +741,9 @@ func queryFunc(
}
return func(ctx context.Context, q string, t time.Time) (promql.Vector, error) {
- var addrs []string
-
- // Add addresses from gossip.
- peers := peer.PeerStates(cluster.PeerTypeQuery)
- var ids []string
- for id := range peers {
- ids = append(ids, id)
- }
- sort.Slice(ids, func(i int, j int) bool {
- return strings.Compare(ids[i], ids[j]) < 0
- })
- for _, id := range ids {
- addrs = append(addrs, peers[id].QueryAPIAddr)
- }
-
// Add DNS resolved addresses from static flags and file SD.
// TODO(bwplotka): Consider generating addresses in *url.URL
- addrs = append(addrs, dnsProvider.Addresses()...)
+ addrs := dnsProvider.Addresses()
removeDuplicateQueryAddrs(logger, duplicatedQuery, addrs)
diff --git a/cmd/thanos/sidecar.go b/cmd/thanos/sidecar.go
index 58087b2f8c..f8fc4750ec 100644
--- a/cmd/thanos/sidecar.go
+++ b/cmd/thanos/sidecar.go
@@ -13,7 +13,6 @@ import (
"github.com/go-kit/kit/log/level"
version "github.com/hashicorp/go-version"
"github.com/improbable-eng/thanos/pkg/block/metadata"
- "github.com/improbable-eng/thanos/pkg/cluster"
"github.com/improbable-eng/thanos/pkg/component"
"github.com/improbable-eng/thanos/pkg/objstore/client"
"github.com/improbable-eng/thanos/pkg/promclient"
@@ -35,7 +34,7 @@ import (
func registerSidecar(m map[string]setupFunc, app *kingpin.Application, name string) {
cmd := app.Command(name, "sidecar for Prometheus server")
- grpcBindAddr, httpBindAddr, cert, key, clientCA, newPeerFn := regCommonServerFlags(cmd)
+ grpcBindAddr, httpBindAddr, cert, key, clientCA := regCommonServerFlags(cmd)
promURL := cmd.Flag("prometheus.url", "URL at which to reach Prometheus's API. For better performance use local network.").
Default("http://localhost:9090").URL()
@@ -63,10 +62,6 @@ func registerSidecar(m map[string]setupFunc, app *kingpin.Application, name stri
*reloaderCfgOutputFile,
*reloaderRuleDirs,
)
- peer, err := newPeerFn(logger, reg, false, "", false)
- if err != nil {
- return errors.Wrap(err, "new cluster peer")
- }
return runSidecar(
g,
logger,
@@ -80,7 +75,6 @@ func registerSidecar(m map[string]setupFunc, app *kingpin.Application, name stri
*promURL,
*dataDir,
objStoreConfig,
- peer,
rl,
*uploadCompacted,
)
@@ -100,7 +94,6 @@ func runSidecar(
promURL *url.URL,
dataDir string,
objStoreConfig *pathOrContent,
- peer cluster.Peer,
reloader *reloader.Reloader,
uploadCompacted bool,
) error {
@@ -189,16 +182,6 @@ func runSidecar(
return errors.New("no external labels configured on Prometheus server, uniquely identifying external labels must be configured")
}
- // New gossip cluster.
- mint, maxt := m.Timestamps()
- if err = peer.Join(cluster.PeerTypeSource, cluster.PeerMetadata{
- Labels: m.LabelsPB(),
- MinTime: mint,
- MaxTime: maxt,
- }); err != nil {
- return errors.Wrap(err, "join cluster")
- }
-
// Periodically query the Prometheus config. We use this as a heartbeat as well as for updating
// the external labels we apply.
return runutil.Repeat(30*time.Second, ctx.Done(), func() error {
@@ -209,9 +192,6 @@ func runSidecar(
level.Warn(logger).Log("msg", "heartbeat failed", "err", err)
promUp.Set(0)
} else {
- // Update gossip.
- peer.SetLabels(m.LabelsPB())
-
promUp.Set(1)
lastHeartbeat.Set(float64(time.Now().UnixNano()) / 1e9)
}
@@ -220,7 +200,6 @@ func runSidecar(
})
}, func(error) {
cancel()
- peer.Close(2 * time.Second)
})
}
{
@@ -305,9 +284,6 @@ func runSidecar(
level.Warn(logger).Log("msg", "reading timestamps failed", "err", err)
} else {
m.UpdateTimestamps(minTime, math.MaxInt64)
-
- mint, maxt := m.Timestamps()
- peer.SetTimestamps(mint, maxt)
}
return nil
})
@@ -316,7 +292,7 @@ func runSidecar(
})
}
- level.Info(logger).Log("msg", "starting sidecar", "peer", peer.Name())
+ level.Info(logger).Log("msg", "starting sidecar")
return nil
}
diff --git a/cmd/thanos/store.go b/cmd/thanos/store.go
index c135956403..8a7cfcf144 100644
--- a/cmd/thanos/store.go
+++ b/cmd/thanos/store.go
@@ -2,13 +2,11 @@ package main
import (
"context"
- "math"
"net"
"time"
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/log/level"
- "github.com/improbable-eng/thanos/pkg/cluster"
"github.com/improbable-eng/thanos/pkg/objstore/client"
"github.com/improbable-eng/thanos/pkg/runutil"
"github.com/improbable-eng/thanos/pkg/store"
@@ -26,7 +24,7 @@ import (
func registerStore(m map[string]setupFunc, app *kingpin.Application, name string) {
cmd := app.Command(name, "store node giving access to blocks in a bucket provider. Now supported GCS, S3, Azure, Swift and Tencent COS.")
- grpcBindAddr, httpBindAddr, cert, key, clientCA, newPeerFn := regCommonServerFlags(cmd)
+ grpcBindAddr, httpBindAddr, cert, key, clientCA := regCommonServerFlags(cmd)
dataDir := cmd.Flag("data-dir", "Data directory in which to cache remote blocks.").
Default("./data").String()
@@ -52,10 +50,6 @@ func registerStore(m map[string]setupFunc, app *kingpin.Application, name string
Default("20").Int()
m[name] = func(g *run.Group, logger log.Logger, reg *prometheus.Registry, tracer opentracing.Tracer, debugLogging bool) error {
- peer, err := newPeerFn(logger, reg, false, "", false)
- if err != nil {
- return errors.Wrap(err, "new cluster peer")
- }
return runStore(g,
logger,
reg,
@@ -67,7 +61,6 @@ func registerStore(m map[string]setupFunc, app *kingpin.Application, name string
*key,
*clientCA,
*httpBindAddr,
- peer,
uint64(*indexCacheSize),
uint64(*chunkPoolSize),
uint64(*maxSampleCount),
@@ -93,7 +86,6 @@ func runStore(
key string,
clientCA string,
httpBindAddr string,
- peer cluster.Peer,
indexCacheSizeBytes uint64,
chunkPoolSizeBytes uint64,
maxSampleCount uint64,
@@ -163,7 +155,6 @@ func runStore(
if err := bs.SyncBlocks(ctx); err != nil {
level.Warn(logger).Log("msg", "syncing blocks failed", "err", err)
}
- peer.SetTimestamps(bs.TimeRange())
return nil
})
@@ -193,27 +184,6 @@ func runStore(
runutil.CloseWithLogOnErr(logger, l, "store gRPC listener")
})
}
- {
- ctx, cancel := context.WithCancel(context.Background())
- g.Add(func() error {
- // New gossip cluster.
- if err := peer.Join(
- cluster.PeerTypeStore,
- cluster.PeerMetadata{
- MinTime: math.MinInt64,
- MaxTime: math.MaxInt64,
- },
- ); err != nil {
- return errors.Wrap(err, "join cluster")
- }
-
- <-ctx.Done()
- return nil
- }, func(error) {
- cancel()
- peer.Close(5 * time.Second)
- })
- }
if err := metricHTTPListenGroup(g, logger, reg, httpBindAddr); err != nil {
return err
}
diff --git a/go.mod b/go.mod
index 5ed4dedc09..5df9b578e1 100644
--- a/go.mod
+++ b/go.mod
@@ -16,7 +16,6 @@ require (
github.com/gophercloud/gophercloud v0.0.0-20181206160319-9d88c34913a9
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0
github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20181025070259-68e3a13e4117
- github.com/hashicorp/go-sockaddr v1.0.0
github.com/hashicorp/go-version v1.2.0
github.com/hashicorp/golang-lru v0.5.1
github.com/hashicorp/memberlist v0.1.3
diff --git a/go.sum b/go.sum
index 4b637c57d4..5a651f3395 100644
--- a/go.sum
+++ b/go.sum
@@ -9,7 +9,8 @@ github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9a
github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/azure-storage-blob-go v0.0.0-20181022225951-5152f14ace1c h1:Y5ueznoCekgCWBytF1Q9lTpZ3tJeX37dQtCcGjMCLYI=
github.com/Azure/azure-storage-blob-go v0.0.0-20181022225951-5152f14ace1c/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y=
-github.com/Azure/go-autorest v11.2.8+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest v10.8.1+incompatible h1:u0jVQf+a6k6x8A+sT60l6EY9XZu+kHdnZVPAYqpVRo0=
+github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
@@ -163,12 +164,18 @@ github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8Bz
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+<<<<<<< HEAD
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.8 h1:1QYRAKU3lN5cRfLCkPU08hwvLJFhvjP6MqNMmQz6ZVI=
github.com/miekg/dns v1.1.8/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/minio/minio-go v0.0.0-20200511070425-f33eae714a28 h1:SOCqV8mmu2Aqo2MktoZkHq17+jklWGlXsy0uf5q0ckM=
github.com/minio/minio-go v0.0.0-20200511070425-f33eae714a28/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM=
+=======
+github.com/miekg/dns v1.0.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/minio/minio-go v0.0.0-20190131015406-c8a261de75c1 h1:jw16EimP5oAEM/2wt+SiEUov/YDyTCTDuPtIKgQIvk0=
+github.com/minio/minio-go v0.0.0-20190131015406-c8a261de75c1/go.mod h1:vuvdOZLJuf5HmJAJrKV64MmozrSsk+or0PB5dzdfspg=
+>>>>>>> Remove gossip
github.com/mitchellh/go-homedir v0.0.0-20180523094522-3864e76763d9/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
@@ -183,6 +190,7 @@ github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSr
github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/oklog/oklog v0.0.0-20170918173356-f857583a70c3 h1:K/4JIfLQRyyHKJGd6ZfHply0GYxMuiqLCGuA8904lJk=
github.com/oklog/oklog v0.0.0-20170918173356-f857583a70c3/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go
deleted file mode 100644
index 67470b0596..0000000000
--- a/pkg/cluster/cluster.go
+++ /dev/null
@@ -1,569 +0,0 @@
-package cluster
-
-import (
- "context"
- stdlog "log"
- "math/rand"
- "net"
- "strconv"
- "strings"
- "sync"
- "time"
-
- "github.com/go-kit/kit/log"
- "github.com/go-kit/kit/log/level"
- "github.com/hashicorp/memberlist"
- "github.com/improbable-eng/thanos/pkg/runutil"
- "github.com/improbable-eng/thanos/pkg/store/storepb"
- "github.com/oklog/ulid"
- "github.com/pkg/errors"
- "github.com/prometheus/client_golang/prometheus"
- "github.com/prometheus/common/model"
-)
-
-type PeerStateFetcher interface {
- PeerState(id string) (PeerState, bool)
-}
-
-type Peer interface {
- PeerStateFetcher
-
- Name() string
- SetLabels(labels []storepb.Label)
- SetTimestamps(mint int64, maxt int64)
- Join(peerType PeerType, initialMetadata PeerMetadata) error
- PeerStates(types ...PeerType) map[string]PeerState
- Close(timeout time.Duration)
-}
-
-// Peer is a single peer in a gossip cluster.
-type peer struct {
- logger log.Logger
- mlistMtx sync.RWMutex
- mlist *memberlist.Memberlist
- stopc chan struct{}
-
- cfg *memberlist.Config
- knownPeers []string
- advertiseAddr string
- refreshInterval time.Duration
-
- data *data
- gossipMsgsReceived prometheus.Counter
- gossipClusterMembers prometheus.Gauge
-
- // Own External gRPC StoreAPI host:port (if any) to propagate to other peers.
- advertiseStoreAPIAddr string
- // Own External HTTP QueryAPI host:port (if any) to propagate to other peers.
- advertiseQueryAPIAddress string
-}
-
-const (
- DefaultRefreshInterval = model.Duration(60 * time.Second)
-
- // Peer's network types. These are used as a predefined peer configurations for a specified network type.
- LocalNetworkPeerType = "local"
- LanNetworkPeerType = "lan"
- WanNetworkPeerType = "wan"
-)
-
-var (
- // NetworkPeerTypes is a list of available peers' network types.
- NetworkPeerTypes = []string{LocalNetworkPeerType, LanNetworkPeerType, WanNetworkPeerType}
-)
-
-// PeerType describes a peer's role in the cluster.
-type PeerType string
-
-// Constants holding valid PeerType values.
-const (
- // PeerTypeStore is for peers that implements StoreAPI and are used for browsing historical data.
- PeerTypeStore = "store"
- // PeerTypeSource is for peers that implements StoreAPI and are used for scraping data. They tend to
- // have data accessible only for short period.
- PeerTypeSource = "source"
-
- // PeerTypeQuery is for peers that implements QueryAPI and are used for querying the metrics.
- PeerTypeQuery = "query"
-)
-
-// PeerState contains state for the peer.
-type PeerState struct {
- // Type represents type of the peer holding the state.
- Type PeerType
-
- // StoreAPIAddr is a host:port address of gRPC StoreAPI of the peer holding the state. Required for PeerTypeSource and PeerTypeStore.
- StoreAPIAddr string
- // QueryAPIAddr is a host:port address of HTTP QueryAPI of the peer holding the state. Required for PeerTypeQuery type only.
- QueryAPIAddr string
-
- // Metadata holds metadata of the peer holding the state.
- Metadata PeerMetadata
-}
-
-// PeerMetadata are the information that can change in runtime of the peer.
-type PeerMetadata struct {
- // Labels represents external labels for the peer. Only relevant for PeerTypeSource. Empty for other types.
- Labels []storepb.Label
-
- // MinTime indicates the minTime of the oldest block available from this peer.
- MinTime int64
- // MaxTime indicates the maxTime of the youngest block available from this peer.
- MaxTime int64
-}
-
-// New returns "alone" peer that is ready to join.
-func New(
- l log.Logger,
- reg *prometheus.Registry,
- bindAddr string,
- advertiseAddr string,
- advertiseStoreAPIAddr string,
- advertiseQueryAPIAddress string,
- knownPeers []string,
- waitIfEmpty bool,
- pushPullInterval time.Duration,
- gossipInterval time.Duration,
- refreshInterval time.Duration,
- secretKey []byte,
- networkType string,
-) (*peer, error) {
- l = log.With(l, "component", "cluster")
-
- bindHost, bindPortStr, err := net.SplitHostPort(bindAddr)
- if err != nil {
- return nil, err
- }
- bindPort, err := strconv.Atoi(bindPortStr)
- if err != nil {
- return nil, errors.Wrap(err, "invalid listen address")
- }
-
- // Best-effort deduction of advertise address.
- advertiseHost, advertisePort, err := CalculateAdvertiseAddress(bindAddr, advertiseAddr)
- if err != nil {
- level.Warn(l).Log("err", "couldn't deduce an advertise address: "+err.Error())
- }
-
- if IsUnroutable(advertiseHost) {
- level.Warn(l).Log("err", "this node advertises itself on an unroutable address", "host", advertiseHost, "port", advertisePort)
- level.Warn(l).Log("err", "this node will be unreachable in the cluster")
- level.Warn(l).Log("err", "provide --cluster.advertise-address as a routable IP address or hostname")
- }
-
- resolvedPeers, err := resolvePeers(context.Background(), knownPeers, advertiseAddr, *net.DefaultResolver, waitIfEmpty)
- if err != nil {
- return nil, errors.Wrap(err, "resolve peers")
- }
- level.Debug(l).Log("msg", "resolved peers to following addresses", "peers", strings.Join(resolvedPeers, ","))
-
- // TODO(fabxc): generate human-readable but random names?
- name, err := ulid.New(ulid.Now(), rand.New(rand.NewSource(time.Now().UnixNano())))
- if err != nil {
- return nil, err
- }
-
- cfg, err := parseNetworkConfig(networkType)
- if err != nil {
- return nil, err
- }
- cfg.Name = name.String()
- cfg.BindAddr = bindHost
- cfg.BindPort = bindPort
- if gossipInterval != 0 {
- cfg.GossipInterval = gossipInterval
- }
- if pushPullInterval != 0 {
- cfg.PushPullInterval = pushPullInterval
- }
- cfg.Logger = stdlog.New(log.NewStdlibAdapter(level.Debug(l)), "peers", stdlog.LstdFlags)
- cfg.SecretKey = secretKey
- if advertiseAddr != "" {
- cfg.AdvertiseAddr = advertiseHost
- cfg.AdvertisePort = advertisePort
- }
-
- gossipMsgsReceived := prometheus.NewCounter(prometheus.CounterOpts{
- Name: "thanos_gossip_messages_received_total",
- Help: "Total gossip NotifyMsg calls.",
- })
- gossipClusterMembers := prometheus.NewGauge(prometheus.GaugeOpts{
- Name: "thanos_cluster_members",
- Help: "Number indicating current number of members in cluster.",
- })
-
- reg.MustRegister(gossipMsgsReceived)
- reg.MustRegister(gossipClusterMembers)
-
- return &peer{
- logger: l,
- knownPeers: knownPeers,
- cfg: cfg,
- refreshInterval: refreshInterval,
- gossipMsgsReceived: gossipMsgsReceived,
- gossipClusterMembers: gossipClusterMembers,
- stopc: make(chan struct{}),
- data: &data{data: map[string]PeerState{}},
- advertiseAddr: advertiseAddr,
- advertiseStoreAPIAddr: advertiseStoreAPIAddr,
- advertiseQueryAPIAddress: advertiseQueryAPIAddress,
- }, nil
-}
-
-// Join joins to the memberlist gossip cluster using knownPeers and given peerType and initialMetadata.
-func (p *peer) Join(peerType PeerType, initialMetadata PeerMetadata) error {
- if p.hasJoined() {
- return errors.New("peer already joined; close it first to rejoin")
- }
-
- var ml *memberlist.Memberlist
- d := newDelegate(p.logger, ml.NumMembers, p.data, p.gossipMsgsReceived, p.gossipClusterMembers)
- p.cfg.Delegate = d
- p.cfg.Events = d
-
- ml, err := memberlist.Create(p.cfg)
- if err != nil {
- return errors.Wrap(err, "create memberlist")
- }
-
- n, err := ml.Join(p.knownPeers)
- if err != nil {
- level.Error(p.logger).Log("msg", "none of the peers was can be reached", "peerType", peerType, "knownPeers", strings.Join(p.knownPeers, ","), "err", err)
- } else {
- level.Debug(p.logger).Log("msg", "joined cluster", "peerType", peerType, "knownPeers", strings.Join(p.knownPeers, ","))
- }
-
- if n > 0 {
- go warnIfAlone(p.logger, 10*time.Second, p.stopc, ml.NumMembers)
- }
-
- p.mlistMtx.Lock()
- p.mlist = ml
- p.mlistMtx.Unlock()
-
- // Initialize state with ourselves.
- p.data.Set(p.Name(), PeerState{
- Type: peerType,
- StoreAPIAddr: p.advertiseStoreAPIAddr,
- QueryAPIAddr: p.advertiseQueryAPIAddress,
- Metadata: initialMetadata,
- })
-
- if p.refreshInterval != 0 {
- go p.periodicallyRefresh()
- }
-
- return nil
-}
-
-func (p *peer) periodicallyRefresh() {
- tick := time.NewTicker(p.refreshInterval)
- defer tick.Stop()
-
- for {
- select {
- case <-p.stopc:
- return
- case <-tick.C:
- if err := p.Refresh(); err != nil {
- level.Error(p.logger).Log("msg", "Refreshing memberlist", "err", err)
- }
- }
- }
-}
-
-// Refresh renews membership cluster, this will refresh DNS names and join newly added members
-func (p *peer) Refresh() error {
- p.mlistMtx.Lock()
- defer p.mlistMtx.Unlock()
-
- if p.mlist == nil {
- return nil
- }
-
- resolvedPeers, err := resolvePeers(context.Background(), p.knownPeers, p.advertiseAddr, *net.DefaultResolver, false)
- if err != nil {
- return errors.Wrapf(err, "refresh cluster could not resolve peers: %v", resolvedPeers)
- }
-
- currMembers := p.mlist.Members()
- var notConnected []string
- for _, peer := range resolvedPeers {
- var isPeerFound bool
-
- for _, mem := range currMembers {
- if mem.Address() == peer {
- isPeerFound = true
- break
- }
- }
-
- if !isPeerFound {
- notConnected = append(notConnected, peer)
- }
- }
-
- if len(notConnected) == 0 {
- level.Debug(p.logger).Log("msg", "refresh cluster done", "peers", strings.Join(p.knownPeers, ","), "resolvedPeers", strings.Join(resolvedPeers, ","))
- return nil
- }
-
- curr, err := p.mlist.Join(notConnected)
- if err != nil {
- return errors.Wrapf(err, "join peers %s ", strings.Join(notConnected, ","))
- }
-
- level.Debug(p.logger).Log("msg", "refresh cluster done, peers joined", "peers", strings.Join(notConnected, ","), "before", len(currMembers), "after", curr)
- return nil
-}
-
-func (p *peer) hasJoined() bool {
- p.mlistMtx.RLock()
- defer p.mlistMtx.RUnlock()
-
- return p.mlist != nil
-}
-
-func warnIfAlone(logger log.Logger, d time.Duration, stopc chan struct{}, numNodes func() int) {
- tick := time.NewTicker(d)
- defer tick.Stop()
-
- for {
- select {
- case <-stopc:
- return
- case <-tick.C:
- if n := numNodes(); n <= 1 {
- level.Warn(logger).Log("NumMembers", n, "msg", "I appear to be alone in the cluster")
- }
- }
- }
-}
-
-// SetLabels updates internal metadata's labels stored in PeerState for this peer.
-// Note that this data will be propagated based on gossipInterval we set.
-func (p *peer) SetLabels(labels []storepb.Label) {
- if !p.hasJoined() {
- return
- }
-
- s, _ := p.data.Get(p.Name())
- s.Metadata.Labels = labels
- p.data.Set(p.Name(), s)
-}
-
-// SetTimestamps updates internal metadata's timestamps stored in PeerState for this peer.
-// Note that this data will be propagated based on gossipInterval we set.
-func (p *peer) SetTimestamps(mint int64, maxt int64) {
- if !p.hasJoined() {
- return
- }
-
- s, _ := p.data.Get(p.Name())
- s.Metadata.MinTime = mint
- s.Metadata.MaxTime = maxt
- p.data.Set(p.Name(), s)
-}
-
-// Close leaves the cluster waiting up to timeout and shutdowns peer if cluster left.
-// TODO(bplotka): Add this method into run.Group closing logic for each command. This will improve graceful shutdown.
-func (p *peer) Close(timeout time.Duration) {
- if !p.hasJoined() {
- return
- }
-
- if err := p.mlist.Leave(timeout); err != nil {
- level.Error(p.logger).Log("msg", "memberlist leave failed", "err", err)
- }
- close(p.stopc)
- if err := p.mlist.Shutdown(); err != nil {
- level.Error(p.logger).Log("msg", "memberlist shutdown failed", "err", err)
- }
- p.mlist = nil
-}
-
-// Name returns the unique ID of this peer in the cluster.
-func (p *peer) Name() string {
- if !p.hasJoined() {
- return ""
- }
-
- return p.mlist.LocalNode().Name
-}
-
-// PeerTypesStoreAPIs gives a PeerType that allows all types that exposes StoreAPI.
-func PeerTypesStoreAPIs() []PeerType {
- return []PeerType{PeerTypeStore, PeerTypeSource}
-}
-
-// PeerStates returns the custom state information for each peer by memberlist peer id (name).
-func (p *peer) PeerStates(types ...PeerType) map[string]PeerState {
- if !p.hasJoined() {
- return nil
- }
-
- ps := map[string]PeerState{}
- for _, o := range p.mlist.Members() {
- os, ok := p.data.Get(o.Name)
- if !ok {
- continue
- }
-
- if len(types) == 0 {
- ps[o.Name] = os
- continue
- }
- for _, t := range types {
- if os.Type == t {
- ps[o.Name] = os
- break
- }
- }
- }
- return ps
-}
-
-// PeerState returns the custom state information by memberlist peer name.
-func (p *peer) PeerState(id string) (PeerState, bool) {
- if !p.hasJoined() {
- return PeerState{}, false
- }
-
- ps, ok := p.data.Get(id)
- if !ok {
- return PeerState{}, false
- }
- return ps, true
-}
-
-// Info returns a JSON-serializable dump of cluster state.
-// Useful for debug.
-func (p *peer) Info() map[string]interface{} {
- if !p.hasJoined() {
- return nil
- }
-
- d := map[string]PeerState{}
- for k, v := range p.data.Data() {
- d[k] = v
- }
-
- return map[string]interface{}{
- "self": p.mlist.LocalNode(),
- "members": p.mlist.Members(),
- "n": p.mlist.NumMembers(),
- "state": d,
- }
-}
-
-func resolvePeers(ctx context.Context, peers []string, myAddress string, res net.Resolver, waitIfEmpty bool) ([]string, error) {
- var resolvedPeers []string
-
- for _, peer := range peers {
- host, port, err := net.SplitHostPort(peer)
- if err != nil {
- return nil, errors.Wrapf(err, "split host/port for peer %s", peer)
- }
-
- ips, err := res.LookupIPAddr(ctx, host)
- if err != nil {
- // Assume direct address.
- resolvedPeers = append(resolvedPeers, peer)
- continue
- }
-
- if len(ips) == 0 {
- var lookupErrSpotted bool
- retryCtx, cancel := context.WithCancel(ctx)
- defer cancel()
-
- err := runutil.Retry(2*time.Second, retryCtx.Done(), func() error {
- if lookupErrSpotted {
- // We need to invoke cancel in next run of retry when lookupErrSpotted to preserve LookupIPAddr error.
- cancel()
- }
-
- ips, err = res.LookupIPAddr(retryCtx, host)
- if err != nil {
- lookupErrSpotted = true
- return errors.Wrapf(err, "IP Addr lookup for peer %s", peer)
- }
-
- ips = removeMyAddr(ips, port, myAddress)
- if len(ips) == 0 {
- if !waitIfEmpty {
- return nil
- }
- return errors.New("empty IPAddr result. Retrying")
- }
-
- return nil
- })
- if err != nil {
- return nil, err
- }
- }
-
- for _, ip := range ips {
- resolvedPeers = append(resolvedPeers, net.JoinHostPort(ip.String(), port))
- }
- }
-
- return resolvedPeers, nil
-}
-
-func removeMyAddr(ips []net.IPAddr, targetPort string, myAddr string) []net.IPAddr {
- var result []net.IPAddr
-
- for _, ip := range ips {
- if net.JoinHostPort(ip.String(), targetPort) == myAddr {
- continue
- }
- result = append(result, ip)
- }
-
- return result
-}
-
-func IsUnroutable(host string) bool {
- if ip := net.ParseIP(host); ip != nil && (ip.IsUnspecified() || ip.IsLoopback()) {
- return true // typically 0.0.0.0 or localhost
- } else if ip == nil && strings.ToLower(host) == "localhost" {
- return true
- }
- return false
-}
-
-func parseNetworkConfig(networkType string) (*memberlist.Config, error) {
- var mc *memberlist.Config
-
- switch networkType {
- case LanNetworkPeerType:
- mc = memberlist.DefaultLANConfig()
- case WanNetworkPeerType:
- mc = memberlist.DefaultWANConfig()
- case LocalNetworkPeerType:
- mc = memberlist.DefaultLocalConfig()
- default:
- return nil, errors.Errorf("unexpected network type %s, should be one of: %s",
- networkType,
- strings.Join(NetworkPeerTypes, ", "),
- )
- }
-
- return mc, nil
-}
-
-func NewNoop() Peer {
- return noopPeer{}
-}
-
-type noopPeer struct{}
-
-func (n noopPeer) Name() string { return "no gossip" }
-func (n noopPeer) SetLabels(labels []storepb.Label) {}
-func (n noopPeer) SetTimestamps(mint int64, maxt int64) {}
-func (n noopPeer) PeerState(id string) (PeerState, bool) { return PeerState{}, false }
-func (n noopPeer) Join(peerType PeerType, initialMetadata PeerMetadata) error { return nil }
-func (n noopPeer) PeerStates(types ...PeerType) map[string]PeerState { return nil }
-func (n noopPeer) Close(timeout time.Duration) {}
diff --git a/pkg/cluster/data.go b/pkg/cluster/data.go
deleted file mode 100644
index 189fb3727c..0000000000
--- a/pkg/cluster/data.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package cluster
-
-import "sync"
-
-type data struct {
- mtx sync.RWMutex
- data map[string]PeerState
-}
-
-func (d *data) Set(k string, v PeerState) {
- d.mtx.Lock()
- defer d.mtx.Unlock()
-
- d.data[k] = v
-}
-
-func (d *data) Del(k string) {
- d.mtx.Lock()
- defer d.mtx.Unlock()
-
- delete(d.data, k)
-}
-
-func (d *data) Get(k string) (PeerState, bool) {
- d.mtx.RLock()
- defer d.mtx.RUnlock()
-
- p, ok := d.data[k]
- return p, ok
-}
-
-func (d *data) Data() map[string]PeerState {
- d.mtx.RLock()
- defer d.mtx.RUnlock()
-
- res := map[string]PeerState{}
- for k, v := range d.data {
- res[k] = v
- }
-
- return res
-}
diff --git a/pkg/cluster/delegate.go b/pkg/cluster/delegate.go
deleted file mode 100644
index 1a7a1a175b..0000000000
--- a/pkg/cluster/delegate.go
+++ /dev/null
@@ -1,95 +0,0 @@
-package cluster
-
-import (
- "encoding/json"
- "strings"
-
- "github.com/go-kit/kit/log"
- "github.com/go-kit/kit/log/level"
- "github.com/hashicorp/memberlist"
- "github.com/prometheus/client_golang/prometheus"
-)
-
-// delegate implements memberlist.Delegate and memberlist.EventDelegate
-// and broadcasts its peer's state in the cluster.
-type delegate struct {
- *memberlist.TransmitLimitedQueue
-
- logger log.Logger
- data *data
-
- gossipMsgsReceived prometheus.Counter
- gossipClusterMembers prometheus.Gauge
-}
-
-func newDelegate(l log.Logger, numNodes func() int, data *data, gossipMsgsReceived prometheus.Counter, gossipClusterMembers prometheus.Gauge) *delegate {
- return &delegate{
- TransmitLimitedQueue: &memberlist.TransmitLimitedQueue{
- NumNodes: numNodes,
- RetransmitMult: 3,
- },
- logger: l,
- data: data,
- gossipMsgsReceived: gossipMsgsReceived,
- gossipClusterMembers: gossipClusterMembers,
- }
-}
-
-// NodeMeta retrieves meta-data about the current node when broadcasting an alive message.
-func (d *delegate) NodeMeta(limit int) []byte {
- return []byte{}
-}
-
-// NotifyMsg is the callback invoked when a user-level gossip message is received.
-func (d *delegate) NotifyMsg(b []byte) {
- var data map[string]PeerState
- if err := json.Unmarshal(b, &data); err != nil {
- level.Error(d.logger).Log("method", "NotifyMsg", "b", strings.TrimSpace(string(b)), "err", err)
- return
- }
- d.gossipMsgsReceived.Inc()
-
- for k, v := range data {
- // Removing data is handled by NotifyLeave
- d.data.Set(k, v)
- }
-}
-
-// LocalState is called when gossip fetches local state.
-func (d *delegate) LocalState(_ bool) []byte {
- b, err := json.Marshal(d.data.Data())
- if err != nil {
- panic(err)
- }
- return b
-}
-
-func (d *delegate) MergeRemoteState(buf []byte, _ bool) {
- var data map[string]PeerState
- if err := json.Unmarshal(buf, &data); err != nil {
- level.Error(d.logger).Log("method", "MergeRemoteState", "err", err)
- return
- }
- for k, v := range data {
- // Removing data is handled by NotifyLeave
- d.data.Set(k, v)
- }
-}
-
-// NotifyJoin is called if a peer joins the cluster.
-func (d *delegate) NotifyJoin(n *memberlist.Node) {
- d.gossipClusterMembers.Inc()
- level.Debug(d.logger).Log("received", "NotifyJoin", "node", n.Name, "addr", n.Address())
-}
-
-// NotifyLeave is called if a peer leaves the cluster.
-func (d *delegate) NotifyLeave(n *memberlist.Node) {
- d.gossipClusterMembers.Dec()
- level.Debug(d.logger).Log("received", "NotifyLeave", "node", n.Name, "addr", n.Address())
- d.data.Del(n.Name)
-}
-
-// NotifyUpdate is called if a cluster peer gets updated.
-func (d *delegate) NotifyUpdate(n *memberlist.Node) {
- level.Debug(d.logger).Log("received", "NotifyUpdate", "node", n.Name, "addr", n.Address())
-}
From d004c302f8e0522132f1b07b9531c7936a11a558 Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Fri, 24 May 2019 16:37:38 +0300
Subject: [PATCH 2/9] Fix go.mod
---
go.mod | 2 +-
go.sum | 101 +--------------------------------------------------------
2 files changed, 2 insertions(+), 101 deletions(-)
diff --git a/go.mod b/go.mod
index 5df9b578e1..786039418a 100644
--- a/go.mod
+++ b/go.mod
@@ -16,9 +16,9 @@ require (
github.com/gophercloud/gophercloud v0.0.0-20181206160319-9d88c34913a9
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0
github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20181025070259-68e3a13e4117
+ github.com/hashicorp/go-sockaddr v1.0.0
github.com/hashicorp/go-version v1.2.0
github.com/hashicorp/golang-lru v0.5.1
- github.com/hashicorp/memberlist v0.1.3
github.com/julienschmidt/httprouter v1.1.0 // indirect
github.com/lovoo/gcloud-opentracing v0.3.0
github.com/miekg/dns v1.1.8
diff --git a/go.sum b/go.sum
index 5a651f3395..823b70b015 100644
--- a/go.sum
+++ b/go.sum
@@ -1,36 +1,25 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
contrib.go.opencensus.io/exporter/ocagent v0.4.1/go.mod h1:b6YwD5Q3Yvj4yk0CDK5vGXexygNzI09aXUdDEakQBgA=
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
git.apache.org/thrift.git v0.0.0-20181218151757-9b75e4fe745a/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
-github.com/Azure/azure-pipeline-go v0.1.8 h1:KmVRa8oFMaargVesEuuEoiLCQ4zCCwQ8QX/xg++KS20=
github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg=
github.com/Azure/azure-sdk-for-go v23.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-storage-blob-go v0.0.0-20181022225951-5152f14ace1c h1:Y5ueznoCekgCWBytF1Q9lTpZ3tJeX37dQtCcGjMCLYI=
github.com/Azure/azure-storage-blob-go v0.0.0-20181022225951-5152f14ace1c/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y=
-github.com/Azure/go-autorest v10.8.1+incompatible h1:u0jVQf+a6k6x8A+sT60l6EY9XZu+kHdnZVPAYqpVRo0=
-github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
-github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
+github.com/Azure/go-autorest v11.2.8+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
-github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/aws/aws-sdk-go v0.0.0-20180507225419-00862f899353/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/biogo/store v0.0.0-20160505134755-913427a1d5e8/go.mod h1:Iev9Q3MErcn+w3UOJD/DkEzllvugfdx7bGcMOFhvr/4=
github.com/cenk/backoff v2.0.0+incompatible/go.mod h1:7FtoeaSnHoZnmZzz47cM35Y9nSW7tNyaidugnHTaFDE=
github.com/census-instrumentation/opencensus-proto v0.1.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
@@ -40,7 +29,6 @@ github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgrijalva/jwt-go v0.0.0-20161101193935-9ed569b5d1ac/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
@@ -49,91 +37,62 @@ github.com/elastic/gosigar v0.9.0/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyC
github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
github.com/evanphx/json-patch v4.1.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA=
-github.com/fatih/structtag v1.0.0 h1:pTHj65+u3RKWYPSGaU290FpI/dXxTaHdVwVwbcPKmEc=
github.com/fatih/structtag v1.0.0/go.mod h1:IKitwq45uXL/yqi5mYghiD3w9H6eTOvI9vnk8tXMphA=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/getsentry/raven-go v0.1.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-ini/ini v1.21.1/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
-github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.0 h1:xU6/SpYbvkNYiptHJYEDRseDLvYE7wSqhYYNy0QSUzI=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20180924190550-6f2cf27854a4/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy v0.0.0-20160529050041-d9eb7a3d35ec/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v0.0.0-20150304233714-bbcb9da2d746/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
-github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20180605153948-8b03ce837f34/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww=
github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY=
github.com/googleapis/gnostic v0.0.0-20180520015035-48a0ecefe2e4/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/gophercloud/gophercloud v0.0.0-20181206160319-9d88c34913a9 h1:7TRGugCPfA2Mll6QT7cbhD1GXZwk7+1PUz8tYrOWXgQ=
github.com/gophercloud/gophercloud v0.0.0-20181206160319-9d88c34913a9/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg=
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20181025070259-68e3a13e4117 h1:v9uUYPE4RHQHA0C9XfpAX9uzWQvgIDYjPh6m/mQgrzs=
github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20181025070259-68e3a13e4117/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
github.com/grpc-ecosystem/grpc-gateway v1.6.3/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
github.com/hashicorp/consul v0.0.0-20180615161029-bed22a81e9fd/go.mod h1:mFrjN1mfidgJfYP1xrJCF+AfRhr6Eaqhb2+sfyn/OOI=
-github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.0.0-20160407174126-ad28ea4487f0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
-github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.0.0-20150518234257-fa3f63826f7c/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
-github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=
-github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
-github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v0.0.0-20160503143440-6bb64b370b90/go.mod h1:o4zcYY1e0GEZI6eSEr+43QDYmuGglw1qSO6qdHUHCgg=
github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
-github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
-github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E=
github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/memberlist v0.1.0/go.mod h1:ncdBp14cuox2iFOq3kDiquKU6fqsTBc3W6JvZwjxxsE=
-github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M=
-github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.0.0-20161007004122-1d4fa605f6ff/go.mod h1:h/Ru6tmZazX7WO/GDmwdpS975F019L4t5ng5IgwbNrE=
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -142,103 +101,69 @@ github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80s
github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v0.0.0-20150905172533-109e267447e9/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.1.0 h1:7wLdtIiIpzOkC9u6sXOozpBauPdskj3ru4EI5MABq68=
github.com/julienschmidt/httprouter v1.1.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/knz/strtime v0.0.0-20181018220328-af2256ee352c/go.mod h1:4ZxfWkxwtc7dBeifERVVWRy9F9rTU9p0yCDgeCtlius=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lightstep/lightstep-tracer-go v0.15.6/go.mod h1:6AMpwZpsyCFwSovxzM78e+AsYxE8sGwiM6C3TytaWeI=
-github.com/lovoo/gcloud-opentracing v0.3.0 h1:nAeKG70rIsog0TelcEtt6KU0Y1s5qXtsDLnHp0urPLU=
github.com/lovoo/gcloud-opentracing v0.3.0/go.mod h1:ZFqk2y38kMDDikZPAK7ynTTGuyt17nSPdS3K5e+ZTBY=
-github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-<<<<<<< HEAD
-github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.8 h1:1QYRAKU3lN5cRfLCkPU08hwvLJFhvjP6MqNMmQz6ZVI=
github.com/miekg/dns v1.1.8/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/minio/minio-go v0.0.0-20200511070425-f33eae714a28 h1:SOCqV8mmu2Aqo2MktoZkHq17+jklWGlXsy0uf5q0ckM=
github.com/minio/minio-go v0.0.0-20200511070425-f33eae714a28/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM=
-=======
-github.com/miekg/dns v1.0.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/minio/minio-go v0.0.0-20190131015406-c8a261de75c1 h1:jw16EimP5oAEM/2wt+SiEUov/YDyTCTDuPtIKgQIvk0=
-github.com/minio/minio-go v0.0.0-20190131015406-c8a261de75c1/go.mod h1:vuvdOZLJuf5HmJAJrKV64MmozrSsk+or0PB5dzdfspg=
->>>>>>> Remove gossip
github.com/mitchellh/go-homedir v0.0.0-20180523094522-3864e76763d9/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/montanaflynn/stats v0.0.0-20180911141734-db72e6cae808/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
-github.com/mozillazg/go-cos v0.11.0 h1:PUaIGDL6Jxgrzqg0XvZ6y32jS/5z26+UxnX6ENMm7yE=
github.com/mozillazg/go-cos v0.11.0/go.mod h1:Zp6DvvXn0RUOXGJ2chmWt2bLEqRAnJnS3DnAZsJsoaE=
-github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ=
github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/oklog/oklog v0.0.0-20170918173356-f857583a70c3 h1:K/4JIfLQRyyHKJGd6ZfHply0GYxMuiqLCGuA8904lJk=
github.com/oklog/oklog v0.0.0-20170918173356-f857583a70c3/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
-github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
-github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/olekukonko/tablewriter v0.0.0-20180912035003-be2c049b30cc/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/opentracing-contrib/go-stdlib v0.0.0-20170113013457-1de4cc2120e7 h1:8KbikWulLUcMM96hBxjgoo6gTmCkG6HYSDohv/WygYU=
github.com/opentracing-contrib/go-stdlib v0.0.0-20170113013457-1de4cc2120e7/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w=
-github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.1/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
-github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/peterbourgon/diskv v0.0.0-20180312054125-0646ccaebea1/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/peterbourgon/g2s v0.0.0-20170223122336-d4e7ad98afea/go.mod h1:1VcHEd3ro4QMoHfiNl/j7Jkln9+KQuorp0PItHMJYNg=
github.com/petermattis/goid v0.0.0-20170504144140-0ded85884ba5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740=
github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181119215939-b36ad289a3ea/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
-github.com/prometheus/common v0.0.0-20181218105931-67670fe90761 h1:z6tvbDJ5OLJ48FFmnksv04a78maSTRBUIhkdHYV5Y98=
github.com/prometheus/common v0.0.0-20181218105931-67670fe90761/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a h1:9a8MnZMP0X2nLJdBg+pBmGgkJlSaKC2KaQmTCk1XDtE=
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/prometheus v0.0.0-20190328180107-4d60eb36dcbe h1:Wpwxfdtx0+/3dgqBvUAB2CTRtHRimQrH4RTEJ5yxCUo=
github.com/prometheus/prometheus v0.0.0-20190328180107-4d60eb36dcbe/go.mod h1:mVHnNN4pf1p9fM7dRvZQAKj0Ex93s+mIhtsml8SJy5E=
-github.com/prometheus/tsdb v0.6.1 h1:wUp5iY/rmwv6VNzZg4yaUVpkSs4nX5O5+aoviWTNeUo=
github.com/prometheus/tsdb v0.6.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rlmcpherson/s3gof3r v0.5.0/go.mod h1:s7vv7SMDPInkitQMuZzH615G7yWHdrU2r/Go7Bo71Rs=
@@ -246,31 +171,23 @@ github.com/rubyist/circuitbreaker v2.2.1+incompatible/go.mod h1:Ycs3JgJADPuzJDwf
github.com/samuel/go-zookeeper v0.0.0-20161028232340-1d7be4effb13/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/sasha-s/go-deadlock v0.0.0-20161201235124-341000892f3d/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/shurcooL/vfsgen v0.0.0-20180711163814-62bca832be04/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304 h1:Jpy1PXuP99tXNrhbq2BaPz9B+jNAvH1JPQQpG/9GCXY=
github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
-github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c h1:Ho+uVpkel/udgjbwB5Lktg9BtvJSh2DT0Hi6LPSyI2w=
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
go.opencensus.io v0.18.1-0.20181204023538-aab39bd6a98b/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
-go.opencensus.io v0.19.0 h1:+jrnNy8MR4GZXvwF9PEuSyHxA4NaTf6601oNRwCSXq0=
go.opencensus.io v0.19.0/go.mod h1:AYeH0+ZxYyghG8diqaaIq/9P3VgCCt5GF2ldCY4dkFg=
golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b h1:Ib/yptP38nXZFMwqWSip+OKuMP9OkyDe3p+DssP8n9w=
golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -278,29 +195,22 @@ golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTk
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181217023233-e147a9138326/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd h1:HuTn7WObtcDo9uEEU7rEqL0jYthdXAmZ6PP+meazmaU=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890 h1:uESlIz09WIHT2I+pasSXcpLYqYK8wHcdCetU3VuMBJE=
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc h1:4gbWbmmPFp4ySWICouJl6emP0MyS31yy9SrTlAGFT+g=
golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/time v0.0.0-20170424234030-8be79e1e0910/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -308,39 +218,30 @@ golang.org/x/tools v0.0.0-20181023010539-40a48ad93fbe/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
-google.golang.org/api v0.1.0 h1:K6z2u68e86TPdSdefXdzvXgR1zEMa+459vBSfWYAZkI=
google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg=
-google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb h1:dQshZyyJ5W/Xk8myF4GKBak1pZW6EywJuQ8+44EQhGA=
google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.15.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
-google.golang.org/grpc v1.17.0 h1:TRJYBgMclJvGYn2rIMjj+h9KtMt5r1Ij7ODVRIZkwhk=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/fsnotify/fsnotify.v1 v1.3.0/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE=
-gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBlQbo=
gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE=
gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/ini.v1 v1.41.0 h1:Ka3ViY6gNYSKiVy71zXBEqKplnV35ImDLVG+8uoIklE=
gopkg.in/ini.v1 v1.41.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/vmihailenco/msgpack.v2 v2.9.1/go.mod h1:/3Dn1Npt9+MYyLpYYXjInO/5jvMLamn+AEGwNEOatn8=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
From a0fd2f227f106e49d101d922617812088dd0661e Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Fri, 24 May 2019 16:40:02 +0300
Subject: [PATCH 3/9] Remove gossip from tests
---
test/e2e/query_test.go | 34 ++++++++++++----------------------
test/e2e/spinup_test.go | 7 +------
2 files changed, 13 insertions(+), 28 deletions(-)
diff --git a/test/e2e/query_test.go b/test/e2e/query_test.go
index 912e1d80bf..64e8533eb4 100644
--- a/test/e2e/query_test.go
+++ b/test/e2e/query_test.go
@@ -108,9 +108,6 @@ func testQuerySimple(t *testing.T, conf testConfig) {
}
expectedRes := 4
- if conf.name == "gossip" {
- expectedRes = 3
- }
if len(res) != expectedRes {
return errors.Errorf("unexpected result size %d, expected %d", len(res), expectedRes)
}
@@ -140,14 +137,12 @@ func testQuerySimple(t *testing.T, conf testConfig) {
"replica": model.LabelValue("1"),
}, res[2].Metric)
- if conf.name != "gossip" {
- testutil.Equals(t, model.Metric{
- "__name__": "up",
- "instance": model.LabelValue("localhost:9100"),
- "job": "node",
- "receive": "true",
- }, res[3].Metric)
- }
+ testutil.Equals(t, model.Metric{
+ "__name__": "up",
+ "instance": model.LabelValue("localhost:9100"),
+ "job": "node",
+ "receive": "true",
+ }, res[3].Metric)
// Try query with deduplication.
testutil.Ok(t, runutil.Retry(time.Second, ctx.Done(), func() error {
@@ -175,9 +170,6 @@ func testQuerySimple(t *testing.T, conf testConfig) {
}
expectedRes := 3
- if conf.name == "gossip" {
- expectedRes = 2
- }
if len(res) != expectedRes {
return errors.Errorf("unexpected result size %d, expected %d", len(res), expectedRes)
}
@@ -197,14 +189,12 @@ func testQuerySimple(t *testing.T, conf testConfig) {
"job": "prometheus",
"prometheus": "prom-ha",
}, res[1].Metric)
- if conf.name != "gossip" {
- testutil.Equals(t, model.Metric{
- "__name__": "up",
- "instance": model.LabelValue("localhost:9100"),
- "job": "node",
- "receive": "true",
- }, res[2].Metric)
- }
+ testutil.Equals(t, model.Metric{
+ "__name__": "up",
+ "instance": model.LabelValue("localhost:9100"),
+ "job": "node",
+ "receive": "true",
+ }, res[2].Metric)
}
func urlParse(t *testing.T, addr string) *url.URL {
diff --git a/test/e2e/spinup_test.go b/test/e2e/spinup_test.go
index c45fb0be24..ba4482ce29 100644
--- a/test/e2e/spinup_test.go
+++ b/test/e2e/spinup_test.go
@@ -118,7 +118,6 @@ func scraper(i int, config string) cmdScheduleFunc {
"--http-address", sidecarHTTP(i),
"--prometheus.url", fmt.Sprintf("http://%s", promHTTP(i)),
"--tsdb.path", promDir,
- "--cluster.disable",
"--log.level", "debug"))), nil
}
}
@@ -154,9 +153,7 @@ func receiver(i int, config string) cmdScheduleFunc {
func querier(i int, replicaLabel string, staticStores ...string) cmdScheduleFunc {
return func(_ string) ([]Exec, error) {
- args := append(defaultQuerierFlags(i, replicaLabel),
- "--cluster.gossip-interval", "200ms",
- "--cluster.pushpull-interval", "200ms")
+ args := defaultQuerierFlags(i, replicaLabel)
for _, s := range staticStores {
args = append(args, "--store", s)
}
@@ -555,7 +552,6 @@ func defaultQuerierFlags(i int, replicaLabel string) []string {
"--http-address", queryHTTP(i),
"--log.level", "debug",
"--query.replica-label", replicaLabel,
- "--cluster.disable",
"--store.sd-dns-interval", "5s",
}
}
@@ -570,7 +566,6 @@ func defaultRulerFlags(i int, dbDir string, ruleDir string) []string {
"--alertmanagers.url", "http://127.0.0.1:29093",
"--grpc-address", rulerGRPC(i),
"--http-address", rulerHTTP(i),
- "--cluster.disable",
"--log.level", "debug",
"--query.sd-dns-interval", "5s",
}
From b26dc03ab526a6ccf4240c3deacae80dc92f6f4e Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Fri, 24 May 2019 16:41:45 +0300
Subject: [PATCH 4/9] Remove cluster pkg
---
pkg/cluster/advertise.go | 52 ---------
pkg/cluster/cluster_test.go | 210 ------------------------------------
2 files changed, 262 deletions(-)
delete mode 100644 pkg/cluster/advertise.go
delete mode 100644 pkg/cluster/cluster_test.go
diff --git a/pkg/cluster/advertise.go b/pkg/cluster/advertise.go
deleted file mode 100644
index ab5a383ab7..0000000000
--- a/pkg/cluster/advertise.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package cluster
-
-import (
- "net"
- "strconv"
-
- sockaddr "github.com/hashicorp/go-sockaddr"
- "github.com/pkg/errors"
-)
-
-// CalculateAdvertiseAddress deduce the external, advertise address that should be routable from other components.
-func CalculateAdvertiseAddress(bindAddr, advertiseAddr string) (string, int, error) {
- if advertiseAddr != "" {
- advHost, advPort, err := net.SplitHostPort(advertiseAddr)
- if err != nil {
- return "", 0, errors.Wrap(err, "invalid advertise address")
- }
- advIntPort, err := strconv.Atoi(advPort)
- if err != nil {
- return "", 0, errors.Wrapf(err, "invalid advertise address '%s', wrong port", advertiseAddr)
- }
- return advHost, advIntPort, nil
- }
-
- // We expect bindAddr to be in form of ip:port.
- bindHost, bindPort, err := net.SplitHostPort(bindAddr)
- if err != nil {
- return "", 0, errors.Wrapf(err, "invalid bind address '%s'", bindAddr)
- }
-
- bindIntPort, err := strconv.Atoi(bindPort)
- if err != nil {
- return "", 0, errors.Wrapf(err, "invalid bind address '%s', wrong port", bindAddr)
- }
-
- if bindIntPort == 0 {
- return "", 0, errors.Errorf("invalid bind address '%s'. We don't allow port to be 0", bindAddr)
- }
-
- if bindHost == "" || bindHost == "0.0.0.0" {
- privateIP, err := sockaddr.GetPrivateIP()
- if err != nil {
- return "", 0, errors.Wrap(err, "failed to get private IP")
- }
- if privateIP == "" {
- return "", 0, errors.Wrap(err, "no private IP found, explicit advertise addr not provided")
- }
- return privateIP, bindIntPort, nil
- }
-
- return bindHost, bindIntPort, nil
-}
diff --git a/pkg/cluster/cluster_test.go b/pkg/cluster/cluster_test.go
deleted file mode 100644
index 17781d2c6e..0000000000
--- a/pkg/cluster/cluster_test.go
+++ /dev/null
@@ -1,210 +0,0 @@
-package cluster
-
-import (
- "context"
- "fmt"
- "net"
- "reflect"
- "sort"
- "strconv"
- "testing"
- "time"
-
- "github.com/fortytw2/leaktest"
- "github.com/go-kit/kit/log"
- sockaddr "github.com/hashicorp/go-sockaddr"
- "github.com/improbable-eng/thanos/pkg/runutil"
- "github.com/improbable-eng/thanos/pkg/store/storepb"
- "github.com/improbable-eng/thanos/pkg/testutil"
- "github.com/pkg/errors"
- "github.com/prometheus/client_golang/prometheus"
- "github.com/prometheus/prometheus/pkg/timestamp"
-)
-
-func joinPeer(num int, knownPeers []string) (peerAddr string, peer *peer, err error) {
- port, err := testutil.FreePort()
- if err != nil {
- return "", nil, err
- }
- peerAddr = fmt.Sprintf("127.0.0.1:%d", port)
- now := time.Now()
-
- peer, err = New(
- log.NewNopLogger(),
- prometheus.NewRegistry(),
- peerAddr,
- peerAddr,
- apiAddr(num),
- "",
- knownPeers,
- false,
- 100*time.Millisecond,
- 50*time.Millisecond,
- 30*time.Millisecond,
- nil,
- LanNetworkPeerType,
- )
- if err != nil {
- return "", nil, err
- }
- err = peer.Join(PeerTypeSource, PeerMetadata{
- Labels: []storepb.Label{
- {
- Name: "a",
- Value: fmt.Sprintf("%d", num),
- },
- },
- MinTime: timestamp.FromTime(now.Add(-10 * time.Minute)),
- MaxTime: timestamp.FromTime(now.Add(-1 * time.Second)),
- })
- if err != nil {
- return "", nil, err
- }
- return peerAddr, peer, nil
-}
-
-func apiAddr(num int) string {
- return fmt.Sprintf("sidecar-address:%d", num)
-}
-
-func TestPeers_PropagatingState(t *testing.T) {
- defer leaktest.CheckTimeout(t, 10*time.Second)()
-
- addr1, peer1, err := joinPeer(1, nil)
- testutil.Ok(t, err)
- defer peer1.Close(5 * time.Second)
-
- _, peer2, err := joinPeer(2, []string{addr1})
- testutil.Ok(t, err)
- defer peer2.Close(5 * time.Second)
-
- // peer2 should see two members with their data.
- expected := []string{apiAddr(1), apiAddr(2)}
- testutil.Equals(t, expected, apiAddrs(peer2.PeerStates(PeerTypeSource)))
-
- // Check if we have consistent info for PeerStates vs PeerState.
- for id, ps := range peer2.PeerStates() {
- directPs, ok := peer2.PeerState(id)
- testutil.Assert(t, ok, "listed id should be gettable")
- testutil.Equals(t, ps, directPs)
- }
-
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- testutil.Ok(t, runutil.Retry(1*time.Second, ctx.Done(), func() error {
- if len(peer1.data.Data()) > 1 {
- return nil
- }
- return errors.New("I am alone here")
- }))
-
- // peer1 should see two members with their data.
- testutil.Equals(t, expected, apiAddrs(peer1.PeerStates(PeerTypeSource)))
-
- // Check if we have consistent info for PeerStates vs PeerState.
- for id, ps := range peer1.PeerStates() {
- directPs, ok := peer1.PeerState(id)
- testutil.Assert(t, ok, "listed id should be gettable")
- testutil.Equals(t, ps, directPs)
- }
-
- // Update peer1 state.
- now := time.Now()
- newPeerMeta1 := PeerMetadata{
- Labels: []storepb.Label{
- {
- Name: "b",
- Value: "1",
- },
- },
- MinTime: timestamp.FromTime(now.Add(-20 * time.Minute)),
- MaxTime: timestamp.FromTime(now.Add(-1 * time.Millisecond)),
- }
- peer1.SetLabels(newPeerMeta1.Labels)
- peer1.SetTimestamps(newPeerMeta1.MinTime, newPeerMeta1.MaxTime)
-
- // Check if peer2 got the updated meta about peer1.
- ctx2, cancel2 := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel2()
- testutil.Ok(t, runutil.Retry(1*time.Second, ctx2.Done(), func() error {
- for _, st := range peer2.PeerStates(PeerTypeSource) {
- if st.StoreAPIAddr != "sidecar-address:1" {
- continue
- }
-
- if reflect.DeepEqual(st.Metadata, newPeerMeta1) {
- return nil
- }
- }
- return errors.New("outdated metadata")
- }))
-}
-
-func apiAddrs(states map[string]PeerState) (addrs []string) {
- for _, ps := range states {
- addrs = append(addrs, ps.StoreAPIAddr)
- }
- sort.Strings(addrs)
- return addrs
-}
-
-func TestCalculateAdvAddress(t *testing.T) {
- privateIP, err := sockaddr.GetPrivateIP()
- testutil.Ok(t, err)
-
- for _, tc := range []struct {
- bind string
- advertise string
-
- expected string
- err error
- }{
- {
- err: errors.New("invalid bind address '': missing port in address"),
- },
- {
- advertise: "l1234",
- err: errors.New("invalid advertise address: address l1234: missing port in address"),
- },
- {
- advertise: "localhost:1234",
- expected: "localhost:1234",
- },
- {
- bind: "local:5555",
- advertise: "ext:1234",
- expected: "ext:1234",
- },
- {
- bind: "local:5555",
- expected: "local:5555",
- },
- {
- bind: ":5555",
- expected: privateIP + ":5555",
- },
- {
- bind: "0.0.0.0:5555",
- expected: privateIP + ":5555",
- },
- {
- bind: "[::]:1234",
- advertise: "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:1234",
- expected: "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:1234",
- },
- } {
- if ok := t.Run("", func(t *testing.T) {
- host, port, err := CalculateAdvertiseAddress(tc.bind, tc.advertise)
- if tc.err != nil {
- testutil.NotOk(t, err)
- testutil.Equals(t, tc.err.Error(), err.Error())
- return
- }
- testutil.Ok(t, err)
- testutil.Equals(t, tc.expected, net.JoinHostPort(host, strconv.Itoa(port)))
-
- }); !ok {
- return
- }
- }
-}
From f87a2c044fa9ad3e79c09f91f0f75551a4c022ba Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Fri, 24 May 2019 17:46:51 +0300
Subject: [PATCH 5/9] Update docs
---
docs/components/query.md | 54 --------------------------------------
docs/components/rule.md | 50 -----------------------------------
docs/components/sidecar.md | 50 -----------------------------------
docs/components/store.md | 50 -----------------------------------
4 files changed, 204 deletions(-)
diff --git a/docs/components/query.md b/docs/components/query.md
index 7ce69b9d50..65d86f04ac 100644
--- a/docs/components/query.md
+++ b/docs/components/query.md
@@ -198,60 +198,6 @@ Flags:
TLS CA to verify clients against. If no client
CA is specified, there is no client
verification on server side. (tls.NoClientCert)
- --grpc-advertise-address=GRPC-ADVERTISE-ADDRESS
- Deprecated(gossip will be removed from v0.5.0):
- Explicit (external) host:port address to
- advertise for gRPC StoreAPI in gossip cluster.
- If empty, 'grpc-address' will be used.
- --cluster.address="0.0.0.0:10900"
- Deprecated(gossip will be removed from v0.5.0):
- Listen ip:port address for gossip cluster.
- --cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS
- Deprecated(gossip will be removed from v0.5.0):
- Explicit (external) ip:port address to
- advertise for gossip in gossip cluster. Used
- internally for membership only.
- --cluster.peers=CLUSTER.PEERS ...
- Deprecated(gossip will be removed from v0.5.0):
- Initial peers to join the cluster. It can be
- either , or . A lookup
- resolution is done only at the startup.
- --cluster.gossip-interval=
- Deprecated(gossip will be removed from v0.5.0):
- Interval between sending gossip messages. By
- lowering this value (more frequent) gossip
- messages are propagated across the cluster more
- quickly at the expense of increased bandwidth.
- Default is used from a specified network-type.
- --cluster.pushpull-interval=
- Deprecated(gossip will be removed from v0.5.0):
- Interval for gossip state syncs. Setting this
- interval lower (more frequent) will increase
- convergence speeds across larger clusters at
- the expense of increased bandwidth usage.
- Default is used from a specified network-type.
- --cluster.refresh-interval=1m
- Deprecated(gossip will be removed from v0.5.0):
- Interval for membership to refresh
- cluster.peers state, 0 disables refresh.
- --cluster.secret-key=CLUSTER.SECRET-KEY
- Deprecated(gossip will be removed from v0.5.0):
- Initial secret key to encrypt cluster gossip.
- Can be one of AES-128, AES-192, or AES-256 in
- hexadecimal format.
- --cluster.network-type=lan
- Deprecated(gossip will be removed from v0.5.0):
- Network type with predefined peers
- configurations. Sets of configurations
- accounting the latency differences between
- network types: local, lan, wan.
- --cluster.disable Deprecated(gossip will be removed from v0.5.0):
- If true gossip will be disabled and no cluster
- related server will be started.
- --http-advertise-address=HTTP-ADVERTISE-ADDRESS
- Explicit (external) host:port address to
- advertise for HTTP QueryAPI in gossip cluster.
- If empty, 'http-address' will be used.
--grpc-client-tls-secure Use TLS when talking to the gRPC server
--grpc-client-tls-cert="" TLS Certificates to use to identify this client
to the server
diff --git a/docs/components/rule.md b/docs/components/rule.md
index c2fd76fd48..b9aa3b751a 100644
--- a/docs/components/rule.md
+++ b/docs/components/rule.md
@@ -180,56 +180,6 @@ Flags:
TLS CA to verify clients against. If no client
CA is specified, there is no client
verification on server side. (tls.NoClientCert)
- --grpc-advertise-address=GRPC-ADVERTISE-ADDRESS
- Deprecated(gossip will be removed from v0.5.0):
- Explicit (external) host:port address to
- advertise for gRPC StoreAPI in gossip cluster.
- If empty, 'grpc-address' will be used.
- --cluster.address="0.0.0.0:10900"
- Deprecated(gossip will be removed from v0.5.0):
- Listen ip:port address for gossip cluster.
- --cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS
- Deprecated(gossip will be removed from v0.5.0):
- Explicit (external) ip:port address to
- advertise for gossip in gossip cluster. Used
- internally for membership only.
- --cluster.peers=CLUSTER.PEERS ...
- Deprecated(gossip will be removed from v0.5.0):
- Initial peers to join the cluster. It can be
- either , or . A lookup
- resolution is done only at the startup.
- --cluster.gossip-interval=
- Deprecated(gossip will be removed from v0.5.0):
- Interval between sending gossip messages. By
- lowering this value (more frequent) gossip
- messages are propagated across the cluster more
- quickly at the expense of increased bandwidth.
- Default is used from a specified network-type.
- --cluster.pushpull-interval=
- Deprecated(gossip will be removed from v0.5.0):
- Interval for gossip state syncs. Setting this
- interval lower (more frequent) will increase
- convergence speeds across larger clusters at
- the expense of increased bandwidth usage.
- Default is used from a specified network-type.
- --cluster.refresh-interval=1m
- Deprecated(gossip will be removed from v0.5.0):
- Interval for membership to refresh
- cluster.peers state, 0 disables refresh.
- --cluster.secret-key=CLUSTER.SECRET-KEY
- Deprecated(gossip will be removed from v0.5.0):
- Initial secret key to encrypt cluster gossip.
- Can be one of AES-128, AES-192, or AES-256 in
- hexadecimal format.
- --cluster.network-type=lan
- Deprecated(gossip will be removed from v0.5.0):
- Network type with predefined peers
- configurations. Sets of configurations
- accounting the latency differences between
- network types: local, lan, wan.
- --cluster.disable Deprecated(gossip will be removed from v0.5.0):
- If true gossip will be disabled and no cluster
- related server will be started.
--label=="" ...
Labels to be applied to all generated metrics
(repeated). Similar to external labels for
diff --git a/docs/components/sidecar.md b/docs/components/sidecar.md
index 58ae7d4628..b24ad8d411 100644
--- a/docs/components/sidecar.md
+++ b/docs/components/sidecar.md
@@ -82,56 +82,6 @@ Flags:
TLS CA to verify clients against. If no client
CA is specified, there is no client
verification on server side. (tls.NoClientCert)
- --grpc-advertise-address=GRPC-ADVERTISE-ADDRESS
- Deprecated(gossip will be removed from v0.5.0):
- Explicit (external) host:port address to
- advertise for gRPC StoreAPI in gossip cluster.
- If empty, 'grpc-address' will be used.
- --cluster.address="0.0.0.0:10900"
- Deprecated(gossip will be removed from v0.5.0):
- Listen ip:port address for gossip cluster.
- --cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS
- Deprecated(gossip will be removed from v0.5.0):
- Explicit (external) ip:port address to
- advertise for gossip in gossip cluster. Used
- internally for membership only.
- --cluster.peers=CLUSTER.PEERS ...
- Deprecated(gossip will be removed from v0.5.0):
- Initial peers to join the cluster. It can be
- either , or . A lookup
- resolution is done only at the startup.
- --cluster.gossip-interval=
- Deprecated(gossip will be removed from v0.5.0):
- Interval between sending gossip messages. By
- lowering this value (more frequent) gossip
- messages are propagated across the cluster more
- quickly at the expense of increased bandwidth.
- Default is used from a specified network-type.
- --cluster.pushpull-interval=
- Deprecated(gossip will be removed from v0.5.0):
- Interval for gossip state syncs. Setting this
- interval lower (more frequent) will increase
- convergence speeds across larger clusters at
- the expense of increased bandwidth usage.
- Default is used from a specified network-type.
- --cluster.refresh-interval=1m
- Deprecated(gossip will be removed from v0.5.0):
- Interval for membership to refresh
- cluster.peers state, 0 disables refresh.
- --cluster.secret-key=CLUSTER.SECRET-KEY
- Deprecated(gossip will be removed from v0.5.0):
- Initial secret key to encrypt cluster gossip.
- Can be one of AES-128, AES-192, or AES-256 in
- hexadecimal format.
- --cluster.network-type=lan
- Deprecated(gossip will be removed from v0.5.0):
- Network type with predefined peers
- configurations. Sets of configurations
- accounting the latency differences between
- network types: local, lan, wan.
- --cluster.disable Deprecated(gossip will be removed from v0.5.0):
- If true gossip will be disabled and no cluster
- related server will be started.
--prometheus.url=http://localhost:9090
URL at which to reach Prometheus's API. For
better performance use local network.
diff --git a/docs/components/store.md b/docs/components/store.md
index 462b4a4142..e079984cf6 100644
--- a/docs/components/store.md
+++ b/docs/components/store.md
@@ -66,56 +66,6 @@ Flags:
TLS CA to verify clients against. If no client
CA is specified, there is no client
verification on server side. (tls.NoClientCert)
- --grpc-advertise-address=GRPC-ADVERTISE-ADDRESS
- Deprecated(gossip will be removed from v0.5.0):
- Explicit (external) host:port address to
- advertise for gRPC StoreAPI in gossip cluster.
- If empty, 'grpc-address' will be used.
- --cluster.address="0.0.0.0:10900"
- Deprecated(gossip will be removed from v0.5.0):
- Listen ip:port address for gossip cluster.
- --cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS
- Deprecated(gossip will be removed from v0.5.0):
- Explicit (external) ip:port address to
- advertise for gossip in gossip cluster. Used
- internally for membership only.
- --cluster.peers=CLUSTER.PEERS ...
- Deprecated(gossip will be removed from v0.5.0):
- Initial peers to join the cluster. It can be
- either , or . A lookup
- resolution is done only at the startup.
- --cluster.gossip-interval=
- Deprecated(gossip will be removed from v0.5.0):
- Interval between sending gossip messages. By
- lowering this value (more frequent) gossip
- messages are propagated across the cluster more
- quickly at the expense of increased bandwidth.
- Default is used from a specified network-type.
- --cluster.pushpull-interval=
- Deprecated(gossip will be removed from v0.5.0):
- Interval for gossip state syncs. Setting this
- interval lower (more frequent) will increase
- convergence speeds across larger clusters at
- the expense of increased bandwidth usage.
- Default is used from a specified network-type.
- --cluster.refresh-interval=1m
- Deprecated(gossip will be removed from v0.5.0):
- Interval for membership to refresh
- cluster.peers state, 0 disables refresh.
- --cluster.secret-key=CLUSTER.SECRET-KEY
- Deprecated(gossip will be removed from v0.5.0):
- Initial secret key to encrypt cluster gossip.
- Can be one of AES-128, AES-192, or AES-256 in
- hexadecimal format.
- --cluster.network-type=lan
- Deprecated(gossip will be removed from v0.5.0):
- Network type with predefined peers
- configurations. Sets of configurations
- accounting the latency differences between
- network types: local, lan, wan.
- --cluster.disable Deprecated(gossip will be removed from v0.5.0):
- If true gossip will be disabled and no cluster
- related server will be started.
--data-dir="./data" Data directory in which to cache remote blocks.
--index-cache-size=250MB Maximum size of items held in the index cache.
--chunk-pool-size=2GB Maximum size of concurrently allocatable bytes
From 561a6471add639b4b1554ae9eeb7012e4d2eb654 Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Fri, 24 May 2019 18:48:44 +0300
Subject: [PATCH 6/9] Fix tests
---
cmd/thanos/rule.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cmd/thanos/rule.go b/cmd/thanos/rule.go
index 737aad81ff..d5b739d616 100644
--- a/cmd/thanos/rule.go
+++ b/cmd/thanos/rule.go
@@ -139,7 +139,7 @@ func registerRule(m map[string]setupFunc, app *kingpin.Application, name string)
fileSD = file.NewDiscovery(conf, logger)
}
- if fileSD == nil {
+ if fileSD == nil && len(*queries) == 0 {
return errors.Errorf("No --query parameter was given.")
}
@@ -555,7 +555,7 @@ func runRule(
return err
}
- var uploads = true
+ uploads := true
if len(confContentYaml) == 0 {
level.Info(logger).Log("msg", "No supported bucket was configured, uploads will be disabled")
uploads = false
From 70bf2391fd58f54703b7bd92551a294956632809 Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Tue, 28 May 2019 11:28:28 +0300
Subject: [PATCH 7/9] Fixes after review
---
test/e2e/spinup_test.go | 17 ++++-------------
test/e2e/store_gateway_test.go | 2 +-
2 files changed, 5 insertions(+), 14 deletions(-)
diff --git a/test/e2e/spinup_test.go b/test/e2e/spinup_test.go
index ba4482ce29..8782d81204 100644
--- a/test/e2e/spinup_test.go
+++ b/test/e2e/spinup_test.go
@@ -75,7 +75,7 @@ func (c *cmdExec) Start(stdout io.Writer, stderr io.Writer) error {
func (c *cmdExec) Kill() error { return c.Process.Signal(syscall.SIGKILL) }
-func (c *cmdExec) String() string { return fmt.Sprintf("%s %s", c.Path, c.Args[1]) }
+func (c *cmdExec) String() string { return fmt.Sprintf("%s %v", c.Path, c.Args[1:]) }
type cmdScheduleFunc func(workDir string) ([]Exec, error)
@@ -151,16 +151,6 @@ func receiver(i int, config string) cmdScheduleFunc {
}
}
-func querier(i int, replicaLabel string, staticStores ...string) cmdScheduleFunc {
- return func(_ string) ([]Exec, error) {
- args := defaultQuerierFlags(i, replicaLabel)
- for _, s := range staticStores {
- args = append(args, "--store", s)
- }
- return []Exec{newCmdExec(exec.Command("thanos", args...))}, nil
- }
-}
-
func querierWithStoreFlags(i int, replicaLabel string, storesAddresses ...string) cmdScheduleFunc {
return func(_ string) ([]Exec, error) {
args := defaultQuerierFlags(i, replicaLabel)
@@ -343,7 +333,6 @@ func (c *sameProcessGRPCServiceExec) Start(stdout io.Writer, stderr io.Writer) e
srvChan <- err
_, _ = c.stderr.Write([]byte(fmt.Sprintf("server failed: %s", err)))
}
-
}()
c.srvChan = srvChan
return nil
@@ -356,6 +345,7 @@ func (c *sameProcessGRPCServiceExec) Wait() error {
}
return err
}
+
func (c *sameProcessGRPCServiceExec) Kill() error {
c.cancel()
c.srv.Stop()
@@ -557,7 +547,8 @@ func defaultQuerierFlags(i int, replicaLabel string) []string {
}
func defaultRulerFlags(i int, dbDir string, ruleDir string) []string {
- return []string{"rule",
+ return []string{
+ "rule",
"--debug.name", fmt.Sprintf("rule-%d", i),
"--label", fmt.Sprintf(`replica="%d"`, i),
"--data-dir", dbDir,
diff --git a/test/e2e/store_gateway_test.go b/test/e2e/store_gateway_test.go
index 094db34f9a..13ff56864b 100644
--- a/test/e2e/store_gateway_test.go
+++ b/test/e2e/store_gateway_test.go
@@ -44,7 +44,7 @@ func TestStoreGatewayQuery(t *testing.T) {
exit, err := newSpinupSuite().
WithPreStartedMinio(s3Config).
Add(storeGateway(1, config)).
- Add(querier(1, "replica", storeGatewayGRPC(1))).
+ Add(querierWithStoreFlags(1, "replica", storeGatewayGRPC(1))).
Exec(t, ctx, "test_store_gateway_query")
if err != nil {
t.Errorf("spinup failed: %v", err)
From 9033ad3c4e3bd11880e3ad53c1f930f133fa5994 Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Tue, 28 May 2019 14:40:43 +0300
Subject: [PATCH 8/9] Fixes after review
---
cmd/thanos/flags.go | 5 ++---
docs/components/query.md | 4 +---
docs/components/rule.md | 4 +---
docs/components/sidecar.md | 4 +---
docs/components/store.md | 4 +---
pkg/query/storeset.go | 14 ++++++--------
pkg/store/prometheus.go | 2 +-
7 files changed, 13 insertions(+), 24 deletions(-)
diff --git a/cmd/thanos/flags.go b/cmd/thanos/flags.go
index 184fbfadd5..a858da2299 100644
--- a/cmd/thanos/flags.go
+++ b/cmd/thanos/flags.go
@@ -16,7 +16,7 @@ func regGRPCFlags(cmd *kingpin.CmdClause) (
grpcTLSSrvKey *string,
grpcTLSSrvClientCA *string,
) {
- grpcBindAddr = cmd.Flag("grpc-address", "Listen ip:port address for gRPC endpoints (StoreAPI). Make sure this address is routable from other components if you use gossip, 'grpc-advertise-address' is empty and you require cross-node connection.").
+ grpcBindAddr = cmd.Flag("grpc-address", "Listen ip:port address for gRPC endpoints (StoreAPI). Make sure this address is routable from other components.").
Default("0.0.0.0:10901").String()
grpcTLSSrvCert = cmd.Flag("grpc-server-tls-cert", "TLS Certificate for gRPC server, leave blank to disable TLS").Default("").String()
@@ -36,7 +36,6 @@ func regCommonServerFlags(cmd *kingpin.CmdClause) (
grpcTLSSrvCert *string,
grpcTLSSrvKey *string,
grpcTLSSrvClientCA *string) {
-
httpBindAddr = regHTTPAddrFlag(cmd)
grpcBindAddr, grpcTLSSrvCert, grpcTLSSrvKey, grpcTLSSrvClientCA = regGRPCFlags(cmd)
@@ -52,7 +51,7 @@ func regHTTPAddrFlag(cmd *kingpin.CmdClause) *string {
}
func modelDuration(flags *kingpin.FlagClause) *model.Duration {
- var value = new(model.Duration)
+ value := new(model.Duration)
flags.SetValue(value)
return value
diff --git a/docs/components/query.md b/docs/components/query.md
index 65d86f04ac..a55f917a19 100644
--- a/docs/components/query.md
+++ b/docs/components/query.md
@@ -187,9 +187,7 @@ Flags:
--grpc-address="0.0.0.0:10901"
Listen ip:port address for gRPC endpoints
(StoreAPI). Make sure this address is routable
- from other components if you use gossip,
- 'grpc-advertise-address' is empty and you
- require cross-node connection.
+ from other components.
--grpc-server-tls-cert="" TLS Certificate for gRPC server, leave blank to
disable TLS
--grpc-server-tls-key="" TLS Key for the gRPC server, leave blank to
diff --git a/docs/components/rule.md b/docs/components/rule.md
index b9aa3b751a..8fca245f43 100644
--- a/docs/components/rule.md
+++ b/docs/components/rule.md
@@ -169,9 +169,7 @@ Flags:
--grpc-address="0.0.0.0:10901"
Listen ip:port address for gRPC endpoints
(StoreAPI). Make sure this address is routable
- from other components if you use gossip,
- 'grpc-advertise-address' is empty and you
- require cross-node connection.
+ from other components.
--grpc-server-tls-cert="" TLS Certificate for gRPC server, leave blank to
disable TLS
--grpc-server-tls-key="" TLS Key for the gRPC server, leave blank to
diff --git a/docs/components/sidecar.md b/docs/components/sidecar.md
index b24ad8d411..4f7dbfc385 100644
--- a/docs/components/sidecar.md
+++ b/docs/components/sidecar.md
@@ -71,9 +71,7 @@ Flags:
--grpc-address="0.0.0.0:10901"
Listen ip:port address for gRPC endpoints
(StoreAPI). Make sure this address is routable
- from other components if you use gossip,
- 'grpc-advertise-address' is empty and you
- require cross-node connection.
+ from other components.
--grpc-server-tls-cert="" TLS Certificate for gRPC server, leave blank to
disable TLS
--grpc-server-tls-key="" TLS Key for the gRPC server, leave blank to
diff --git a/docs/components/store.md b/docs/components/store.md
index e079984cf6..a0585af621 100644
--- a/docs/components/store.md
+++ b/docs/components/store.md
@@ -55,9 +55,7 @@ Flags:
--grpc-address="0.0.0.0:10901"
Listen ip:port address for gRPC endpoints
(StoreAPI). Make sure this address is routable
- from other components if you use gossip,
- 'grpc-advertise-address' is empty and you
- require cross-node connection.
+ from other components.
--grpc-server-tls-cert="" TLS Certificate for gRPC server, leave blank to
disable TLS
--grpc-server-tls-key="" TLS Key for the gRPC server, leave blank to
diff --git a/pkg/query/storeset.go b/pkg/query/storeset.go
index 237dfde55e..8df029b3bb 100644
--- a/pkg/query/storeset.go
+++ b/pkg/query/storeset.go
@@ -94,12 +94,10 @@ type storeSetNodeCollector struct {
externalLabelOccurrences func() map[string]int
}
-var (
- nodeInfoDesc = prometheus.NewDesc(
- "thanos_store_node_info",
- "Number of nodes with the same external labels identified by their hash. If any time-series is larger than 1, external label uniqueness is not true",
- []string{"external_labels"}, nil,
- )
+var nodeInfoDesc = prometheus.NewDesc(
+ "thanos_store_node_info",
+ "Number of nodes with the same external labels identified by their hash. If any time-series is larger than 1, external label uniqueness is not true",
+ []string{"external_labels"}, nil,
)
func (c *storeSetNodeCollector) Describe(ch chan<- *prometheus.Desc) {
@@ -273,7 +271,7 @@ func (s *StoreSet) getHealthyStores(ctx context.Context) map[string]*storeRef {
// Gather healthy stores map concurrently. Build new store if does not exist already.
for _, storeSpec := range s.storeSpecs() {
if _, ok := unique[storeSpec.Addr()]; ok {
- level.Warn(s.logger).Log("msg", "duplicated address in gossip or static store nodes", "address", storeSpec.Addr())
+ level.Warn(s.logger).Log("msg", "duplicated address in store nodes", "address", storeSpec.Addr())
continue
}
unique[storeSpec.Addr()] = struct{}{}
@@ -308,7 +306,7 @@ func (s *StoreSet) getHealthyStores(ctx context.Context) map[string]*storeRef {
}
store = &storeRef{StoreClient: storepb.NewStoreClient(conn), cc: conn, addr: addr, logger: s.logger}
- // Initial info call for all types of stores (gossip + static) to check gRPC StoreAPI.
+ // Initial info call for all types of stores to check gRPC StoreAPI.
resp, err := store.StoreClient.Info(ctx, &storepb.InfoRequest{}, grpc.FailFast(false))
if err != nil {
store.close()
diff --git a/pkg/store/prometheus.go b/pkg/store/prometheus.go
index d79c7a74ed..f46b08a2da 100644
--- a/pkg/store/prometheus.go
+++ b/pkg/store/prometheus.go
@@ -79,7 +79,7 @@ func NewPrometheusStore(
}
// Info returns store information about the Prometheus instance.
-// NOTE(bplotka): MaxTime & MinTime are not accurate nor adjusted dynamically like these included in gossip meta.
+// NOTE(bplotka): MaxTime & MinTime are not accurate nor adjusted dynamically.
// This is fine for now, but might be needed in future.
func (p *PrometheusStore) Info(ctx context.Context, r *storepb.InfoRequest) (*storepb.InfoResponse, error) {
lset := p.externalLabels()
From 0c009de4fc2a01fa9f938a8668fccf2160007f92 Mon Sep 17 00:00:00 2001
From: Povilas Versockas
Date: Tue, 28 May 2019 14:47:19 +0300
Subject: [PATCH 9/9] Remove gossip mention from service-discovery doc
---
docs/service-discovery.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/docs/service-discovery.md b/docs/service-discovery.md
index 80fd1118cb..bbacdb2578 100644
--- a/docs/service-discovery.md
+++ b/docs/service-discovery.md
@@ -8,7 +8,6 @@ slug: /service-discovery.md
# Service Discovery
Service discovery has a vital place in Thanos components. It allows Thanos to discover different set API targets required to perform certain operations.
-This logic is meant to replace Gossip that [is planned to be removed.](/docs/proposals/approved/201809_gossip-removal.md)
Currently places that uses Thanos SD:
* `Thanos Query` needs to know about [StoreAPI](https://github.com/improbable-eng/thanos/blob/d3fb337da94d11c78151504b1fccb1d7e036f394/pkg/store/storepb/rpc.proto#L14) servers in order to query metrics from them.