diff --git a/routing/http/client/client.go b/routing/http/client/client.go index e74d23bf1..1fe3cbc0d 100644 --- a/routing/http/client/client.go +++ b/routing/http/client/client.go @@ -157,9 +157,9 @@ func (c *measuringIter[T]) Close() error { return c.Iter.Close() } -func (c *client) FindProviders(ctx context.Context, key cid.Cid) (provs iter.ResultIter[types.Record], err error) { +func (c *client) GetProviders(ctx context.Context, key cid.Cid) (provs iter.ResultIter[types.Record], err error) { // TODO test measurements - m := newMeasurement("FindProviders") + m := newMeasurement("GetProviders") url := c.baseURL + "/routing/v1/providers/" + key.String() req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) @@ -231,7 +231,7 @@ func (c *client) FindProviders(ctx context.Context, key cid.Cid) (provs iter.Res return &measuringIter[iter.Result[types.Record]]{Iter: it, ctx: ctx, m: m}, nil } -func (c *client) FindIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) { +func (c *client) GetIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) { url := c.baseURL + "/routing/v1/ipns/" + name.String() httpReq, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) @@ -269,7 +269,7 @@ func (c *client) FindIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Reco return record, nil } -func (c *client) ProvideIPNSRecord(ctx context.Context, name ipns.Name, record *ipns.Record) error { +func (c *client) PutIPNSRecord(ctx context.Context, name ipns.Name, record *ipns.Record) error { url := c.baseURL + "/routing/v1/ipns/" + name.String() rawRecord, err := ipns.MarshalRecord(record) diff --git a/routing/http/client/client_test.go b/routing/http/client/client_test.go index 64f7f3e8a..35e2aee8a 100644 --- a/routing/http/client/client_test.go +++ b/routing/http/client/client_test.go @@ -30,17 +30,17 @@ import ( type mockContentRouter struct{ mock.Mock } -func (m *mockContentRouter) FindProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) { +func (m *mockContentRouter) GetProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) { args := m.Called(ctx, key, limit) return args.Get(0).(iter.ResultIter[types.Record]), args.Error(1) } -func (m *mockContentRouter) FindIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) { +func (m *mockContentRouter) GetIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) { args := m.Called(ctx, name) return args.Get(0).(*ipns.Record), args.Error(1) } -func (m *mockContentRouter) ProvideIPNSRecord(ctx context.Context, name ipns.Name, record *ipns.Record) error { +func (m *mockContentRouter) PutIPNSRecord(ctx context.Context, name ipns.Name, record *ipns.Record) error { args := m.Called(ctx, name, record) return args.Error(0) } @@ -190,7 +190,7 @@ func (e *osErrContains) errContains(t *testing.T, err error) { } } -func TestClient_FindProviders(t *testing.T) { +func TestClient_GetProviders(t *testing.T) { bsReadProvResp := makeBSReadProviderResp() bitswapProvs := []iter.Result[types.Record]{ {Val: &bsReadProvResp}, @@ -301,12 +301,12 @@ func TestClient_FindProviders(t *testing.T) { findProvsIter := iter.FromSlice(c.routerProvs) if c.expStreamingResponse { - router.On("FindProviders", mock.Anything, cid, 0).Return(findProvsIter, c.routerErr) + router.On("GetProviders", mock.Anything, cid, 0).Return(findProvsIter, c.routerErr) } else { - router.On("FindProviders", mock.Anything, cid, 20).Return(findProvsIter, c.routerErr) + router.On("GetProviders", mock.Anything, cid, 20).Return(findProvsIter, c.routerErr) } - provsIter, err := client.FindProviders(ctx, cid) + provsIter, err := client.GetProviders(ctx, cid) c.expErrContains.errContains(t, err) @@ -351,9 +351,9 @@ func TestClient_IPNS(t *testing.T) { client := deps.client router := deps.router - router.On("FindIPNSRecord", mock.Anything, name).Return(nil, errors.New("something wrong happened")) + router.On("GetIPNSRecord", mock.Anything, name).Return(nil, errors.New("something wrong happened")) - receivedRecord, err := client.FindIPNSRecord(context.Background(), name) + receivedRecord, err := client.GetIPNSRecord(context.Background(), name) require.Error(t, err) require.Nil(t, receivedRecord) }) @@ -367,9 +367,9 @@ func TestClient_IPNS(t *testing.T) { client := deps.client router := deps.router - router.On("FindIPNSRecord", mock.Anything, name).Return(record, nil) + router.On("GetIPNSRecord", mock.Anything, name).Return(record, nil) - receivedRecord, err := client.FindIPNSRecord(context.Background(), name) + receivedRecord, err := client.GetIPNSRecord(context.Background(), name) require.NoError(t, err) require.Equal(t, record, receivedRecord) }) @@ -383,9 +383,9 @@ func TestClient_IPNS(t *testing.T) { client := deps.client router := deps.router - router.On("FindIPNSRecord", mock.Anything, name2).Return(record, nil) + router.On("GetIPNSRecord", mock.Anything, name2).Return(record, nil) - receivedRecord, err := client.FindIPNSRecord(context.Background(), name2) + receivedRecord, err := client.GetIPNSRecord(context.Background(), name2) require.Error(t, err) require.Nil(t, receivedRecord) }) @@ -398,9 +398,9 @@ func TestClient_IPNS(t *testing.T) { client := deps.client router := deps.router - router.On("ProvideIPNSRecord", mock.Anything, name, record).Return(nil) + router.On("PutIPNSRecord", mock.Anything, name, record).Return(nil) - err := client.ProvideIPNSRecord(context.Background(), name, record) + err := client.PutIPNSRecord(context.Background(), name, record) require.NoError(t, err) }) } diff --git a/routing/http/contentrouter/contentrouter.go b/routing/http/contentrouter/contentrouter.go index 2f78e3f13..b42f58243 100644 --- a/routing/http/contentrouter/contentrouter.go +++ b/routing/http/contentrouter/contentrouter.go @@ -16,7 +16,7 @@ import ( var logger = logging.Logger("service/contentrouting") type Client interface { - FindProviders(ctx context.Context, key cid.Cid) (iter.ResultIter[types.Record], error) + GetProviders(ctx context.Context, key cid.Cid) (iter.ResultIter[types.Record], error) } type contentRouter struct { @@ -98,7 +98,7 @@ func readProviderResponses(iter iter.ResultIter[types.Record], ch chan<- peer.Ad } func (c *contentRouter) FindProvidersAsync(ctx context.Context, key cid.Cid, numResults int) <-chan peer.AddrInfo { - resultsIter, err := c.client.FindProviders(ctx, key) + resultsIter, err := c.client.GetProviders(ctx, key) if err != nil { logger.Warnw("error finding providers", "CID", key, "Error", err) ch := make(chan peer.AddrInfo) diff --git a/routing/http/contentrouter/contentrouter_test.go b/routing/http/contentrouter/contentrouter_test.go index c70485a04..2cb1d7907 100644 --- a/routing/http/contentrouter/contentrouter_test.go +++ b/routing/http/contentrouter/contentrouter_test.go @@ -16,7 +16,7 @@ import ( type mockClient struct{ mock.Mock } -func (m *mockClient) FindProviders(ctx context.Context, key cid.Cid) (iter.ResultIter[types.Record], error) { +func (m *mockClient) GetProviders(ctx context.Context, key cid.Cid) (iter.ResultIter[types.Record], error) { args := m.Called(ctx, key) return args.Get(0).(iter.ResultIter[types.Record]), args.Error(1) } @@ -38,7 +38,7 @@ func makeCID() cid.Cid { return c } -func TestFindProvidersAsync(t *testing.T) { +func TestGetProvidersAsync(t *testing.T) { key := makeCID() ctx := context.Background() client := &mockClient{} @@ -63,7 +63,7 @@ func TestFindProvidersAsync(t *testing.T) { } aisIter := iter.ToResultIter[types.Record](iter.FromSlice(ais)) - client.On("FindProviders", ctx, key).Return(aisIter, nil) + client.On("GetProviders", ctx, key).Return(aisIter, nil) aiChan := crc.FindProvidersAsync(ctx, key, 2) diff --git a/routing/http/server/server.go b/routing/http/server/server.go index 5673a14e0..9d7267d3a 100644 --- a/routing/http/server/server.go +++ b/routing/http/server/server.go @@ -36,26 +36,26 @@ const ( var logger = logging.Logger("service/server/delegatedrouting") const ( - FindProvidersPath = "/routing/v1/providers/{cid}" - IPNSPath = "/routing/v1/ipns/{cid}" + GetProvidersPath = "/routing/v1/providers/{cid}" + GetIPNSRecordPath = "/routing/v1/ipns/{cid}" ) -type FindProvidersAsyncResponse struct { +type GetProvidersAsyncResponse struct { ProviderResponse types.Record Error error } type ContentRouter interface { - // FindProviders searches for peers who are able to provide a given key. Limit - // indicates the maximum amount of results to return. 0 means unbounded. - FindProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) + // GetProviders searches for peers who are able to provide the given [cid.Cid]. + // Limit indicates the maximum amount of results to return; 0 means unbounded. + GetProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) - // FindIPNSRecord searches for an [ipns.Record] for the given [ipns.Name]. - FindIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) + // GetIPNSRecord searches for an [ipns.Record] for the given [ipns.Name]. + GetIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) - // ProvideIPNSRecord stores the provided [ipns.Record] for the given [ipns.Name]. It is - // guaranteed that the record matches the provided name. - ProvideIPNSRecord(ctx context.Context, name ipns.Name, record *ipns.Record) error + // PutIPNSRecord stores the provided [ipns.Record] for the given [ipns.Name]. + // It is guaranteed that the record matches the provided name. + PutIPNSRecord(ctx context.Context, name ipns.Name, record *ipns.Record) error } type Option func(s *server) @@ -67,16 +67,16 @@ func WithStreamingResultsDisabled() Option { } } -// WithRecordsLimit sets a limit that will be passed to ContentRouter.FindProviders -// for non-streaming requests (application/json). Default is DefaultRecordsLimit. +// WithRecordsLimit sets a limit that will be passed to [ContentRouter.GetProviders] +// for non-streaming requests (application/json). Default is [DefaultRecordsLimit]. func WithRecordsLimit(limit int) Option { return func(s *server) { s.recordsLimit = limit } } -// WithStreamingRecordsLimit sets a limit that will be passed to ContentRouter.FindProviders -// for streaming requests (application/x-ndjson). Default is DefaultStreamingRecordsLimit. +// WithStreamingRecordsLimit sets a limit that will be passed to [ContentRouter.GetProviders] +// for streaming requests (application/x-ndjson). Default is [DefaultStreamingRecordsLimit]. func WithStreamingRecordsLimit(limit int) Option { return func(s *server) { s.streamingRecordsLimit = limit @@ -95,11 +95,9 @@ func Handler(svc ContentRouter, opts ...Option) http.Handler { } r := mux.NewRouter() - r.HandleFunc(FindProvidersPath, server.findProviders).Methods(http.MethodGet) - - r.HandleFunc(IPNSPath, server.getIPNSRecord).Methods(http.MethodGet) - r.HandleFunc(IPNSPath, server.putIPNSRecord).Methods(http.MethodPut) - + r.HandleFunc(GetProvidersPath, server.getProviders).Methods(http.MethodGet) + r.HandleFunc(GetIPNSRecordPath, server.getIPNSRecord).Methods(http.MethodGet) + r.HandleFunc(GetIPNSRecordPath, server.putIPNSRecord).Methods(http.MethodPut) return r } @@ -110,12 +108,12 @@ type server struct { streamingRecordsLimit int } -func (s *server) findProviders(w http.ResponseWriter, httpReq *http.Request) { +func (s *server) getProviders(w http.ResponseWriter, httpReq *http.Request) { vars := mux.Vars(httpReq) cidStr := vars["cid"] cid, err := cid.Decode(cidStr) if err != nil { - writeErr(w, "FindProviders", http.StatusBadRequest, fmt.Errorf("unable to parse CID: %w", err)) + writeErr(w, "GetProviders", http.StatusBadRequest, fmt.Errorf("unable to parse CID: %w", err)) return } @@ -126,14 +124,14 @@ func (s *server) findProviders(w http.ResponseWriter, httpReq *http.Request) { var recordsLimit int acceptHeaders := httpReq.Header.Values("Accept") if len(acceptHeaders) == 0 { - handlerFunc = s.findProvidersJSON + handlerFunc = s.getProvidersJSON recordsLimit = s.recordsLimit } else { for _, acceptHeader := range acceptHeaders { for _, accept := range strings.Split(acceptHeader, ",") { mediaType, _, err := mime.ParseMediaType(accept) if err != nil { - writeErr(w, "FindProviders", http.StatusBadRequest, fmt.Errorf("unable to parse Accept header: %w", err)) + writeErr(w, "GetProviders", http.StatusBadRequest, fmt.Errorf("unable to parse Accept header: %w", err)) return } @@ -147,27 +145,27 @@ func (s *server) findProviders(w http.ResponseWriter, httpReq *http.Request) { } if supportsNDJSON && !s.disableNDJSON { - handlerFunc = s.findProvidersNDJSON + handlerFunc = s.getProvidersNDJSON recordsLimit = s.streamingRecordsLimit } else if supportsJSON { - handlerFunc = s.findProvidersJSON + handlerFunc = s.getProvidersJSON recordsLimit = s.recordsLimit } else { - writeErr(w, "FindProviders", http.StatusBadRequest, errors.New("no supported content types")) + writeErr(w, "GetProviders", http.StatusBadRequest, errors.New("no supported content types")) return } } - provIter, err := s.svc.FindProviders(httpReq.Context(), cid, recordsLimit) + provIter, err := s.svc.GetProviders(httpReq.Context(), cid, recordsLimit) if err != nil { - writeErr(w, "FindProviders", http.StatusInternalServerError, fmt.Errorf("delegate error: %w", err)) + writeErr(w, "GetProviders", http.StatusInternalServerError, fmt.Errorf("delegate error: %w", err)) return } handlerFunc(w, provIter) } -func (s *server) findProvidersJSON(w http.ResponseWriter, provIter iter.ResultIter[types.Record]) { +func (s *server) getProvidersJSON(w http.ResponseWriter, provIter iter.ResultIter[types.Record]) { defer provIter.Close() var ( @@ -178,17 +176,17 @@ func (s *server) findProvidersJSON(w http.ResponseWriter, provIter iter.ResultIt for provIter.Next() { res := provIter.Val() if res.Err != nil { - writeErr(w, "FindProviders", http.StatusInternalServerError, fmt.Errorf("delegate error on result %d: %w", i, res.Err)) + writeErr(w, "GetProviders", http.StatusInternalServerError, fmt.Errorf("delegate error on result %d: %w", i, res.Err)) return } providers = append(providers, res.Val) i++ } response := jsontypes.ProvidersResponse{Providers: providers} - writeJSONResult(w, "FindProviders", response) + writeJSONResult(w, "GetProviders", response) } -func (s *server) findProvidersNDJSON(w http.ResponseWriter, provIter iter.ResultIter[types.Record]) { +func (s *server) getProvidersNDJSON(w http.ResponseWriter, provIter iter.ResultIter[types.Record]) { defer provIter.Close() w.Header().Set("Content-Type", mediaTypeNDJSON) @@ -196,25 +194,25 @@ func (s *server) findProvidersNDJSON(w http.ResponseWriter, provIter iter.Result for provIter.Next() { res := provIter.Val() if res.Err != nil { - logger.Errorw("FindProviders ndjson iterator error", "Error", res.Err) + logger.Errorw("GetProviders ndjson iterator error", "Error", res.Err) return } // don't use an encoder because we can't easily differentiate writer errors from encoding errors b, err := drjson.MarshalJSONBytes(res.Val) if err != nil { - logger.Errorw("FindProviders ndjson marshal error", "Error", err) + logger.Errorw("GetProviders ndjson marshal error", "Error", err) return } _, err = w.Write(b) if err != nil { - logger.Warn("FindProviders ndjson write error", "Error", err) + logger.Warn("GetProviders ndjson write error", "Error", err) return } _, err = w.Write([]byte{'\n'}) if err != nil { - logger.Warn("FindProviders ndjson write error", "Error", err) + logger.Warn("GetProviders ndjson write error", "Error", err) return } @@ -244,7 +242,7 @@ func (s *server) getIPNSRecord(w http.ResponseWriter, r *http.Request) { return } - record, err := s.svc.FindIPNSRecord(r.Context(), name) + record, err := s.svc.GetIPNSRecord(r.Context(), name) if err != nil { writeErr(w, "GetIPNSRecord", http.StatusInternalServerError, fmt.Errorf("delegate error: %w", err)) return @@ -307,7 +305,7 @@ func (s *server) putIPNSRecord(w http.ResponseWriter, r *http.Request) { return } - err = s.svc.ProvideIPNSRecord(r.Context(), name, record) + err = s.svc.PutIPNSRecord(r.Context(), name, record) if err != nil { writeErr(w, "PutIPNSRecord", http.StatusInternalServerError, fmt.Errorf("delegate error: %w", err)) return diff --git a/routing/http/server/server_test.go b/routing/http/server/server_test.go index 64adb705b..f9e9279ed 100644 --- a/routing/http/server/server_test.go +++ b/routing/http/server/server_test.go @@ -39,7 +39,7 @@ func TestHeaders(t *testing.T) { cb, err := cid.Decode(c) require.NoError(t, err) - router.On("FindProviders", mock.Anything, cb, DefaultRecordsLimit). + router.On("GetProviders", mock.Anything, cb, DefaultRecordsLimit). Return(results, nil) resp, err := http.Get(serverAddr + "/routing/v1/providers/" + c) @@ -95,7 +95,7 @@ func TestResponse(t *testing.T) { if expectedStream { limit = DefaultStreamingRecordsLimit } - router.On("FindProviders", mock.Anything, cid, limit).Return(results, nil) + router.On("GetProviders", mock.Anything, cid, limit).Return(results, nil) urlStr := serverAddr + "/routing/v1/providers/" + cidStr req, err := http.NewRequest(http.MethodGet, urlStr, nil) @@ -177,7 +177,7 @@ func TestIPNS(t *testing.T) { require.NoError(t, err) router := &mockContentRouter{} - router.On("FindIPNSRecord", mock.Anything, name1).Return(rec, nil) + router.On("GetIPNSRecord", mock.Anything, name1).Return(rec, nil) resp := makeRequest(t, router, "/routing/v1/ipns/"+name1.String()) require.Equal(t, 200, resp.StatusCode) @@ -210,7 +210,7 @@ func TestIPNS(t *testing.T) { t.Parallel() router := &mockContentRouter{} - router.On("ProvideIPNSRecord", mock.Anything, name1, record1).Return(nil) + router.On("PutIPNSRecord", mock.Anything, name1, record1).Return(nil) server := httptest.NewServer(Handler(router)) t.Cleanup(server.Close) @@ -257,17 +257,17 @@ func TestIPNS(t *testing.T) { type mockContentRouter struct{ mock.Mock } -func (m *mockContentRouter) FindProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) { +func (m *mockContentRouter) GetProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) { args := m.Called(ctx, key, limit) return args.Get(0).(iter.ResultIter[types.Record]), args.Error(1) } -func (m *mockContentRouter) FindIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) { +func (m *mockContentRouter) GetIPNSRecord(ctx context.Context, name ipns.Name) (*ipns.Record, error) { args := m.Called(ctx, name) return args.Get(0).(*ipns.Record), args.Error(1) } -func (m *mockContentRouter) ProvideIPNSRecord(ctx context.Context, name ipns.Name, record *ipns.Record) error { +func (m *mockContentRouter) PutIPNSRecord(ctx context.Context, name ipns.Name, record *ipns.Record) error { args := m.Called(ctx, name, record) return args.Error(0) } diff --git a/routing/mock/centralized_client.go b/routing/mock/centralized_client.go index 02c68d100..03a138ef9 100644 --- a/routing/mock/centralized_client.go +++ b/routing/mock/centralized_client.go @@ -37,7 +37,7 @@ func (c *client) SearchValue(ctx context.Context, key string, opts ...routing.Op return c.vs.SearchValue(ctx, key, opts...) } -func (c *client) FindProviders(ctx context.Context, key cid.Cid) ([]peer.AddrInfo, error) { +func (c *client) GetProviders(ctx context.Context, key cid.Cid) ([]peer.AddrInfo, error) { return c.server.Providers(key), nil }