Skip to content

Commit

Permalink
resolver: Add NoOpResolver
Browse files Browse the repository at this point in the history
This is a temporary backward compatibility for case when rpc_endpoint/S3_GW_RPC_ENDPOINT param is empty in config

Signed-off-by: Evgenii Baidakov <[email protected]>
  • Loading branch information
smallhive committed Aug 8, 2023
1 parent dcf11f5 commit 0fd4c8c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 8 deletions.
31 changes: 25 additions & 6 deletions api/resolver/resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,23 @@ var (
ErrNotFound = errors.New("not found")
)

// Resolver allows to resolve container id by its name.
type Resolver struct {
// Resolver allows to map container ID by container name.
type Resolver interface {
Resolve(ctx context.Context, containerName string) (cid.ID, error)
}

// NNSResolver allows to resolve container id by its name.
type NNSResolver struct {
reader *rpcNNS.ContractReader
}

// NewResolver is a constructor for the Resolver.
func NewResolver(reader *rpcNNS.ContractReader) *Resolver {
return &Resolver{reader: reader}
// NewNNSResolver is a constructor for the NNSResolver.
func NewNNSResolver(reader *rpcNNS.ContractReader) *NNSResolver {
return &NNSResolver{reader: reader}
}

// Resolve looks up the container id by it's name via NNS contract.
func (r *Resolver) Resolve(_ context.Context, name string) (cid.ID, error) {
func (r *NNSResolver) Resolve(_ context.Context, name string) (cid.ID, error) {
var result cid.ID

items, err := r.reader.GetRecords(nnsContainerDomain(name), rpcNNS.TXT)
Expand All @@ -48,3 +53,17 @@ func (r *Resolver) Resolve(_ context.Context, name string) (cid.ID, error) {
func nnsContainerDomain(name string) string {
return fmt.Sprintf("%s.%s", name, defaultZone)
}

// NoOpResolver is a special resolver for situation when [NNSResolver] can't be created.
type NoOpResolver struct {
}

// NewNoOpResolver is a constructor for the NoOpResolver.
func NewNoOpResolver() *NoOpResolver {
return &NoOpResolver{}
}

// Resolve always returns [ErrNotFound].
func (r *NoOpResolver) Resolve(_ context.Context, _ string) (cid.ID, error) {
return cid.ID{}, ErrNotFound
}
13 changes: 11 additions & 2 deletions cmd/s3-gw/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ type (
servers []Server

metrics *appMetrics
bucketResolver *resolver.Resolver
bucketResolver resolver.Resolver
services []*Service
settings *appSettings
maxClients api.MaxClients
Expand Down Expand Up @@ -205,6 +205,15 @@ func (a *App) initMetrics() {
}

func (a *App) initResolver(ctx context.Context) {
a.log.Info("rcp endpoint", zap.String("address", a.cfg.GetString(cfgRPCEndpoint)))

endpoint := a.cfg.GetString(cfgRPCEndpoint)
if endpoint == "" {
a.log.Warn("rcp endpoint is empty, NoOpResolver is used")
a.bucketResolver = resolver.NewNoOpResolver()
return
}

cl, err := rpcClient(ctx, a.cfg.GetString(cfgRPCEndpoint))
if err != nil {
a.log.Fatal("rpcclient", zap.Error(err))
Expand All @@ -218,7 +227,7 @@ func (a *App) initResolver(ctx context.Context) {
inv := invoker.New(cl, nil)
nnsReader := rpcNNS.NewReader(inv, nnsHash)

a.bucketResolver = resolver.NewResolver(nnsReader)
a.bucketResolver = resolver.NewNNSResolver(nnsReader)
}

// SystemContractHash allows to get system contract hash.
Expand Down

0 comments on commit 0fd4c8c

Please sign in to comment.