From c6192cebf462bffcfed88012a7f18836f0499857 Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Sun, 11 Aug 2019 19:06:45 +0530 Subject: [PATCH 01/28] Use `p2p` protocol name over `ipfs` for multiaddr --- api/rest/client/client_test.go | 2 +- api/util.go | 2 +- cmd/ipfs-cluster-ctl/main.go | 2 +- pstoremgr/pstoremgr_test.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/rest/client/client_test.go b/api/rest/client/client_test.go index 6d0ee13a..e39aed42 100644 --- a/api/rest/client/client_test.go +++ b/api/rest/client/client_test.go @@ -62,7 +62,7 @@ func apiMAddr(a *rest.API) ma.Multiaddr { } func peerMAddr(a *rest.API) ma.Multiaddr { - ipfsAddr, _ := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", peer.IDB58Encode(a.Host().ID()))) + ipfsAddr, _ := ma.NewMultiaddr(fmt.Sprintf("/p2p/%s", peer.IDB58Encode(a.Host().ID()))) for _, a := range a.Host().Addrs() { if _, err := a.ValueForProtocol(ma.P_IP4); err == nil { return a.Encapsulate(ipfsAddr) diff --git a/api/util.go b/api/util.go index 9f8a38ae..a044d0f2 100644 --- a/api/util.go +++ b/api/util.go @@ -35,7 +35,7 @@ func StringsToPeers(strs []string) []peer.ID { // peer ID is bad. func MustLibp2pMultiaddrJoin(addr Multiaddr, p peer.ID) Multiaddr { v := addr.Value() - pidAddr, err := ma.NewMultiaddr("/ipfs/" + peer.IDB58Encode(p)) + pidAddr, err := ma.NewMultiaddr("/p2p/" + peer.IDB58Encode(p)) // let this break badly if err != nil { panic("called MustLibp2pMultiaddrJoin with bad peer!") diff --git a/cmd/ipfs-cluster-ctl/main.go b/cmd/ipfs-cluster-ctl/main.go index f49df483..dd400e51 100644 --- a/cmd/ipfs-cluster-ctl/main.go +++ b/cmd/ipfs-cluster-ctl/main.go @@ -58,7 +58,7 @@ responses in a user-readable format. The location of the IPFS Cluster server is assumed to be %s, but can be configured with the --host option. To use the secure libp2p-http API endpoint, use "--host" with the full cluster libp2p listener -address (including the "/ipfs/" part), and --secret (the +address (including the "/p2p/" part), and --secret (the 32-byte cluster secret as it appears in the cluster configuration). For feedback, bug reports or any additional information, visit diff --git a/pstoremgr/pstoremgr_test.go b/pstoremgr/pstoremgr_test.go index 64711745..a6517e87 100644 --- a/pstoremgr/pstoremgr_test.go +++ b/pstoremgr/pstoremgr_test.go @@ -28,7 +28,7 @@ func clean(pm *Manager) { } func testAddr(loc string, pid peer.ID) ma.Multiaddr { - m, _ := ma.NewMultiaddr(loc + "/ipfs/" + peer.IDB58Encode(pid)) + m, _ := ma.NewMultiaddr(loc + "/p2p/" + peer.IDB58Encode(pid)) return m } From f022a70f4c026d8ff820e84271695489fadece5a Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Mon, 12 Aug 2019 10:28:32 +0530 Subject: [PATCH 02/28] Make sure all API errors are in JSON This commit introduces a catchAllHandler(which returns error not found), which will be used if path doesn't match with any other pattern. --- api/rest/restapi.go | 10 ++++++++++ api/rest/restapi_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/api/rest/restapi.go b/api/rest/restapi.go index 780ebe01..63070fbb 100644 --- a/api/rest/restapi.go +++ b/api/rest/restapi.go @@ -263,6 +263,12 @@ func (api *API) addRoutes(router *mux.Router) { ), ) } + router.PathPrefix("/").Handler( + ochttp.WithRouteTag( + http.HandlerFunc(api.catchAllHandler), + "/"+"catchall", + ), + ) api.router = router } @@ -1026,6 +1032,10 @@ func (api *API) recoverHandler(w http.ResponseWriter, r *http.Request) { } } +func (api *API) catchAllHandler(w http.ResponseWriter, r *http.Request) { + api.sendResponse(w, http.StatusNotFound, errors.New("not found"), nil) +} + func (api *API) parsePinPathOrError(w http.ResponseWriter, r *http.Request) *types.PinPath { vars := mux.Vars(r) urlpath := "/" + vars["keyType"] + "/" + strings.TrimSuffix(vars["path"], "/") diff --git a/api/rest/restapi_test.go b/api/rest/restapi_test.go index d281d21b..b4dacf6a 100644 --- a/api/rest/restapi_test.go +++ b/api/rest/restapi_test.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "io/ioutil" + "math/rand" "net/http" "net/http/httputil" "strings" @@ -1038,6 +1039,33 @@ func TestAPIRecoverAllEndpoint(t *testing.T) { testBothEndpoints(t, tf) } +func TestCatchAllHandler(t *testing.T) { + ctx := context.Background() + rest := testAPI(t) + defer rest.Shutdown(ctx) + + tf := func(t *testing.T, url urlF) { + bytes := make([]byte, 10) + for i := 0; i < 10; i++ { + bytes[i] = byte(65 + rand.Intn(25)) //A=65 and Z = 65+25 + } + + var errResp api.Error + makePost(t, rest, url(rest)+"/"+string(bytes), []byte{}, &errResp) + if errResp.Code != 404 { + t.Error("expected error not found") + } + + var errResp1 api.Error + makeGet(t, rest, url(rest)+"/"+string(bytes), &errResp1) + if errResp1.Code != 404 { + t.Error("expected error not found") + } + } + + testBothEndpoints(t, tf) +} + func TestCORS(t *testing.T) { ctx := context.Background() rest := testAPI(t) From 06729def89aa1d053a17996b16838154d128adae Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Tue, 13 Aug 2019 22:55:43 +0530 Subject: [PATCH 03/28] Use router.NotFoundHandler instead --- api/rest/restapi.go | 10 ++++------ api/rest/restapi_test.go | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/api/rest/restapi.go b/api/rest/restapi.go index 63070fbb..2a9e7c7a 100644 --- a/api/rest/restapi.go +++ b/api/rest/restapi.go @@ -263,11 +263,9 @@ func (api *API) addRoutes(router *mux.Router) { ), ) } - router.PathPrefix("/").Handler( - ochttp.WithRouteTag( - http.HandlerFunc(api.catchAllHandler), - "/"+"catchall", - ), + router.NotFoundHandler = ochttp.WithRouteTag( + http.HandlerFunc(api.notFoundHandler), + "/"+"notfound", ) api.router = router } @@ -1032,7 +1030,7 @@ func (api *API) recoverHandler(w http.ResponseWriter, r *http.Request) { } } -func (api *API) catchAllHandler(w http.ResponseWriter, r *http.Request) { +func (api *API) notFoundHandler(w http.ResponseWriter, r *http.Request) { api.sendResponse(w, http.StatusNotFound, errors.New("not found"), nil) } diff --git a/api/rest/restapi_test.go b/api/rest/restapi_test.go index b4dacf6a..3722ac1a 100644 --- a/api/rest/restapi_test.go +++ b/api/rest/restapi_test.go @@ -1039,7 +1039,7 @@ func TestAPIRecoverAllEndpoint(t *testing.T) { testBothEndpoints(t, tf) } -func TestCatchAllHandler(t *testing.T) { +func TestNotFoundHandler(t *testing.T) { ctx := context.Background() rest := testAPI(t) defer rest.Shutdown(ctx) From 08f5f9f62a139ad1b52a1c6a111d5eb192fe8dda Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 14 Aug 2019 10:57:46 +0200 Subject: [PATCH 04/28] Update go-ds-crdt I could not sleep last night and my mind randomly discovered that go-ds-crdt had a small problem which is now partially addressed. --- go.mod | 44 +++++++++++++--------- go.sum | 114 ++++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 110 insertions(+), 48 deletions(-) diff --git a/go.mod b/go.mod index 640cecfc..b2c2520b 100644 --- a/go.mod +++ b/go.mod @@ -4,12 +4,14 @@ require ( contrib.go.opencensus.io/exporter/jaeger v0.1.0 contrib.go.opencensus.io/exporter/prometheus v0.1.0 github.com/blang/semver v3.5.1+incompatible - github.com/btcsuite/btcd v0.0.0-20190629003639-c26ffa870fd8 // indirect + github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a // indirect github.com/dgraph-io/badger v1.6.0 github.com/dustin/go-humanize v1.0.0 github.com/gogo/protobuf v1.2.1 github.com/golang/protobuf v1.3.2 + github.com/google/go-cmp v0.3.1 // indirect github.com/google/uuid v1.1.1 + github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f // indirect github.com/gorilla/mux v1.7.3 github.com/hashicorp/go-hclog v0.9.2 github.com/hashicorp/golang-lru v0.5.3 // indirect @@ -17,11 +19,13 @@ require ( github.com/hashicorp/raft-boltdb v0.0.0-20190605210249-ef2e128ed477 github.com/hsanjuan/ipfs-lite v0.1.4 github.com/imdario/mergo v0.3.7 + github.com/ipfs/go-bitswap v0.1.6 // indirect github.com/ipfs/go-block-format v0.0.2 + github.com/ipfs/go-blockservice v0.1.2 // indirect github.com/ipfs/go-cid v0.0.3 github.com/ipfs/go-datastore v0.0.5 github.com/ipfs/go-ds-badger v0.0.5 - github.com/ipfs/go-ds-crdt v0.1.0 + github.com/ipfs/go-ds-crdt v0.1.1 github.com/ipfs/go-fs-lock v0.0.1 github.com/ipfs/go-ipfs-api v0.0.1 github.com/ipfs/go-ipfs-chunker v0.0.1 @@ -29,20 +33,20 @@ require ( github.com/ipfs/go-ipfs-files v0.0.3 github.com/ipfs/go-ipfs-posinfo v0.0.1 github.com/ipfs/go-ipfs-util v0.0.1 - github.com/ipfs/go-ipld-cbor v0.0.2 + github.com/ipfs/go-ipld-cbor v0.0.3 github.com/ipfs/go-ipld-format v0.0.2 github.com/ipfs/go-log v0.0.1 - github.com/ipfs/go-merkledag v0.1.0 + github.com/ipfs/go-merkledag v0.2.3 github.com/ipfs/go-mfs v0.1.1 github.com/ipfs/go-path v0.0.7 github.com/ipfs/go-unixfs v0.1.0 github.com/kelseyhightower/envconfig v1.4.0 github.com/lanzafame/go-libp2p-ocgorpc v0.1.1 - github.com/libp2p/go-eventbus v0.0.3 // indirect - github.com/libp2p/go-libp2p v0.2.1 + github.com/libp2p/go-eventbus v0.1.0 // indirect + github.com/libp2p/go-libp2p v0.3.0 github.com/libp2p/go-libp2p-connmgr v0.1.0 github.com/libp2p/go-libp2p-consensus v0.0.1 - github.com/libp2p/go-libp2p-core v0.0.9 + github.com/libp2p/go-libp2p-core v0.2.2 github.com/libp2p/go-libp2p-crypto v0.1.0 github.com/libp2p/go-libp2p-gorpc v0.1.0 github.com/libp2p/go-libp2p-gostream v0.1.2 @@ -56,30 +60,34 @@ require ( github.com/libp2p/go-libp2p-protocol v0.1.0 github.com/libp2p/go-libp2p-pubsub v0.1.0 github.com/libp2p/go-libp2p-raft v0.1.2 - github.com/libp2p/go-libp2p-secio v0.1.1 // indirect + github.com/libp2p/go-libp2p-record v0.1.1 // indirect github.com/libp2p/go-ws-transport v0.1.0 + github.com/miekg/dns v1.1.15 // indirect github.com/multiformats/go-multiaddr v0.0.4 github.com/multiformats/go-multiaddr-dns v0.0.3 github.com/multiformats/go-multiaddr-net v0.0.1 github.com/multiformats/go-multicodec v0.1.6 github.com/multiformats/go-multihash v0.0.6 github.com/pkg/errors v0.8.1 - github.com/prometheus/client_golang v1.0.0 - github.com/prometheus/common v0.6.0 // indirect - github.com/prometheus/procfs v0.0.3 // indirect + github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1 // indirect + github.com/prometheus/client_golang v1.1.0 + github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect github.com/rs/cors v1.6.0 + github.com/smartystreets/assertions v1.0.1 // indirect + github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect github.com/ugorji/go/codec v1.1.7 github.com/urfave/cli v1.20.0 github.com/zenground0/go-dot v0.0.0-20180912213407-94a425d4984e go.opencensus.io v0.22.0 golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect - golang.org/x/exp v0.0.0-20190718202018-cfdd5522f6f6 // indirect - golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9 // indirect - golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 // indirect - golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e // indirect + golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 // indirect + golang.org/x/image v0.0.0-20190802002840-cff245a6509b // indirect + golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 // indirect + golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // indirect + golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 // indirect gonum.org/v1/gonum v0.0.0-20190704103327-70ddf0df3d53 gonum.org/v1/plot v0.0.0-20190615073203-9aa86143727f - google.golang.org/api v0.7.0 // indirect - google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610 // indirect - google.golang.org/grpc v1.22.1 // indirect + google.golang.org/api v0.8.0 // indirect + google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 // indirect + google.golang.org/grpc v1.23.0 // indirect ) diff --git a/go.sum b/go.sum index a006a056..d4f50713 100644 --- a/go.sum +++ b/go.sum @@ -34,6 +34,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLM github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= @@ -43,8 +45,8 @@ github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dm github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c h1:aEbSeNALREWXk0G7UdNhR3ayBV7tZ4M2PNmnrCAph6Q= github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.0.0-20190629003639-c26ffa870fd8 h1:mOg8/RgDSHTQ1R0IR+LMDuW4TDShPv+JzYHuR4GLoNA= -github.com/btcsuite/btcd v0.0.0-20190629003639-c26ffa870fd8/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a h1:We35J+0yvVFrEXbtViYUW8H/wNOhqjIF3PsrW4yYmGw= +github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -124,15 +126,21 @@ 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-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4= github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk= +github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= @@ -185,6 +193,8 @@ github.com/ipfs/go-bitswap v0.1.3 h1:jAl9Z/TYObpGeGATUemnOZ7RYb0F/kzNVlhcYZesz+0 github.com/ipfs/go-bitswap v0.1.3/go.mod h1:YEQlFy0kkxops5Vy+OxWdRSEZIoS7I7KDIwoa5Chkps= github.com/ipfs/go-bitswap v0.1.5 h1:pgajlrTCFbbPgYJ234M1pssneLuIsVuxtfpx1I4cz3Y= github.com/ipfs/go-bitswap v0.1.5/go.mod h1:TOWoxllhccevbWFUR2N7B1MTSVVge1s6XSMiCSA4MzM= +github.com/ipfs/go-bitswap v0.1.6 h1:3jj6/69bsqAFmNViEXU8MWUDE8iE1mrqVPaKaIChu7k= +github.com/ipfs/go-bitswap v0.1.6/go.mod h1:oRNdV7SkA9glUUMHd6O2ztSwimBDLFdIF0fYIuDEzVo= github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= github.com/ipfs/go-block-format v0.0.2 h1:qPDvcP19izTjU8rgo6p7gTXZlkMkF5bz5G3fqIsSCPE= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= @@ -194,6 +204,8 @@ github.com/ipfs/go-blockservice v0.1.0 h1:dh2i7xjMbCtf0ZSMyQAF2qpV/pEEmM7yVpQ00+ github.com/ipfs/go-blockservice v0.1.0/go.mod h1:hzmMScl1kXHg3M2BjTymbVPjv627N7sYcvYaKbop39M= github.com/ipfs/go-blockservice v0.1.1 h1:HHIvLuOhW0DQSrVserYcZYUl++nJPEzqZP+spRMaVzw= github.com/ipfs/go-blockservice v0.1.1/go.mod h1:t+411r7psEUhLueM8C7aPA7cxCclv4O3VsUVxt9kz2I= +github.com/ipfs/go-blockservice v0.1.2 h1:fqFeeu1EG0lGVrqUo+BVJv7LZV31I4ZsyNthCOMAJRc= +github.com/ipfs/go-blockservice v0.1.2/go.mod h1:t+411r7psEUhLueM8C7aPA7cxCclv4O3VsUVxt9kz2I= github.com/ipfs/go-cid v0.0.1 h1:GBjWPktLnNyX0JiQCNFpUuUSoMw5KMyqrsejHYlILBE= github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.2 h1:tuuKaZPU1M6HcejsO3AcYWW8sZ8MTvyxfc4uqB4eFE8= @@ -212,8 +224,8 @@ github.com/ipfs/go-ds-badger v0.0.2 h1:7ToQt7QByBhOTuZF2USMv+PGlMcBC7FW7FdgQ4FCs github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8= github.com/ipfs/go-ds-badger v0.0.5 h1:dxKuqw5T1Jm8OuV+lchA76H9QZFyPKZeLuT6bN42hJQ= github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s= -github.com/ipfs/go-ds-crdt v0.1.0 h1:mzpcTdrPj7bCfazIccZuP5FeQtvBiKEj9I/mp0bYmVw= -github.com/ipfs/go-ds-crdt v0.1.0/go.mod h1:SaXm2oxzu+ouZ6HZ7e1Ss1O1wz/T+wGhcX4i922J95I= +github.com/ipfs/go-ds-crdt v0.1.1 h1:90rY3kpr+dCY30gyRVFKlNrw7zaYHgM3wFp7fflXZTg= +github.com/ipfs/go-ds-crdt v0.1.1/go.mod h1:SaXm2oxzu+ouZ6HZ7e1Ss1O1wz/T+wGhcX4i922J95I= github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= github.com/ipfs/go-fs-lock v0.0.1 h1:XHX8uW4jQBYWHj59XXcjg7BHlHxV9ZOYs6Y43yb7/l0= github.com/ipfs/go-fs-lock v0.0.1/go.mod h1:DNBekbboPKcxs1aukPSaOtFA3QfSdi5C855v0i9XJ8Y= @@ -254,6 +266,8 @@ github.com/ipfs/go-ipfs-util v0.0.1 h1:Wz9bL2wB2YBJqggkA4dD7oSmqB4cAnpNbGrlHJulv github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= github.com/ipfs/go-ipld-cbor v0.0.2 h1:amzFztBQQQ69UA5+f7JRfoXF/z2l//MGfEDHVkS20+s= github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= +github.com/ipfs/go-ipld-cbor v0.0.3 h1:ENsxvybwkmke7Z/QJOmeJfoguj6GH3Y0YOaGrfy9Q0I= +github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= github.com/ipfs/go-ipld-format v0.0.1 h1:HCu4eB/Gh+KD/Q0M8u888RFkorTWNIL3da4oc5dwc80= github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= github.com/ipfs/go-ipld-format v0.0.2 h1:OVAGlyYT6JPZ0pEfGntFPS40lfrDmaDbQwNHEY2G9Zs= @@ -264,6 +278,8 @@ github.com/ipfs/go-merkledag v0.0.6 h1:rYZc0yzhO7y1cKi3Rw425a2HhEJDdLvNOWsqtmO3P github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto= github.com/ipfs/go-merkledag v0.1.0 h1:CAEXjRFEDPvealQj3TgEjV1IJckwjvmxAqtq5QSXJrg= github.com/ipfs/go-merkledag v0.1.0/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= +github.com/ipfs/go-merkledag v0.2.3 h1:aMdkK9G1hEeNvn3VXfiEMLY0iJnbiQQUHnM0HFJREsE= +github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= github.com/ipfs/go-mfs v0.1.1 h1:tjYEWFIl0W6vRFuM/EnySHaaYzPmDcQWwTjtYWMGQ1A= @@ -296,8 +312,10 @@ github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsj github.com/jbenet/goprocess v0.1.3 h1:YKyIEECS/XvcfHtBzxtjBBbWK+MbvA6dG8ASiqwvr10= github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= 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= @@ -306,6 +324,7 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5 h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -336,8 +355,8 @@ github.com/libp2p/go-conn-security-multistream v0.0.2/go.mod h1:nc9vud7inQ+d6SO0 github.com/libp2p/go-conn-security-multistream v0.1.0 h1:aqGmto+ttL/uJgX0JtQI0tD21CIEy5eYd1Hlp0juHY0= github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= github.com/libp2p/go-eventbus v0.0.2/go.mod h1:Hr/yGlwxA/stuLnpMiu82lpNKpvRy3EaJxPu40XYOwk= -github.com/libp2p/go-eventbus v0.0.3 h1:4sB0NrwnWr6qGeq2RWUp/JG1wNajf6gyILInId72hrw= -github.com/libp2p/go-eventbus v0.0.3/go.mod h1:Hr/yGlwxA/stuLnpMiu82lpNKpvRy3EaJxPu40XYOwk= +github.com/libp2p/go-eventbus v0.1.0 h1:mlawomSAjjkk97QnYiEmHsLu7E136+2oCWSHRUvMfzQ= +github.com/libp2p/go-eventbus v0.1.0/go.mod h1:vROgu5cs5T7cv7POWlWxBaVLxfSegC5UGQf8A2eEmx4= github.com/libp2p/go-flow-metrics v0.0.1 h1:0gxuFd2GuK7IIP5pKljLwps6TvcuYgvG7Atqi3INF5s= github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= github.com/libp2p/go-libp2p v0.0.30 h1:mwCWAusLhRGUzZ/VaCatsrEQTsuWExmXqVcvGBV72EQ= @@ -347,8 +366,8 @@ github.com/libp2p/go-libp2p v0.1.1 h1:52sB0TJuDk2nYMcMfHOKaPoaayDZjaYVCq6Vk1ejUT github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8= github.com/libp2p/go-libp2p v0.2.0 h1:hYJgMZYdcwHzDHKb/nLePrtuSP3LqkGIFOQ2aIbKOCM= github.com/libp2p/go-libp2p v0.2.0/go.mod h1:5nXHmf4Hs+NmkaMsmWcFJgUHTbYNpCfxr20lwus0p1c= -github.com/libp2p/go-libp2p v0.2.1 h1:Z6po5cdEj+SvSppsPxeZIlKVVl0REA915fEa4YlcBNM= -github.com/libp2p/go-libp2p v0.2.1/go.mod h1:HZbtEOrgZN4F1fGZVvkV+930Wx3DkqlpBlO8dIoZWds= +github.com/libp2p/go-libp2p v0.3.0 h1:XhYEJKmIdi4U4Zbie/ym9k6lqgg3PHM2stGS/cOUDWk= +github.com/libp2p/go-libp2p v0.3.0/go.mod h1:J7DPB1+zB5VLc8v/kKSD8+u2cbyIGI0Dh/Pf3Wprt+0= github.com/libp2p/go-libp2p-autonat v0.0.6 h1:OCStANLLpeyQeWFUuqZJ7aS9+Bx0/uoVb1PtLA9fGTQ= github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE= github.com/libp2p/go-libp2p-autonat v0.1.0 h1:aCWAu43Ri4nU0ZPO7NyLzUvvfqd0nE3dX0R/ZGYVgOU= @@ -363,6 +382,8 @@ github.com/libp2p/go-libp2p-circuit v0.0.9 h1:tjdgP9hv8+Pa/xsprBpEFngq4t8aLvjfib github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU= github.com/libp2p/go-libp2p-circuit v0.1.0 h1:eniLL3Y9aq/sryfyV1IAHj5rlvuyj3b7iz8tSiZpdhY= github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8= +github.com/libp2p/go-libp2p-circuit v0.1.1 h1:eopfG9fAg6rEHWQO1TSrLosXDgYbbbu/RTva/tBANus= +github.com/libp2p/go-libp2p-circuit v0.1.1/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8= github.com/libp2p/go-libp2p-connmgr v0.1.0 h1:vp0t0F0EuT3rrlTtnMnIyyzCnly7nIlRoEbhJpgp0qU= github.com/libp2p/go-libp2p-connmgr v0.1.0/go.mod h1:wZxh8veAmU5qdrfJ0ZBLcU8oJe9L82ciVP/fl1VHjXk= github.com/libp2p/go-libp2p-consensus v0.0.1 h1:jcVbHRZLwTXU9iT/mPi+Lx4/OrIzq3bU1TbZNhYFCV8= @@ -374,8 +395,9 @@ github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvx github.com/libp2p/go-libp2p-core v0.0.4/go.mod h1:jyuCQP356gzfCFtRKyvAbNkyeuxb7OlyhWZ3nls5d2I= github.com/libp2p/go-libp2p-core v0.0.6 h1:SsYhfWJ47vLP1Rd9/0hqEm/W/PlFbC/3YLZyLCcvo1w= github.com/libp2p/go-libp2p-core v0.0.6/go.mod h1:0d9xmaYAVY5qmbp/fcgxHT3ZJsLjYeYPMJAUKpaCHrE= -github.com/libp2p/go-libp2p-core v0.0.9 h1:Dt0Glhajkwj1zMYRoY0nbVBI7pyRYNLDaKCwss2Jd4I= -github.com/libp2p/go-libp2p-core v0.0.9/go.mod h1:0d9xmaYAVY5qmbp/fcgxHT3ZJsLjYeYPMJAUKpaCHrE= +github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= +github.com/libp2p/go-libp2p-core v0.2.2 h1:Sv1ggdoMx9c7v7FOFkR7agraHCnAgqYsXrU1ARSRUMs= +github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0= github.com/libp2p/go-libp2p-crypto v0.0.1 h1:JNQd8CmoGTohO/akqrH16ewsqZpci2CbgYH/LmYl8gw= github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= github.com/libp2p/go-libp2p-crypto v0.0.2 h1:TTdJ4y6Uoa6NxQcuEaVkQfFRcQeCE2ReDk8Ok4I0Fyw= @@ -446,8 +468,6 @@ github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4T github.com/libp2p/go-libp2p-peerstore v0.1.0 h1:MKh7pRNPHSh1fLPj8u/M/s/napdmeNpoi9BRy9lPN0E= github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY= github.com/libp2p/go-libp2p-peerstore v0.1.1/go.mod h1:ojEWnwG7JpJLkJ9REWYXQslyu9ZLrPWPEcCdiZzEbSM= -github.com/libp2p/go-libp2p-peerstore v0.1.2 h1:MamqRA9OU9U/hbpeiowG3q3QNrWI+omKX8n9erT6aeE= -github.com/libp2p/go-libp2p-peerstore v0.1.2/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI= github.com/libp2p/go-libp2p-peerstore v0.1.3 h1:wMgajt1uM2tMiqf4M+4qWKVyyFc8SfA+84VV9glZq1M= github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI= github.com/libp2p/go-libp2p-pnet v0.1.0 h1:kRUES28dktfnHNIRW4Ro78F7rKBHBiw5MJpl0ikrLIA= @@ -464,6 +484,8 @@ github.com/libp2p/go-libp2p-record v0.0.1 h1:zN7AS3X46qmwsw5JLxdDuI43cH5UYwovKxH github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= github.com/libp2p/go-libp2p-record v0.1.0 h1:wHwBGbFzymoIl69BpgwIu0O6ta3TXGcMPvHUAcodzRc= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= +github.com/libp2p/go-libp2p-record v0.1.1 h1:ZJK2bHXYUBqObHX+rHLSNrM3M8fmJUlUHrodDPPATmY= +github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= github.com/libp2p/go-libp2p-routing v0.0.1 h1:hPMAWktf9rYi3ME4MG48qE7dq1ofJxiQbfdvpNntjhc= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0 h1:hFnj3WR3E2tOcKaGpyzfP4gvFZ3t8JkQmbapN0Ct+oU= @@ -472,20 +494,22 @@ github.com/libp2p/go-libp2p-secio v0.0.3 h1:h3fPeDrej7bvvARnC2oSjAfcLZOaS4REZKgW github.com/libp2p/go-libp2p-secio v0.0.3/go.mod h1:hS7HQ00MgLhRO/Wyu1bTX6ctJKhVpm+j2/S2A5UqYb0= github.com/libp2p/go-libp2p-secio v0.1.0 h1:NNP5KLxuP97sE5Bu3iuwOWyT/dKEGMN5zSLMWdB7GTQ= github.com/libp2p/go-libp2p-secio v0.1.0/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8= -github.com/libp2p/go-libp2p-secio v0.1.1 h1:NQ9nTGmyf7/pgiVdThRrZylPsOQObVMyhT1XG9sEyOQ= -github.com/libp2p/go-libp2p-secio v0.1.1/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8= +github.com/libp2p/go-libp2p-secio v0.2.0 h1:ywzZBsWEEz2KNTn5RtzauEDq5RFEefPsttXYwAWqHng= +github.com/libp2p/go-libp2p-secio v0.2.0/go.mod h1:2JdZepB8J5V9mBp79BmwsaPQhRPNN2NrnB2lKQcdy6g= github.com/libp2p/go-libp2p-swarm v0.0.6 h1:gE0P/v2h+KEXtAi9YTw2UBOSODJ4m9VuuJ+ktc2LVUo= github.com/libp2p/go-libp2p-swarm v0.0.6/go.mod h1:s5GZvzg9xXe8sbeESuFpjt8CJPTCa8mhEusweJqyFy8= github.com/libp2p/go-libp2p-swarm v0.1.0 h1:HrFk2p0awrGEgch9JXK/qp/hfjqQfgNxpLWnCiWPg5s= github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4= -github.com/libp2p/go-libp2p-swarm v0.1.1 h1:QW7pjyTRIxt9yyBid52YmMRGtkFXUE/rbEVWsQ0ae+w= -github.com/libp2p/go-libp2p-swarm v0.1.1/go.mod h1:4NVJaLwq/dr5kEq79Jo6pMin7ZFwLx73ln1FTefR91Q= +github.com/libp2p/go-libp2p-swarm v0.2.0 h1:gUqj9WYFC9mQ6khEtO5EjfaAtevwBMxsXRARbi6lAiI= +github.com/libp2p/go-libp2p-swarm v0.2.0/go.mod h1:x07b4zkMFo2EvgPV2bMTlNmdQc8i+74Jjio7xGvsTgU= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2 h1:p9ySW7MFvGGs83hAAe0MPGnjy/tPjl5KyxpMkojdZ+g= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.4 h1:Qev57UR47GcLPXWjrunv5aLIQGO4n9mhI/8/EIrEEFc= github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.1.0 h1:WaFRj/t3HdMZGNZqnU2pS7pDRBmMeoDx7/HDNpeyT9U= +github.com/libp2p/go-libp2p-testing v0.1.0/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk= github.com/libp2p/go-libp2p-transport v0.0.5 h1:pV6+UlRxyDpASSGD+60vMvdifSCby6JkJDfi+yUMHac= github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A= @@ -518,6 +542,8 @@ github.com/libp2p/go-msgio v0.0.4 h1:agEFehY3zWJFUHK6SEMR7UYmk2z6kC3oeCM7ybLhguA github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-nat v0.0.3 h1:l6fKV+p0Xa354EqQOQP+d8CivdLM4kl5GxC1hSc/UeI= github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI= +github.com/libp2p/go-openssl v0.0.2 h1:9pP2d3Ubaxkv7ZisLjx9BFwgOGnQdQYnfcH29HNY3ls= +github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0= github.com/libp2p/go-reuseport v0.0.1 h1:7PhkfH73VXfPJYKQ6JwS5I/eVcoyYi9IMNGc6FWpFLw= github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= github.com/libp2p/go-reuseport-transport v0.0.2 h1:WglMwyXyBu61CMkjCCtnmqNqnjib0GIEjMiHTwR/KN4= @@ -546,18 +572,24 @@ github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZ github.com/libp2p/go-yamux v1.2.3 h1:xX8A36vpXb59frIzWFdEgptLMsOANMFq2K7fPRlunYI= github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= 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= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.1.12 h1:WMhc1ik4LNkTg8U9l3hI1LvxKmIL+f1+WV/SZtCbDDA= github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI= +github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16 h1:5W7KhL8HVF3XCFOweFD3BNESdnO8ewyYTFT2R+/b8FQ= @@ -569,7 +601,9 @@ github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV 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/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 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/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mr-tron/base58 v1.1.0 h1:Y51FGVJ91WBqCEabAi5OPUz38eAx8DakuAm5svLcsfQ= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= @@ -637,17 +671,23 @@ github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992 h1:bzMe+2coZJYHnhGg github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14 h1:2m16U/rLwVaRdz7ANkHtHTodP3zTP3N451MADg64x5k= github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1 h1:CskT+S6Ay54OwxBGB0R3Rsx4Muto6UnEYTyKJbyRIAI= +github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 h1:D+CiwcpGTW6pL6bv6KI3KbyEyCKyS+1JWS2h8PNDnGA= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f h1:BVwpUVJDADN2ufcGik7W992pyps0wZ888b/y9GXcLTU= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -672,10 +712,15 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykE github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= +github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa h1:E+gaaifzi2xF65PbDmuKI3PhLWY6G5opMLniFq8vmXA= github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a h1:/eS3yfGjQKG+9kayBkj0ip1BGhq6zJ3eaVksphxAaek= github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= @@ -688,6 +733,7 @@ github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tL github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -728,6 +774,7 @@ github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c h1:GGsyl0d github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c/go.mod h1:xxcJeBb7SIUl/Wzkz1eVKJE/CB34YNrqX2TQI6jY9zs= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= +github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/zenground0/go-dot v0.0.0-20180912213407-94a425d4984e h1:GN1PUQ/MNDdtiZZhCAnZ4PwTcslUM8qWVz8q2bLkDeM= github.com/zenground0/go-dot v0.0.0-20180912213407-94a425d4984e/go.mod h1:T00FaxHq4SlnicuZFole4yRAgcjWtqbMcUXBfXAYvaI= @@ -763,13 +810,13 @@ golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2 h1:y102fOLFqhV41b+4GPiJoa0k/x+pJcEi2/HB1Y5T6fU= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190718202018-cfdd5522f6f6 h1:1xlTfQXUyQvvbx4TFsXRgoj9r0YUwcqq9XGX9u9OODU= -golang.org/x/exp v0.0.0-20190718202018-cfdd5522f6f6/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= +golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 h1:estk1glOnSVeJ9tdEZZc5mAMDZk5lNJNyJ6DvrBkTEU= +golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81 h1:00VmoueYNlNz/aHIilyyQz/MHSqGoWJzpFv/HW8xpzI= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9 h1:uc17S921SPw5F2gJo7slQ3aqvr2RwpL7eb3+DZncu3s= -golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -802,8 +849,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -839,8 +886,9 @@ golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qqCB4teTffacDWr7CI+0= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -851,6 +899,7 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c h1:vamGzbGri8IKo20MQncCuljcQ5uAO6kaCeawQPVblAI= @@ -861,8 +910,11 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522 h1:bhOzK9QyoD0ogCnFro1m2mz41+Ib0oOhfJnBp5MR4K4= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190704103327-70ddf0df3d53 h1:ey6JgTDZ1Qi8fSrnhR1bvtHfpbi0ngrhpBlMEOEXVYs= gonum.org/v1/gonum v0.0.0-20190704103327-70ddf0df3d53/go.mod h1:03dgh78c4UvU1WksguQ/lvJQXbezKQGJSrwwRq5MraQ= @@ -875,8 +927,8 @@ google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMt google.golang.org/api v0.3.2 h1:iTp+3yyl/KOtxa/d1/JUE0GGSoR6FuW5udver22iwpw= google.golang.org/api v0.3.2/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0 h1:9sdfJOzWlkqPltHAuzT2Cp+yrBeY1KRVYgms8soxMwM= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0 h1:VGGbLNyPF7dvYHhcUGYBBGCRDDK0RRJAI6KCvo0CL+E= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -888,8 +940,8 @@ google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb h1:i1Ppqkc3WQXikh8bXiwHqAN5Rv3/qDCcRk0/Otx73BY= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610 h1:Ygq9/SRJX9+dU0WCIICM8RkWvDw03lvB77hrhJnpxfU= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v1.17.0 h1:TRJYBgMclJvGYn2rIMjj+h9KtMt5r1Ij7ODVRIZkwhk= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= @@ -897,14 +949,16 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.22.0 h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw= google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.22.1 h1:/7cs52RnTJmD43s3uxzlq2U7nqVTd/37viQwMrMNlOM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= 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-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 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= +gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From ce2457a7aa51b52d36e1fe588fda2353e6fdea4e Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 14 Aug 2019 13:44:26 +0200 Subject: [PATCH 05/28] Fix: peerstore reading panics on empty lines --- pstoremgr/pstoremgr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pstoremgr/pstoremgr.go b/pstoremgr/pstoremgr.go index ee6dfd82..3090064c 100644 --- a/pstoremgr/pstoremgr.go +++ b/pstoremgr/pstoremgr.go @@ -221,7 +221,7 @@ func (pm *Manager) LoadPeerstore() (addrs []ma.Multiaddr) { scanner := bufio.NewScanner(f) for scanner.Scan() { addrStr := scanner.Text() - if addrStr[0] != '/' { + if len(addrStr) == 0 || addrStr[0] != '/' { // skip anything that is not going to be a multiaddress continue } From 406e8b59540cfc5e5485024be115dc5f3110b4bb Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 14 Aug 2019 13:48:03 +0200 Subject: [PATCH 06/28] Update unixfs and reprovide too --- go.mod | 6 +++++- go.sum | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index b2c2520b..9bf6d493 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ require ( contrib.go.opencensus.io/exporter/prometheus v0.1.0 github.com/blang/semver v3.5.1+incompatible github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a // indirect + github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/dgraph-io/badger v1.6.0 github.com/dustin/go-humanize v1.0.0 github.com/gogo/protobuf v1.2.1 @@ -32,6 +33,7 @@ require ( github.com/ipfs/go-ipfs-ds-help v0.0.1 github.com/ipfs/go-ipfs-files v0.0.3 github.com/ipfs/go-ipfs-posinfo v0.0.1 + github.com/ipfs/go-ipfs-provider v0.2.1 // indirect github.com/ipfs/go-ipfs-util v0.0.1 github.com/ipfs/go-ipld-cbor v0.0.3 github.com/ipfs/go-ipld-format v0.0.2 @@ -39,7 +41,7 @@ require ( github.com/ipfs/go-merkledag v0.2.3 github.com/ipfs/go-mfs v0.1.1 github.com/ipfs/go-path v0.0.7 - github.com/ipfs/go-unixfs v0.1.0 + github.com/ipfs/go-unixfs v0.2.1 github.com/kelseyhightower/envconfig v1.4.0 github.com/lanzafame/go-libp2p-ocgorpc v0.1.1 github.com/libp2p/go-eventbus v0.1.0 // indirect @@ -63,6 +65,8 @@ require ( github.com/libp2p/go-libp2p-record v0.1.1 // indirect github.com/libp2p/go-ws-transport v0.1.0 github.com/miekg/dns v1.1.15 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect github.com/multiformats/go-multiaddr v0.0.4 github.com/multiformats/go-multiaddr-dns v0.0.3 github.com/multiformats/go-multiaddr-net v0.0.1 diff --git a/go.sum b/go.sum index d4f50713..c8f51b93 100644 --- a/go.sum +++ b/go.sum @@ -57,6 +57,8 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY= github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927 h1:SKI1/fuSdodxmNNyVBR8d7X/HuLnRpvvFO0AgyQk764= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= @@ -258,6 +260,8 @@ github.com/ipfs/go-ipfs-pq v0.0.1 h1:zgUotX8dcAB/w/HidJh1zzc1yFq6Vm8J7T2F4itj/RU github.com/ipfs/go-ipfs-pq v0.0.1/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= github.com/ipfs/go-ipfs-provider v0.1.1 h1:nsC6oWr6bDJ4H7pZfZJqAk6oXaHsrqnwhpQIqTdSDic= github.com/ipfs/go-ipfs-provider v0.1.1/go.mod h1:gzVZZXC4zhr2r+MkNR21/+FS54oc7VfTKtDT2mdDxD8= +github.com/ipfs/go-ipfs-provider v0.2.1 h1:NsBiuJ2ghntnKR6Y2kBKT4u91qWxQHPOSiTLjxaemAI= +github.com/ipfs/go-ipfs-provider v0.2.1/go.mod h1:qNfrJ5M2C97eqjxytr4I0OVJOIe1SfPJsY45C72jhBk= github.com/ipfs/go-ipfs-routing v0.0.1 h1:394mZeTLcbM/LDO12PneBYvkZAUA+nRnmC0lAzDXKOY= github.com/ipfs/go-ipfs-routing v0.0.1/go.mod h1:k76lf20iKFxQTjcJokbPM9iBXVXVZhcOwc360N4nuKs= github.com/ipfs/go-ipfs-routing v0.1.0 h1:gAJTT1cEeeLj6/DlLX6t+NxD9fQe2ymTO6qWRDI/HQQ= @@ -278,6 +282,7 @@ github.com/ipfs/go-merkledag v0.0.6 h1:rYZc0yzhO7y1cKi3Rw425a2HhEJDdLvNOWsqtmO3P github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto= github.com/ipfs/go-merkledag v0.1.0 h1:CAEXjRFEDPvealQj3TgEjV1IJckwjvmxAqtq5QSXJrg= github.com/ipfs/go-merkledag v0.1.0/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= +github.com/ipfs/go-merkledag v0.2.0/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= github.com/ipfs/go-merkledag v0.2.3 h1:aMdkK9G1hEeNvn3VXfiEMLY0iJnbiQQUHnM0HFJREsE= github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= @@ -295,6 +300,8 @@ github.com/ipfs/go-todocounter v0.0.1 h1:kITWA5ZcQZfrUnDNkRn04Xzh0YFaDFXsoO2A81E github.com/ipfs/go-todocounter v0.0.1/go.mod h1:l5aErvQc8qKE2r7NDMjmq5UNAvuZy0rC8BHOplkWvZ4= github.com/ipfs/go-unixfs v0.1.0 h1:KkjcfqObdNwUN8heMtt5OdrgrRKYTIWEvpGl1bDYIho= github.com/ipfs/go-unixfs v0.1.0/go.mod h1:lysk5ELhOso8+Fed9U1QTGey2ocsfaZ18h0NCO2Fj9s= +github.com/ipfs/go-unixfs v0.2.1 h1:g51t9ODICFZ3F51FPivm8dE7NzYcdAQNUL9wGP5AYa0= +github.com/ipfs/go-unixfs v0.2.1/go.mod h1:IwAAgul1UQIcNZzKPYZWOCijryFBeCV79cNubPzol+k= github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E= github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0= github.com/jackpal/gateway v1.0.5 h1:qzXWUJfuMdlLMtt0a3Dgt+xkWQiA5itDEITVJtuSwMc= From 6743f92e51b8184fb866d4e9c34e1fe37ae545b9 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 14 Aug 2019 14:09:46 +0200 Subject: [PATCH 07/28] Fix: do not set PinUpdate when cid is Undef It gets set to 'b' and then prints an error when parsing. --- api/types.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/types.go b/api/types.go index 1cc33b8f..ca19d1f5 100644 --- a/api/types.go +++ b/api/types.go @@ -528,7 +528,9 @@ func (po *PinOptions) ToQuery() string { } q.Set(fmt.Sprintf("%s%s", pinOptionsMetaPrefix, k), v) } - q.Set("pin-update", po.PinUpdate.String()) + if po.PinUpdate != cid.Undef { + q.Set("pin-update", po.PinUpdate.String()) + } return q.Encode() } From 5e4c8d9418371d0897fcbff3f8df8fabc99c5929 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 14 Aug 2019 14:10:11 +0200 Subject: [PATCH 08/28] Ctl: increase host-name spacing in status output Allow for slightly longer hostnames --- cmd/ipfs-cluster-ctl/formatters.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/ipfs-cluster-ctl/formatters.go b/cmd/ipfs-cluster-ctl/formatters.go index 8cbaa12e..3bdba73c 100644 --- a/cmd/ipfs-cluster-ctl/formatters.go +++ b/cmd/ipfs-cluster-ctl/formatters.go @@ -140,9 +140,9 @@ func textFormatPrintGPInfo(obj *api.GlobalPinInfo) { for _, k := range peers { v := obj.PeerMap[k] if len(v.PeerName) > 0 { - fmt.Printf(" > %-15s : %s", v.PeerName, strings.ToUpper(v.Status.String())) + fmt.Printf(" > %-20s : %s", v.PeerName, strings.ToUpper(v.Status.String())) } else { - fmt.Printf(" > %-15s : %s", k, strings.ToUpper(v.Status.String())) + fmt.Printf(" > %-20s : %s", k, strings.ToUpper(v.Status.String())) } if v.Error != "" { fmt.Printf(": %s", v.Error) From 62b7054d31c92e6f520c25b5b15083d3f7f734e6 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 14 Aug 2019 14:10:44 +0200 Subject: [PATCH 09/28] Fix: pintrackers: Do not spam the logs when running recover Currently logs every pin we call recover with. We call recover regularly. So it will print all pins. --- pintracker/maptracker/maptracker.go | 3 ++- pintracker/stateless/stateless.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pintracker/maptracker/maptracker.go b/pintracker/maptracker/maptracker.go index 2d39830b..135a76f3 100644 --- a/pintracker/maptracker/maptracker.go +++ b/pintracker/maptracker/maptracker.go @@ -407,14 +407,15 @@ func (mpt *MapPinTracker) Recover(ctx context.Context, c cid.Cid) (*api.PinInfo, ctx, span := trace.StartSpan(mpt.ctx, "tracker/map/Recover") defer span.End() - logger.Infof("Attempting to recover %s", c) pInfo := mpt.optracker.Get(ctx, c) var err error switch pInfo.Status { case api.TrackerStatusPinError: + logger.Infof("Restarting pin operation for %s", c) err = mpt.enqueue(ctx, api.PinCid(c), optracker.OperationPin, mpt.pinCh) case api.TrackerStatusUnpinError: + logger.Infof("Restarting unpin operation for %s", c) err = mpt.enqueue(ctx, api.PinCid(c), optracker.OperationUnpin, mpt.unpinCh) } return mpt.optracker.Get(ctx, c), err diff --git a/pintracker/stateless/stateless.go b/pintracker/stateless/stateless.go index 78c53942..d2f3f89c 100644 --- a/pintracker/stateless/stateless.go +++ b/pintracker/stateless/stateless.go @@ -516,7 +516,6 @@ func (spt *Tracker) Recover(ctx context.Context, c cid.Cid) (*api.PinInfo, error ctx, span := trace.StartSpan(ctx, "tracker/stateless/Recover") defer span.End() - logger.Infof("Attempting to recover %s", c) pInfo, ok := spt.optracker.GetExists(ctx, c) if !ok { return spt.Status(ctx, c), nil @@ -525,8 +524,10 @@ func (spt *Tracker) Recover(ctx context.Context, c cid.Cid) (*api.PinInfo, error var err error switch pInfo.Status { case api.TrackerStatusPinError: + logger.Infof("Restarting pin operation for %s", c) err = spt.enqueue(ctx, api.PinCid(c), optracker.OperationPin) case api.TrackerStatusUnpinError: + logger.Infof("Restarting unpin operation for %s", c) err = spt.enqueue(ctx, api.PinCid(c), optracker.OperationUnpin) } if err != nil { From edd5e33a1bbd0824fbe240a604cc26a6e9e7aac7 Mon Sep 17 00:00:00 2001 From: Kishan Sagathiya Date: Wed, 14 Aug 2019 19:49:15 +0530 Subject: [PATCH 10/28] Update api/rest/restapi.go --- api/rest/restapi.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/rest/restapi.go b/api/rest/restapi.go index 2a9e7c7a..9b8489df 100644 --- a/api/rest/restapi.go +++ b/api/rest/restapi.go @@ -265,7 +265,7 @@ func (api *API) addRoutes(router *mux.Router) { } router.NotFoundHandler = ochttp.WithRouteTag( http.HandlerFunc(api.notFoundHandler), - "/"+"notfound", + "/notfound", ) api.router = router } From 6656b80a006f238b435b5c9022fe3c5f693f4e99 Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Thu, 15 Aug 2019 16:49:26 +0530 Subject: [PATCH 11/28] Some more occurences of /ipfs and use SwapToP2pMultiaddrs (very helpful since ipfs still send addresses with `/ipfs` tag) --- api/rest/client/client.go | 2 +- api/rest/client/client_test.go | 2 +- api/rest/restapi.go | 2 +- api/types_test.go | 2 +- api/util.go | 2 +- cluster.go | 2 +- cmd/ipfs-cluster-ctl/main.go | 2 ++ cmd/ipfs-cluster-service/daemon.go | 2 ++ cmd/ipfs-cluster-service/main.go | 2 +- consensus/raft/consensus.go | 2 +- peer_manager_test.go | 2 +- pstoremgr/pstoremgr.go | 2 +- sharness/t0021-service-init.sh | 4 ++-- test/rpc_api_mock.go | 2 +- 14 files changed, 17 insertions(+), 13 deletions(-) diff --git a/api/rest/client/client.go b/api/rest/client/client.go index dff262c9..d9585bda 100644 --- a/api/rest/client/client.go +++ b/api/rest/client/client.go @@ -349,7 +349,7 @@ func IsPeerAddress(addr ma.Multiaddr) bool { if addr == nil { return false } - pid, err := addr.ValueForProtocol(ma.P_IPFS) + pid, err := addr.ValueForProtocol(ma.P_P2P) dnsaddr, err2 := addr.ValueForProtocol(madns.DnsaddrProtocol.Code) return (pid != "" && err == nil) || (dnsaddr != "" && err2 == nil) } diff --git a/api/rest/client/client_test.go b/api/rest/client/client_test.go index e39aed42..015f3f7a 100644 --- a/api/rest/client/client_test.go +++ b/api/rest/client/client_test.go @@ -228,7 +228,7 @@ func TestDNSMultiaddress(t *testing.T) { } func TestPeerAddress(t *testing.T) { - peerAddr, _ := ma.NewMultiaddr("/dns4/localhost/tcp/1234/ipfs/QmP7R7gWEnruNePxmCa9GBa4VmUNexLVnb1v47R8Gyo3LP") + peerAddr, _ := ma.NewMultiaddr("/dns4/localhost/tcp/1234/p2p/QmP7R7gWEnruNePxmCa9GBa4VmUNexLVnb1v47R8Gyo3LP") cfg := &Config{ APIAddr: peerAddr, Host: "localhost", diff --git a/api/rest/restapi.go b/api/rest/restapi.go index 780ebe01..bcf87b2f 100644 --- a/api/rest/restapi.go +++ b/api/rest/restapi.go @@ -481,7 +481,7 @@ func (api *API) runLibp2pServer(ctx context.Context) { listenMsg := "" for _, a := range api.host.Addrs() { - listenMsg += fmt.Sprintf(" %s/ipfs/%s\n", a, api.host.ID().Pretty()) + listenMsg += fmt.Sprintf(" %s/p2p/%s\n", a, api.host.ID().Pretty()) } logger.Infof("REST API (libp2p-http): ENABLED. Listening on:\n%s\n", listenMsg) diff --git a/api/types_test.go b/api/types_test.go index a6fbcad3..184fe386 100644 --- a/api/types_test.go +++ b/api/types_test.go @@ -18,7 +18,7 @@ import ( var testTime = time.Date(2017, 12, 31, 15, 45, 50, 0, time.UTC) var testMAddr, _ = ma.NewMultiaddr("/ip4/1.2.3.4") var testMAddr2, _ = ma.NewMultiaddr("/dns4/a.b.c.d") -var testMAddr3, _ = ma.NewMultiaddr("/ip4/127.0.0.1/tcp/8081/ws/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd") +var testMAddr3, _ = ma.NewMultiaddr("/ip4/127.0.0.1/tcp/8081/ws/p2p/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd") var testCid1, _ = cid.Decode("QmP63DkAFEnDYNjDYBpyNDfttu1fvUw99x1brscPzpqmmq") var testCid2, _ = cid.Decode("QmYCLpFCj9Av8NFjkQogvtXspnTDFWaizLpVFEijHTH4eV") var testCid3, _ = cid.Decode("QmZmdA3UZKuHuy9FrWsxJ82q21nbEh97NUnxTzF5EHxZia") diff --git a/api/util.go b/api/util.go index a044d0f2..1ad23c2f 100644 --- a/api/util.go +++ b/api/util.go @@ -31,7 +31,7 @@ func StringsToPeers(strs []string) []peer.ID { } // MustLibp2pMultiaddrJoin takes a LibP2P multiaddress and a peer ID and -// encapsulates a new /ipfs/ address. It will panic if the given +// encapsulates a new /p2p/ address. It will panic if the given // peer ID is bad. func MustLibp2pMultiaddrJoin(addr Multiaddr, p peer.ID) Multiaddr { v := addr.Value() diff --git a/cluster.go b/cluster.go index 2e6f875b..818ab732 100644 --- a/cluster.go +++ b/cluster.go @@ -120,7 +120,7 @@ func NewCluster( listenAddrs := "" for _, addr := range host.Addrs() { - listenAddrs += fmt.Sprintf(" %s/ipfs/%s\n", addr, host.ID().Pretty()) + listenAddrs += fmt.Sprintf(" %s/p2p/%s\n", addr, host.ID().Pretty()) } logger.Infof("IPFS Cluster v%s listening on:\n%s\n", version.Version, listenAddrs) diff --git a/cmd/ipfs-cluster-ctl/main.go b/cmd/ipfs-cluster-ctl/main.go index dd400e51..a07c93e3 100644 --- a/cmd/ipfs-cluster-ctl/main.go +++ b/cmd/ipfs-cluster-ctl/main.go @@ -88,6 +88,8 @@ func checkErr(doing string, err error) { func main() { ctx := context.Background() + ma.SwapToP2pMultiaddrs() + app := cli.NewApp() app.Name = programName app.Usage = "CLI for IPFS Cluster" diff --git a/cmd/ipfs-cluster-service/daemon.go b/cmd/ipfs-cluster-service/daemon.go index 4e9e9d24..71841d93 100644 --- a/cmd/ipfs-cluster-service/daemon.go +++ b/cmd/ipfs-cluster-service/daemon.go @@ -52,6 +52,8 @@ func daemon(c *cli.Context) error { logger.Info("Initializing. For verbose output run with \"-l debug\". Please wait...") + ma.SwapToP2pMultiaddrs() + ctx, cancel := context.WithCancel(context.Background()) bootstraps := parseBootstraps(c.StringSlice("bootstrap")) diff --git a/cmd/ipfs-cluster-service/main.go b/cmd/ipfs-cluster-service/main.go index f4fd03eb..34b78f58 100644 --- a/cmd/ipfs-cluster-service/main.go +++ b/cmd/ipfs-cluster-service/main.go @@ -95,7 +95,7 @@ $ ipfs-cluster-service daemon Launch a peer and join existing cluster: -$ ipfs-cluster-service daemon --bootstrap /ip4/192.168.1.2/tcp/9096/ipfs/QmPSoSaPXpyunaBwHs1rZBKYSqRV4bLRk32VGYLuvdrypL +$ ipfs-cluster-service daemon --bootstrap /ip4/192.168.1.2/tcp/9096/p2p/QmPSoSaPXpyunaBwHs1rZBKYSqRV4bLRk32VGYLuvdrypL `, programName, programName, diff --git a/consensus/raft/consensus.go b/consensus/raft/consensus.go index 22258682..0ba0d97b 100644 --- a/consensus/raft/consensus.go +++ b/consensus/raft/consensus.go @@ -542,7 +542,7 @@ func (cc *Consensus) Peers(ctx context.Context) ([]peer.ID, error) { } func parsePIDFromMultiaddr(addr ma.Multiaddr) string { - pidstr, err := addr.ValueForProtocol(ma.P_IPFS) + pidstr, err := addr.ValueForProtocol(ma.P_P2P) if err != nil { panic("peer badly encoded") } diff --git a/peer_manager_test.go b/peer_manager_test.go index 23fa6dc1..711df476 100644 --- a/peer_manager_test.go +++ b/peer_manager_test.go @@ -73,7 +73,7 @@ func clusterAddr(c *Cluster) ma.Multiaddr { for _, a := range c.host.Addrs() { if _, err := a.ValueForProtocol(ma.P_IP4); err == nil { p := peer.IDB58Encode(c.id) - cAddr, _ := ma.NewMultiaddr(fmt.Sprintf("%s/ipfs/%s", a, p)) + cAddr, _ := ma.NewMultiaddr(fmt.Sprintf("%s/p2p/%s", a, p)) return cAddr } } diff --git a/pstoremgr/pstoremgr.go b/pstoremgr/pstoremgr.go index ee6dfd82..5a90b247 100644 --- a/pstoremgr/pstoremgr.go +++ b/pstoremgr/pstoremgr.go @@ -57,7 +57,7 @@ func New(ctx context.Context, h host.Host, peerstorePath string) *Manager { } // ImportPeer adds a new peer address to the host's peerstore, optionally -// dialing to it. The address is expected to include the /ipfs/ +// dialing to it. The address is expected to include the /p2p/ // protocol part or to be a /dnsaddr/multiaddress // Peers are added with the given ttl. func (pm *Manager) ImportPeer(addr ma.Multiaddr, connect bool, ttl time.Duration) (peer.ID, error) { diff --git a/sharness/t0021-service-init.sh b/sharness/t0021-service-init.sh index 3421e40c..468aab68 100755 --- a/sharness/t0021-service-init.sh +++ b/sharness/t0021-service-init.sh @@ -5,8 +5,8 @@ test_description="Test init functionality" . lib/test-lib.sh test_expect_success "cluster-service init with --peers succeeds and fills peerstore" ' - PEER1=/ip4/192.168.0.129/tcp/9196/ipfs/12D3KooWRN8KRjpyg9rsW2w7StbBRGper65psTZm68cjud9KAkaW - PEER2=/ip4/192.168.0.129/tcp/9196/ipfs/12D3KooWPwrYNj7VficHw5qYidepMGA85756kYgMdNmRM9A1ZHjN + PEER1=/ip4/192.168.0.129/tcp/9196/p2p/12D3KooWRN8KRjpyg9rsW2w7StbBRGper65psTZm68cjud9KAkaW + PEER2=/ip4/192.168.0.129/tcp/9196/p2p/12D3KooWPwrYNj7VficHw5qYidepMGA85756kYgMdNmRM9A1ZHjN ipfs-cluster-service --config "test-config" init --peers $PEER1,$PEER2 && grep -q $PEER1 test-config/peerstore && grep -q $PEER2 test-config/peerstore diff --git a/test/rpc_api_mock.go b/test/rpc_api_mock.go index 65674dc6..85140f0c 100644 --- a/test/rpc_api_mock.go +++ b/test/rpc_api_mock.go @@ -154,7 +154,7 @@ func (mock *mockCluster) ID(ctx context.Context, in struct{}, out *api.ID) error // DefaultConfigCrypto, // DefaultConfigKeyLength) - addr, _ := api.NewMultiaddr("/ip4/127.0.0.1/tcp/4001/ipfs/" + PeerID1.Pretty()) + addr, _ := api.NewMultiaddr("/ip4/127.0.0.1/tcp/4001/p2p/" + PeerID1.Pretty()) *out = api.ID{ ID: PeerID1, //PublicKey: pubkey, From 6bd897ac47a9cc6f99b579a101b036bd47ce7928 Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Sun, 11 Aug 2019 23:38:54 +0530 Subject: [PATCH 12/28] Added UserAllocations support for `add` --- add_test.go | 47 ++++++++++++++++++++++++++++++++++++ api/add.go | 16 ++++++++++-- cmd/ipfs-cluster-ctl/main.go | 7 ++++++ 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/add_test.go b/add_test.go index 3c9b22a9..905a2692 100644 --- a/add_test.go +++ b/add_test.go @@ -58,6 +58,53 @@ func TestAdd(t *testing.T) { }) } +func TestAddWithUserAllocations(t *testing.T) { + ctx := context.Background() + clusters, mock := createClusters(t) + defer shutdownClusters(t, clusters, mock) + sth := test.NewShardingTestHelper() + defer sth.Clean(t) + + waitForLeaderAndMetrics(t, clusters) + + t.Run("local", func(t *testing.T) { + params := api.DefaultAddParams() + params.ReplicationFactorMin = 2 + params.ReplicationFactorMax = 2 + params.UserAllocations = []peer.ID{clusters[0].id, clusters[1].id} + params.Shard = false + params.Name = "testlocal" + mfr, closer := sth.GetTreeMultiReader(t) + defer closer.Close() + r := multipart.NewReader(mfr, mfr.Boundary()) + ci, err := clusters[0].AddFile(r, params) + if err != nil { + t.Fatal(err) + } + + pinDelay() + + f := func(t *testing.T, c *Cluster) { + if c == clusters[0] || c == clusters[1] { + pin := c.StatusLocal(ctx, ci) + if pin.Error != "" { + t.Error(pin.Error) + } + if pin.Status != api.TrackerStatusPinned { + t.Error("item should be pinned and is", pin.Status) + } + } else { + pin := c.StatusLocal(ctx, ci) + if pin.Status != api.TrackerStatusRemote { + t.Error("expected tracker status remote") + } + } + } + + runF(t, clusters, f) + }) +} + func TestAddPeerDown(t *testing.T) { ctx := context.Background() clusters, mock := createClusters(t) diff --git a/api/add.go b/api/add.go index 79320c29..f23a2512 100644 --- a/api/add.go +++ b/api/add.go @@ -5,6 +5,7 @@ import ( "fmt" "net/url" "strconv" + "strings" cid "github.com/ipfs/go-cid" ) @@ -101,9 +102,14 @@ func AddParamsFromQuery(query url.Values) (*AddParams, error) { params.Layout = layout chunker := query.Get("chunker") - params.Chunker = chunker + if chunker != "" { + params.Chunker = chunker + } + name := query.Get("name") - params.Name = name + if name != "" { + params.Name = name + } hashF := query.Get("hash") if hashF != "" { @@ -146,6 +152,11 @@ func AddParamsFromQuery(query url.Values) (*AddParams, error) { return nil, err } + allocs := query.Get("user-allocations") + if allocs != "" { + params.UserAllocations = StringsToPeers(strings.Split(allocs, ",")) + } + err = parseIntParam(query, "cid-version", ¶ms.CidVersion) if err != nil { return nil, err @@ -178,6 +189,7 @@ func (p *AddParams) ToQueryString() string { query.Set("replication-min", fmt.Sprintf("%d", p.ReplicationFactorMin)) query.Set("replication-max", fmt.Sprintf("%d", p.ReplicationFactorMax)) query.Set("name", p.Name) + query.Set("user-allocations", strings.Join(PeersToStrings(p.UserAllocations), ",")) query.Set("shard", fmt.Sprintf("%t", p.Shard)) query.Set("shard-size", fmt.Sprintf("%d", p.ShardSize)) query.Set("recursive", fmt.Sprintf("%t", p.Recursive)) diff --git a/cmd/ipfs-cluster-ctl/main.go b/cmd/ipfs-cluster-ctl/main.go index 7c0ca109..314ca07a 100644 --- a/cmd/ipfs-cluster-ctl/main.go +++ b/cmd/ipfs-cluster-ctl/main.go @@ -349,6 +349,10 @@ cluster "pin add". Value: defaultAddParams.ReplicationFactorMax, Usage: "Sets the maximum replication factor for pinning this file", }, + cli.StringFlag{ + Name: "allocations, allocs", + Usage: "Optional comma-separated list of peer IDs", + }, cli.BoolFlag{ Name: "nocopy", Usage: "Add the URL using filestore. Implies raw-leaves. (experimental)", @@ -397,6 +401,9 @@ cluster "pin add". p.ReplicationFactorMin = c.Int("replication-min") p.ReplicationFactorMax = c.Int("replication-max") p.Name = name + if c.String("allocations") != "" { + p.UserAllocations = api.StringsToPeers(strings.Split(c.String("allocations"), ",")) + } //p.Shard = shard //p.ShardSize = c.Uint64("shard-size") p.Shard = false From 05a4661145a42a8da4d8430852896ebce28e7910 Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Mon, 19 Aug 2019 16:49:27 +0530 Subject: [PATCH 13/28] Use the updated sharness library --- Makefile | 4 ++-- sharness/lib/test-lib.sh | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 31a17948..723883e3 100644 --- a/Makefile +++ b/Makefile @@ -38,9 +38,9 @@ test_problem: $(sharness): @echo "Downloading sharness" - @curl -L -s -o sharness/lib/sharness.tar.gz http://github.com/chriscool/sharness/archive/8fa4b9b0465d21b7ec114ec4528fa17f5a6eb361.tar.gz + @curl -L -s -o sharness/lib/sharness.tar.gz http://github.com/chriscool/sharness/archive/28c7490f5cdf1e95a8ebebf8b06ed5588db13875.tar.gz @cd sharness/lib; tar -zxf sharness.tar.gz; cd ../.. - @mv sharness/lib/sharness-8fa4b9b0465d21b7ec114ec4528fa17f5a6eb361 sharness/lib/sharness + @mv sharness/lib/sharness-28c7490f5cdf1e95a8ebebf8b06ed5588db13875 sharness/lib/sharness @rm sharness/lib/sharness.tar.gz clean_sharness: diff --git a/sharness/lib/test-lib.sh b/sharness/lib/test-lib.sh index 43270f0d..40618342 100755 --- a/sharness/lib/test-lib.sh +++ b/sharness/lib/test-lib.sh @@ -5,6 +5,7 @@ # We are using sharness (https://github.com/chriscool/sharness) # which was extracted from the Git test framework. +SHARNESS_TEST_SRCDIR="lib/sharness/test" SHARNESS_LIB="lib/sharness/sharness.sh" # Daemons output will be redirected to... From aab5f9bd0b485fc525cc18699c044745f82479bc Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Fri, 23 Aug 2019 22:45:32 +0200 Subject: [PATCH 14/28] Enable p2p addresses in a single place --- api/types.go | 3 +++ cmd/ipfs-cluster-ctl/main.go | 2 -- cmd/ipfs-cluster-service/daemon.go | 2 -- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/api/types.go b/api/types.go index 65a19118..5b42e91d 100644 --- a/api/types.go +++ b/api/types.go @@ -36,6 +36,9 @@ import ( var logger = logging.Logger("apitypes") func init() { + // Use /p2p/ multiaddresses + multiaddr.SwapToP2pMultiaddrs() + // intialize trackerStatusString stringTrackerStatus = make(map[string]TrackerStatus) for k, v := range trackerStatusString { diff --git a/cmd/ipfs-cluster-ctl/main.go b/cmd/ipfs-cluster-ctl/main.go index a07c93e3..dd400e51 100644 --- a/cmd/ipfs-cluster-ctl/main.go +++ b/cmd/ipfs-cluster-ctl/main.go @@ -88,8 +88,6 @@ func checkErr(doing string, err error) { func main() { ctx := context.Background() - ma.SwapToP2pMultiaddrs() - app := cli.NewApp() app.Name = programName app.Usage = "CLI for IPFS Cluster" diff --git a/cmd/ipfs-cluster-service/daemon.go b/cmd/ipfs-cluster-service/daemon.go index 71841d93..4e9e9d24 100644 --- a/cmd/ipfs-cluster-service/daemon.go +++ b/cmd/ipfs-cluster-service/daemon.go @@ -52,8 +52,6 @@ func daemon(c *cli.Context) error { logger.Info("Initializing. For verbose output run with \"-l debug\". Please wait...") - ma.SwapToP2pMultiaddrs() - ctx, cancel := context.WithCancel(context.Background()) bootstraps := parseBootstraps(c.StringSlice("bootstrap")) From 33f111c44dd3566f70fca844942ed70711ba7334 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Sat, 24 Aug 2019 17:09:54 +0200 Subject: [PATCH 15/28] mDNS: attach mDNS inside the Cluster. Allow interval configuration. Setting up mDNS outside the Cluster is dirtier and allows less configuration. This adds MDNSInterval to the cluster config options and allow disabling it when the option is set to 0. --- cluster.go | 21 +++++++++++++ cluster_config.go | 15 ++++++++-- clusterhost.go | 47 ++++-------------------------- cmd/ipfs-cluster-service/daemon.go | 7 ++--- config_test.go | 3 +- peer_manager_test.go | 3 +- pstoremgr/pstoremgr.go | 17 +++++++++++ 7 files changed, 61 insertions(+), 52 deletions(-) diff --git a/cluster.go b/cluster.go index d16218b0..587aef71 100644 --- a/cluster.go +++ b/cluster.go @@ -25,6 +25,7 @@ import ( peerstore "github.com/libp2p/go-libp2p-core/peerstore" rpc "github.com/libp2p/go-libp2p-gorpc" dht "github.com/libp2p/go-libp2p-kad-dht" + "github.com/libp2p/go-libp2p/p2p/discovery" ma "github.com/multiformats/go-multiaddr" ocgorpc "github.com/lanzafame/go-libp2p-ocgorpc" @@ -41,6 +42,7 @@ const ( pingMetricName = "ping" bootstrapCount = 3 reBootstrapInterval = 30 * time.Second + mdnsServiceTag = "_ipfs-cluster-discovery._udp" ) var ( @@ -57,6 +59,7 @@ type Cluster struct { config *Config host host.Host dht *dht.IpfsDHT + discovery discovery.Service datastore ds.Datastore rpcServer *rpc.Server @@ -127,6 +130,17 @@ func NewCluster( peerManager := pstoremgr.New(ctx, host, cfg.GetPeerstorePath()) + var mdns discovery.Service + if cfg.MDNSInterval > 0 { + logger.Info("MDNS", cfg.MDNSInterval) + mdns, err := discovery.NewMdnsService(ctx, host, cfg.MDNSInterval, mdnsServiceTag) + if err != nil { + cancel() + return nil, err + } + mdns.RegisterNotifee(peerManager) + } + c := &Cluster{ ctx: ctx, cancel: cancel, @@ -134,6 +148,7 @@ func NewCluster( config: cfg, host: host, dht: dht, + discovery: mdns, datastore: datastore, consensus: consensus, apis: apis, @@ -621,6 +636,12 @@ func (c *Cluster) Shutdown(ctx context.Context) error { logger.Info("shutting down Cluster") + // Cancel discovery service (this shutdowns announcing). Handling + // entries is cancelled along with the context below. + if c.discovery != nil { + c.discovery.Close() + } + // Try to store peerset file for all known peers whatsoever // if we got ready (otherwise, don't overwrite anything) if c.readyB { diff --git a/cluster_config.go b/cluster_config.go index 2f9bcf04..d65be26e 100644 --- a/cluster_config.go +++ b/cluster_config.go @@ -37,6 +37,7 @@ const ( DefaultConnMgrLowWater = 100 DefaultConnMgrGracePeriod = 2 * time.Minute DefaultFollowerMode = false + DefaultMDNSInterval = 10 * time.Second ) // ConnMgrConfig configures the libp2p host connection manager. @@ -74,8 +75,9 @@ type Config struct { // the RPC and Consensus components. ListenAddr ma.Multiaddr - // ConnMgr holds configuration values for the connection manager - // for the libp2p host. + // ConnMgr holds configuration values for the connection manager for + // the libp2p host. + // FIXME: This only applies to ipfs-cluster-service. ConnMgr ConnMgrConfig // Time between syncs of the consensus state to the @@ -125,6 +127,11 @@ type Config struct { // been removed from a cluster. PeerWatchInterval time.Duration + // MDNSInterval controls the time between mDNS broadcasts to the + // network announcing the peer addresses. Set to 0 to disable + // mDNS. + MDNSInterval time.Duration + // If true, DisableRepinning, ensures that no repinning happens // when a node goes down. // This is useful when doing certain types of maintainance, or simply @@ -162,6 +169,7 @@ type configJSON struct { ReplicationFactorMax int `json:"replication_factor_max"` MonitorPingInterval string `json:"monitor_ping_interval"` PeerWatchInterval string `json:"peer_watch_interval"` + MDNSInterval string `json:"mdns_interval"` DisableRepinning bool `json:"disable_repinning"` FollowerMode bool `json:"follower_mode,omitempty"` PeerstoreFile string `json:"peerstore_file,omitempty"` @@ -341,6 +349,7 @@ func (cfg *Config) setDefaults() { cfg.ReplicationFactorMax = DefaultReplicationFactor cfg.MonitorPingInterval = DefaultMonitorPingInterval cfg.PeerWatchInterval = DefaultPeerWatchInterval + cfg.MDNSInterval = DefaultMDNSInterval cfg.DisableRepinning = DefaultDisableRepinning cfg.PeerstoreFile = "" // empty so it gets ommited. cfg.FollowerMode = DefaultFollowerMode @@ -406,6 +415,7 @@ func (cfg *Config) applyConfigJSON(jcfg *configJSON) error { &config.DurationOpt{Duration: jcfg.PinRecoverInterval, Dst: &cfg.PinRecoverInterval, Name: "pin_recover_interval"}, &config.DurationOpt{Duration: jcfg.MonitorPingInterval, Dst: &cfg.MonitorPingInterval, Name: "monitor_ping_interval"}, &config.DurationOpt{Duration: jcfg.PeerWatchInterval, Dst: &cfg.PeerWatchInterval, Name: "peer_watch_interval"}, + &config.DurationOpt{Duration: jcfg.MDNSInterval, Dst: &cfg.MDNSInterval, Name: "mdns_interval"}, ) if err != nil { return err @@ -456,6 +466,7 @@ func (cfg *Config) toConfigJSON() (jcfg *configJSON, err error) { jcfg.PinRecoverInterval = cfg.PinRecoverInterval.String() jcfg.MonitorPingInterval = cfg.MonitorPingInterval.String() jcfg.PeerWatchInterval = cfg.PeerWatchInterval.String() + jcfg.MDNSInterval = cfg.MDNSInterval.String() jcfg.DisableRepinning = cfg.DisableRepinning jcfg.PeerstoreFile = cfg.PeerstoreFile jcfg.FollowerMode = cfg.FollowerMode diff --git a/clusterhost.go b/clusterhost.go index 88afb9cd..034ef0f0 100644 --- a/clusterhost.go +++ b/clusterhost.go @@ -3,29 +3,19 @@ package ipfscluster import ( "context" "encoding/hex" - "time" "github.com/ipfs/ipfs-cluster/config" - "github.com/ipfs/ipfs-cluster/pstoremgr" libp2p "github.com/libp2p/go-libp2p" connmgr "github.com/libp2p/go-libp2p-connmgr" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/peerstore" crypto "github.com/libp2p/go-libp2p-crypto" host "github.com/libp2p/go-libp2p-host" ipnet "github.com/libp2p/go-libp2p-interface-pnet" dht "github.com/libp2p/go-libp2p-kad-dht" pnet "github.com/libp2p/go-libp2p-pnet" pubsub "github.com/libp2p/go-libp2p-pubsub" - discovery "github.com/libp2p/go-libp2p/p2p/discovery" routedhost "github.com/libp2p/go-libp2p/p2p/host/routed" ) -const ( - mdnsServiceTag = "_ipfs-cluster-discovery._udp" - mdnsInterval = 30 * time.Second -) - // NewClusterHost creates a libp2p Host with the options from the provided // cluster configuration. Using that host, it creates pubsub and a DHT // instances, for shared use by all cluster components. The returned host uses @@ -34,7 +24,7 @@ func NewClusterHost( ctx context.Context, ident *config.Identity, cfg *Config, -) (host.Host, *pubsub.PubSub, *dht.IpfsDHT, discovery.Service, error) { +) (host.Host, *pubsub.PubSub, *dht.IpfsDHT, error) { connman := connmgr.NewConnManager(cfg.ConnMgr.LowWater, cfg.ConnMgr.HighWater, cfg.ConnMgr.GracePeriod) @@ -47,29 +37,22 @@ func NewClusterHost( libp2p.ConnectionManager(connman), ) if err != nil { - return nil, nil, nil, nil, err + return nil, nil, nil, err } psub, err := newPubSub(ctx, h) if err != nil { h.Close() - return nil, nil, nil, nil, err + return nil, nil, nil, err } idht, err := newDHT(ctx, h) if err != nil { h.Close() - return nil, nil, nil, nil, err + return nil, nil, nil, err } - mdns, err := discovery.NewMdnsService(ctx, h, mdnsInterval, mdnsServiceTag) - if err != nil { - return nil, nil, nil, nil, err - } - - mdns.RegisterNotifee(&mdnsNotifee{mgr: pstoremgr.New(ctx, h, "")}) - - return routedHost(h, idht), psub, idht, mdns, nil + return routedHost(h, idht), psub, idht, nil } func newHost(ctx context.Context, secret []byte, priv crypto.PrivKey, opts ...libp2p.Option) (host.Host, error) { @@ -115,26 +98,6 @@ func routedHost(h host.Host, d *dht.IpfsDHT) host.Host { return routedhost.Wrap(h, d) } -type mdnsNotifee struct { - mgr *pstoremgr.Manager -} - -func (mdnsNot *mdnsNotifee) HandlePeerFound(p peer.AddrInfo) { - addrs, err := peer.AddrInfoToP2pAddrs(&p) - if err != nil { - logger.Error(err) - return - } - // actually mdns returns a single address but let's do things - // as if there were several - for _, a := range addrs { - _, err = mdnsNot.mgr.ImportPeer(a, true, peerstore.ConnectedAddrTTL) - if err != nil { - logger.Error(err) - } - } -} - // EncodeProtectorKey converts a byte slice to its hex string representation. func EncodeProtectorKey(secretBytes []byte) string { return hex.EncodeToString(secretBytes) diff --git a/cmd/ipfs-cluster-service/daemon.go b/cmd/ipfs-cluster-service/daemon.go index 243ca738..643c4d42 100644 --- a/cmd/ipfs-cluster-service/daemon.go +++ b/cmd/ipfs-cluster-service/daemon.go @@ -29,7 +29,6 @@ import ( peer "github.com/libp2p/go-libp2p-core/peer" dht "github.com/libp2p/go-libp2p-kad-dht" pubsub "github.com/libp2p/go-libp2p-pubsub" - discovery "github.com/libp2p/go-libp2p/p2p/discovery" ma "github.com/multiformats/go-multiaddr" @@ -91,7 +90,7 @@ func daemon(c *cli.Context) error { cfgs.Cluster.LeaveOnShutdown = true } - host, pubsub, dht, mdns, err := ipfscluster.NewClusterHost(ctx, cfgHelper.Identity(), cfgs.Cluster) + host, pubsub, dht, err := ipfscluster.NewClusterHost(ctx, cfgHelper.Identity(), cfgs.Cluster) checkErr("creating libp2p host", err) cluster, err := createCluster(ctx, c, cfgHelper, host, pubsub, dht, raftStaging) @@ -104,7 +103,7 @@ func daemon(c *cli.Context) error { // will realize). go bootstrap(ctx, cluster, bootstraps) - return handleSignals(ctx, cancel, cluster, host, dht, mdns) + return handleSignals(ctx, cancel, cluster, host, dht) } // createCluster creates all the necessary things to produce the cluster @@ -224,7 +223,6 @@ func handleSignals( cluster *ipfscluster.Cluster, host host.Host, dht *dht.IpfsDHT, - mdns discovery.Service, ) error { signalChan := make(chan os.Signal, 20) signal.Notify( @@ -243,7 +241,6 @@ func handleSignals( case <-cluster.Done(): cancel() dht.Close() - mdns.Close() host.Close() return nil } diff --git a/config_test.go b/config_test.go index ba233f03..85357722 100644 --- a/config_test.go +++ b/config_test.go @@ -36,7 +36,8 @@ var testingClusterCfg = []byte(`{ "replication_factor": -1, "monitor_ping_interval": "350ms", "peer_watch_interval": "200ms", - "disable_repinning": false + "disable_repinning": false, + "mdns_interval": "0s" }`) var testingRaftCfg = []byte(`{ diff --git a/peer_manager_test.go b/peer_manager_test.go index 0331c48c..23fa6dc1 100644 --- a/peer_manager_test.go +++ b/peer_manager_test.go @@ -45,11 +45,10 @@ func peerManagerClusters(t *testing.T) ([]*Cluster, []*test.IpfsMock, host.Host) cfg.Secret = testingClusterSecret // Create a bootstrapping libp2p host - h, _, dht, mdns, err := NewClusterHost(context.Background(), ident, cfg) + h, _, dht, err := NewClusterHost(context.Background(), ident, cfg) if err != nil { t.Fatal(err) } - mdns.Close() // Connect all peers to that host. This will allow that they // can discover each others via DHT. diff --git a/pstoremgr/pstoremgr.go b/pstoremgr/pstoremgr.go index 3090064c..3d92d054 100644 --- a/pstoremgr/pstoremgr.go +++ b/pstoremgr/pstoremgr.go @@ -341,6 +341,23 @@ func (pm *Manager) SetPriority(pid peer.ID, prio int) error { return pm.host.Peerstore().Put(pid, PriorityTag, prio) } +// HandlePeerFound implements the Notifee interface for discovery. +func (pm *Manager) HandlePeerFound(p peer.AddrInfo) { + addrs, err := peer.AddrInfoToP2pAddrs(&p) + if err != nil { + logger.Error(err) + return + } + // actually mdns returns a single address but let's do things + // as if there were several + for _, a := range addrs { + _, err = pm.ImportPeer(a, true, peerstore.ConnectedAddrTTL) + if err != nil { + logger.Error(err) + } + } +} + // peerSort is used to sort a slice of PinInfos given the PriorityTag in the // peerstore, from the lowest tag value (0 is the highest priority) to the // highest, Peers without a valid priority tag are considered as having a tag From 2d9e6c1de8e6f14fbe404b106762305e47a9b36c Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Mon, 26 Aug 2019 13:23:02 +0530 Subject: [PATCH 16/28] Error queue is full - abort if a Track() calls fails due to queue being full - increase max pin queue size to 1 million - hind max_pin_queue_size from configuration - use an elaborated error message Fixes #377 --- cluster.go | 13 ++++++++++--- pintracker/maptracker/config.go | 14 +++++++++----- pintracker/maptracker/maptracker.go | 6 ++++-- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/cluster.go b/cluster.go index d16218b0..2f285f10 100644 --- a/cluster.go +++ b/cluster.go @@ -13,6 +13,7 @@ import ( "github.com/ipfs/ipfs-cluster/adder/local" "github.com/ipfs/ipfs-cluster/adder/sharding" "github.com/ipfs/ipfs-cluster/api" + "github.com/ipfs/ipfs-cluster/pintracker/maptracker" "github.com/ipfs/ipfs-cluster/pstoremgr" "github.com/ipfs/ipfs-cluster/rpcutil" "github.com/ipfs/ipfs-cluster/state" @@ -942,7 +943,10 @@ func (c *Cluster) StateSync(ctx context.Context) error { _, tracked := trackedPinsMap[pin.Cid.String()] if !tracked { logger.Debugf("StateSync: tracking %s, part of the shared state", pin.Cid) - c.tracker.Track(ctx, pin) + err = c.tracker.Track(ctx, pin) + if err == maptracker.ErrFullQueue { + return err + } } } @@ -967,10 +971,13 @@ func (c *Cluster) StateSync(ctx context.Context) error { switch { case p.Status == api.TrackerStatusRemote && allocatedHere: logger.Debugf("StateSync: Tracking %s locally (currently remote)", pCid) - c.tracker.Track(ctx, currentPin) + err = c.tracker.Track(ctx, currentPin) case p.Status == api.TrackerStatusPinned && !allocatedHere: logger.Debugf("StateSync: Tracking %s as remote (currently local)", pCid) - c.tracker.Track(ctx, currentPin) + err = c.tracker.Track(ctx, currentPin) + } + if err == maptracker.ErrFullQueue { + return err } } diff --git a/pintracker/maptracker/config.go b/pintracker/maptracker/config.go index ee5f72e2..8430e341 100644 --- a/pintracker/maptracker/config.go +++ b/pintracker/maptracker/config.go @@ -14,7 +14,7 @@ const envConfigKey = "cluster_maptracker" // Default values for this Config. const ( - DefaultMaxPinQueueSize = 50000 + DefaultMaxPinQueueSize = 1000000 DefaultConcurrentPins = 10 ) @@ -31,7 +31,7 @@ type Config struct { } type jsonConfig struct { - MaxPinQueueSize int `json:"max_pin_queue_size"` + MaxPinQueueSize int `json:"max_pin_queue_size,omitempty"` ConcurrentPins int `json:"concurrent_pins"` } @@ -104,8 +104,12 @@ func (cfg *Config) ToJSON() ([]byte, error) { } func (cfg *Config) toJSONConfig() *jsonConfig { - return &jsonConfig{ - MaxPinQueueSize: cfg.MaxPinQueueSize, - ConcurrentPins: cfg.ConcurrentPins, + jCfg := &jsonConfig{ + ConcurrentPins: cfg.ConcurrentPins, } + if cfg.MaxPinQueueSize != DefaultMaxPinQueueSize { + jCfg.MaxPinQueueSize = cfg.MaxPinQueueSize + } + + return jCfg } diff --git a/pintracker/maptracker/maptracker.go b/pintracker/maptracker/maptracker.go index 2d39830b..13aa81b4 100644 --- a/pintracker/maptracker/maptracker.go +++ b/pintracker/maptracker/maptracker.go @@ -23,6 +23,8 @@ var logger = logging.Logger("pintracker") var ( errUnpinned = errors.New("the item is unexpectedly not pinned on IPFS") + // ErrFullQueue is the error used when pin or unpin operation channel is full. + ErrFullQueue = errors.New("pin/unpin operation queue is full (too many operations), increasing max_pin_queue_size would help") ) // MapPinTracker is a PinTracker implementation which uses a Go map @@ -47,7 +49,7 @@ type MapPinTracker struct { wg sync.WaitGroup } -// NewMapPinTracker returns a new object which has been correcly +// NewMapPinTracker returns a new object which has been correctly // initialized with the given configuration. func NewMapPinTracker(cfg *Config, pid peer.ID, peerName string) *MapPinTracker { ctx, cancel := context.WithCancel(context.Background()) @@ -180,7 +182,7 @@ func (mpt *MapPinTracker) enqueue(ctx context.Context, c *api.Pin, typ optracker select { case ch <- op: default: - err := errors.New("queue is full") + err := ErrFullQueue op.SetError(err) op.Cancel() logger.Error(err.Error()) From df7621ba6ebf7a19306f6bb17630a3bc1b5ca655 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Sat, 24 Aug 2019 15:45:25 +0200 Subject: [PATCH 17/28] crdt: inform about trust all mode --- consensus/crdt/consensus.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/consensus/crdt/consensus.go b/consensus/crdt/consensus.go index c7d8d6ec..6b5a5e72 100644 --- a/consensus/crdt/consensus.go +++ b/consensus/crdt/consensus.go @@ -257,6 +257,11 @@ func (css *Consensus) setup() { return } css.state = clusterState + + if css.config.TrustAll { + logger.Info("'trust all' mode enabled. Any peer in the cluster can modify the pinset.") + } + css.readyCh <- struct{}{} } From 397e538bf05523d5dd2cd9484581e021b5d87cf3 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Mon, 26 Aug 2019 14:56:19 +0200 Subject: [PATCH 18/28] Do not error when not unpinning something and unpin is disabled --- ipfsconn/ipfshttp/ipfshttp.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ipfsconn/ipfshttp/ipfshttp.go b/ipfsconn/ipfshttp/ipfshttp.go index 184d4b88..10f99ec5 100644 --- a/ipfsconn/ipfshttp/ipfshttp.go +++ b/ipfsconn/ipfshttp/ipfshttp.go @@ -435,16 +435,16 @@ func (ipfs *Connector) Unpin(ctx context.Context, hash cid.Cid) error { ctx, span := trace.StartSpan(ctx, "ipfsconn/ipfshttp/Unpin") defer span.End() - if ipfs.config.UnpinDisable { - return errors.New("ipfs unpinning is disallowed by configuration on this peer") - } - pinStatus, err := ipfs.PinLsCid(ctx, hash) if err != nil { return err } if pinStatus.IsPinned(-1) { + if ipfs.config.UnpinDisable { + return errors.New("ipfs unpinning is disallowed by configuration on this peer") + } + defer ipfs.updateInformerMetric(ctx) path := fmt.Sprintf("pin/rm?arg=%s", hash) From 46cd5327fafb6362556032c156384f183e18f7fb Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Mon, 26 Aug 2019 14:58:49 +0200 Subject: [PATCH 19/28] Release 0.11.0-rc7 --- cmd/ipfs-cluster-ctl/main.go | 2 +- version/version.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/ipfs-cluster-ctl/main.go b/cmd/ipfs-cluster-ctl/main.go index 7c0ca109..e5e261ab 100644 --- a/cmd/ipfs-cluster-ctl/main.go +++ b/cmd/ipfs-cluster-ctl/main.go @@ -29,7 +29,7 @@ const programName = `ipfs-cluster-ctl` // Version is the cluster-ctl tool version. It should match // the IPFS cluster's version -const Version = "0.11.0-rc6" +const Version = "0.11.0-rc7" var ( defaultHost = "/ip4/127.0.0.1/tcp/9094" diff --git a/version/version.go b/version/version.go index d706b8bc..813ede68 100644 --- a/version/version.go +++ b/version/version.go @@ -9,7 +9,7 @@ import ( // Version is the current cluster version. Version alignment between // components, apis and tools ensures compatibility among them. -var Version = semver.MustParse("0.11.0-rc6") +var Version = semver.MustParse("0.11.0-rc7") // RPCProtocol is used to send libp2p messages between cluster peers var RPCProtocol = protocol.ID( From 7cb13cb97dac28bcf14a7ced80fac6ac41345355 Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Tue, 27 Aug 2019 09:38:41 +0530 Subject: [PATCH 20/28] Abort on any error --- cluster.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cluster.go b/cluster.go index 2f285f10..e21c43f2 100644 --- a/cluster.go +++ b/cluster.go @@ -13,7 +13,6 @@ import ( "github.com/ipfs/ipfs-cluster/adder/local" "github.com/ipfs/ipfs-cluster/adder/sharding" "github.com/ipfs/ipfs-cluster/api" - "github.com/ipfs/ipfs-cluster/pintracker/maptracker" "github.com/ipfs/ipfs-cluster/pstoremgr" "github.com/ipfs/ipfs-cluster/rpcutil" "github.com/ipfs/ipfs-cluster/state" @@ -944,7 +943,7 @@ func (c *Cluster) StateSync(ctx context.Context) error { if !tracked { logger.Debugf("StateSync: tracking %s, part of the shared state", pin.Cid) err = c.tracker.Track(ctx, pin) - if err == maptracker.ErrFullQueue { + if err != nil { return err } } @@ -976,7 +975,7 @@ func (c *Cluster) StateSync(ctx context.Context) error { logger.Debugf("StateSync: Tracking %s as remote (currently local)", pCid) err = c.tracker.Track(ctx, currentPin) } - if err == maptracker.ErrFullQueue { + if err != nil { return err } } From c030dd7c8c75ffdd2d91abb296205de1a9686f51 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Tue, 27 Aug 2019 11:39:05 +0200 Subject: [PATCH 21/28] Update go-ds-crdt --- go.mod | 37 ++++++++++++++++++------------- go.sum | 69 +++++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 73 insertions(+), 33 deletions(-) diff --git a/go.mod b/go.mod index 9bf6d493..9c9a84e4 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,9 @@ module github.com/ipfs/ipfs-cluster require ( contrib.go.opencensus.io/exporter/jaeger v0.1.0 contrib.go.opencensus.io/exporter/prometheus v0.1.0 + github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect github.com/blang/semver v3.5.1+incompatible - github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a // indirect + github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/dgraph-io/badger v1.6.0 github.com/dustin/go-humanize v1.0.0 @@ -14,6 +15,7 @@ require ( github.com/google/uuid v1.1.1 github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f // indirect github.com/gorilla/mux v1.7.3 + github.com/gorilla/websocket v1.4.1 // indirect github.com/hashicorp/go-hclog v0.9.2 github.com/hashicorp/golang-lru v0.5.3 // indirect github.com/hashicorp/raft v1.1.0 @@ -24,11 +26,12 @@ require ( github.com/ipfs/go-block-format v0.0.2 github.com/ipfs/go-blockservice v0.1.2 // indirect github.com/ipfs/go-cid v0.0.3 - github.com/ipfs/go-datastore v0.0.5 + github.com/ipfs/go-datastore v0.1.0 github.com/ipfs/go-ds-badger v0.0.5 - github.com/ipfs/go-ds-crdt v0.1.1 + github.com/ipfs/go-ds-crdt v0.1.3 github.com/ipfs/go-fs-lock v0.0.1 github.com/ipfs/go-ipfs-api v0.0.1 + github.com/ipfs/go-ipfs-blockstore v0.1.0 // indirect github.com/ipfs/go-ipfs-chunker v0.0.1 github.com/ipfs/go-ipfs-ds-help v0.0.1 github.com/ipfs/go-ipfs-files v0.0.3 @@ -44,8 +47,8 @@ require ( github.com/ipfs/go-unixfs v0.2.1 github.com/kelseyhightower/envconfig v1.4.0 github.com/lanzafame/go-libp2p-ocgorpc v0.1.1 - github.com/libp2p/go-eventbus v0.1.0 // indirect - github.com/libp2p/go-libp2p v0.3.0 + github.com/libp2p/go-libp2p v0.3.1 + github.com/libp2p/go-libp2p-blankhost v0.1.4 // indirect github.com/libp2p/go-libp2p-connmgr v0.1.0 github.com/libp2p/go-libp2p-consensus v0.0.1 github.com/libp2p/go-libp2p-core v0.2.2 @@ -60,38 +63,42 @@ require ( github.com/libp2p/go-libp2p-peerstore v0.1.3 github.com/libp2p/go-libp2p-pnet v0.1.0 github.com/libp2p/go-libp2p-protocol v0.1.0 - github.com/libp2p/go-libp2p-pubsub v0.1.0 + github.com/libp2p/go-libp2p-pubsub v0.1.1 github.com/libp2p/go-libp2p-raft v0.1.2 github.com/libp2p/go-libp2p-record v0.1.1 // indirect github.com/libp2p/go-ws-transport v0.1.0 - github.com/miekg/dns v1.1.15 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/mattn/go-isatty v0.0.9 // indirect + github.com/miekg/dns v1.1.16 // indirect github.com/multiformats/go-multiaddr v0.0.4 github.com/multiformats/go-multiaddr-dns v0.0.3 github.com/multiformats/go-multiaddr-net v0.0.1 github.com/multiformats/go-multicodec v0.1.6 - github.com/multiformats/go-multihash v0.0.6 + github.com/multiformats/go-multihash v0.0.7 + github.com/onsi/ginkgo v1.9.0 // indirect + github.com/onsi/gomega v1.6.0 // indirect github.com/pkg/errors v0.8.1 github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1 // indirect github.com/prometheus/client_golang v1.1.0 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect + github.com/prometheus/procfs v0.0.4 // indirect github.com/rs/cors v1.6.0 github.com/smartystreets/assertions v1.0.1 // indirect github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect + github.com/stretchr/testify v1.4.0 // indirect github.com/ugorji/go/codec v1.1.7 github.com/urfave/cli v1.20.0 + github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9 // indirect github.com/zenground0/go-dot v0.0.0-20180912213407-94a425d4984e go.opencensus.io v0.22.0 - golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect + golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 // indirect golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 // indirect - golang.org/x/image v0.0.0-20190802002840-cff245a6509b // indirect + golang.org/x/image v0.0.0-20190823064033-3a9bac650e44 // indirect golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 // indirect - golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // indirect + golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 // indirect golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 // indirect gonum.org/v1/gonum v0.0.0-20190704103327-70ddf0df3d53 gonum.org/v1/plot v0.0.0-20190615073203-9aa86143727f - google.golang.org/api v0.8.0 // indirect - google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 // indirect + google.golang.org/api v0.9.0 // indirect + google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 // indirect google.golang.org/grpc v1.23.0 // indirect ) diff --git a/go.sum b/go.sum index c8f51b93..37c28a9d 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,8 @@ github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7 h1:PqzgE6kAMi github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= +github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -45,8 +47,8 @@ github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dm github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c h1:aEbSeNALREWXk0G7UdNhR3ayBV7tZ4M2PNmnrCAph6Q= github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a h1:We35J+0yvVFrEXbtViYUW8H/wNOhqjIF3PsrW4yYmGw= -github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3 h1:A/EVblehb75cUgXA5njHPn0kLAsykn6mJGz7rnmW5W0= +github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -149,6 +151,8 @@ github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gxed/hashland/keccakpg v0.0.1 h1:wrk3uMNaMxbXiHibbPO4S0ymqJMm41WiudyFSs7UnsU= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= github.com/gxed/hashland/murmur3 v0.0.1 h1:SheiaIt0sda5K+8FLz952/1iWS9zrnKsEJaOJu4ZbSc= @@ -187,6 +191,8 @@ github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/ipfs/bbloom v0.0.1 h1:s7KkiBPfxCeDVo47KySjK0ACPc5GJRUxFpdyWEuDjhw= github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI= +github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= +github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= github.com/ipfs/go-bitswap v0.0.9 h1:Dy0qvYlaOd2E2FOL2gApJ21qVjepJsGNNfstLrGf+0I= github.com/ipfs/go-bitswap v0.0.9/go.mod h1:kAPf5qgn2W2DrgAcscZ3HrM9qh4pH+X8Fkk3UPrwvis= github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0= @@ -220,14 +226,16 @@ github.com/ipfs/go-datastore v0.0.1 h1:AW/KZCScnBWlSb5JbnEnLKFWXL224LBEh/9KXXOrU github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= github.com/ipfs/go-datastore v0.0.5 h1:q3OfiOZV5rlsK1H5V8benjeUApRfMGs4Mrhmr6NriQo= github.com/ipfs/go-datastore v0.0.5/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= +github.com/ipfs/go-datastore v0.1.0 h1:TOxI04l8CmO4zGtesENhzm4PwkFwJXY3rKiYaaMf9fI= +github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= github.com/ipfs/go-ds-badger v0.0.2 h1:7ToQt7QByBhOTuZF2USMv+PGlMcBC7FW7FdgQ4FCsoo= github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8= github.com/ipfs/go-ds-badger v0.0.5 h1:dxKuqw5T1Jm8OuV+lchA76H9QZFyPKZeLuT6bN42hJQ= github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s= -github.com/ipfs/go-ds-crdt v0.1.1 h1:90rY3kpr+dCY30gyRVFKlNrw7zaYHgM3wFp7fflXZTg= -github.com/ipfs/go-ds-crdt v0.1.1/go.mod h1:SaXm2oxzu+ouZ6HZ7e1Ss1O1wz/T+wGhcX4i922J95I= +github.com/ipfs/go-ds-crdt v0.1.3 h1:Apna77eKvw6Vmb1YJtXdJ+KZN8RFjRZQREMk+LrslXI= +github.com/ipfs/go-ds-crdt v0.1.3/go.mod h1:SaXm2oxzu+ouZ6HZ7e1Ss1O1wz/T+wGhcX4i922J95I= github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= github.com/ipfs/go-fs-lock v0.0.1 h1:XHX8uW4jQBYWHj59XXcjg7BHlHxV9ZOYs6Y43yb7/l0= github.com/ipfs/go-fs-lock v0.0.1/go.mod h1:DNBekbboPKcxs1aukPSaOtFA3QfSdi5C855v0i9XJ8Y= @@ -235,6 +243,8 @@ github.com/ipfs/go-ipfs-api v0.0.1 h1:4wx4mSgeq5FwMN8LDF7WLwPDKEd+YKjgySrpOJQ2r8 github.com/ipfs/go-ipfs-api v0.0.1/go.mod h1:0FhXgCzrLu7qNmdxZvgYqD9jFzJxzz1NAVt3OQ0WOIc= github.com/ipfs/go-ipfs-blockstore v0.0.1 h1:O9n3PbmTYZoNhkgkEyrXTznbmktIXif62xLX+8dPHzc= github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08= +github.com/ipfs/go-ipfs-blockstore v0.1.0 h1:V1GZorHFUIB6YgTJQdq7mcaIpUfCM3fCyVi+MTo9O88= +github.com/ipfs/go-ipfs-blockstore v0.1.0/go.mod h1:5aD0AvHPi7mZc6Ci1WCAhiBQu2IsfTduLl+422H6Rqw= github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ= github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk= github.com/ipfs/go-ipfs-chunker v0.0.1 h1:cHUUxKFQ99pozdahi+uSC/3Y6HeRpi9oTeUHbE27SEw= @@ -373,8 +383,8 @@ github.com/libp2p/go-libp2p v0.1.1 h1:52sB0TJuDk2nYMcMfHOKaPoaayDZjaYVCq6Vk1ejUT github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8= github.com/libp2p/go-libp2p v0.2.0 h1:hYJgMZYdcwHzDHKb/nLePrtuSP3LqkGIFOQ2aIbKOCM= github.com/libp2p/go-libp2p v0.2.0/go.mod h1:5nXHmf4Hs+NmkaMsmWcFJgUHTbYNpCfxr20lwus0p1c= -github.com/libp2p/go-libp2p v0.3.0 h1:XhYEJKmIdi4U4Zbie/ym9k6lqgg3PHM2stGS/cOUDWk= -github.com/libp2p/go-libp2p v0.3.0/go.mod h1:J7DPB1+zB5VLc8v/kKSD8+u2cbyIGI0Dh/Pf3Wprt+0= +github.com/libp2p/go-libp2p v0.3.1 h1:opd8/1Sm9zFG37LzNQsIzMTMeBabhlcX5VlvLrNZPV0= +github.com/libp2p/go-libp2p v0.3.1/go.mod h1:e6bwxbdYH1HqWTz8faTChKGR0BjPc8p+6SyP8GTTR7Y= github.com/libp2p/go-libp2p-autonat v0.0.6 h1:OCStANLLpeyQeWFUuqZJ7aS9+Bx0/uoVb1PtLA9fGTQ= github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE= github.com/libp2p/go-libp2p-autonat v0.1.0 h1:aCWAu43Ri4nU0ZPO7NyLzUvvfqd0nE3dX0R/ZGYVgOU= @@ -385,6 +395,8 @@ github.com/libp2p/go-libp2p-blankhost v0.1.1 h1:X919sCh+KLqJcNRApj43xCSiQRYqOSI8 github.com/libp2p/go-libp2p-blankhost v0.1.1/go.mod h1:pf2fvdLJPsC1FsVrNP3DUUvMzUts2dsLLBEpo1vW1ro= github.com/libp2p/go-libp2p-blankhost v0.1.3 h1:0KycuXvPDhmehw0ASsg+s1o3IfXgCUDqfzAl94KEBOg= github.com/libp2p/go-libp2p-blankhost v0.1.3/go.mod h1:KML1//wiKR8vuuJO0y3LUd1uLv+tlkGTAr3jC0S5cLg= +github.com/libp2p/go-libp2p-blankhost v0.1.4 h1:I96SWjR4rK9irDHcHq3XHN6hawCRTPUADzkJacgZLvk= +github.com/libp2p/go-libp2p-blankhost v0.1.4/go.mod h1:oJF0saYsAXQCSfDq254GMNmLNz6ZTHTOvtF4ZydUvwU= github.com/libp2p/go-libp2p-circuit v0.0.9 h1:tjdgP9hv8+Pa/xsprBpEFngq4t8aLvjfibBYoDjO9i4= github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU= github.com/libp2p/go-libp2p-circuit v0.1.0 h1:eniLL3Y9aq/sryfyV1IAHj5rlvuyj3b7iz8tSiZpdhY= @@ -485,6 +497,8 @@ github.com/libp2p/go-libp2p-protocol v0.1.0 h1:HdqhEyhg0ToCaxgMhnOmUO8snQtt/kQlc github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= github.com/libp2p/go-libp2p-pubsub v0.1.0 h1:SmQeMa7IUv5vadh0fYgYsafWCBA1sCy5d/68kIYqGcU= github.com/libp2p/go-libp2p-pubsub v0.1.0/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q= +github.com/libp2p/go-libp2p-pubsub v0.1.1 h1:phDnQvO3H3hAgaEEQi6yt3LILqIYVXaw05bxzezrEwQ= +github.com/libp2p/go-libp2p-pubsub v0.1.1/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q= github.com/libp2p/go-libp2p-raft v0.1.2 h1:lfmirUKXpyecde0ZcQVDWpX+96snREvLK/WkeHu1TGM= github.com/libp2p/go-libp2p-raft v0.1.2/go.mod h1:DCkGdYq5vxeY03L00I2Gn9cGV0y14MnjcuPWTmGfUr8= github.com/libp2p/go-libp2p-record v0.0.1 h1:zN7AS3X46qmwsw5JLxdDuI43cH5UYwovKxHPjKBYQxw= @@ -507,8 +521,8 @@ github.com/libp2p/go-libp2p-swarm v0.0.6 h1:gE0P/v2h+KEXtAi9YTw2UBOSODJ4m9VuuJ+k github.com/libp2p/go-libp2p-swarm v0.0.6/go.mod h1:s5GZvzg9xXe8sbeESuFpjt8CJPTCa8mhEusweJqyFy8= github.com/libp2p/go-libp2p-swarm v0.1.0 h1:HrFk2p0awrGEgch9JXK/qp/hfjqQfgNxpLWnCiWPg5s= github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4= -github.com/libp2p/go-libp2p-swarm v0.2.0 h1:gUqj9WYFC9mQ6khEtO5EjfaAtevwBMxsXRARbi6lAiI= -github.com/libp2p/go-libp2p-swarm v0.2.0/go.mod h1:x07b4zkMFo2EvgPV2bMTlNmdQc8i+74Jjio7xGvsTgU= +github.com/libp2p/go-libp2p-swarm v0.2.1 h1:9A8oQqPIZvbaRyrjViHeDYS7fE7fNtP7BRWdJrBHbe8= +github.com/libp2p/go-libp2p-swarm v0.2.1/go.mod h1:x07b4zkMFo2EvgPV2bMTlNmdQc8i+74Jjio7xGvsTgU= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2 h1:p9ySW7MFvGGs83hAAe0MPGnjy/tPjl5KyxpMkojdZ+g= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -590,13 +604,15 @@ github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= 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= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.1.12 h1:WMhc1ik4LNkTg8U9l3hI1LvxKmIL+f1+WV/SZtCbDDA= github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI= -github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.16 h1:iMEQ/IVHxPTtx2Q07JP/k4CKRvSjiAZjZ0hnhgYEDmE= +github.com/miekg/dns v1.1.16/go.mod h1:YNV562EiewvSmpCB6/W4c6yqjK7Z+M/aIS1JHsIVeg8= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16 h1:5W7KhL8HVF3XCFOweFD3BNESdnO8ewyYTFT2R+/b8FQ= @@ -644,6 +660,8 @@ github.com/multiformats/go-multihash v0.0.5 h1:1wxmCvTXAifAepIMyF39vZinRw5sbqjPs github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= github.com/multiformats/go-multihash v0.0.6 h1:cAVKO4epVd+SSpYJQD6d3vbdqQJvsrtGbTGzsp+V094= github.com/multiformats/go-multihash v0.0.6/go.mod h1:XuKXPp8VHcTygube3OWZC+aZrA+H1IhmjoCDtJc7PXM= +github.com/multiformats/go-multihash v0.0.7 h1:uoqoE03rGJdlQEPq2EAc6UeSbo4L7mZyeAAoqNalf54= +github.com/multiformats/go-multihash v0.0.7/go.mod h1:XuKXPp8VHcTygube3OWZC+aZrA+H1IhmjoCDtJc7PXM= github.com/multiformats/go-multistream v0.0.1 h1:JV4VfSdY9n7ECTtY59/TlSyFCzRILvYx4T4Ws8ZgihU= github.com/multiformats/go-multistream v0.0.1/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= github.com/multiformats/go-multistream v0.0.4 h1:rNgWgFyzRSTI9L+xISrz7kN5MdNXoEcoIeeCH05wLKA= @@ -656,10 +674,14 @@ github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.9.0 h1:SZjF721BByVj8QH636/8S2DnX4n0Re3SteMmw3N+tzc= +github.com/onsi/ginkgo v1.9.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.6.0 h1:8XTW0fcJZEq9q+Upcyws4JSGua2MFysCL5xkaSgHc+M= +github.com/onsi/gomega v1.6.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 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/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= @@ -710,6 +732,8 @@ github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNG github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.4 h1:w8DjqFMJDjuVwdZBQoOozr4MVWOnwF7RcL/7uxBjY78= +github.com/prometheus/procfs v0.0.4/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -746,6 +770,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ 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= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= @@ -775,6 +801,8 @@ github.com/whyrusleeping/mafmt v1.2.8 h1:TCghSl5kkwEE0j+sU/gudyhVMRlpBin8fMBBHg5 github.com/whyrusleeping/mafmt v1.2.8/go.mod h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA= github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30 h1:nMCC9Pwz1pxfC1Y6mYncdk+kq8d5aLx0Q+/gyZGE44M= github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= +github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9 h1:Y1/FEOpaCpD21WxrmfeIYCFPuVPRCY2XZTWzTNHGw30= +github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c h1:GGsyl0dZ2jJgVT+VvWBf/cNijrHRhkrTjkmp5wg7li0= @@ -794,6 +822,7 @@ go4.org v0.0.0-20190218023631-ce4c26f7be8e h1:m9LfARr2VIOW0vsV19kEKp/sWQvZnGobA8 go4.org v0.0.0-20190218023631-ce4c26f7be8e/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -810,8 +839,8 @@ golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -822,8 +851,8 @@ golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9t golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81 h1:00VmoueYNlNz/aHIilyyQz/MHSqGoWJzpFv/HW8xpzI= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190823064033-3a9bac650e44 h1:1/e6LjNi7iqpDTz8tCLSKoR5dqrX4C3ub4H31JJZM4U= +golang.org/x/image v0.0.0-20190823064033-3a9bac650e44/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -834,6 +863,7 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= 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-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -873,6 +903,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/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-20180928133829-e4b3c5e90611/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -896,6 +927,8 @@ golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -934,8 +967,8 @@ google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMt google.golang.org/api v0.3.2 h1:iTp+3yyl/KOtxa/d1/JUE0GGSoR6FuW5udver22iwpw= google.golang.org/api v0.3.2/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.8.0 h1:VGGbLNyPF7dvYHhcUGYBBGCRDDK0RRJAI6KCvo0CL+E= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -947,8 +980,8 @@ google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb h1:i1Ppqkc3WQXikh8bXiwHqAN5Rv3/qDCcRk0/Otx73BY= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v1.17.0 h1:TRJYBgMclJvGYn2rIMjj+h9KtMt5r1Ij7ODVRIZkwhk= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= From 1cfea47696888083e56708c25d5e59b6c0aa684c Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Tue, 27 Aug 2019 12:55:41 +0200 Subject: [PATCH 22/28] Release 0.11.0-rc8 --- cmd/ipfs-cluster-ctl/main.go | 2 +- version/version.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/ipfs-cluster-ctl/main.go b/cmd/ipfs-cluster-ctl/main.go index e5e261ab..b6b28ce0 100644 --- a/cmd/ipfs-cluster-ctl/main.go +++ b/cmd/ipfs-cluster-ctl/main.go @@ -29,7 +29,7 @@ const programName = `ipfs-cluster-ctl` // Version is the cluster-ctl tool version. It should match // the IPFS cluster's version -const Version = "0.11.0-rc7" +const Version = "0.11.0-rc8" var ( defaultHost = "/ip4/127.0.0.1/tcp/9094" diff --git a/version/version.go b/version/version.go index 813ede68..8c1d3fa4 100644 --- a/version/version.go +++ b/version/version.go @@ -9,7 +9,7 @@ import ( // Version is the current cluster version. Version alignment between // components, apis and tools ensures compatibility among them. -var Version = semver.MustParse("0.11.0-rc7") +var Version = semver.MustParse("0.11.0-rc8") // RPCProtocol is used to send libp2p messages between cluster peers var RPCProtocol = protocol.ID( From 8ca0f5781c4fd7766a485554838ef61fe54d5dd2 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Tue, 27 Aug 2019 13:27:52 +0200 Subject: [PATCH 23/28] Fix: trust-all remained enabled always --- consensus/crdt/config.go | 4 ++++ consensus/crdt/config_test.go | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/consensus/crdt/config.go b/consensus/crdt/config.go index d8bea834..e2c2ba0a 100644 --- a/consensus/crdt/config.go +++ b/consensus/crdt/config.go @@ -105,6 +105,10 @@ func (cfg *Config) LoadJSON(raw []byte) error { func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error { config.SetIfNotDefault(jcfg.ClusterName, &cfg.ClusterName) + + // Whenever we parse JSON, TrustAll is false unless an '*' peer exists + cfg.TrustAll = false + for _, p := range jcfg.TrustedPeers { if p == "*" { cfg.TrustAll = true diff --git a/consensus/crdt/config_test.go b/consensus/crdt/config_test.go index 145fe078..f9f83f22 100644 --- a/consensus/crdt/config_test.go +++ b/consensus/crdt/config_test.go @@ -18,8 +18,8 @@ func TestLoadJSON(t *testing.T) { if err != nil { t.Fatal(err) } - if cfg.TrustAll != DefaultTrustAll { - t.Error("expected TrustAll to be the default") + if cfg.TrustAll { + t.Error("TrustAll should not be enabled when peers in trusted peers") } cfg = &Config{} @@ -36,6 +36,16 @@ func TestLoadJSON(t *testing.T) { cfg = &Config{} err = cfg.LoadJSON([]byte(` { + "cluster_name": "test", + "trusted_peers": [] +}`)) + if cfg.TrustAll { + t.Error("TrustAll is only enabled with '*'") + } + + cfg = &Config{} + err = cfg.LoadJSON([]byte(` +{ "cluster_name": "test", "trusted_peers": ["QmUZ13osndQ5uL4tPWHXe3iBgBgq9gfewcBMSCAuMBsDJ6", "*"] }`)) From bab0485616d8b662beb1405e4e651d8c0dc0422e Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 28 Aug 2019 12:07:47 +0200 Subject: [PATCH 24/28] Update go-ds-crdt --- go.mod | 8 ++++---- go.sum | 17 ++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index 9c9a84e4..ea235d61 100644 --- a/go.mod +++ b/go.mod @@ -22,13 +22,13 @@ require ( github.com/hashicorp/raft-boltdb v0.0.0-20190605210249-ef2e128ed477 github.com/hsanjuan/ipfs-lite v0.1.4 github.com/imdario/mergo v0.3.7 - github.com/ipfs/go-bitswap v0.1.6 // indirect + github.com/ipfs/go-bitswap v0.1.8 // indirect github.com/ipfs/go-block-format v0.0.2 github.com/ipfs/go-blockservice v0.1.2 // indirect github.com/ipfs/go-cid v0.0.3 github.com/ipfs/go-datastore v0.1.0 github.com/ipfs/go-ds-badger v0.0.5 - github.com/ipfs/go-ds-crdt v0.1.3 + github.com/ipfs/go-ds-crdt v0.1.4 github.com/ipfs/go-fs-lock v0.0.1 github.com/ipfs/go-ipfs-api v0.0.1 github.com/ipfs/go-ipfs-blockstore v0.1.0 // indirect @@ -92,8 +92,8 @@ require ( go.opencensus.io v0.22.0 golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 // indirect golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 // indirect - golang.org/x/image v0.0.0-20190823064033-3a9bac650e44 // indirect - golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 // indirect + golang.org/x/image v0.0.0-20190828090100-23ea20f87cfc // indirect + golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 // indirect golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 // indirect gonum.org/v1/gonum v0.0.0-20190704103327-70ddf0df3d53 diff --git a/go.sum b/go.sum index 37c28a9d..27471b92 100644 --- a/go.sum +++ b/go.sum @@ -201,8 +201,8 @@ github.com/ipfs/go-bitswap v0.1.3 h1:jAl9Z/TYObpGeGATUemnOZ7RYb0F/kzNVlhcYZesz+0 github.com/ipfs/go-bitswap v0.1.3/go.mod h1:YEQlFy0kkxops5Vy+OxWdRSEZIoS7I7KDIwoa5Chkps= github.com/ipfs/go-bitswap v0.1.5 h1:pgajlrTCFbbPgYJ234M1pssneLuIsVuxtfpx1I4cz3Y= github.com/ipfs/go-bitswap v0.1.5/go.mod h1:TOWoxllhccevbWFUR2N7B1MTSVVge1s6XSMiCSA4MzM= -github.com/ipfs/go-bitswap v0.1.6 h1:3jj6/69bsqAFmNViEXU8MWUDE8iE1mrqVPaKaIChu7k= -github.com/ipfs/go-bitswap v0.1.6/go.mod h1:oRNdV7SkA9glUUMHd6O2ztSwimBDLFdIF0fYIuDEzVo= +github.com/ipfs/go-bitswap v0.1.8 h1:38X1mKXkiU6Nzw4TOSWD8eTVY5eX3slQunv3QEWfXKg= +github.com/ipfs/go-bitswap v0.1.8/go.mod h1:TOWoxllhccevbWFUR2N7B1MTSVVge1s6XSMiCSA4MzM= github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= github.com/ipfs/go-block-format v0.0.2 h1:qPDvcP19izTjU8rgo6p7gTXZlkMkF5bz5G3fqIsSCPE= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= @@ -234,8 +234,8 @@ github.com/ipfs/go-ds-badger v0.0.2 h1:7ToQt7QByBhOTuZF2USMv+PGlMcBC7FW7FdgQ4FCs github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8= github.com/ipfs/go-ds-badger v0.0.5 h1:dxKuqw5T1Jm8OuV+lchA76H9QZFyPKZeLuT6bN42hJQ= github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s= -github.com/ipfs/go-ds-crdt v0.1.3 h1:Apna77eKvw6Vmb1YJtXdJ+KZN8RFjRZQREMk+LrslXI= -github.com/ipfs/go-ds-crdt v0.1.3/go.mod h1:SaXm2oxzu+ouZ6HZ7e1Ss1O1wz/T+wGhcX4i922J95I= +github.com/ipfs/go-ds-crdt v0.1.4 h1:5gE6Ymt0Ke0KJUHWA6GoFsKpocbeUbRD/N7TbocQcvE= +github.com/ipfs/go-ds-crdt v0.1.4/go.mod h1:SaXm2oxzu+ouZ6HZ7e1Ss1O1wz/T+wGhcX4i922J95I= github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= github.com/ipfs/go-fs-lock v0.0.1 h1:XHX8uW4jQBYWHj59XXcjg7BHlHxV9ZOYs6Y43yb7/l0= github.com/ipfs/go-fs-lock v0.0.1/go.mod h1:DNBekbboPKcxs1aukPSaOtFA3QfSdi5C855v0i9XJ8Y= @@ -851,8 +851,8 @@ golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9t golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81 h1:00VmoueYNlNz/aHIilyyQz/MHSqGoWJzpFv/HW8xpzI= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190823064033-3a9bac650e44 h1:1/e6LjNi7iqpDTz8tCLSKoR5dqrX4C3ub4H31JJZM4U= -golang.org/x/image v0.0.0-20190823064033-3a9bac650e44/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190828090100-23ea20f87cfc h1:KDZtcnWVXXn4htf5vPv8h8r4Cd81EpFoDrCGnVXTZbE= +golang.org/x/image v0.0.0-20190828090100-23ea20f87cfc/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -886,8 +886,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -950,7 +950,6 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522 h1:bhOzK9QyoD0ogCnFro1m2mz41+Ib0oOhfJnBp5MR4K4= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= From 1b91303fe052a831a43002dff311bf5e5ea3c3b2 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 28 Aug 2019 12:08:41 +0200 Subject: [PATCH 25/28] Do not allocate an unused item for the trackedPinsMap --- cluster.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cluster.go b/cluster.go index 587aef71..dc75369b 100644 --- a/cluster.go +++ b/cluster.go @@ -953,9 +953,9 @@ func (c *Cluster) StateSync(ctx context.Context) error { } trackedPins := c.tracker.StatusAll(ctx) - trackedPinsMap := make(map[string]int) - for i, tpin := range trackedPins { - trackedPinsMap[tpin.Cid.String()] = i + trackedPinsMap := make(map[string]struct{}) + for _, tpin := range trackedPins { + trackedPinsMap[tpin.Cid.String()] = struct{}{} } // Track items which are not tracked From a399d893b7b11ad4b1b37feddeead7fc26448a22 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 28 Aug 2019 12:09:04 +0200 Subject: [PATCH 26/28] Remove mdns debug logging Leftover --- cluster.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cluster.go b/cluster.go index dc75369b..2e957c09 100644 --- a/cluster.go +++ b/cluster.go @@ -132,7 +132,6 @@ func NewCluster( var mdns discovery.Service if cfg.MDNSInterval > 0 { - logger.Info("MDNS", cfg.MDNSInterval) mdns, err := discovery.NewMdnsService(ctx, host, cfg.MDNSInterval, mdnsServiceTag) if err != nil { cancel() From b247783dd8aa069e130058908a3fd9191e6eab63 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 28 Aug 2019 12:09:31 +0200 Subject: [PATCH 27/28] Badger: Do not compact L0 on close by default If this goes wrong probably database goes to hell. We want to stop the daemon as quickly as possible. --- datastore/badger/config.go | 1 + 1 file changed, 1 insertion(+) diff --git a/datastore/badger/config.go b/datastore/badger/config.go index d048f7b9..faf47853 100644 --- a/datastore/badger/config.go +++ b/datastore/badger/config.go @@ -28,6 +28,7 @@ var ( func init() { DefaultBadgerOptions = badger.DefaultOptions("") + DefaultBadgerOptions.CompactL0OnClose = false } // Config is used to initialize a BadgerDB datastore. It implements the From ea7093aa736c631b08f6a4610c7bb8645fd92ade Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Sat, 31 Aug 2019 16:24:20 +0530 Subject: [PATCH 28/28] BlockAllocate should respect user allocations --- rpc_api.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpc_api.go b/rpc_api.go index 4eb067d6..47cb2c2b 100644 --- a/rpc_api.go +++ b/rpc_api.go @@ -396,8 +396,8 @@ func (rpcapi *ClusterRPCAPI) BlockAllocate(ctx context.Context, in *api.Pin, out in.Cid, in.ReplicationFactorMin, in.ReplicationFactorMax, - []peer.ID{}, // blacklist - []peer.ID{}, // prio list + []peer.ID{}, // blacklist + in.UserAllocations, // prio list ) if err != nil {