satellite/metabase: simplify UpdateObjectLastCommitted

Change-Id: Ifec596ab1868baa03688e717adec7d2ab45eafa9
This commit is contained in:
Egon Elbre 2023-10-27 12:50:28 +03:00
parent 55bddb6ce1
commit 1fa918c255
3 changed files with 26 additions and 54 deletions

View File

@ -13,10 +13,8 @@ import (
// UpdateObjectLastCommittedMetadata contains arguments necessary for replacing an object metadata. // UpdateObjectLastCommittedMetadata contains arguments necessary for replacing an object metadata.
type UpdateObjectLastCommittedMetadata struct { type UpdateObjectLastCommittedMetadata struct {
ProjectID uuid.UUID ObjectLocation
BucketName string StreamID uuid.UUID
ObjectKey ObjectKey
StreamID uuid.UUID
EncryptedMetadata []byte EncryptedMetadata []byte
EncryptedMetadataNonce []byte EncryptedMetadataNonce []byte
@ -25,14 +23,10 @@ type UpdateObjectLastCommittedMetadata struct {
// Verify object stream fields. // Verify object stream fields.
func (obj *UpdateObjectLastCommittedMetadata) Verify() error { func (obj *UpdateObjectLastCommittedMetadata) Verify() error {
switch { if err := obj.ObjectLocation.Verify(); err != nil {
case obj.ProjectID.IsZero(): return err
return ErrInvalidRequest.New("ProjectID missing") }
case obj.BucketName == "": if obj.StreamID.IsZero() {
return ErrInvalidRequest.New("BucketName missing")
case len(obj.ObjectKey) == 0:
return ErrInvalidRequest.New("ObjectKey missing")
case obj.StreamID.IsZero():
return ErrInvalidRequest.New("StreamID missing") return ErrInvalidRequest.New("StreamID missing")
} }
return nil return nil

View File

@ -23,9 +23,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db) defer metabasetest.DeleteAll{}.Check(ctx, t, db)
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: test.ObjectLocation.ProjectID, ObjectLocation: test.ObjectLocation,
BucketName: test.ObjectLocation.BucketName,
ObjectKey: test.ObjectLocation.ObjectKey,
}, },
ErrClass: test.ErrClass, ErrClass: test.ErrClass,
ErrText: test.ErrText, ErrText: test.ErrText,
@ -40,10 +38,8 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
obj := metabasetest.RandObjectStream() obj := metabasetest.RandObjectStream()
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: obj.ProjectID, ObjectLocation: obj.Location(),
BucketName: obj.BucketName, StreamID: uuid.UUID{},
ObjectKey: obj.ObjectKey,
StreamID: uuid.UUID{},
}, },
ErrClass: &metabase.ErrInvalidRequest, ErrClass: &metabase.ErrInvalidRequest,
ErrText: "StreamID missing", ErrText: "StreamID missing",
@ -57,10 +53,8 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
obj := metabasetest.RandObjectStream() obj := metabasetest.RandObjectStream()
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: obj.ProjectID, ObjectLocation: obj.Location(),
BucketName: obj.BucketName, StreamID: obj.StreamID,
ObjectKey: obj.ObjectKey,
StreamID: obj.StreamID,
}, },
ErrClass: &metabase.ErrObjectNotFound, ErrClass: &metabase.ErrObjectNotFound,
ErrText: "object with specified version and committed status is missing", ErrText: "object with specified version and committed status is missing",
@ -80,10 +74,8 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: obj.ProjectID, ObjectLocation: object.Location(),
BucketName: obj.BucketName, StreamID: object.StreamID,
ObjectKey: obj.ObjectKey,
StreamID: obj.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],
EncryptedMetadataEncryptedKey: encryptedMetadataKey, EncryptedMetadataEncryptedKey: encryptedMetadataKey,
@ -117,9 +109,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: object2.ProjectID, ObjectLocation: object2.Location(),
BucketName: object2.BucketName,
ObjectKey: object2.ObjectKey,
StreamID: object2.StreamID, StreamID: object2.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],
@ -151,9 +141,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: object.ProjectID, ObjectLocation: object.Location(),
BucketName: object.BucketName,
ObjectKey: object.ObjectKey,
StreamID: object.StreamID, StreamID: object.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],
@ -203,9 +191,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
// verify we cannot update the metadata of a deleted object // verify we cannot update the metadata of a deleted object
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: object.ProjectID, ObjectLocation: object.Location(),
BucketName: object.BucketName,
ObjectKey: object.ObjectKey,
StreamID: object.StreamID, StreamID: object.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],
@ -218,9 +204,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
// verify cannot update the metadata of the delete marker either // verify cannot update the metadata of the delete marker either
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: marker.ProjectID, ObjectLocation: marker.Location(),
BucketName: marker.BucketName,
ObjectKey: marker.ObjectKey,
StreamID: marker.StreamID, StreamID: marker.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],
@ -276,9 +260,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
// verify we cannot update the metadata of a deleted object // verify we cannot update the metadata of a deleted object
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: object2.ProjectID, ObjectLocation: object2.Location(),
BucketName: object2.BucketName,
ObjectKey: object2.ObjectKey,
StreamID: object2.StreamID, StreamID: object2.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],
@ -291,9 +273,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
// verify cannot update the metadata of the delete marker either // verify cannot update the metadata of the delete marker either
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: marker.ProjectID, ObjectLocation: marker.Location(),
BucketName: marker.BucketName,
ObjectKey: marker.ObjectKey,
StreamID: marker.StreamID, StreamID: marker.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],
@ -346,9 +326,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: object2.ProjectID, ObjectLocation: object2.Location(),
BucketName: object2.BucketName,
ObjectKey: object2.ObjectKey,
StreamID: object2.StreamID, StreamID: object2.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],
@ -391,9 +369,7 @@ func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
metabasetest.UpdateObjectLastCommittedMetadata{ metabasetest.UpdateObjectLastCommittedMetadata{
Opts: metabase.UpdateObjectLastCommittedMetadata{ Opts: metabase.UpdateObjectLastCommittedMetadata{
ProjectID: object3.ProjectID, ObjectLocation: object3.Location(),
BucketName: object3.BucketName,
ObjectKey: object3.ObjectKey,
StreamID: object3.StreamID, StreamID: object3.StreamID,
EncryptedMetadata: encryptedMetadata, EncryptedMetadata: encryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce[:], EncryptedMetadataNonce: encryptedMetadataNonce[:],

View File

@ -1471,9 +1471,11 @@ func (endpoint *Endpoint) UpdateObjectMetadata(ctx context.Context, req *pb.Obje
} }
err = endpoint.metabase.UpdateObjectLastCommittedMetadata(ctx, metabase.UpdateObjectLastCommittedMetadata{ err = endpoint.metabase.UpdateObjectLastCommittedMetadata(ctx, metabase.UpdateObjectLastCommittedMetadata{
ProjectID: keyInfo.ProjectID, ObjectLocation: metabase.ObjectLocation{
BucketName: string(req.Bucket), ProjectID: keyInfo.ProjectID,
ObjectKey: metabase.ObjectKey(req.EncryptedObjectKey), BucketName: string(req.Bucket),
ObjectKey: metabase.ObjectKey(req.EncryptedObjectKey),
},
StreamID: id, StreamID: id,
EncryptedMetadata: req.EncryptedMetadata, EncryptedMetadata: req.EncryptedMetadata,
EncryptedMetadataNonce: encryptedMetadataNonce, EncryptedMetadataNonce: encryptedMetadataNonce,