Skip to content

Commit

Permalink
satellite/metainfo: return NotFound status for (Get|Set)BucketVersioning
Browse files Browse the repository at this point in the history
We need to return NotFound rpc status when bucket doesn't exist.

Change-Id: I3abdd588e2af288618b05513884bc0c545bcbacf
  • Loading branch information
mniewrzal authored and Storj Robot committed Nov 27, 2023
1 parent c2788ab commit 220920e
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 2 deletions.
6 changes: 6 additions & 0 deletions satellite/metainfo/endpoint_bucket.go
Expand Up @@ -104,6 +104,9 @@ func (endpoint *Endpoint) GetBucketVersioning(ctx context.Context, req *pb.GetBu

versioning, err := endpoint.buckets.GetBucketVersioningState(ctx, req.GetName(), keyInfo.ProjectID)
if err != nil {
if buckets.ErrBucketNotFound.Has(err) {
return nil, rpcstatus.Error(rpcstatus.NotFound, err.Error())
}
endpoint.log.Error("internal", zap.Error(err))
return nil, rpcstatus.Error(rpcstatus.Internal, "unable to get versioning state for the bucket")
}
Expand Down Expand Up @@ -138,6 +141,9 @@ func (endpoint *Endpoint) SetBucketVersioning(ctx context.Context, req *pb.SetBu
err = endpoint.buckets.SuspendBucketVersioning(ctx, req.GetName(), keyInfo.ProjectID)
}
if err != nil {
if buckets.ErrBucketNotFound.Has(err) {
return nil, rpcstatus.Error(rpcstatus.NotFound, err.Error())
}
endpoint.log.Error("internal", zap.Error(err))
return nil, rpcstatus.Error(rpcstatus.Internal, "unable to enable versioning for the bucket")
}
Expand Down
26 changes: 26 additions & 0 deletions satellite/metainfo/endpoint_bucket_test.go
Expand Up @@ -379,6 +379,32 @@ func TestEnableSuspendBucketVersioning(t *testing.T) {
return err
}

_, err := satellite.API.Metainfo.Endpoint.GetBucketVersioning(ctx, &pb.GetBucketVersioningRequest{
Header: &pb.RequestHeader{
ApiKey: planet.Uplinks[0].APIKey[satellite.ID()].SerializeRaw(),
},
Name: []byte("non-existing-bucket"),
})
require.True(t, errs2.IsRPC(err, rpcstatus.NotFound))

_, err = satellite.API.Metainfo.Endpoint.SetBucketVersioning(ctx, &pb.SetBucketVersioningRequest{
Header: &pb.RequestHeader{
ApiKey: planet.Uplinks[0].APIKey[satellite.ID()].SerializeRaw(),
},
Name: []byte("non-existing-bucket"),
Versioning: true,
})
require.True(t, errs2.IsRPC(err, rpcstatus.NotFound))

_, err = satellite.API.Metainfo.Endpoint.SetBucketVersioning(ctx, &pb.SetBucketVersioningRequest{
Header: &pb.RequestHeader{
ApiKey: planet.Uplinks[0].APIKey[satellite.ID()].SerializeRaw(),
},
Name: []byte("non-existing-bucket"),
Versioning: false,
})
require.True(t, errs2.IsRPC(err, rpcstatus.NotFound))

for _, tt := range []struct {
name string
initialVersioningState buckets.Versioning
Expand Down
10 changes: 8 additions & 2 deletions satellite/satellitedb/bucketsdb.go
Expand Up @@ -135,7 +135,10 @@ func (db *bucketsDB) EnableBucketVersioning(ctx context.Context, bucketName []by
if err != nil {
return buckets.ErrBucket.Wrap(err)
}
if dbxBucket == nil || buckets.Versioning(dbxBucket.Versioning) != buckets.VersioningEnabled {
if dbxBucket == nil {
return buckets.ErrBucketNotFound.New("%s", bucketName)
}
if buckets.Versioning(dbxBucket.Versioning) != buckets.VersioningEnabled {
return buckets.ErrBucket.New("cannot transition bucket versioning state to enabled")
}
return nil
Expand All @@ -155,7 +158,10 @@ func (db *bucketsDB) SuspendBucketVersioning(ctx context.Context, bucketName []b
if err != nil {
return buckets.ErrBucket.Wrap(err)
}
if dbxBucket == nil || buckets.Versioning(dbxBucket.Versioning) != buckets.VersioningSuspended {
if dbxBucket == nil {
return buckets.ErrBucketNotFound.New("%s", bucketName)
}
if buckets.Versioning(dbxBucket.Versioning) != buckets.VersioningSuspended {
return buckets.ErrBucket.New("cannot transition bucket versioning state to suspended")
}
return nil
Expand Down

0 comments on commit 220920e

Please sign in to comment.