From cc4e7a4c6dd822ef5628005ed43a5c37dfdacde8 Mon Sep 17 00:00:00 2001 From: Ignacio Corderi Date: Tue, 25 Jul 2023 17:43:18 +0200 Subject: [PATCH] feat: impl changes in store interface --- .../store/trackerdb/generickv/catchpoint.go | 22 ----- .../generickv/onlineaccounts_reader.go | 21 ++++ ledger/store/trackerdb/generickv/reader.go | 26 +++++ .../trackerdb/testsuite/accounts_kv_test.go | 99 ------------------- .../testsuite/onlineaccounts_kv_test.go | 33 ------- .../store/trackerdb/testsuite/utils_test.go | 5 + 6 files changed, 52 insertions(+), 154 deletions(-) diff --git a/ledger/store/trackerdb/generickv/catchpoint.go b/ledger/store/trackerdb/generickv/catchpoint.go index a4977cda86..99c8a7d955 100644 --- a/ledger/store/trackerdb/generickv/catchpoint.go +++ b/ledger/store/trackerdb/generickv/catchpoint.go @@ -17,8 +17,6 @@ package generickv import ( - "context" - "github.com/algorand/go-algorand/ledger/store/trackerdb" ) @@ -29,16 +27,6 @@ func MakeCatchpoint() trackerdb.Catchpoint { return &catchpoint{} } -// MakeCatchpointPendingHashesIterator implements trackerdb.Catchpoint -func (*catchpoint) MakeCatchpointPendingHashesIterator(hashCount int) trackerdb.CatchpointPendingHashesIter { - panic("unimplemented") -} - -// MakeCatchpointReader implements trackerdb.Catchpoint -func (*catchpoint) MakeCatchpointReader() (trackerdb.CatchpointReader, error) { - panic("unimplemented") -} - // MakeCatchpointReaderWriter implements trackerdb.Catchpoint func (*catchpoint) MakeCatchpointReaderWriter() (trackerdb.CatchpointReaderWriter, error) { panic("unimplemented") @@ -49,16 +37,6 @@ func (*catchpoint) MakeCatchpointWriter() (trackerdb.CatchpointWriter, error) { panic("unimplemented") } -// MakeEncodedAccoutsBatchIter implements trackerdb.Catchpoint -func (*catchpoint) MakeEncodedAccoutsBatchIter() trackerdb.EncodedAccountsBatchIter { - panic("unimplemented") -} - -// MakeKVsIter implements trackerdb.Catchpoint -func (*catchpoint) MakeKVsIter(ctx context.Context) (trackerdb.KVsIter, error) { - panic("unimplemented") -} - // MakeMerkleCommitter implements trackerdb.Catchpoint func (*catchpoint) MakeMerkleCommitter(staging bool) (trackerdb.MerkleCommitter, error) { panic("unimplemented") diff --git a/ledger/store/trackerdb/generickv/onlineaccounts_reader.go b/ledger/store/trackerdb/generickv/onlineaccounts_reader.go index 029b0317c2..a2ca831603 100644 --- a/ledger/store/trackerdb/generickv/onlineaccounts_reader.go +++ b/ledger/store/trackerdb/generickv/onlineaccounts_reader.go @@ -163,3 +163,24 @@ func (r *accountsReader) LookupOnlineHistory(addr basics.Address) (result []trac return } + +func (r *accountsReader) LookupOnlineRoundParams(rnd basics.Round) (onlineRoundParamsData ledgercore.OnlineRoundParamsData, err error) { + // SQL impl at time of writing: + // + // SELECT data + // FROM onlineroundparamstail + // WHERE rnd=? + + value, closer, err := r.kvr.Get(onlineAccountRoundParamsKey(rnd)) + if err != nil { + return + } + defer closer.Close() + + err = protocol.Decode(value, &onlineRoundParamsData) + if err != nil { + return + } + + return +} diff --git a/ledger/store/trackerdb/generickv/reader.go b/ledger/store/trackerdb/generickv/reader.go index 88761c6013..1532f2fca6 100644 --- a/ledger/store/trackerdb/generickv/reader.go +++ b/ledger/store/trackerdb/generickv/reader.go @@ -17,6 +17,8 @@ package generickv import ( + "context" + "github.com/algorand/go-algorand/config" "github.com/algorand/go-algorand/ledger/store/trackerdb" ) @@ -50,3 +52,27 @@ func (r *reader) MakeOnlineAccountsOptimizedReader() (trackerdb.OnlineAccountsRe func (r *reader) MakeSpVerificationCtxReader() trackerdb.SpVerificationCtxReader { return MakeStateproofReader(r) } + +// MakeCatchpointPendingHashesIterator implements trackerdb.Reader +func (r *reader) MakeCatchpointPendingHashesIterator(hashCount int) trackerdb.CatchpointPendingHashesIter { + // TODO: catchpoint + panic("unimplemented") +} + +// MakeCatchpointReader implements trackerdb.Reader +func (r *reader) MakeCatchpointReader() (trackerdb.CatchpointReader, error) { + // TODO: catchpoint + panic("unimplemented") +} + +// MakeEncodedAccoutsBatchIter implements trackerdb.Reader +func (r *reader) MakeEncodedAccoutsBatchIter() trackerdb.EncodedAccountsBatchIter { + // TODO: catchpoint + panic("unimplemented") +} + +// MakeKVsIter implements trackerdb.Reader +func (r *reader) MakeKVsIter(ctx context.Context) (trackerdb.KVsIter, error) { + // TODO: catchpoint + panic("unimplemented") +} diff --git a/ledger/store/trackerdb/testsuite/accounts_kv_test.go b/ledger/store/trackerdb/testsuite/accounts_kv_test.go index 0b8e74a715..1ca7b742a6 100644 --- a/ledger/store/trackerdb/testsuite/accounts_kv_test.go +++ b/ledger/store/trackerdb/testsuite/accounts_kv_test.go @@ -29,7 +29,6 @@ func init() { registerTest("resources-query-all", CustomTestResourcesQueryAll) registerTest("kv-crud", CustomTestAppKVCrud) registerTest("creatables-crud", CustomTestCreatablesCrud) - registerTest("creatables-query-all", CustomTestCreatablesQueryAll) } func CustomTestAccountsCrud(t *customT) { @@ -380,101 +379,3 @@ func CustomTestCreatablesCrud(t *customT) { require.Equal(t, expectedRound, rnd) // db round (this is present even if record does not exist) } - -func CustomTestCreatablesQueryAll(t *customT) { - aow, err := t.db.MakeAccountsOptimizedWriter(true, true, false, true) - require.NoError(t, err) - - aor, err := t.db.MakeAccountsOptimizedReader() - require.NoError(t, err) - - aw, err := t.db.MakeAccountsWriter() - require.NoError(t, err) - - // set round to 3 - // Note: this will be used to check that we read the round - expectedRound := basics.Round(3) - err = aw.UpdateAccountsRound(expectedRound) - require.NoError(t, err) - - // - // pre-fill the db with an account for testing - // - - // account A - addrA := RandomAddress() - accDataA := trackerdb.BaseAccountData{RewardsBase: 1000} - refAccA, err := aow.InsertAccount(addrA, accDataA.NormalizedOnlineBalance(t.proto), accDataA) - require.NoError(t, err) - - // resource A-0 - resDataA0 := trackerdb.ResourcesData{} - aidxResA0 := basics.CreatableIndex(0) - _, err = aow.InsertResource(refAccA, aidxResA0, resDataA0) - require.NoError(t, err) - - // resource A-1 - resDataA1 := trackerdb.ResourcesData{} - aidxResA1 := basics.CreatableIndex(1) - _, err = aow.InsertResource(refAccA, aidxResA1, resDataA1) - require.NoError(t, err) - - // resource A-2 - resDataA2 := trackerdb.ResourcesData{} - aidxResA2 := basics.CreatableIndex(2) - _, err = aow.InsertResource(refAccA, aidxResA2, resDataA2) - require.NoError(t, err) - - // creator for A0 - resA0ctype := basics.AssetCreatable - cRefA0, err := aow.InsertCreatable(aidxResA0, resA0ctype, addrA[:]) - require.NoError(t, err) - require.NotNil(t, cRefA0) - - // creator for A1 - resA1ctype := basics.AppCreatable - cRefA1, err := aow.InsertCreatable(aidxResA1, resA1ctype, addrA[:]) - require.NoError(t, err) - require.NotNil(t, cRefA1) - - // creator for A2 - resA2ctype := basics.AppCreatable - cRefA2, err := aow.InsertCreatable(aidxResA2, resA2ctype, addrA[:]) - require.NoError(t, err) - require.NotNil(t, cRefA2) - - // - // test - // - - // filter by type - cls, rnd, err := aor.ListCreatables(basics.CreatableIndex(99), 5, basics.AssetCreatable) - require.NoError(t, err) - require.Len(t, cls, 1) // only one asset - require.Equal(t, aidxResA0, cls[0].Index) // resource A-0 - require.Equal(t, expectedRound, rnd) // db round - - // with multiple results - cls, rnd, err = aor.ListCreatables(basics.CreatableIndex(99), 5, basics.AppCreatable) - require.NoError(t, err) - require.Len(t, cls, 2) // two apps - require.Equal(t, aidxResA2, cls[0].Index) // resource A-2 - require.Equal(t, aidxResA1, cls[1].Index) // resource A-1 - require.Equal(t, expectedRound, rnd) // db round - - // limit results - cls, rnd, err = aor.ListCreatables(basics.CreatableIndex(99), 1, basics.AppCreatable) - require.NoError(t, err) - require.Len(t, cls, 1) // two apps - require.Equal(t, aidxResA2, cls[0].Index) // resource A-2 - require.Equal(t, expectedRound, rnd) // db round - - // filter maxId - cls, rnd, err = aor.ListCreatables(aidxResA2, 10, basics.AppCreatable) - require.NoError(t, err) - require.Len(t, cls, 2) // only one app since to that cidx - require.Equal(t, aidxResA2, cls[0].Index) // resource A-2 (checks for order too) - require.Equal(t, aidxResA1, cls[1].Index) // resource A-1 - require.Equal(t, expectedRound, rnd) // db round - -} diff --git a/ledger/store/trackerdb/testsuite/onlineaccounts_kv_test.go b/ledger/store/trackerdb/testsuite/onlineaccounts_kv_test.go index ed444794da..9062587b99 100644 --- a/ledger/store/trackerdb/testsuite/onlineaccounts_kv_test.go +++ b/ledger/store/trackerdb/testsuite/onlineaccounts_kv_test.go @@ -19,7 +19,6 @@ package testsuite import ( "github.com/algorand/go-algorand/crypto" "github.com/algorand/go-algorand/data/basics" - "github.com/algorand/go-algorand/ledger/ledgercore" "github.com/algorand/go-algorand/ledger/store/trackerdb" "github.com/algorand/go-algorand/protocol" "github.com/stretchr/testify/require" @@ -32,7 +31,6 @@ func init() { registerTest("online-accounts-top", CustomTestAccountsOnlineTop) registerTest("online-accounts-get-by-addr", CustomTestLookupOnlineAccountDataByAddress) registerTest("online-accounts-history", CustomTestOnlineAccountHistory) - registerTest("online-accounts-totals", CustomTestOnlineAccountTotals) registerTest("online-accounts-delete", CustomTestOnlineAccountsDelete) registerTest("online-accounts-expired", CustomTestAccountsOnlineExpired) } @@ -324,37 +322,6 @@ func CustomTestLookupOnlineAccountDataByAddress(t *customT) { require.Equal(t, dataA, badA) } -func CustomTestOnlineAccountTotals(t *customT) { - aw, err := t.db.MakeAccountsWriter() - require.NoError(t, err) - - oaor, err := t.db.MakeOnlineAccountsOptimizedReader() - require.NoError(t, err) - - // generate some test data - roundParams := []ledgercore.OnlineRoundParamsData{ - {OnlineSupply: 100}, - {OnlineSupply: 42}, - {OnlineSupply: 9000}, - } - err = aw.AccountsPutOnlineRoundParams(roundParams, basics.Round(3)) - require.NoError(t, err) - - // - // test - // - - // lookup totals - totals, err := oaor.LookupOnlineTotalsHistory(basics.Round(4)) - require.NoError(t, err) - require.Equal(t, basics.MicroAlgos{Raw: uint64(42)}, totals) - - // lookup not found - _, err = oaor.LookupOnlineTotalsHistory(basics.Round(121)) - require.Error(t, err) - require.Equal(t, trackerdb.ErrNotFound, err) -} - func CustomTestOnlineAccountsDelete(t *customT) { oaw, err := t.db.MakeOnlineAccountsOptimizedWriter(true) require.NoError(t, err) diff --git a/ledger/store/trackerdb/testsuite/utils_test.go b/ledger/store/trackerdb/testsuite/utils_test.go index 342b8a5b89..7862155d0b 100644 --- a/ledger/store/trackerdb/testsuite/utils_test.go +++ b/ledger/store/trackerdb/testsuite/utils_test.go @@ -324,6 +324,11 @@ func (ss mockSnapshot) Get(key []byte) (value []byte, closer io.Closer, err erro func (ss mockSnapshot) NewIter(low, high []byte, reverse bool) generickv.KvIter { return ss.db.kvs.NewIter(low, high, reverse) } + +func (ss mockSnapshot) ResetTransactionWarnDeadline(ctx context.Context, deadline time.Time) (prevDeadline time.Time, err error) { + return time.Now(), nil +} + func (ss mockSnapshot) Close() error { return nil }