Test list queries and iavl implementation

This commit is contained in:
Ethan Frey 2017-07-26 15:19:37 -04:00
parent 37b5d16b73
commit 744d035d95
4 changed files with 24 additions and 23 deletions

13
glide.lock generated
View File

@ -1,5 +1,5 @@
hash: 8c438edb7d269da439141e62f3e0c931fa9efaee54b13ce1e7330dc99179fddd hash: 2848c30b31fb205f846dd7dfca14ebed8a3249cbc5aaa759066b2bab3e4bbf42
updated: 2017-07-20T15:39:36.659717024+02:00 updated: 2017-07-26T15:18:56.353872835-04:00
imports: imports:
- name: github.com/bgentry/speakeasy - name: github.com/bgentry/speakeasy
version: 4aabc24848ce5fd31929f7d1e4ea74d3709c14cd version: 4aabc24848ce5fd31929f7d1e4ea74d3709c14cd
@ -105,7 +105,7 @@ imports:
- leveldb/table - leveldb/table
- leveldb/util - leveldb/util
- name: github.com/tendermint/abci - name: github.com/tendermint/abci
version: 7f5f48b6b9ec3964de4b07b6c3cd05d7c91aeee5 version: 864d1f80b36b440bde030a5c18d8ac3aa8c2949d
subpackages: subpackages:
- client - client
- example/dummy - example/dummy
@ -133,16 +133,15 @@ imports:
- data - data
- data/base58 - data/base58
- name: github.com/tendermint/light-client - name: github.com/tendermint/light-client
version: d63415027075bc5d74a98a718393b59b5c4279a5 version: fcf4e411583135a1900157b8b0274c41e20ea3a1
subpackages: subpackages:
- certifiers - certifiers
- certifiers/client - certifiers/client
- certifiers/files - certifiers/files
- proofs - proofs
- name: github.com/tendermint/merkleeyes - name: github.com/tendermint/merkleeyes
version: 102aaf5a8ffda1846413fb22805a94def2045b9f version: fef0a1fc729f5b50c58a2dce04b4525aa06c2247
subpackages: subpackages:
- app
- client - client
- iavl - iavl
- name: github.com/tendermint/tendermint - name: github.com/tendermint/tendermint
@ -172,7 +171,7 @@ imports:
- types - types
- version - version
- name: github.com/tendermint/tmlibs - name: github.com/tendermint/tmlibs
version: efb56aaea7517220bb3f42ff87b8004d554a17ff version: 2f6f3e6aa70bb19b70a6e73210273fa127041070
subpackages: subpackages:
- autofile - autofile
- cli - cli

View File

@ -29,7 +29,7 @@ import:
- certifiers/client - certifiers/client
- certifiers/files - certifiers/files
- package: github.com/tendermint/merkleeyes - package: github.com/tendermint/merkleeyes
version: develop version: unstable
subpackages: subpackages:
- client - client
- iavl - iavl

View File

@ -1,10 +1,9 @@
package merkle package state
import ( import (
"errors" "errors"
"math/rand" "math/rand"
"github.com/tendermint/basecoin/state"
"github.com/tendermint/merkleeyes/iavl" "github.com/tendermint/merkleeyes/iavl"
"github.com/tendermint/tmlibs/merkle" "github.com/tendermint/tmlibs/merkle"
) )
@ -79,7 +78,7 @@ type Bonsai struct {
merkle.Tree merkle.Tree
} }
var _ state.SimpleDB = &Bonsai{} var _ SimpleDB = &Bonsai{}
func NewBonsai(tree merkle.Tree) *Bonsai { func NewBonsai(tree merkle.Tree) *Bonsai {
return &Bonsai{ return &Bonsai{
@ -104,38 +103,39 @@ func (b *Bonsai) Remove(key []byte) (value []byte) {
return return
} }
func (b *Bonsai) List(start, end []byte, limit int) []state.Model { func (b *Bonsai) List(start, end []byte, limit int) []Model {
var res []state.Model res := []Model{}
stopAtCount := func(key []byte, value []byte) (stop bool) { stopAtCount := func(key []byte, value []byte) (stop bool) {
m := state.Model{key, value} m := Model{key, value}
res = append(res, m) res = append(res, m)
return len(res) >= limit // return false
return limit > 0 && len(res) >= limit
} }
b.Tree.IterateRange(start, end, true, stopAtCount) b.Tree.IterateRange(start, end, true, stopAtCount)
return res return res
} }
func (b *Bonsai) First(start, end []byte) state.Model { func (b *Bonsai) First(start, end []byte) Model {
var m state.Model var m Model
stopAtFirst := func(key []byte, value []byte) (stop bool) { stopAtFirst := func(key []byte, value []byte) (stop bool) {
m = state.Model{key, value} m = Model{key, value}
return true return true
} }
b.Tree.IterateRange(start, end, true, stopAtFirst) b.Tree.IterateRange(start, end, true, stopAtFirst)
return m return m
} }
func (b *Bonsai) Last(start, end []byte) state.Model { func (b *Bonsai) Last(start, end []byte) Model {
var m state.Model var m Model
stopAtFirst := func(key []byte, value []byte) (stop bool) { stopAtFirst := func(key []byte, value []byte) (stop bool) {
m = state.Model{key, value} m = Model{key, value}
return true return true
} }
b.Tree.IterateRange(start, end, false, stopAtFirst) b.Tree.IterateRange(start, end, false, stopAtFirst)
return m return m
} }
func (b *Bonsai) Checkpoint() state.SimpleDB { func (b *Bonsai) Checkpoint() SimpleDB {
return &Bonsai{ return &Bonsai{
id: b.id, id: b.id,
Tree: b.Tree.Copy(), Tree: b.Tree.Copy(),
@ -145,7 +145,7 @@ func (b *Bonsai) Checkpoint() state.SimpleDB {
// Commit will take all changes from the checkpoint and write // Commit will take all changes from the checkpoint and write
// them to the parent. // them to the parent.
// Returns an error if this is not a child of this one // Returns an error if this is not a child of this one
func (b *Bonsai) Commit(sub state.SimpleDB) error { func (b *Bonsai) Commit(sub SimpleDB) error {
bb, ok := sub.(*Bonsai) bb, ok := sub.(*Bonsai)
if !ok || (b.id != bb.id) { if !ok || (b.id != bb.id) {
return errors.New("Not a sub-transaction") return errors.New("Not a sub-transaction")

View File

@ -4,11 +4,13 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/tendermint/merkleeyes/iavl"
) )
func GetDBs() []SimpleDB { func GetDBs() []SimpleDB {
return []SimpleDB{ return []SimpleDB{
NewMemKVStore(), NewMemKVStore(),
NewBonsai(iavl.NewIAVLTree(0, nil)),
} }
} }