-
Notifications
You must be signed in to change notification settings - Fork 267
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement support for metadata associated with read-write transactions
This will allow callers of APIs such as WriteRelationships and DeleteRelationships to assign metadata to the transaction that will be mirrored back out in the Watch API, to provide a means for correlating updates
- Loading branch information
1 parent
e629448
commit e7f5ad8
Showing
27 changed files
with
588 additions
and
71 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 75 additions & 0 deletions
75
internal/datastore/crdb/migrations/zz_migration.0008_add_transaction_metadata_table.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package migrations | ||
|
||
import ( | ||
"context" | ||
"strings" | ||
|
||
"github.com/jackc/pgx/v5" | ||
) | ||
|
||
const ( | ||
// ttl_expiration_expression support was added in CRDB v22.2, but the E2E tests | ||
// use v21.2. | ||
addTransactionMetadataTableQueryWithBasicTTL = ` | ||
CREATE TABLE transaction_metadata ( | ||
key UUID PRIMARY KEY DEFAULT gen_random_uuid(), | ||
expires_at TIMESTAMPTZ, | ||
metadata JSONB | ||
) WITH (ttl_expire_after = '1d'); | ||
` | ||
|
||
addTransactionMetadataTableQuery = ` | ||
CREATE TABLE transaction_metadata ( | ||
key UUID PRIMARY KEY DEFAULT gen_random_uuid(), | ||
expires_at TIMESTAMPTZ, | ||
metadata JSONB | ||
) WITH (ttl_expiration_expression = 'expires_at', ttl_job_cron = '@daily'); | ||
` | ||
|
||
// See: https://www.cockroachlabs.com/docs/stable/changefeed-messages#prevent-changefeeds-from-emitting-row-level-ttl-deletes | ||
// for why we set ttl_disable_changefeed_replication = 'true'. This isn't stricly necessary as the Watch API will ignore the | ||
// deletions of these metadata rows, but no reason to even have it in the changefeed. | ||
// NOTE: This only applies on CRDB v24 and later. | ||
addTransactionMetadataTableQueryWithTTLIgnore = ` | ||
CREATE TABLE transaction_metadata ( | ||
key UUID PRIMARY KEY DEFAULT gen_random_uuid(), | ||
expires_at TIMESTAMPTZ, | ||
metadata JSONB | ||
) WITH (ttl_expiration_expression = 'expires_at', ttl_job_cron = '@daily', ttl_disable_changefeed_replication = 'true'); | ||
` | ||
) | ||
|
||
func init() { | ||
err := CRDBMigrations.Register("add-transaction-metadata-table", "add-integrity-relationtuple-table", addTransactionMetadataTable, noAtomicMigration) | ||
if err != nil { | ||
panic("failed to register migration: " + err.Error()) | ||
} | ||
} | ||
|
||
func addTransactionMetadataTable(ctx context.Context, conn *pgx.Conn) error { | ||
row := conn.QueryRow(ctx, "select version()") | ||
var version string | ||
if err := row.Scan(&version); err != nil { | ||
return err | ||
} | ||
|
||
if strings.Contains(version, "v22.1") { | ||
if _, err := conn.Exec(ctx, addTransactionMetadataTableQueryWithBasicTTL); err != nil { | ||
return err | ||
} | ||
return nil | ||
} | ||
|
||
if strings.Contains(version, "v24.") { | ||
if _, err := conn.Exec(ctx, addTransactionMetadataTableQueryWithTTLIgnore); err != nil { | ||
return err | ||
} | ||
return nil | ||
} | ||
|
||
// CRDB v23 and v22.2.* | ||
if _, err := conn.Exec(ctx, addTransactionMetadataTableQuery); err != nil { | ||
return err | ||
} | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.