Skip to content

Commit

Permalink
satellite/metabase: remove some usages of UnderlyingTagSQL
Browse files Browse the repository at this point in the history
This method leak internals of metabase implementation and we would
like to remove it at the end. For now this change removes some of
of UnderlyingTagSQL occurrences.

Change-Id: I5ae334fcd75910456750df8ec7fdd54e89b5c433
  • Loading branch information
mniewrzal committed Apr 16, 2024
1 parent 67e397d commit 60353b1
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 51 deletions.
38 changes: 16 additions & 22 deletions satellite/metabase/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
package metabase_test

import (
"strconv"
"testing"
"time"

Expand Down Expand Up @@ -32,30 +31,25 @@ func TestDisallowDoubleUnversioned(t *testing.T) {
objStream := metabasetest.RandObjectStream()
obj := metabasetest.CreateObject(ctx, t, db, objStream, 0)

internaldb := db.UnderlyingTagSQL()
_, err := internaldb.Exec(ctx, `
INSERT INTO objects (
project_id, bucket_name, object_key, version, stream_id,
status
) VALUES (
$1, $2, $3, $4, $5,
`+strconv.Itoa(int(metabase.CommittedUnversioned))+`
)
`, obj.ProjectID, []byte(obj.BucketName), obj.ObjectKey, obj.Version+1, testrand.UUID(),
)
object := metabase.RawObject{
ObjectStream: metabase.ObjectStream{
ProjectID: obj.ProjectID,
BucketName: obj.BucketName,
ObjectKey: obj.ObjectKey,
Version: obj.Version + 1,
StreamID: testrand.UUID(),
},
Status: metabase.CommittedUnversioned,
}

err := db.TestingBatchInsertObjects(ctx, []metabase.RawObject{object})

require.True(t, pgerrcode.IsConstraintViolation(err))
require.ErrorContains(t, err, "objects_one_unversioned_per_location")

_, err = internaldb.Exec(ctx, `
INSERT INTO objects (
project_id, bucket_name, object_key, version, stream_id,
status
) VALUES (
$1, $2, $3, $4, $5,
`+strconv.Itoa(int(metabase.DeleteMarkerUnversioned))+`
)
`, obj.ProjectID, []byte(obj.BucketName), obj.ObjectKey, obj.Version+1, testrand.UUID(),
)
object.Status = metabase.DeleteMarkerUnversioned
err = db.TestingBatchInsertObjects(ctx, []metabase.RawObject{object})

require.True(t, pgerrcode.IsConstraintViolation(err))
require.ErrorContains(t, err, "objects_one_unversioned_per_location")

Expand Down
16 changes: 7 additions & 9 deletions satellite/metabase/delete_objects_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -483,15 +483,13 @@ func TestDeleteZombieObjects(t *testing.T) {
t.Run("migrated objects", func(t *testing.T) {
defer metabasetest.DeleteAll{}.Check(ctx, t, db)

_, err := db.TestingBeginObjectExactVersion(ctx, metabase.BeginObjectExactVersion{
ObjectStream: obj1,
})
require.NoError(t, err)

// metabase is always setting default value for zombie_deletion_deadline
// so we need to set it manually
_, err = db.UnderlyingTagSQL().Exec(ctx, "UPDATE objects SET zombie_deletion_deadline = NULL")
require.NoError(t, err)
require.NoError(t, db.TestingBatchInsertObjects(ctx, []metabase.RawObject{
{
ObjectStream: obj1,
Status: metabase.Pending,
ZombieDeletionDeadline: nil,
},
}))

objects, err := db.TestingAllObjects(ctx)
require.NoError(t, err)
Expand Down
30 changes: 10 additions & 20 deletions satellite/metabase/zombiedeletion/zombiedeletion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"storj.io/storj/private/testplanet"
"storj.io/storj/satellite"
"storj.io/storj/satellite/metabase"
"storj.io/storj/satellite/metabase/metabasetest"
"storj.io/uplink/private/testuplink"
)

Expand Down Expand Up @@ -123,8 +124,7 @@ func TestZombieDeletion_LastSegmentActive(t *testing.T) {
require.NoError(t, err)
_, err = partUpload.Write(testrand.Bytes(140 * memory.KiB))
require.NoError(t, err)
err = partUpload.Commit()
require.NoError(t, err)
require.NoError(t, partUpload.Commit())

objects, err := planet.Satellites[0].Metabase.DB.TestingAllObjects(ctx)
require.NoError(t, err)
Expand All @@ -135,30 +135,24 @@ func TestZombieDeletion_LastSegmentActive(t *testing.T) {
require.NoError(t, err)
require.Len(t, segments, 3)

// now we need to change creation dates for all segments
db := planet.Satellites[0].Metabase.DB.UnderlyingTagSQL()
// workaround to set custom ZombieDeletionDeadline for object and custom creation time for segments
// we drop existing object and insert it with changed fields
require.NoError(t, project.AbortUpload(ctx, "testbucket1", "pending_object", info.UploadID))

// change object zombie_deletion_deadline to trigger full segments verification before deletion
zombieDeletionDeadline := now.Add(-12 * time.Hour)
objects[0].ZombieDeletionDeadline = &zombieDeletionDeadline
_, err = db.Exec(ctx, "UPDATE objects SET zombie_deletion_deadline = $1", zombieDeletionDeadline)
require.NoError(t, err)

s0CreatedAt := now.Add(3 * -23 * time.Hour)
segments[0].CreatedAt = s0CreatedAt
_, err = db.Exec(ctx, "UPDATE segments SET created_at = $1 WHERE stream_id = $2 AND position = $3", s0CreatedAt, objects[0].StreamID, 0)
require.NoError(t, err)

s1CreatedAt := now.Add(2 * -23 * time.Hour)
segments[1].CreatedAt = s1CreatedAt
_, err = db.Exec(ctx, "UPDATE segments SET created_at = $1 WHERE stream_id = $2 AND position = $3", s1CreatedAt, objects[0].StreamID, 1)
require.NoError(t, err)

// last segment should mark this object as active as it was uploaded 23h ago
s2CreatedAt := now.Add(-23 * time.Hour)
segments[2].CreatedAt = s2CreatedAt
_, err = db.Exec(ctx, "UPDATE segments SET created_at = $1 WHERE stream_id = $2 AND position = $3", s2CreatedAt, objects[0].StreamID, 2)
require.NoError(t, err)

require.NoError(t, planet.Satellites[0].Metabase.DB.TestingBatchInsertObjects(ctx, []metabase.RawObject{metabase.RawObject(objects[0])}))
require.NoError(t, planet.Satellites[0].Metabase.DB.TestingBatchInsertSegments(ctx, metabasetest.SegmentsToRaw(segments)))

// running deletion process
zombieChore.Loop.TriggerWait()
Expand All @@ -169,14 +163,10 @@ func TestZombieDeletion_LastSegmentActive(t *testing.T) {

// Diff is used because DB manipulation changes value time zone and require.Equal
// fails on that even when value is correct
diff := cmp.Diff(objects, afterObjects,
cmpopts.EquateApproxTime(1*time.Second))
require.Zero(t, diff)
require.Zero(t, cmp.Diff(objects, afterObjects, cmpopts.EquateApproxTime(1*time.Second)))

afterSegments, err := planet.Satellites[0].Metabase.DB.TestingAllSegments(ctx)
require.NoError(t, err)
diff = cmp.Diff(segments, afterSegments,
cmpopts.EquateApproxTime(1*time.Second))
require.Zero(t, diff)
require.Zero(t, cmp.Diff(segments, afterSegments, cmpopts.EquateApproxTime(1*time.Second)))
})
}

0 comments on commit 60353b1

Please sign in to comment.