Skip to content

Commit

Permalink
feat: impl changes in store interface
Browse files Browse the repository at this point in the history
  • Loading branch information
icorderi committed Jul 25, 2023
1 parent da58c8a commit cc4e7a4
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 154 deletions.
22 changes: 0 additions & 22 deletions ledger/store/trackerdb/generickv/catchpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
package generickv

import (
"context"

"github.com/algorand/go-algorand/ledger/store/trackerdb"
)

Expand All @@ -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")
Expand All @@ -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")
Expand Down
21 changes: 21 additions & 0 deletions ledger/store/trackerdb/generickv/onlineaccounts_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
26 changes: 26 additions & 0 deletions ledger/store/trackerdb/generickv/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package generickv

import (
"context"

"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/ledger/store/trackerdb"
)
Expand Down Expand Up @@ -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")
}
99 changes: 0 additions & 99 deletions ledger/store/trackerdb/testsuite/accounts_kv_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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

}
33 changes: 0 additions & 33 deletions ledger/store/trackerdb/testsuite/onlineaccounts_kv_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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)
}
Expand Down Expand Up @@ -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)
Expand Down
5 changes: 5 additions & 0 deletions ledger/store/trackerdb/testsuite/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down

0 comments on commit cc4e7a4

Please sign in to comment.