From 794dc6d6d53b4993fc4665f5eda7aa2c40c4aea6 Mon Sep 17 00:00:00 2001 From: Egon Elbre Date: Mon, 29 Mar 2021 18:31:17 +0300 Subject: [PATCH] satellite/metainfo/metabase: add PlainOffset to segment listing Change-Id: I8bbb5fcebf9f171033938eaae9f415b3a4b5aaa0 --- satellite/metainfo/metabase/list_segments.go | 5 +++-- .../metainfo/metabase/list_segments_test.go | 17 ++++++++++------- satellite/metainfo/metainfo.go | 3 ++- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/satellite/metainfo/metabase/list_segments.go b/satellite/metainfo/metabase/list_segments.go index 71dc1cbd5..175465784 100644 --- a/satellite/metainfo/metabase/list_segments.go +++ b/satellite/metainfo/metabase/list_segments.go @@ -116,6 +116,7 @@ type ListStreamPositionsResult struct { type SegmentPositionInfo struct { Position SegmentPosition PlainSize int32 + PlainOffset int64 CreatedAt *time.Time // TODO: make it non-nilable after we migrate all existing segments to have creation time EncryptedETag []byte EncryptedKeyNonce []byte @@ -140,7 +141,7 @@ func (db *DB) ListStreamPositions(ctx context.Context, opts ListStreamPositions) err = withRows(db.db.Query(ctx, ` SELECT - position, plain_size, created_at, + position, plain_size, plain_offset, created_at, encrypted_etag, encrypted_key_nonce, encrypted_key FROM segments WHERE @@ -152,7 +153,7 @@ func (db *DB) ListStreamPositions(ctx context.Context, opts ListStreamPositions) for rows.Next() { var segment SegmentPositionInfo err = rows.Scan( - &segment.Position, &segment.PlainSize, &segment.CreatedAt, + &segment.Position, &segment.PlainSize, &segment.PlainOffset, &segment.CreatedAt, &segment.EncryptedETag, &segment.EncryptedKeyNonce, &segment.EncryptedKey, ) if err != nil { diff --git a/satellite/metainfo/metabase/list_segments_test.go b/satellite/metainfo/metabase/list_segments_test.go index 733b89069..267d6a852 100644 --- a/satellite/metainfo/metabase/list_segments_test.go +++ b/satellite/metainfo/metabase/list_segments_test.go @@ -45,7 +45,7 @@ func TestListSegments(t *testing.T) { Verify{}.Check(ctx, t, db) }) - t.Run("List no segments", func(t *testing.T) { + t.Run("no segments", func(t *testing.T) { defer DeleteAll{}.Check(ctx, t, db) ListSegments{ @@ -59,7 +59,7 @@ func TestListSegments(t *testing.T) { Verify{}.Check(ctx, t, db) }) - t.Run("List segments", func(t *testing.T) { + t.Run("segments", func(t *testing.T) { defer DeleteAll{}.Check(ctx, t, db) expectedObject := createObject(ctx, t, db, obj, 10) @@ -159,7 +159,7 @@ func TestListSegments(t *testing.T) { }.Check(ctx, t, db) }) - t.Run("List segments from unordered parts", func(t *testing.T) { + t.Run("unordered parts", func(t *testing.T) { defer DeleteAll{}.Check(ctx, t, db) var testCases = []struct { @@ -303,7 +303,7 @@ func TestListStreamPositions(t *testing.T) { Verify{}.Check(ctx, t, db) }) - t.Run("List no segments", func(t *testing.T) { + t.Run("no segments", func(t *testing.T) { defer DeleteAll{}.Check(ctx, t, db) ListStreamPositions{ @@ -317,7 +317,7 @@ func TestListStreamPositions(t *testing.T) { Verify{}.Check(ctx, t, db) }) - t.Run("List segments", func(t *testing.T) { + t.Run("segments", func(t *testing.T) { defer DeleteAll{}.Check(ctx, t, db) expectedObject := createObject(ctx, t, db, obj, 10) @@ -346,6 +346,7 @@ func TestListStreamPositions(t *testing.T) { expectedSegments[i] = metabase.SegmentPositionInfo{ Position: expectedSegment.Position, PlainSize: expectedSegment.PlainSize, + PlainOffset: expectedSegment.PlainOffset, CreatedAt: &now, EncryptedKey: expectedSegment.EncryptedKey, EncryptedKeyNonce: expectedSegment.EncryptedKeyNonce, @@ -424,7 +425,7 @@ func TestListStreamPositions(t *testing.T) { }.Check(ctx, t, db) }) - t.Run("List segments from unordered parts", func(t *testing.T) { + t.Run("unordered parts", func(t *testing.T) { defer DeleteAll{}.Check(ctx, t, db) var testCases = []struct { @@ -512,18 +513,20 @@ func TestListStreamPositions(t *testing.T) { }.Check(ctx, t, db) expectedSegments := make([]metabase.SegmentPositionInfo, 4) + expectedOffset := int64(0) for i := range expectedSegments { pos := expectedSegment.Position pos.Part = uint32(i) expectedSegments[i] = metabase.SegmentPositionInfo{ Position: pos, PlainSize: expectedSegment.PlainSize, + PlainOffset: expectedOffset, CreatedAt: &now, EncryptedKey: expectedSegment.EncryptedKey, EncryptedKeyNonce: expectedSegment.EncryptedKeyNonce, EncryptedETag: expectedSegment.EncryptedETag, } - expectedSegment.PlainOffset += int64(expectedSegment.PlainSize) + expectedOffset += int64(expectedSegment.PlainSize) } ListStreamPositions{ diff --git a/satellite/metainfo/metainfo.go b/satellite/metainfo/metainfo.go index 7c2b3279c..9f913927f 100644 --- a/satellite/metainfo/metainfo.go +++ b/satellite/metainfo/metainfo.go @@ -1685,7 +1685,8 @@ func (endpoint *Endpoint) ListSegments(ctx context.Context, req *pb.SegmentListR PartNumber: int32(item.Position.Part), Index: int32(item.Position.Index), }, - PlainSize: int64(item.PlainSize), + PlainSize: int64(item.PlainSize), + PlainOffset: item.PlainOffset, } if item.CreatedAt != nil { items[i].CreatedAt = *item.CreatedAt