diff --git a/internal/datastore/crdb/crdb.go b/internal/datastore/crdb/crdb.go index 901f8bd754..6d58c8b102 100644 --- a/internal/datastore/crdb/crdb.go +++ b/internal/datastore/crdb/crdb.go @@ -474,6 +474,9 @@ func (cds *crdbDatastore) OfflineFeatures() (*datastore.Features, error) { IntegrityData: datastore.Feature{ Status: datastore.FeatureSupported, }, + ContinuousCheckpointing: datastore.Feature{ + Status: datastore.FeatureSupported, + }, }, nil } @@ -481,6 +484,9 @@ func (cds *crdbDatastore) OfflineFeatures() (*datastore.Features, error) { IntegrityData: datastore.Feature{ Status: datastore.FeatureUnsupported, }, + ContinuousCheckpointing: datastore.Feature{ + Status: datastore.FeatureSupported, + }, }, nil } @@ -500,7 +506,11 @@ func (cds *crdbDatastore) tableTupleName() string { } func (cds *crdbDatastore) features(ctx context.Context) (*datastore.Features, error) { - features := datastore.Features{} + features := datastore.Features{ + ContinuousCheckpointing: datastore.Feature{ + Status: datastore.FeatureSupported, + }, + } if cds.supportsIntegrity { features.IntegrityData.Status = datastore.FeatureSupported } diff --git a/internal/datastore/memdb/memdb.go b/internal/datastore/memdb/memdb.go index ffec0e2523..04b16a80bf 100644 --- a/internal/datastore/memdb/memdb.go +++ b/internal/datastore/memdb/memdb.go @@ -320,6 +320,9 @@ func (mdb *memdbDatastore) OfflineFeatures() (*datastore.Features, error) { IntegrityData: datastore.Feature{ Status: datastore.FeatureSupported, }, + ContinuousCheckpointing: datastore.Feature{ + Status: datastore.FeatureUnsupported, + }, }, nil } diff --git a/internal/datastore/mysql/datastore.go b/internal/datastore/mysql/datastore.go index ed1fc7749a..40e15ef2de 100644 --- a/internal/datastore/mysql/datastore.go +++ b/internal/datastore/mysql/datastore.go @@ -574,6 +574,9 @@ func (mds *Datastore) OfflineFeatures() (*datastore.Features, error) { IntegrityData: datastore.Feature{ Status: datastore.FeatureUnsupported, }, + ContinuousCheckpointing: datastore.Feature{ + Status: datastore.FeatureUnsupported, + }, }, nil } diff --git a/internal/datastore/postgres/postgres.go b/internal/datastore/postgres/postgres.go index 3c73f75cda..00e0cefb4e 100644 --- a/internal/datastore/postgres/postgres.go +++ b/internal/datastore/postgres/postgres.go @@ -693,6 +693,9 @@ func (pgd *pgDatastore) OfflineFeatures() (*datastore.Features, error) { IntegrityData: datastore.Feature{ Status: datastore.FeatureUnsupported, }, + ContinuousCheckpointing: datastore.Feature{ + Status: datastore.FeatureUnsupported, + }, }, nil } @@ -703,6 +706,9 @@ func (pgd *pgDatastore) OfflineFeatures() (*datastore.Features, error) { IntegrityData: datastore.Feature{ Status: datastore.FeatureUnsupported, }, + ContinuousCheckpointing: datastore.Feature{ + Status: datastore.FeatureUnsupported, + }, }, nil } diff --git a/internal/datastore/spanner/spanner.go b/internal/datastore/spanner/spanner.go index d9bfcbf360..19cc8537b4 100644 --- a/internal/datastore/spanner/spanner.go +++ b/internal/datastore/spanner/spanner.go @@ -320,6 +320,9 @@ func (sd *spannerDatastore) OfflineFeatures() (*datastore.Features, error) { IntegrityData: datastore.Feature{ Status: datastore.FeatureUnsupported, }, + ContinuousCheckpointing: datastore.Feature{ + Status: datastore.FeatureSupported, + }, }, nil } diff --git a/pkg/datastore/datastore.go b/pkg/datastore/datastore.go index c31d2592a6..e372a94944 100644 --- a/pkg/datastore/datastore.go +++ b/pkg/datastore/datastore.go @@ -713,6 +713,11 @@ type Features struct { // Watch is enabled if the underlying datastore can support the Watch api. Watch Feature + // ContinuousCheckpointing is enabled if the underlying datastore supports continuous checkpointing + // via the Watch API. If not supported, clients of the Watch API may expect checkpoints only when + // new transactions are committed. + ContinuousCheckpointing Feature + // IntegrityData is enabled if the underlying datastore supports retrieving and storing // integrity information. IntegrityData Feature