Skip to content

Commit 8470540

Browse files
authored
Merge pull request authzed#1717 from josephschorr/telemetry-warn
Change telemetry failure to a warning and have Postgres check for its unique ID on startup
2 parents deb851f + 8450213 commit 8470540

File tree

3 files changed

+31
-10
lines changed

3 files changed

+31
-10
lines changed

internal/datastore/postgres/postgres.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,12 +547,19 @@ func (pgd *pgDatastore) ReadyState(ctx context.Context) (datastore.ReadyState, e
547547
}
548548

549549
if version == headMigration {
550+
// Ensure a datastore ID is present. This ensures the tables have not been truncated.
551+
uniqueID, err := pgd.datastoreUniqueID(ctx)
552+
if err != nil {
553+
return datastore.ReadyState{}, fmt.Errorf("database validation failed: %w; if you have previously run `TRUNCATE`, this database is no longer valid and must be remigrated. See: https://spicedb.dev/d/truncate-unsupported", err)
554+
}
555+
556+
log.Trace().Str("unique_id", uniqueID).Msg("postgres datastore unique ID")
550557
return datastore.ReadyState{IsReady: true}, nil
551558
}
552559

553560
return datastore.ReadyState{
554561
Message: fmt.Sprintf(
555-
"datastore is not migrated: currently at revision `%s`, but requires `%s`. Please run `spicedb migrate`.",
562+
"datastore is not migrated: currently at revision `%s`, but requires `%s`. Please run `spicedb migrate`. If you have previously run `TRUNCATE`, this database is no longer valid and must be remigrated. See: https://spicedb.dev/d/truncate-unsupported",
556563
version,
557564
headMigration,
558565
),

internal/datastore/postgres/stats.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,18 @@ var (
2828
Where(sq.Eq{colRelname: tableTuple})
2929
)
3030

31+
func (pgd *pgDatastore) datastoreUniqueID(ctx context.Context) (string, error) {
32+
idSQL, idArgs, err := queryUniqueID.ToSql()
33+
if err != nil {
34+
return "", fmt.Errorf("unable to generate query sql: %w", err)
35+
}
36+
37+
var uniqueID string
38+
return uniqueID, pgx.BeginTxFunc(ctx, pgd.readPool, pgd.readTxOptions, func(tx pgx.Tx) error {
39+
return tx.QueryRow(ctx, idSQL, idArgs...).Scan(&uniqueID)
40+
})
41+
}
42+
3143
func (pgd *pgDatastore) Statistics(ctx context.Context) (datastore.Stats, error) {
3244
idSQL, idArgs, err := queryUniqueID.ToSql()
3345
if err != nil {

pkg/cmd/server/server.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -439,15 +439,17 @@ func (c *Config) Complete(ctx context.Context) (RunnableServer, error) {
439439
log.Ctx(ctx).Debug().Msg("initializing telemetry collector")
440440
registry, err := telemetry.RegisterTelemetryCollector(c.DatastoreConfig.Engine, ds)
441441
if err != nil {
442-
return nil, fmt.Errorf("unable to initialize telemetry collector: %w", err)
443-
}
444-
445-
telemetryRegistry = registry
446-
reporter, err = telemetry.RemoteReporter(
447-
telemetryRegistry, c.TelemetryEndpoint, c.TelemetryCAOverridePath, c.TelemetryInterval,
448-
)
449-
if err != nil {
450-
return nil, fmt.Errorf("unable to initialize metrics reporter: %w", err)
442+
log.Warn().Err(err).Msg("unable to initialize telemetry collector")
443+
} else {
444+
telemetryRegistry = registry
445+
reporter, err = telemetry.RemoteReporter(
446+
telemetryRegistry, c.TelemetryEndpoint, c.TelemetryCAOverridePath, c.TelemetryInterval,
447+
)
448+
if err != nil {
449+
log.Warn().Err(err).Msg("unable to initialize telemetry reporter")
450+
telemetryRegistry = nil
451+
reporter = telemetry.DisabledReporter
452+
}
451453
}
452454
}
453455

0 commit comments

Comments
 (0)