Skip to content

Commit 7d6be2b

Browse files
committed
fix(cassandra): resolve concurrent idempotency race and remove dropped tables from cleanup
- Re-check findSchemaInSubject on CAS retry to detect concurrent registrations of the same schema (fixes TestSchemaIdempotency) - Remove schemas_by_fingerprint and subjects from BDD truncation list (tables were dropped in SAI migration)
1 parent 1faf68a commit 7d6be2b

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

internal/storage/cassandra/store.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,17 @@ func (s *Store) CreateSchema(ctx context.Context, record *storage.SchemaRecord)
477477

478478
// Allocate next subject version and persist atomically.
479479
for attempt := 0; attempt < s.cfg.MaxRetries; attempt++ {
480+
// Re-check on retry: a concurrent writer may have registered this schema
481+
if attempt > 0 {
482+
if existing, err := s.findSchemaInSubject(ctx, record.Subject, schemaID); err == nil && existing != nil {
483+
record.ID = existing.ID
484+
record.Version = existing.Version
485+
record.Fingerprint = fp
486+
record.CreatedAt = existing.CreatedAt
487+
return storage.ErrSchemaExists
488+
}
489+
}
490+
480491
latestVersion, latestSchemaID, exists, err := s.getSubjectLatest(ctx, record.Subject)
481492
if err != nil {
482493
return err

tests/bdd/bdd_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,8 @@ func cleanCassandra() error {
305305
"users_by_email", "users_by_id",
306306
"id_alloc", "modes", "global_config", "subject_configs",
307307
"references_by_target", "schema_references",
308-
"subjects", "subject_latest", "subject_versions",
309-
"schemas_by_fingerprint", "schemas_by_id",
308+
"subject_latest", "subject_versions",
309+
"schemas_by_id",
310310
}
311311
for _, t := range tables {
312312
if err := session.Query("TRUNCATE " + t).Exec(); err != nil {

0 commit comments

Comments
 (0)