Skip to content

Commit 073bbf8

Browse files
committed
fix: resolve remaining CI failures for DB backends
- PostgreSQL/MySQL: delete soft-deleted row before re-inserting same schema to avoid unique constraint violation on (subject, fingerprint) - Cassandra: filter out soft-deleted referrers in GetReferencedBy to match memory store behavior
1 parent 9d50c65 commit 073bbf8

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

internal/storage/cassandra/store.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,6 +1250,14 @@ func (s *Store) GetReferencedBy(ctx context.Context, subject string, version int
12501250
var refs []storage.SubjectVersion
12511251
var ref storage.SubjectVersion
12521252
for iter.Scan(&ref.Subject, &ref.Version) {
1253+
// Filter out soft-deleted referrers (consistent with memory store behavior)
1254+
var deleted bool
1255+
if err := s.readQuery(
1256+
fmt.Sprintf(`SELECT deleted FROM %s.subject_versions WHERE subject = ? AND version = ?`, qident(s.cfg.Keyspace)),
1257+
ref.Subject, ref.Version,
1258+
).WithContext(ctx).Scan(&deleted); err != nil || deleted {
1259+
continue
1260+
}
12531261
refs = append(refs, ref)
12541262
}
12551263
if err := iter.Close(); err != nil {

internal/storage/mysql/store.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,15 @@ func (s *Store) createSchemaAttempt(ctx context.Context, record *storage.SchemaR
498498
return fmt.Errorf("failed to marshal ruleset: %w", err)
499499
}
500500

501+
// If a soft-deleted row with the same fingerprint exists, remove it first
502+
// to avoid violating the unique constraint on (subject, fingerprint).
503+
if existingDeleted {
504+
_, _ = tx.ExecContext(ctx,
505+
"DELETE FROM `schemas` WHERE subject = ? AND fingerprint = ?",
506+
record.Subject, record.Fingerprint,
507+
)
508+
}
509+
501510
// Insert schema - unique constraint on (subject, version) prevents duplicates
502511
_, err = tx.ExecContext(ctx,
503512
"INSERT INTO `schemas` (subject, version, schema_type, schema_text, fingerprint, created_at, metadata, ruleset) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",

internal/storage/postgres/store.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,15 @@ func (s *Store) createSchemaAttempt(ctx context.Context, record *storage.SchemaR
533533
return fmt.Errorf("failed to marshal ruleset: %w", err)
534534
}
535535

536+
// If a soft-deleted row with the same fingerprint exists, remove it first
537+
// to avoid violating the unique constraint on (subject, fingerprint).
538+
if existingDeleted {
539+
_, _ = tx.ExecContext(ctx,
540+
`DELETE FROM schemas WHERE subject = $1 AND fingerprint = $2`,
541+
record.Subject, record.Fingerprint,
542+
)
543+
}
544+
536545
// Insert schema - unique constraint on (subject, version) prevents duplicates
537546
_, err = tx.ExecContext(ctx,
538547
`INSERT INTO schemas (subject, version, schema_type, schema_text, fingerprint, created_at, metadata, ruleset)

0 commit comments

Comments
 (0)