Skip to content

Commit

Permalink
Remove BatchGetLedgers from LedgerReader
Browse files Browse the repository at this point in the history
  • Loading branch information
aditya1702 committed Nov 11, 2024
1 parent ca4d6d6 commit 2a0cec2
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 40 deletions.
40 changes: 13 additions & 27 deletions cmd/soroban-rpc/internal/db/ledger.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ type StreamLedgerFn func(xdr.LedgerCloseMeta) error

type LedgerReader interface {
GetLedger(ctx context.Context, sequence uint32) (xdr.LedgerCloseMeta, bool, error)
BatchGetLedgers(ctx context.Context, sequence uint32, batchSize uint) ([]xdr.LedgerCloseMeta, error)
StreamAllLedgers(ctx context.Context, f StreamLedgerFn) error
GetLedgerRange(ctx context.Context) (ledgerbucketwindow.LedgerRange, error)
StreamLedgerRange(ctx context.Context, startLedger uint32, endLedger uint32, f StreamLedgerFn) error
Expand Down Expand Up @@ -63,7 +62,19 @@ func (l ledgerReaderTx) GetLedgerRange(ctx context.Context) (ledgerbucketwindow.
func (l ledgerReaderTx) BatchGetLedgers(ctx context.Context, sequence uint32,
batchSize uint,
) ([]xdr.LedgerCloseMeta, error) {
return batchGetLedgers(ctx, l.tx, sequence, batchSize)
sql := sq.Select("meta").
From(ledgerCloseMetaTableName).
Where(sq.And{
sq.GtOrEq{"sequence": sequence},
sq.LtOrEq{"sequence": sequence + uint32(batchSize) - 1},
})

results := make([]xdr.LedgerCloseMeta, 0, batchSize)
if err := l.tx.Select(ctx, &results, sql); err != nil {
return nil, err
}

return results, nil
}

func (l ledgerReaderTx) Done() error {
Expand Down Expand Up @@ -156,31 +167,6 @@ func (r ledgerReader) GetLedger(ctx context.Context, sequence uint32) (xdr.Ledge
}
}

// BatchGetLedgers fetches ledgers in batches from the db.
func (r ledgerReader) BatchGetLedgers(ctx context.Context, sequence uint32,
batchSize uint,
) ([]xdr.LedgerCloseMeta, error) {
return batchGetLedgers(ctx, r.db, sequence, batchSize)
}

func batchGetLedgers(ctx context.Context, db readDB, sequence uint32,
batchSize uint,
) ([]xdr.LedgerCloseMeta, error) {
sql := sq.Select("meta").
From(ledgerCloseMetaTableName).
Where(sq.And{
sq.GtOrEq{"sequence": sequence},
sq.LtOrEq{"sequence": sequence + uint32(batchSize) - 1},
})

results := make([]xdr.LedgerCloseMeta, 0, batchSize)
if err := db.Select(ctx, &results, sql); err != nil {
return nil, err
}

return results, nil
}

// GetLedgerRange pulls the min/max ledger sequence numbers from the meta table.
func (r ledgerReader) GetLedgerRange(ctx context.Context) (ledgerbucketwindow.LedgerRange, error) {
r.db.cache.RLock()
Expand Down
4 changes: 3 additions & 1 deletion cmd/soroban-rpc/internal/db/ledger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,11 +198,13 @@ func BenchmarkGetLedgerRange(b *testing.B) {
func BenchmarkBatchGetLedgers(b *testing.B) {
testDB, lcms := setupBenchmarkingDB(b)
reader := NewLedgerReader(testDB)
readTx, err := reader.NewTx(context.Background())
require.NoError(b, err)
batchSize := uint(200) // using the current maximum value for getLedgers endpoint

b.ResetTimer()
for range b.N {
ledgers, err := reader.BatchGetLedgers(context.TODO(), 1334, batchSize)
ledgers, err := readTx.BatchGetLedgers(context.TODO(), 1334, batchSize)
require.NoError(b, err)
assert.Equal(b, lcms[0].LedgerSequence(), ledgers[0].LedgerSequence())
assert.Equal(b, lcms[batchSize-1].LedgerSequence(), ledgers[batchSize-1].LedgerSequence())
Expand Down
6 changes: 0 additions & 6 deletions cmd/soroban-rpc/internal/db/mocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,6 @@ func (m *MockLedgerReader) GetLedger(_ context.Context, sequence uint32) (xdr.Le
return *lcm, true, nil
}

func (m *MockLedgerReader) BatchGetLedgers(_ context.Context, _ uint32,
_ uint,
) ([]xdr.LedgerCloseMeta, error) {
return []xdr.LedgerCloseMeta{}, nil
}

func (m *MockLedgerReader) StreamAllLedgers(_ context.Context, _ StreamLedgerFn) error {
return nil
}
Expand Down
6 changes: 0 additions & 6 deletions cmd/soroban-rpc/internal/methods/get_latest_ledger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,6 @@ func (ledgerReader *ConstantLedgerReader) GetLedger(_ context.Context,
return createLedger(sequence, expectedLatestLedgerProtocolVersion, expectedLatestLedgerHashBytes), true, nil
}

func (ledgerReader *ConstantLedgerReader) BatchGetLedgers(_ context.Context, _ uint32,
_ uint,
) ([]xdr.LedgerCloseMeta, error) {
return []xdr.LedgerCloseMeta{}, nil
}

func (ledgerReader *ConstantLedgerReader) StreamAllLedgers(_ context.Context, _ db.StreamLedgerFn) error {
return nil
}
Expand Down

0 comments on commit 2a0cec2

Please sign in to comment.