satellite/metabase: adjust UpdateMetadata for versioning
Change-Id: Id18908c28384696bf234a8f879c5b5e550ddb8cf
This commit is contained in:
parent
080f58acfe
commit
d98498d17f
@ -175,16 +175,16 @@ func (step DeleteBucketObjects) Check(ctx *testcontext.Context, t testing.TB, db
|
||||
checkError(t, err, step.ErrClass, step.ErrText)
|
||||
}
|
||||
|
||||
// UpdateObjectMetadata is for testing metabase.UpdateObjectMetadata.
|
||||
type UpdateObjectMetadata struct {
|
||||
Opts metabase.UpdateObjectMetadata
|
||||
// UpdateObjectLastCommittedMetadata is for testing metabase.UpdateObjectLastCommittedMetadata.
|
||||
type UpdateObjectLastCommittedMetadata struct {
|
||||
Opts metabase.UpdateObjectLastCommittedMetadata
|
||||
ErrClass *errs.Class
|
||||
ErrText string
|
||||
}
|
||||
|
||||
// Check runs the test.
|
||||
func (step UpdateObjectMetadata) Check(ctx *testcontext.Context, t testing.TB, db *metabase.DB) {
|
||||
err := db.UpdateObjectMetadata(ctx, step.Opts)
|
||||
func (step UpdateObjectLastCommittedMetadata) Check(ctx *testcontext.Context, t testing.TB, db *metabase.DB) {
|
||||
err := db.UpdateObjectLastCommittedMetadata(ctx, step.Opts)
|
||||
checkError(t, err, step.ErrClass, step.ErrText)
|
||||
}
|
||||
|
||||
|
@ -11,8 +11,8 @@ import (
|
||||
"storj.io/common/uuid"
|
||||
)
|
||||
|
||||
// UpdateObjectMetadata contains arguments necessary for replacing an object metadata.
|
||||
type UpdateObjectMetadata struct {
|
||||
// UpdateObjectLastCommittedMetadata contains arguments necessary for replacing an object metadata.
|
||||
type UpdateObjectLastCommittedMetadata struct {
|
||||
ProjectID uuid.UUID
|
||||
BucketName string
|
||||
ObjectKey ObjectKey
|
||||
@ -24,7 +24,7 @@ type UpdateObjectMetadata struct {
|
||||
}
|
||||
|
||||
// Verify object stream fields.
|
||||
func (obj *UpdateObjectMetadata) Verify() error {
|
||||
func (obj *UpdateObjectLastCommittedMetadata) Verify() error {
|
||||
switch {
|
||||
case obj.ProjectID.IsZero():
|
||||
return ErrInvalidRequest.New("ProjectID missing")
|
||||
@ -38,8 +38,8 @@ func (obj *UpdateObjectMetadata) Verify() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateObjectMetadata updates an object metadata.
|
||||
func (db *DB) UpdateObjectMetadata(ctx context.Context, opts UpdateObjectMetadata) (err error) {
|
||||
// UpdateObjectLastCommittedMetadata updates an object metadata.
|
||||
func (db *DB) UpdateObjectLastCommittedMetadata(ctx context.Context, opts UpdateObjectLastCommittedMetadata) (err error) {
|
||||
defer mon.Task()(&ctx)(&err)
|
||||
|
||||
if err := opts.Verify(); err != nil {
|
||||
@ -60,12 +60,13 @@ func (db *DB) UpdateObjectMetadata(ctx context.Context, opts UpdateObjectMetadat
|
||||
(project_id, bucket_name, object_key) = ($1, $2, $3) AND
|
||||
version IN (SELECT version FROM objects WHERE
|
||||
(project_id, bucket_name, object_key) = ($1, $2, $3) AND
|
||||
status = `+statusCommittedUnversioned+` AND
|
||||
status <> `+statusPending+` AND
|
||||
(expires_at IS NULL OR expires_at > now())
|
||||
ORDER BY version desc
|
||||
LIMIT 1
|
||||
) AND
|
||||
stream_id = $4 AND
|
||||
status = `+statusCommittedUnversioned,
|
||||
status IN `+statusesCommitted,
|
||||
opts.ProjectID, []byte(opts.BucketName), opts.ObjectKey, opts.StreamID,
|
||||
opts.EncryptedMetadataNonce, opts.EncryptedMetadata, opts.EncryptedMetadataEncryptedKey)
|
||||
if err != nil {
|
||||
|
@ -14,7 +14,7 @@ import (
|
||||
"storj.io/storj/satellite/metabase/metabasetest"
|
||||
)
|
||||
|
||||
func TestUpdateObjectMetadata(t *testing.T) {
|
||||
func TestUpdateObjectLastCommittedMetadata(t *testing.T) {
|
||||
metabasetest.Run(t, func(ctx *testcontext.Context, t *testing.T, db *metabase.DB) {
|
||||
obj := metabasetest.RandObjectStream()
|
||||
now := time.Now()
|
||||
@ -24,8 +24,8 @@ func TestUpdateObjectMetadata(t *testing.T) {
|
||||
test := test
|
||||
t.Run(test.Name, func(t *testing.T) {
|
||||
defer metabasetest.DeleteAll{}.Check(ctx, t, db)
|
||||
metabasetest.UpdateObjectMetadata{
|
||||
Opts: metabase.UpdateObjectMetadata{
|
||||
metabasetest.UpdateObjectLastCommittedMetadata{
|
||||
Opts: metabase.UpdateObjectLastCommittedMetadata{
|
||||
ProjectID: test.ObjectLocation.ProjectID,
|
||||
BucketName: test.ObjectLocation.BucketName,
|
||||
ObjectKey: test.ObjectLocation.ObjectKey,
|
||||
@ -39,8 +39,8 @@ func TestUpdateObjectMetadata(t *testing.T) {
|
||||
|
||||
t.Run("StreamID missing", func(t *testing.T) {
|
||||
defer metabasetest.DeleteAll{}.Check(ctx, t, db)
|
||||
metabasetest.UpdateObjectMetadata{
|
||||
Opts: metabase.UpdateObjectMetadata{
|
||||
metabasetest.UpdateObjectLastCommittedMetadata{
|
||||
Opts: metabase.UpdateObjectLastCommittedMetadata{
|
||||
ProjectID: obj.ProjectID,
|
||||
BucketName: obj.BucketName,
|
||||
ObjectKey: obj.ObjectKey,
|
||||
@ -55,8 +55,8 @@ func TestUpdateObjectMetadata(t *testing.T) {
|
||||
t.Run("Metadata missing", func(t *testing.T) {
|
||||
defer metabasetest.DeleteAll{}.Check(ctx, t, db)
|
||||
|
||||
metabasetest.UpdateObjectMetadata{
|
||||
Opts: metabase.UpdateObjectMetadata{
|
||||
metabasetest.UpdateObjectLastCommittedMetadata{
|
||||
Opts: metabase.UpdateObjectLastCommittedMetadata{
|
||||
ProjectID: obj.ProjectID,
|
||||
BucketName: obj.BucketName,
|
||||
ObjectKey: obj.ObjectKey,
|
||||
@ -88,8 +88,8 @@ func TestUpdateObjectMetadata(t *testing.T) {
|
||||
},
|
||||
}.Check(ctx, t, db)
|
||||
|
||||
metabasetest.UpdateObjectMetadata{
|
||||
Opts: metabase.UpdateObjectMetadata{
|
||||
metabasetest.UpdateObjectLastCommittedMetadata{
|
||||
Opts: metabase.UpdateObjectLastCommittedMetadata{
|
||||
ProjectID: obj.ProjectID,
|
||||
BucketName: obj.BucketName,
|
||||
ObjectKey: obj.ObjectKey,
|
||||
@ -148,8 +148,8 @@ func TestUpdateObjectMetadata(t *testing.T) {
|
||||
},
|
||||
}.Check(ctx, t, db)
|
||||
|
||||
metabasetest.UpdateObjectMetadata{
|
||||
Opts: metabase.UpdateObjectMetadata{
|
||||
metabasetest.UpdateObjectLastCommittedMetadata{
|
||||
Opts: metabase.UpdateObjectLastCommittedMetadata{
|
||||
ProjectID: newObj.ProjectID,
|
||||
BucketName: newObj.BucketName,
|
||||
ObjectKey: newObj.ObjectKey,
|
||||
@ -182,5 +182,8 @@ func TestUpdateObjectMetadata(t *testing.T) {
|
||||
},
|
||||
}.Check(ctx, t, db)
|
||||
})
|
||||
|
||||
// TODO(ver): add tests for committed/deletemarker versioned/unversioned
|
||||
// TODO(ver): check that we cannot add metadata to a delete marker
|
||||
})
|
||||
}
|
||||
|
@ -1458,7 +1458,7 @@ func (endpoint *Endpoint) UpdateObjectMetadata(ctx context.Context, req *pb.Obje
|
||||
encryptedMetadataNonce = req.EncryptedMetadataNonce[:]
|
||||
}
|
||||
|
||||
err = endpoint.metabase.UpdateObjectMetadata(ctx, metabase.UpdateObjectMetadata{
|
||||
err = endpoint.metabase.UpdateObjectLastCommittedMetadata(ctx, metabase.UpdateObjectLastCommittedMetadata{
|
||||
ProjectID: keyInfo.ProjectID,
|
||||
BucketName: string(req.Bucket),
|
||||
ObjectKey: metabase.ObjectKey(req.EncryptedObjectKey),
|
||||
|
Loading…
Reference in New Issue
Block a user