diff --git a/internal/storage/driver/driver.go b/internal/storage/driver/driver.go index 497bb406e5..a10a2b0367 100644 --- a/internal/storage/driver/driver.go +++ b/internal/storage/driver/driver.go @@ -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 { @@ -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 diff --git a/internal/storage/driver/driver_test.go b/internal/storage/driver/driver_test.go index ea18bcafd6..b78b9e91a3 100644 --- a/internal/storage/driver/driver_test.go +++ b/internal/storage/driver/driver_test.go @@ -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{})