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.