Skip to content

Commit 03de826

Browse files
committed
fix: potential inconsistent ledger creation
1 parent 19e664a commit 03de826

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

internal/storage/driver/driver.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ func (d *Driver) CreateLedger(ctx context.Context, l *ledger.Ledger) (*ledgersto
4343
l.Metadata = metadata.Metadata{}
4444
}
4545

46+
if err := d.systemStore.CreateLedger(ctx, l); err != nil {
47+
if errors.Is(postgres.ResolveError(err), postgres.ErrConstraintsFailed{}) {
48+
return nil, systemcontroller.ErrLedgerAlreadyExists
49+
}
50+
return nil, postgres.ResolveError(err)
51+
}
52+
4653
b := d.bucketFactory.Create(l.Bucket)
4754
isInitialized, err := b.IsInitialized(ctx)
4855
if err != nil {
@@ -57,24 +64,17 @@ func (d *Driver) CreateLedger(ctx context.Context, l *ledger.Ledger) (*ledgersto
5764
if !upToDate {
5865
return nil, systemcontroller.ErrBucketOutdated
5966
}
60-
}
6167

62-
if err := b.Migrate(
63-
ctx,
64-
migrations.WithLockRetryInterval(d.migratorLockRetryInterval),
65-
); err != nil {
66-
return nil, fmt.Errorf("migrating bucket: %w", err)
67-
}
68-
69-
if err := d.systemStore.CreateLedger(ctx, l); err != nil {
70-
if errors.Is(postgres.ResolveError(err), postgres.ErrConstraintsFailed{}) {
71-
return nil, systemcontroller.ErrLedgerAlreadyExists
68+
if err := b.AddLedger(ctx, *l); err != nil {
69+
return nil, fmt.Errorf("adding ledger to bucket: %w", err)
70+
}
71+
} else {
72+
if err := b.Migrate(
73+
ctx,
74+
migrations.WithLockRetryInterval(d.migratorLockRetryInterval),
75+
); err != nil {
76+
return nil, fmt.Errorf("migrating bucket: %w", err)
7277
}
73-
return nil, postgres.ResolveError(err)
74-
}
75-
76-
if err := b.AddLedger(ctx, *l); err != nil {
77-
return nil, fmt.Errorf("adding ledger to bucket: %w", err)
7878
}
7979

8080
return d.ledgerStoreFactory.Create(b, *l), nil

internal/storage/driver/driver_test.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,6 @@ func TestLedgersCreate(t *testing.T) {
212212
Migrate(gomock.Any(), gomock.Any()).
213213
Return(nil)
214214

215-
bucket.EXPECT().
216-
AddLedger(gomock.Any(), *l).
217-
Return(nil)
218-
219215
ledgerStoreFactory.EXPECT().
220216
Create(gomock.Any(), *l).
221217
Return(&ledgerstore.Store{})

0 commit comments

Comments
 (0)