Skip to content

Commit

Permalink
satellite/metainfo: fix setting object ZombieDeletionDeadline
Browse files Browse the repository at this point in the history
So far we were setting ZombieDeletionDeadline alwasy as nil and because of that DB default was never set. This change adds separate query for inserting object if deadline is not set.

Change-Id: I3d6a16570e7c74b5304e13edad8c7adcd021340c
  • Loading branch information
mniewrzal committed May 11, 2021
1 parent 7fb8661 commit 0330064
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 53 deletions.
14 changes: 13 additions & 1 deletion satellite/metabase/commit.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import (
// we need to disable PlainSize validation for old uplinks.
const validatePlainSize = false

const defaultZombieDeletionPeriod = 24 * time.Hour

var (
// ErrInvalidRequest is used to indicate invalid requests.
ErrInvalidRequest = errs.Class("metabase: invalid request")
Expand Down Expand Up @@ -50,6 +52,11 @@ func (db *DB) BeginObjectNextVersion(ctx context.Context, opts BeginObjectNextVe
return -1, ErrInvalidRequest.New("Version should be metabase.NextVersion")
}

if opts.ZombieDeletionDeadline == nil {
deadline := time.Now().Add(defaultZombieDeletionPeriod)
opts.ZombieDeletionDeadline = &deadline
}

row := db.db.QueryRow(ctx, `
INSERT INTO objects (
project_id, bucket_name, object_key, version, stream_id,
Expand Down Expand Up @@ -101,6 +108,11 @@ func (db *DB) BeginObjectExactVersion(ctx context.Context, opts BeginObjectExact
return Object{}, ErrInvalidRequest.New("Version should not be metabase.NextVersion")
}

if opts.ZombieDeletionDeadline == nil {
deadline := time.Now().Add(defaultZombieDeletionPeriod)
opts.ZombieDeletionDeadline = &deadline
}

object := Object{
ObjectStream: ObjectStream{
ProjectID: opts.ProjectID,
Expand All @@ -119,7 +131,7 @@ func (db *DB) BeginObjectExactVersion(ctx context.Context, opts BeginObjectExact
project_id, bucket_name, object_key, version, stream_id,
expires_at, encryption,
zombie_deletion_deadline
) values (
) VALUES (
$1, $2, $3, $4, $5,
$6, $7,
$8
Expand Down
4 changes: 3 additions & 1 deletion satellite/metabase/commit_object_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ func TestCommitObjectWithSegments(t *testing.T) {
Version: 1,
}.Check(ctx, t, db)
now := time.Now()
zombieDeadline := now.Add(24 * time.Hour)

pos00 := metabase.SegmentPosition{Part: 0, Index: 0}
metabasetest.CommitObjectWithSegments{
Expand All @@ -204,7 +205,8 @@ func TestCommitObjectWithSegments(t *testing.T) {
CreatedAt: now,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
}.Check(ctx, t, db)
Expand Down
65 changes: 44 additions & 21 deletions satellite/metabase/commit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ func TestBeginObjectNextVersion(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)

now1 := time.Now()
zombieDeadline := now1.Add(24 * time.Hour)
futureTime := now1.Add(10 * 24 * time.Hour)

objectStream.Version = metabase.NextVersion

Expand All @@ -78,8 +80,9 @@ func TestBeginObjectNextVersion(t *testing.T) {

metabasetest.BeginObjectNextVersion{
Opts: metabase.BeginObjectNextVersion{
ObjectStream: objectStream,
Encryption: metabasetest.DefaultEncryption,
ObjectStream: objectStream,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &futureTime,
},
Version: 2,
}.Check(ctx, t, db)
Expand All @@ -97,7 +100,8 @@ func TestBeginObjectNextVersion(t *testing.T) {
CreatedAt: now1,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
{
ObjectStream: metabase.ObjectStream{
Expand All @@ -110,7 +114,8 @@ func TestBeginObjectNextVersion(t *testing.T) {
CreatedAt: now2,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &futureTime,
},
},
}.Check(ctx, t, db)
Expand Down Expand Up @@ -328,6 +333,7 @@ func TestBeginObjectExactVersion(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)

now1 := time.Now()
zombieDeadline := now1.Add(24 * time.Hour)

objectStream.Version = 5

Expand All @@ -352,7 +358,8 @@ func TestBeginObjectExactVersion(t *testing.T) {
CreatedAt: now1,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
}.Check(ctx, t, db)
Expand All @@ -362,6 +369,7 @@ func TestBeginObjectExactVersion(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)

now1 := time.Now()
zombieDeadline := now1.Add(24 * time.Hour)

objectStream.Version = 5

Expand Down Expand Up @@ -396,7 +404,8 @@ func TestBeginObjectExactVersion(t *testing.T) {
CreatedAt: now1,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
}.Check(ctx, t, db)
Expand Down Expand Up @@ -772,6 +781,7 @@ func TestBeginSegment(t *testing.T) {
t.Run("begin segment successfully", func(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)
now := time.Now()
zombieDeadline := now.Add(24 * time.Hour)

metabasetest.BeginObjectExactVersion{
Opts: metabase.BeginObjectExactVersion{
Expand Down Expand Up @@ -799,7 +809,8 @@ func TestBeginSegment(t *testing.T) {
CreatedAt: now,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
}.Check(ctx, t, db)
Expand All @@ -808,6 +819,7 @@ func TestBeginSegment(t *testing.T) {
t.Run("multiple begin segment successfully", func(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)
now := time.Now()
zombieDeadline := now.Add(24 * time.Hour)

metabasetest.BeginObjectExactVersion{
Opts: metabase.BeginObjectExactVersion{
Expand Down Expand Up @@ -837,7 +849,8 @@ func TestBeginSegment(t *testing.T) {
CreatedAt: now,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
}.Check(ctx, t, db)
Expand Down Expand Up @@ -869,6 +882,7 @@ func TestCommitSegment(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)

now := time.Now()
zombieDeadline := now.Add(24 * time.Hour)
metabasetest.BeginObjectExactVersion{
Opts: metabase.BeginObjectExactVersion{
ObjectStream: obj,
Expand Down Expand Up @@ -1090,7 +1104,8 @@ func TestCommitSegment(t *testing.T) {
CreatedAt: now,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
}.Check(ctx, t, db)
Expand All @@ -1100,6 +1115,7 @@ func TestCommitSegment(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)

now1 := time.Now()
zombieDeadline := now1.Add(24 * time.Hour)
metabasetest.BeginObjectExactVersion{
Opts: metabase.BeginObjectExactVersion{
ObjectStream: obj,
Expand Down Expand Up @@ -1165,7 +1181,8 @@ func TestCommitSegment(t *testing.T) {
CreatedAt: now1,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
Segments: []metabase.RawSegment{
Expand Down Expand Up @@ -1283,6 +1300,7 @@ func TestCommitSegment(t *testing.T) {
encryptedETag := testrand.Bytes(32)

now := time.Now()
zombieDeadline := now.Add(24 * time.Hour)
metabasetest.BeginObjectExactVersion{
Opts: metabase.BeginObjectExactVersion{
ObjectStream: obj,
Expand Down Expand Up @@ -1315,7 +1333,8 @@ func TestCommitSegment(t *testing.T) {
CreatedAt: now,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
Segments: []metabase.RawSegment{
Expand Down Expand Up @@ -1345,7 +1364,7 @@ func TestCommitInlineSegment(t *testing.T) {
metabasetest.Run(t, func(ctx *testcontext.Context, t *testing.T, db *metabase.DB) {
obj := metabasetest.RandObjectStream()
now := time.Now()

zombieDeadline := now.Add(24 * time.Hour)
for _, test := range metabasetest.InvalidObjectStreams(obj) {
test := test
t.Run(test.Name, func(t *testing.T) {
Expand Down Expand Up @@ -1439,6 +1458,7 @@ func TestCommitInlineSegment(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)

now1 := time.Now()

metabasetest.BeginObjectExactVersion{
Opts: metabase.BeginObjectExactVersion{
ObjectStream: obj,
Expand Down Expand Up @@ -1487,7 +1507,8 @@ func TestCommitInlineSegment(t *testing.T) {
CreatedAt: now1,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
Segments: []metabase.RawSegment{
Expand Down Expand Up @@ -1601,10 +1622,11 @@ func TestCommitInlineSegment(t *testing.T) {
metabasetest.Verify{
Objects: []metabase.RawObject{
{
ObjectStream: obj,
CreatedAt: now,
Status: metabase.Pending,
Encryption: metabasetest.DefaultEncryption,
ObjectStream: obj,
CreatedAt: now,
Status: metabase.Pending,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
Segments: []metabase.RawSegment{
Expand Down Expand Up @@ -1658,10 +1680,11 @@ func TestCommitInlineSegment(t *testing.T) {
metabasetest.Verify{
Objects: []metabase.RawObject{
{
ObjectStream: obj,
CreatedAt: now,
Status: metabase.Pending,
Encryption: metabasetest.DefaultEncryption,
ObjectStream: obj,
CreatedAt: now,
Status: metabase.Pending,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
Segments: []metabase.RawSegment{
Expand Down
21 changes: 13 additions & 8 deletions satellite/metabase/delete_objects_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ func TestDeleteExpiredObjects(t *testing.T) {
obj3 := metabasetest.RandObjectStream()

now := time.Now()
zombieDeadline := now.Add(24 * time.Hour)
pastTime := now.Add(-1 * time.Hour)
futureTime := now.Add(1 * time.Hour)

Expand Down Expand Up @@ -80,15 +81,17 @@ func TestDeleteExpiredObjects(t *testing.T) {
CreatedAt: now,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
{
ObjectStream: obj3,
CreatedAt: now,
ExpiresAt: &futureTime,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
},
}.Check(ctx, t, db)
Expand Down Expand Up @@ -171,6 +174,7 @@ func TestDeleteZombieObjects(t *testing.T) {
obj3 := metabasetest.RandObjectStream()

now := time.Now()
zombieDeadline := now.Add(24 * time.Hour)
pastTime := now.Add(-1 * time.Hour)
futureTime := now.Add(1 * time.Hour)

Expand Down Expand Up @@ -230,15 +234,16 @@ func TestDeleteZombieObjects(t *testing.T) {
CreatedAt: now,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &zombieDeadline,
},
{
ObjectStream: obj3,
CreatedAt: now,
ZombieDeletionDeadline: &futureTime,
Status: metabase.Pending,
ObjectStream: obj3,
CreatedAt: now,
Status: metabase.Pending,

Encryption: metabasetest.DefaultEncryption,
Encryption: metabasetest.DefaultEncryption,
ZombieDeletionDeadline: &futureTime,
},
},
}.Check(ctx, t, db)
Expand Down

0 comments on commit 0330064

Please sign in to comment.