Skip to content

Commit

Permalink
fix: potential inconsistent ledger creation
Browse files Browse the repository at this point in the history
  • Loading branch information
gfyrag committed Feb 20, 2025
1 parent 19e664a commit 03de826
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 20 deletions.
32 changes: 16 additions & 16 deletions internal/storage/driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@ func (d *Driver) CreateLedger(ctx context.Context, l *ledger.Ledger) (*ledgersto
l.Metadata = metadata.Metadata{}
}

if err := d.systemStore.CreateLedger(ctx, l); err != nil {
if errors.Is(postgres.ResolveError(err), postgres.ErrConstraintsFailed{}) {
return nil, systemcontroller.ErrLedgerAlreadyExists
}
return nil, postgres.ResolveError(err)
}

b := d.bucketFactory.Create(l.Bucket)
isInitialized, err := b.IsInitialized(ctx)
if err != nil {
Expand All @@ -57,24 +64,17 @@ func (d *Driver) CreateLedger(ctx context.Context, l *ledger.Ledger) (*ledgersto
if !upToDate {
return nil, systemcontroller.ErrBucketOutdated
}
}

if err := b.Migrate(
ctx,
migrations.WithLockRetryInterval(d.migratorLockRetryInterval),
); err != nil {
return nil, fmt.Errorf("migrating bucket: %w", err)
}

if err := d.systemStore.CreateLedger(ctx, l); err != nil {
if errors.Is(postgres.ResolveError(err), postgres.ErrConstraintsFailed{}) {
return nil, systemcontroller.ErrLedgerAlreadyExists
if err := b.AddLedger(ctx, *l); err != nil {
return nil, fmt.Errorf("adding ledger to bucket: %w", err)
}
} else {
if err := b.Migrate(
ctx,
migrations.WithLockRetryInterval(d.migratorLockRetryInterval),
); err != nil {
return nil, fmt.Errorf("migrating bucket: %w", err)
}
return nil, postgres.ResolveError(err)
}

if err := b.AddLedger(ctx, *l); err != nil {
return nil, fmt.Errorf("adding ledger to bucket: %w", err)
}

return d.ledgerStoreFactory.Create(b, *l), nil
Expand Down
4 changes: 0 additions & 4 deletions internal/storage/driver/driver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,10 +212,6 @@ func TestLedgersCreate(t *testing.T) {
Migrate(gomock.Any(), gomock.Any()).
Return(nil)

bucket.EXPECT().
AddLedger(gomock.Any(), *l).
Return(nil)

ledgerStoreFactory.EXPECT().
Create(gomock.Any(), *l).
Return(&ledgerstore.Store{})
Expand Down

0 comments on commit 03de826

Please sign in to comment.