From cfd3b9f58211f686ce59c6a0567c2a440bab48ac Mon Sep 17 00:00:00 2001 From: Dana Axinte <53751979+dana-axinte@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:21:47 +0100 Subject: [PATCH] SecretsManager: outbox use message id (#107472) * SecretsManager: outbox use message id Co-authored-by: PoorlyDefinedBehaviour * Remove query timestamp * Add missing query --------- Co-authored-by: PoorlyDefinedBehaviour Co-authored-by: Matheus Macabu Co-authored-by: Matheus Macabu --- .../apis/secret/contracts/outbox_queue.go | 9 +- .../data/secure_value_outbox_append.sql | 2 - .../data/secure_value_outbox_delete.sql | 2 +- .../secure_value_outbox_fetch_message_ids.sql | 6 + .../secure_value_outbox_query_timestamp.sql | 8 + .../data/secure_value_outbox_receiveN.sql | 8 +- ...cure_value_outbox_update_receive_count.sql | 2 +- pkg/storage/secret/metadata/outbox_store.go | 141 ++++++++++++++---- .../secret/metadata/outbox_store_test.go | 22 +-- pkg/storage/secret/metadata/query.go | 38 +++-- pkg/storage/secret/metadata/query_test.go | 27 ++-- ...value_outbox_append-all-fields-present.sql | 2 - ...alue_outbox_append-no-encrypted-secret.sql | 2 - ...ure_value_outbox_append-no-external-id.sql | 2 - ...ure_value_outbox_append-no-keeper-name.sql | 2 - ...ysql--secure_value_outbox_delete-basic.sql | 2 +- ...e_value_outbox_fetch_message_ids-basic.sql | 6 + ...ql--secure_value_outbox_receiveN-basic.sql | 8 +- ...ate_receive_count-update-receive-count.sql | 2 +- ...value_outbox_append-all-fields-present.sql | 2 - ...alue_outbox_append-no-encrypted-secret.sql | 2 - ...ure_value_outbox_append-no-external-id.sql | 2 - ...ure_value_outbox_append-no-keeper-name.sql | 2 - ...gres--secure_value_outbox_delete-basic.sql | 2 +- ...e_value_outbox_fetch_message_ids-basic.sql | 6 + ...es--secure_value_outbox_receiveN-basic.sql | 8 +- ...ate_receive_count-update-receive-count.sql | 2 +- ...value_outbox_append-all-fields-present.sql | 2 - ...alue_outbox_append-no-encrypted-secret.sql | 2 - ...ure_value_outbox_append-no-external-id.sql | 2 - ...ure_value_outbox_append-no-keeper-name.sql | 2 - ...lite--secure_value_outbox_delete-basic.sql | 2 +- ...e_value_outbox_fetch_message_ids-basic.sql | 6 + ...te--secure_value_outbox_receiveN-basic.sql | 8 +- ...ate_receive_count-update-receive-count.sql | 2 +- pkg/storage/secret/migrator/migrator.go | 4 +- 36 files changed, 232 insertions(+), 115 deletions(-) create mode 100644 pkg/storage/secret/metadata/data/secure_value_outbox_fetch_message_ids.sql create mode 100644 pkg/storage/secret/metadata/data/secure_value_outbox_query_timestamp.sql create mode 100755 pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_fetch_message_ids-basic.sql create mode 100755 pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_fetch_message_ids-basic.sql create mode 100755 pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_fetch_message_ids-basic.sql diff --git a/pkg/registry/apis/secret/contracts/outbox_queue.go b/pkg/registry/apis/secret/contracts/outbox_queue.go index ae5c88ed492..767273b1254 100644 --- a/pkg/registry/apis/secret/contracts/outbox_queue.go +++ b/pkg/registry/apis/secret/contracts/outbox_queue.go @@ -41,7 +41,7 @@ type AppendOutboxMessage struct { type OutboxMessage struct { RequestID string Type OutboxMessageType - MessageID string + MessageID int64 Name string Namespace string EncryptedSecret string @@ -49,15 +49,16 @@ type OutboxMessage struct { ExternalID *string // How many times this message has been received ReceiveCount int + Created int64 } type OutboxQueue interface { // Appends a message to the outbox queue - Append(ctx context.Context, message AppendOutboxMessage) (string, error) + Append(ctx context.Context, message AppendOutboxMessage) (int64, error) // Receives at most n messages from the outbox queue ReceiveN(ctx context.Context, n uint) ([]OutboxMessage, error) // Deletes a message from the outbox queue - Delete(ctx context.Context, messageID string) error + Delete(ctx context.Context, messageID int64) error // Increments the number of times each message has been received by 1. Must be atomic. - IncrementReceiveCount(ctx context.Context, messageIDs []string) error + IncrementReceiveCount(ctx context.Context, messageIDs []int64) error } diff --git a/pkg/storage/secret/metadata/data/secure_value_outbox_append.sql b/pkg/storage/secret/metadata/data/secure_value_outbox_append.sql index 9d6fe5d582a..e541cec3140 100644 --- a/pkg/storage/secret/metadata/data/secure_value_outbox_append.sql +++ b/pkg/storage/secret/metadata/data/secure_value_outbox_append.sql @@ -1,6 +1,5 @@ INSERT INTO {{ .Ident "secret_secure_value_outbox" }} ( {{ .Ident "request_id" }}, - {{ .Ident "uid" }}, {{ .Ident "message_type" }}, {{ .Ident "name" }}, {{ .Ident "namespace" }}, @@ -17,7 +16,6 @@ INSERT INTO {{ .Ident "secret_secure_value_outbox" }} ( {{ .Ident "created" }} ) VALUES ( {{ .Arg .Row.RequestID }}, - {{ .Arg .Row.MessageID }}, {{ .Arg .Row.MessageType }}, {{ .Arg .Row.Name }}, {{ .Arg .Row.Namespace }}, diff --git a/pkg/storage/secret/metadata/data/secure_value_outbox_delete.sql b/pkg/storage/secret/metadata/data/secure_value_outbox_delete.sql index fa3a0c2580a..d23f3808f9c 100644 --- a/pkg/storage/secret/metadata/data/secure_value_outbox_delete.sql +++ b/pkg/storage/secret/metadata/data/secure_value_outbox_delete.sql @@ -1,5 +1,5 @@ DELETE FROM {{ .Ident "secret_secure_value_outbox" }} WHERE - {{ .Ident "uid" }} = {{ .Arg .MessageID }} + {{ .Ident "id" }} = {{ .Arg .MessageID }} ; diff --git a/pkg/storage/secret/metadata/data/secure_value_outbox_fetch_message_ids.sql b/pkg/storage/secret/metadata/data/secure_value_outbox_fetch_message_ids.sql new file mode 100644 index 00000000000..2c53c2223fd --- /dev/null +++ b/pkg/storage/secret/metadata/data/secure_value_outbox_fetch_message_ids.sql @@ -0,0 +1,6 @@ +SELECT + {{ .Ident "id" }} +FROM {{ .Ident "secret_secure_value_outbox" }} +ORDER BY id ASC +LIMIT {{ .Arg .ReceiveLimit }} +; diff --git a/pkg/storage/secret/metadata/data/secure_value_outbox_query_timestamp.sql b/pkg/storage/secret/metadata/data/secure_value_outbox_query_timestamp.sql new file mode 100644 index 00000000000..8e525ca9009 --- /dev/null +++ b/pkg/storage/secret/metadata/data/secure_value_outbox_query_timestamp.sql @@ -0,0 +1,8 @@ +SELECT + {{ .Ident "created" }}, + {{ .Ident "message_type" }} +FROM + {{ .Ident "secret_secure_value_outbox" }} +WHERE + {{ .Ident "id" }} = {{ .Arg .MessageID }} +; diff --git a/pkg/storage/secret/metadata/data/secure_value_outbox_receiveN.sql b/pkg/storage/secret/metadata/data/secure_value_outbox_receiveN.sql index bf5031fdd74..254cb3d3f3d 100644 --- a/pkg/storage/secret/metadata/data/secure_value_outbox_receiveN.sql +++ b/pkg/storage/secret/metadata/data/secure_value_outbox_receiveN.sql @@ -1,6 +1,6 @@ SELECT {{ .Ident "request_id" }}, - {{ .Ident "uid" }}, + {{ .Ident "id" }}, {{ .Ident "message_type" }}, {{ .Ident "name" }}, {{ .Ident "namespace" }}, @@ -11,9 +11,9 @@ SELECT {{ .Ident "created" }} FROM {{ .Ident "secret_secure_value_outbox" }} +WHERE + {{ .Ident "id" }} IN ({{ .ArgList .MessageIDs }}) ORDER BY - {{ .Ident "created" }} ASC -LIMIT - {{ .Arg .ReceiveLimit }} + {{ .Ident "id" }} ASC {{ .SelectFor "UPDATE SKIP LOCKED" }} ; diff --git a/pkg/storage/secret/metadata/data/secure_value_outbox_update_receive_count.sql b/pkg/storage/secret/metadata/data/secure_value_outbox_update_receive_count.sql index 951fed4bdba..610f29695a8 100644 --- a/pkg/storage/secret/metadata/data/secure_value_outbox_update_receive_count.sql +++ b/pkg/storage/secret/metadata/data/secure_value_outbox_update_receive_count.sql @@ -3,5 +3,5 @@ UPDATE SET {{ .Ident "receive_count" }} = {{ .Ident "receive_count" }} + 1 WHERE - {{ .Ident "uid" }} IN ({{ .ArgList .MessageIDs }}) + {{ .Ident "id" }} IN ({{ .ArgList .MessageIDs }}) ; diff --git a/pkg/storage/secret/metadata/outbox_store.go b/pkg/storage/secret/metadata/outbox_store.go index f7a67e74c68..bfc01bb1444 100644 --- a/pkg/storage/secret/metadata/outbox_store.go +++ b/pkg/storage/secret/metadata/outbox_store.go @@ -11,7 +11,6 @@ import ( "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/trace" - "github.com/google/uuid" "github.com/grafana/grafana/pkg/registry/apis/secret/assert" "github.com/grafana/grafana/pkg/registry/apis/secret/contracts" "github.com/grafana/grafana/pkg/storage/unified/sql/sqltemplate" @@ -23,7 +22,10 @@ type outboxStore struct { tracer trace.Tracer } -func ProvideOutboxQueue(db contracts.Database, tracer trace.Tracer) contracts.OutboxQueue { +func ProvideOutboxQueue( + db contracts.Database, + tracer trace.Tracer, +) contracts.OutboxQueue { return &outboxStore{ db: db, dialect: sqltemplate.DialectForDriver(db.DriverName()), @@ -33,7 +35,7 @@ func ProvideOutboxQueue(db contracts.Database, tracer trace.Tracer) contracts.Ou type outboxMessageDB struct { RequestID string - MessageID string + MessageID int64 MessageType contracts.OutboxMessageType Name string Namespace string @@ -44,7 +46,7 @@ type outboxMessageDB struct { Created int64 } -func (s *outboxStore) Append(ctx context.Context, input contracts.AppendOutboxMessage) (messageID string, err error) { +func (s *outboxStore) Append(ctx context.Context, input contracts.AppendOutboxMessage) (messageID int64, err error) { ctx, span := s.tracer.Start(ctx, "outboxStore.Append", trace.WithAttributes( attribute.String("name", input.Name), attribute.String("namespace", input.Namespace), @@ -59,8 +61,8 @@ func (s *outboxStore) Append(ctx context.Context, input contracts.AppendOutboxMe span.RecordError(err) } - if messageID != "" { - span.SetAttributes(attribute.String("messageID", messageID)) + if messageID != 0 { + span.SetAttributes(attribute.Int64("messageID", messageID)) } }() @@ -74,7 +76,7 @@ func (s *outboxStore) Append(ctx context.Context, input contracts.AppendOutboxMe return messageID, nil } -func (s *outboxStore) insertMessage(ctx context.Context, input contracts.AppendOutboxMessage) (string, error) { +func (s *outboxStore) insertMessage(ctx context.Context, input contracts.AppendOutboxMessage) (int64, error) { keeperName := sql.NullString{} if input.KeeperName != nil { keeperName = sql.NullString{ @@ -99,13 +101,10 @@ func (s *outboxStore) insertMessage(ctx context.Context, input contracts.AppendO } } - messageID := uuid.New().String() - req := appendSecureValueOutbox{ SQLTemplate: sqltemplate.New(s.dialect), Row: &outboxMessageDB{ RequestID: input.RequestID, - MessageID: messageID, MessageType: input.Type, Name: input.Name, Namespace: input.Namespace, @@ -119,33 +118,46 @@ func (s *outboxStore) insertMessage(ctx context.Context, input contracts.AppendO query, err := sqltemplate.Execute(sqlSecureValueOutboxAppend, req) if err != nil { - return messageID, fmt.Errorf("execute template %q: %w", sqlSecureValueOutboxAppend.Name(), err) + return 0, fmt.Errorf("execute template %q: %w", sqlSecureValueOutboxAppend.Name(), err) } result, err := s.db.ExecContext(ctx, query, req.GetArgs()...) if err != nil { if unifiedsql.IsRowAlreadyExistsError(err) { - return messageID, contracts.ErrSecureValueOperationInProgress + return 0, contracts.ErrSecureValueOperationInProgress } - return messageID, fmt.Errorf("inserting message into secure value outbox table: %w", err) + return 0, fmt.Errorf("inserting message into secure value outbox table: %w", err) } rowsAffected, err := result.RowsAffected() if err != nil { - return messageID, fmt.Errorf("get rows affected: %w", err) + return 0, fmt.Errorf("get rows affected: %w", err) } if rowsAffected != 1 { - return messageID, fmt.Errorf("expected to affect 1 row, but affected %d", rowsAffected) + return 0, fmt.Errorf("expected to affect 1 row, but affected %d", rowsAffected) } - return messageID, nil + id, err := result.LastInsertId() + if err != nil { + return id, fmt.Errorf("fetching last inserted id: %w", err) + } + + return id, nil } -func (s *outboxStore) ReceiveN(ctx context.Context, n uint) ([]contracts.OutboxMessage, error) { +func (s *outboxStore) ReceiveN(ctx context.Context, limit uint) ([]contracts.OutboxMessage, error) { + messageIDs, err := s.fetchMessageIdsInQueue(ctx, limit) + if err != nil { + return nil, fmt.Errorf("fetching message ids from queue: %w", err) + } + // If queue is empty + if len(messageIDs) == 0 { + return nil, nil + } req := receiveNSecureValueOutbox{ - SQLTemplate: sqltemplate.New(s.dialect), - ReceiveLimit: n, + SQLTemplate: sqltemplate.New(s.dialect), + MessageIDs: messageIDs, } query, err := sqltemplate.Execute(sqlSecureValueOutboxReceiveN, req) @@ -197,6 +209,7 @@ func (s *outboxStore) ReceiveN(ctx context.Context, n uint) ([]contracts.OutboxM KeeperName: keeperName, ExternalID: externalID, ReceiveCount: row.ReceiveCount, + Created: row.Created, } if row.MessageType != contracts.DeleteSecretOutboxMessage && row.EncryptedSecret.Valid { @@ -213,9 +226,43 @@ func (s *outboxStore) ReceiveN(ctx context.Context, n uint) ([]contracts.OutboxM return messages, nil } -func (s *outboxStore) Delete(ctx context.Context, messageID string) (err error) { +func (s *outboxStore) fetchMessageIdsInQueue(ctx context.Context, limit uint) ([]int64, error) { + req := fetchMessageIDsOutbox{ + SQLTemplate: sqltemplate.New(s.dialect), + ReceiveLimit: limit, + } + + query, err := sqltemplate.Execute(sqlSecureValueOutboxFetchMessageIDs, req) + if err != nil { + return nil, fmt.Errorf("execute template %q: %w", sqlSecureValueOutboxFetchMessageIDs.Name(), err) + } + + rows, err := s.db.QueryContext(ctx, query, req.GetArgs()...) + if err != nil { + return nil, fmt.Errorf("fetching rows from secure value outbox table: %w", err) + } + defer func() { _ = rows.Close() }() + + messageIDs := make([]int64, 0, limit) + + for rows.Next() { + var id int64 + if err := rows.Scan(&id); err != nil { + return nil, fmt.Errorf("scanning row; %w", err) + } + messageIDs = append(messageIDs, id) + } + + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("reading rows: %w", err) + } + + return messageIDs, nil +} + +func (s *outboxStore) Delete(ctx context.Context, messageID int64) (err error) { ctx, span := s.tracer.Start(ctx, "outboxStore.Append", trace.WithAttributes( - attribute.String("messageID", messageID), + attribute.Int64("messageID", messageID), )) defer span.End() @@ -226,7 +273,7 @@ func (s *outboxStore) Delete(ctx context.Context, messageID string) (err error) } }() - assert.True(messageID != "", "outboxStore.Delete: messageID is required") + assert.True(messageID != 0, "outboxStore.Delete: messageID is required") if err := s.deleteMessage(ctx, messageID); err != nil { return fmt.Errorf("deleting message from outbox table %+w", err) @@ -235,18 +282,56 @@ func (s *outboxStore) Delete(ctx context.Context, messageID string) (err error) return nil } -func (s *outboxStore) deleteMessage(ctx context.Context, messageID string) error { - req := deleteSecureValueOutbox{ +func (s *outboxStore) deleteMessage(ctx context.Context, messageID int64) error { + tsReq := getOutboxMessageTimestamp{ SQLTemplate: sqltemplate.New(s.dialect), MessageID: messageID, } - query, err := sqltemplate.Execute(sqlSecureValueOutboxDelete, req) + // First query the object so we can get the timestamp and calculate the total lifetime + timestampQuery, err := sqltemplate.Execute(sqlSecureValueOutboxQueryTimestamp, tsReq) + if err != nil { + return fmt.Errorf("execute template %q: %w", sqlSecureValueOutboxQueryTimestamp.Name(), err) + } + + rows, err := s.db.QueryContext(ctx, timestampQuery, tsReq.GetArgs()...) + if err != nil { + return fmt.Errorf("querying timestamp from secure value outbox table: %w", err) + } + + if !rows.Next() { + _ = rows.Close() + return fmt.Errorf("no row found for message id=%v", messageID) + } + + var timestamp int64 + var messageType string + if err := rows.Scan(×tamp, &messageType); err != nil { + _ = rows.Close() + return fmt.Errorf("scanning timestamp: %w", err) + } + + // Explicitly close rows and check for errors before proceeding + if err := rows.Close(); err != nil { + return fmt.Errorf("closing rows: %w", err) + } + + if err := rows.Err(); err != nil { + return fmt.Errorf("rows error: %w", err) + } + + // Then delete the object + delReq := deleteSecureValueOutbox{ + SQLTemplate: sqltemplate.New(s.dialect), + MessageID: messageID, + } + + query, err := sqltemplate.Execute(sqlSecureValueOutboxDelete, delReq) if err != nil { return fmt.Errorf("execute template %q: %w", sqlSecureValueOutboxDelete.Name(), err) } - result, err := s.db.ExecContext(ctx, query, req.GetArgs()...) + result, err := s.db.ExecContext(ctx, query, delReq.GetArgs()...) if err != nil { return fmt.Errorf("deleting message id=%v from secure value outbox table: %w", messageID, err) } @@ -256,6 +341,7 @@ func (s *outboxStore) deleteMessage(ctx context.Context, messageID string) error return fmt.Errorf("get rows affected: %w", err) } + // TODO: Presumably it's a bug if we delete 0 rows? if rowsAffected > 1 { return fmt.Errorf("bug: deleted more than one row from the outbox table, should delete only one at a time: deleted=%v", rowsAffected) } @@ -263,7 +349,7 @@ func (s *outboxStore) deleteMessage(ctx context.Context, messageID string) error return nil } -func (s *outboxStore) IncrementReceiveCount(ctx context.Context, messageIDs []string) error { +func (s *outboxStore) IncrementReceiveCount(ctx context.Context, messageIDs []int64) error { if len(messageIDs) == 0 { return nil } @@ -272,6 +358,7 @@ func (s *outboxStore) IncrementReceiveCount(ctx context.Context, messageIDs []st SQLTemplate: sqltemplate.New(s.dialect), MessageIDs: messageIDs, } + query, err := sqltemplate.Execute(sqlSecureValueOutboxUpdateReceiveCount, req) if err != nil { return fmt.Errorf("execute template %q: %w", sqlSecureValueOutboxUpdateReceiveCount.Name(), err) diff --git a/pkg/storage/secret/metadata/outbox_store_test.go b/pkg/storage/secret/metadata/outbox_store_test.go index 0dd6c024d98..518618833cf 100644 --- a/pkg/storage/secret/metadata/outbox_store_test.go +++ b/pkg/storage/secret/metadata/outbox_store_test.go @@ -24,7 +24,7 @@ func newOutboxStoreModel() *outboxStoreModel { return &outboxStoreModel{} } -func (model *outboxStoreModel) Append(messageID string, message contracts.AppendOutboxMessage) { +func (model *outboxStoreModel) Append(messageID int64, message contracts.AppendOutboxMessage) { model.rows = append(model.rows, contracts.OutboxMessage{ Type: message.Type, MessageID: messageID, @@ -44,7 +44,7 @@ func (model *outboxStoreModel) ReceiveN(n uint) []contracts.OutboxMessage { return model.rows[:maxMessages] } -func (model *outboxStoreModel) Delete(messageID string) { +func (model *outboxStoreModel) Delete(messageID int64) { oldLen := len(model.rows) model.rows = slices.DeleteFunc(model.rows, func(m contracts.OutboxMessage) bool { return m.MessageID == messageID @@ -70,7 +70,7 @@ func TestOutboxStoreModel(t *testing.T) { } outboxMessage1 := contracts.OutboxMessage{ - MessageID: "message_id_1", + MessageID: 1, Type: contracts.CreateSecretOutboxMessage, Name: "s-1", Namespace: "n-1", @@ -79,7 +79,7 @@ func TestOutboxStoreModel(t *testing.T) { } outboxMessage2 := contracts.OutboxMessage{ - MessageID: "message_id_2", + MessageID: 2, Type: contracts.CreateSecretOutboxMessage, Name: "s-1", Namespace: "n-1", @@ -87,11 +87,11 @@ func TestOutboxStoreModel(t *testing.T) { ExternalID: nil, } - model.Append("message_id_1", appendOutboxMessage) + model.Append(1, appendOutboxMessage) require.Equal(t, []contracts.OutboxMessage{outboxMessage1}, model.ReceiveN(10)) - model.Append("message_id_2", appendOutboxMessage) + model.Append(2, appendOutboxMessage) require.Equal(t, []contracts.OutboxMessage{outboxMessage1, outboxMessage2}, model.ReceiveN(10)) @@ -206,9 +206,8 @@ func TestOutboxStoreProperty(t *testing.T) { rng := rand.New(rand.NewSource(seed)) defer func() { - if err := recover(); err != nil || t.Failed() { - fmt.Printf("TestOutboxStoreProperty: err=%+v\n\nSEED=%+v", err, seed) - t.FailNow() + if t.Failed() { + fmt.Printf("TestOutboxStoreProperty: SEED=%+v\n\n", seed) } }() @@ -227,6 +226,7 @@ func TestOutboxStoreProperty(t *testing.T) { n := rng.Intn(3) switch n { case 0: + time.Sleep(1 * time.Microsecond) message := contracts.AppendOutboxMessage{ Type: contracts.CreateSecretOutboxMessage, Name: fmt.Sprintf("s-%d", i), @@ -247,7 +247,9 @@ func TestOutboxStoreProperty(t *testing.T) { modelMessages := model.ReceiveN(n) require.Equal(t, len(modelMessages), len(messages)) - require.Equal(t, modelMessages, messages) + for i := range len(modelMessages) { + require.Equal(t, modelMessages[i].MessageID, messages[i].MessageID) + } case 2: if len(model.rows) == 0 { diff --git a/pkg/storage/secret/metadata/query.go b/pkg/storage/secret/metadata/query.go index a47c0ffdae6..907a4d6cbea 100644 --- a/pkg/storage/secret/metadata/query.go +++ b/pkg/storage/secret/metadata/query.go @@ -34,9 +34,11 @@ var ( sqlSecureValueReadForDecrypt = mustTemplate("secure_value_read_for_decrypt.sql") sqlSecureValueOutboxAppend = mustTemplate("secure_value_outbox_append.sql") + sqlSecureValueOutboxFetchMessageIDs = mustTemplate("secure_value_outbox_fetch_message_ids.sql") sqlSecureValueOutboxReceiveN = mustTemplate("secure_value_outbox_receiveN.sql") sqlSecureValueOutboxDelete = mustTemplate("secure_value_outbox_delete.sql") sqlSecureValueOutboxUpdateReceiveCount = mustTemplate("secure_value_outbox_update_receive_count.sql") + sqlSecureValueOutboxQueryTimestamp = mustTemplate("secure_value_outbox_query_timestamp.sql") ) func mustTemplate(filename string) *template.Template { @@ -109,26 +111,26 @@ func (r deleteKeeper) Validate() error { } // This is used at keeper store to validate create & update operations -type listByNameKeeper struct { +type listByNameSecureValue struct { sqltemplate.SQLTemplate - Namespace string - KeeperNames []string + Namespace string + UsedSecureValues []string } // Validate is only used if we use `dbutil` from `unifiedstorage` -func (r listByNameKeeper) Validate() error { +func (r listByNameSecureValue) Validate() error { return nil // TODO } // This is used at keeper store to validate create & update operations -type listByNameSecureValue struct { +type listByNameKeeper struct { sqltemplate.SQLTemplate - Namespace string - UsedSecureValues []string + Namespace string + KeeperNames []string } // Validate is only used if we use `dbutil` from `unifiedstorage` -func (r listByNameSecureValue) Validate() error { +func (r listByNameKeeper) Validate() error { return nil // TODO } @@ -240,21 +242,35 @@ func (appendSecureValueOutbox) Validate() error { return nil } type receiveNSecureValueOutbox struct { sqltemplate.SQLTemplate - ReceiveLimit uint + MessageIDs []int64 } func (receiveNSecureValueOutbox) Validate() error { return nil } +type fetchMessageIDsOutbox struct { + sqltemplate.SQLTemplate + ReceiveLimit uint +} + +func (fetchMessageIDsOutbox) Validate() error { return nil } + type deleteSecureValueOutbox struct { sqltemplate.SQLTemplate - MessageID string + MessageID int64 } func (deleteSecureValueOutbox) Validate() error { return nil } +type getOutboxMessageTimestamp struct { + sqltemplate.SQLTemplate + MessageID int64 +} + +func (getOutboxMessageTimestamp) Validate() error { return nil } + type incrementReceiveCountOutbox struct { sqltemplate.SQLTemplate - MessageIDs []string + MessageIDs []int64 } func (incrementReceiveCountOutbox) Validate() error { return nil } diff --git a/pkg/storage/secret/metadata/query_test.go b/pkg/storage/secret/metadata/query_test.go index e07a8844844..8a5ff0e6a9a 100644 --- a/pkg/storage/secret/metadata/query_test.go +++ b/pkg/storage/secret/metadata/query_test.go @@ -312,7 +312,7 @@ func TestSecureValueOutboxQueries(t *testing.T) { Name: "update-receive-count", Data: &incrementReceiveCountOutbox{ SQLTemplate: mocks.NewTestingSQLTemplate(), - MessageIDs: []string{"id1", "id2", "id3"}, + MessageIDs: []int64{1, 2, 3}, }, }, }, @@ -322,7 +322,7 @@ func TestSecureValueOutboxQueries(t *testing.T) { Data: &appendSecureValueOutbox{ SQLTemplate: mocks.NewTestingSQLTemplate(), Row: &outboxMessageDB{ - MessageID: "my-uuid", + MessageID: 1, MessageType: "some-type", Name: "name", Namespace: "namespace", @@ -337,7 +337,7 @@ func TestSecureValueOutboxQueries(t *testing.T) { Data: &appendSecureValueOutbox{ SQLTemplate: mocks.NewTestingSQLTemplate(), Row: &outboxMessageDB{ - MessageID: "my-uuid", + MessageID: 1, MessageType: "some-type", Name: "name", Namespace: "namespace", @@ -352,7 +352,7 @@ func TestSecureValueOutboxQueries(t *testing.T) { Data: &appendSecureValueOutbox{ SQLTemplate: mocks.NewTestingSQLTemplate(), Row: &outboxMessageDB{ - MessageID: "my-uuid", + MessageID: 1, MessageType: "some-type", Name: "name", Namespace: "namespace", @@ -367,7 +367,7 @@ func TestSecureValueOutboxQueries(t *testing.T) { Data: &appendSecureValueOutbox{ SQLTemplate: mocks.NewTestingSQLTemplate(), Row: &outboxMessageDB{ - MessageID: "my-uuid", + MessageID: 1, MessageType: "some-type", Name: "name", Namespace: "namespace", @@ -379,23 +379,30 @@ func TestSecureValueOutboxQueries(t *testing.T) { }, }, }, - - sqlSecureValueOutboxReceiveN: { + sqlSecureValueOutboxFetchMessageIDs: { { Name: "basic", - Data: &receiveNSecureValueOutbox{ + Data: &fetchMessageIDsOutbox{ SQLTemplate: mocks.NewTestingSQLTemplate(), ReceiveLimit: 10, }, }, }, - + sqlSecureValueOutboxReceiveN: { + { + Name: "basic", + Data: &receiveNSecureValueOutbox{ + SQLTemplate: mocks.NewTestingSQLTemplate(), + MessageIDs: []int64{1, 2, 3}, + }, + }, + }, sqlSecureValueOutboxDelete: { { Name: "basic", Data: &deleteSecureValueOutbox{ SQLTemplate: mocks.NewTestingSQLTemplate(), - MessageID: "my-uuid", + MessageID: 1, }, }, }, diff --git a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-all-fields-present.sql b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-all-fields-present.sql index ea0d5e2eac3..a1cff11dd5d 100755 --- a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-all-fields-present.sql +++ b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-all-fields-present.sql @@ -1,6 +1,5 @@ INSERT INTO `secret_secure_value_outbox` ( `request_id`, - `uid`, `message_type`, `name`, `namespace`, @@ -11,7 +10,6 @@ INSERT INTO `secret_secure_value_outbox` ( `created` ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-encrypted-secret.sql b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-encrypted-secret.sql index ddccfe82a7b..139d262d49a 100755 --- a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-encrypted-secret.sql +++ b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-encrypted-secret.sql @@ -1,6 +1,5 @@ INSERT INTO `secret_secure_value_outbox` ( `request_id`, - `uid`, `message_type`, `name`, `namespace`, @@ -10,7 +9,6 @@ INSERT INTO `secret_secure_value_outbox` ( `created` ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-external-id.sql b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-external-id.sql index 4c0e6fe6486..62af967a284 100755 --- a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-external-id.sql +++ b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-external-id.sql @@ -1,6 +1,5 @@ INSERT INTO `secret_secure_value_outbox` ( `request_id`, - `uid`, `message_type`, `name`, `namespace`, @@ -10,7 +9,6 @@ INSERT INTO `secret_secure_value_outbox` ( `created` ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-keeper-name.sql b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-keeper-name.sql index 78590350bf5..924b7d6277f 100755 --- a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-keeper-name.sql +++ b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_append-no-keeper-name.sql @@ -1,6 +1,5 @@ INSERT INTO `secret_secure_value_outbox` ( `request_id`, - `uid`, `message_type`, `name`, `namespace`, @@ -10,7 +9,6 @@ INSERT INTO `secret_secure_value_outbox` ( `created` ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_delete-basic.sql b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_delete-basic.sql index f4f1acaa6f7..2a6fc52ea18 100755 --- a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_delete-basic.sql +++ b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_delete-basic.sql @@ -1,5 +1,5 @@ DELETE FROM `secret_secure_value_outbox` WHERE - `uid` = 'my-uuid' + `id` = 1 ; diff --git a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_fetch_message_ids-basic.sql b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_fetch_message_ids-basic.sql new file mode 100755 index 00000000000..47b006df9e3 --- /dev/null +++ b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_fetch_message_ids-basic.sql @@ -0,0 +1,6 @@ +SELECT + `id` +FROM `secret_secure_value_outbox` +ORDER BY id ASC +LIMIT 10 +; diff --git a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_receiveN-basic.sql b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_receiveN-basic.sql index 594d70f5b6b..710f96bf187 100755 --- a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_receiveN-basic.sql +++ b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_receiveN-basic.sql @@ -1,6 +1,6 @@ SELECT `request_id`, - `uid`, + `id`, `message_type`, `name`, `namespace`, @@ -11,9 +11,9 @@ SELECT `created` FROM `secret_secure_value_outbox` +WHERE + `id` IN (1, 2, 3) ORDER BY - `created` ASC -LIMIT - 10 + `id` ASC FOR UPDATE SKIP LOCKED ; diff --git a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_update_receive_count-update-receive-count.sql b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_update_receive_count-update-receive-count.sql index 76a26be8f15..e9df2c03014 100755 --- a/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_update_receive_count-update-receive-count.sql +++ b/pkg/storage/secret/metadata/testdata/mysql--secure_value_outbox_update_receive_count-update-receive-count.sql @@ -3,5 +3,5 @@ UPDATE SET `receive_count` = `receive_count` + 1 WHERE - `uid` IN ('id1', 'id2', 'id3') + `id` IN (1, 2, 3) ; diff --git a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-all-fields-present.sql b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-all-fields-present.sql index 807e0979c97..3c2b2588c08 100755 --- a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-all-fields-present.sql +++ b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-all-fields-present.sql @@ -1,6 +1,5 @@ INSERT INTO "secret_secure_value_outbox" ( "request_id", - "uid", "message_type", "name", "namespace", @@ -11,7 +10,6 @@ INSERT INTO "secret_secure_value_outbox" ( "created" ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-encrypted-secret.sql b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-encrypted-secret.sql index 8ef26454842..bcecf30a749 100755 --- a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-encrypted-secret.sql +++ b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-encrypted-secret.sql @@ -1,6 +1,5 @@ INSERT INTO "secret_secure_value_outbox" ( "request_id", - "uid", "message_type", "name", "namespace", @@ -10,7 +9,6 @@ INSERT INTO "secret_secure_value_outbox" ( "created" ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-external-id.sql b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-external-id.sql index 463f5be93ec..81eb522e3a8 100755 --- a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-external-id.sql +++ b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-external-id.sql @@ -1,6 +1,5 @@ INSERT INTO "secret_secure_value_outbox" ( "request_id", - "uid", "message_type", "name", "namespace", @@ -10,7 +9,6 @@ INSERT INTO "secret_secure_value_outbox" ( "created" ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-keeper-name.sql b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-keeper-name.sql index c576949f2f9..3c0e3abf5e8 100755 --- a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-keeper-name.sql +++ b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_append-no-keeper-name.sql @@ -1,6 +1,5 @@ INSERT INTO "secret_secure_value_outbox" ( "request_id", - "uid", "message_type", "name", "namespace", @@ -10,7 +9,6 @@ INSERT INTO "secret_secure_value_outbox" ( "created" ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_delete-basic.sql b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_delete-basic.sql index 8b9b9f3cc52..f0c8984c8a0 100755 --- a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_delete-basic.sql +++ b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_delete-basic.sql @@ -1,5 +1,5 @@ DELETE FROM "secret_secure_value_outbox" WHERE - "uid" = 'my-uuid' + "id" = 1 ; diff --git a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_fetch_message_ids-basic.sql b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_fetch_message_ids-basic.sql new file mode 100755 index 00000000000..4c590706948 --- /dev/null +++ b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_fetch_message_ids-basic.sql @@ -0,0 +1,6 @@ +SELECT + "id" +FROM "secret_secure_value_outbox" +ORDER BY id ASC +LIMIT 10 +; diff --git a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_receiveN-basic.sql b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_receiveN-basic.sql index d29cc467f90..f4602caba07 100755 --- a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_receiveN-basic.sql +++ b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_receiveN-basic.sql @@ -1,6 +1,6 @@ SELECT "request_id", - "uid", + "id", "message_type", "name", "namespace", @@ -11,9 +11,9 @@ SELECT "created" FROM "secret_secure_value_outbox" +WHERE + "id" IN (1, 2, 3) ORDER BY - "created" ASC -LIMIT - 10 + "id" ASC FOR UPDATE SKIP LOCKED ; diff --git a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_update_receive_count-update-receive-count.sql b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_update_receive_count-update-receive-count.sql index 4c313de0ab9..d9404fd8212 100755 --- a/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_update_receive_count-update-receive-count.sql +++ b/pkg/storage/secret/metadata/testdata/postgres--secure_value_outbox_update_receive_count-update-receive-count.sql @@ -3,5 +3,5 @@ UPDATE SET "receive_count" = "receive_count" + 1 WHERE - "uid" IN ('id1', 'id2', 'id3') + "id" IN (1, 2, 3) ; diff --git a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-all-fields-present.sql b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-all-fields-present.sql index 807e0979c97..3c2b2588c08 100755 --- a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-all-fields-present.sql +++ b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-all-fields-present.sql @@ -1,6 +1,5 @@ INSERT INTO "secret_secure_value_outbox" ( "request_id", - "uid", "message_type", "name", "namespace", @@ -11,7 +10,6 @@ INSERT INTO "secret_secure_value_outbox" ( "created" ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-encrypted-secret.sql b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-encrypted-secret.sql index 8ef26454842..bcecf30a749 100755 --- a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-encrypted-secret.sql +++ b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-encrypted-secret.sql @@ -1,6 +1,5 @@ INSERT INTO "secret_secure_value_outbox" ( "request_id", - "uid", "message_type", "name", "namespace", @@ -10,7 +9,6 @@ INSERT INTO "secret_secure_value_outbox" ( "created" ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-external-id.sql b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-external-id.sql index 463f5be93ec..81eb522e3a8 100755 --- a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-external-id.sql +++ b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-external-id.sql @@ -1,6 +1,5 @@ INSERT INTO "secret_secure_value_outbox" ( "request_id", - "uid", "message_type", "name", "namespace", @@ -10,7 +9,6 @@ INSERT INTO "secret_secure_value_outbox" ( "created" ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-keeper-name.sql b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-keeper-name.sql index c576949f2f9..3c0e3abf5e8 100755 --- a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-keeper-name.sql +++ b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_append-no-keeper-name.sql @@ -1,6 +1,5 @@ INSERT INTO "secret_secure_value_outbox" ( "request_id", - "uid", "message_type", "name", "namespace", @@ -10,7 +9,6 @@ INSERT INTO "secret_secure_value_outbox" ( "created" ) VALUES ( '', - 'my-uuid', 'some-type', 'name', 'namespace', diff --git a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_delete-basic.sql b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_delete-basic.sql index 8b9b9f3cc52..f0c8984c8a0 100755 --- a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_delete-basic.sql +++ b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_delete-basic.sql @@ -1,5 +1,5 @@ DELETE FROM "secret_secure_value_outbox" WHERE - "uid" = 'my-uuid' + "id" = 1 ; diff --git a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_fetch_message_ids-basic.sql b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_fetch_message_ids-basic.sql new file mode 100755 index 00000000000..4c590706948 --- /dev/null +++ b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_fetch_message_ids-basic.sql @@ -0,0 +1,6 @@ +SELECT + "id" +FROM "secret_secure_value_outbox" +ORDER BY id ASC +LIMIT 10 +; diff --git a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_receiveN-basic.sql b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_receiveN-basic.sql index 327b4f45f56..62b16f507ba 100755 --- a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_receiveN-basic.sql +++ b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_receiveN-basic.sql @@ -1,6 +1,6 @@ SELECT "request_id", - "uid", + "id", "message_type", "name", "namespace", @@ -11,8 +11,8 @@ SELECT "created" FROM "secret_secure_value_outbox" +WHERE + "id" IN (1, 2, 3) ORDER BY - "created" ASC -LIMIT - 10 + "id" ASC ; diff --git a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_update_receive_count-update-receive-count.sql b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_update_receive_count-update-receive-count.sql index 4c313de0ab9..d9404fd8212 100755 --- a/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_update_receive_count-update-receive-count.sql +++ b/pkg/storage/secret/metadata/testdata/sqlite--secure_value_outbox_update_receive_count-update-receive-count.sql @@ -3,5 +3,5 @@ UPDATE SET "receive_count" = "receive_count" + 1 WHERE - "uid" IN ('id1', 'id2', 'id3') + "id" IN (1, 2, 3) ; diff --git a/pkg/storage/secret/migrator/migrator.go b/pkg/storage/secret/migrator/migrator.go index 4db66a50645..d7d0bd6560b 100644 --- a/pkg/storage/secret/migrator/migrator.go +++ b/pkg/storage/secret/migrator/migrator.go @@ -134,7 +134,7 @@ func (*SecretDB) AddMigration(mg *migrator.Migrator) { Name: TableNameSecureValueOutbox, Columns: []*migrator.Column{ {Name: "request_id", Type: migrator.DB_NVarchar, Length: 253, Nullable: false}, - {Name: "uid", Type: migrator.DB_NVarchar, Length: 36, IsPrimaryKey: true}, // Fixed size of a UUID. + {Name: "id", Type: migrator.DB_BigInt, Length: 36, IsPrimaryKey: true, IsAutoIncrement: true}, // Fixed size of a UUID. {Name: "message_type", Type: migrator.DB_NVarchar, Length: 16, Nullable: false}, {Name: "name", Type: migrator.DB_NVarchar, Length: 253, Nullable: false}, // Limit enforced by K8s. {Name: "namespace", Type: migrator.DB_NVarchar, Length: 253, Nullable: false}, // Limit enforced by K8s. @@ -148,8 +148,6 @@ func (*SecretDB) AddMigration(mg *migrator.Migrator) { // There's only one operation per secret in the queue at all times, // meaning the namespace + name combination should be unique {Cols: []string{"namespace", "name"}, Type: migrator.UniqueIndex}, - // Used for sorting - {Cols: []string{"created"}, Type: migrator.IndexType}, }, })