Skip to content

Commit

Permalink
refactor!: rename Provide* to Put*, and Find* to Get*
Browse files Browse the repository at this point in the history
  • Loading branch information
hacdias committed Aug 7, 2023
1 parent dd441bc commit 28e1fa6
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 71 deletions.
8 changes: 4 additions & 4 deletions routing/http/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
30 changes: 15 additions & 15 deletions routing/http/client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down Expand Up @@ -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},
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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)
})
Expand All @@ -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)
})
Expand All @@ -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)
})
Expand All @@ -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)
})
}
Expand Down
4 changes: 2 additions & 2 deletions routing/http/contentrouter/contentrouter.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 3 additions & 3 deletions routing/http/contentrouter/contentrouter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -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{}
Expand All @@ -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)

Expand Down
76 changes: 37 additions & 39 deletions routing/http/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Expand All @@ -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
}

Expand All @@ -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
}

Expand All @@ -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))

Check warning on line 134 in routing/http/server/server.go

View check run for this annotation

Codecov / codecov/patch

routing/http/server/server.go#L134

Added line #L134 was not covered by tests
return
}

Expand All @@ -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))

Check warning on line 161 in routing/http/server/server.go

View check run for this annotation

Codecov / codecov/patch

routing/http/server/server.go#L161

Added line #L161 was not covered by tests
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 (
Expand All @@ -178,43 +176,43 @@ 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))

Check warning on line 179 in routing/http/server/server.go

View check run for this annotation

Codecov / codecov/patch

routing/http/server/server.go#L179

Added line #L179 was not covered by tests
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)
w.WriteHeader(http.StatusOK)
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)

Check warning on line 197 in routing/http/server/server.go

View check run for this annotation

Codecov / codecov/patch

routing/http/server/server.go#L197

Added line #L197 was not covered by tests
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)

Check warning on line 203 in routing/http/server/server.go

View check run for this annotation

Codecov / codecov/patch

routing/http/server/server.go#L203

Added line #L203 was not covered by tests
return
}

_, err = w.Write(b)
if err != nil {
logger.Warn("FindProviders ndjson write error", "Error", err)
logger.Warn("GetProviders ndjson write error", "Error", err)

Check warning on line 209 in routing/http/server/server.go

View check run for this annotation

Codecov / codecov/patch

routing/http/server/server.go#L209

Added line #L209 was not covered by tests
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)

Check warning on line 215 in routing/http/server/server.go

View check run for this annotation

Codecov / codecov/patch

routing/http/server/server.go#L215

Added line #L215 was not covered by tests
return
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Loading

0 comments on commit 28e1fa6

Please sign in to comment.