Commit cbcc2979 authored by vipwzw's avatar vipwzw

merge from chain33

parent 8a67a5cf
...@@ -23,7 +23,7 @@ func TestCount(t *testing.T) { ...@@ -23,7 +23,7 @@ func TestCount(t *testing.T) {
assert.Equal(t, i, int64(1)) assert.Equal(t, i, int64(1))
kvs, err := count.Save() kvs, err := count.Save()
assert.Nil(t, err) assert.Nil(t, err)
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
count = NewCount("prefix", "name#hello", kvdb) count = NewCount("prefix", "name#hello", kvdb)
i, err = count.Get() i, err = count.Get()
......
...@@ -33,7 +33,7 @@ func TestJoin(t *testing.T) { ...@@ -33,7 +33,7 @@ func TestJoin(t *testing.T) {
kvs, err := tablejoin.Save() kvs, err := tablejoin.Save()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 7, len(kvs)) assert.Equal(t, 7, len(kvs))
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
//query table //query table
//每个表的查询,用 tablejoin.MustGetTable("gameaddr") //每个表的查询,用 tablejoin.MustGetTable("gameaddr")
//join query 用 tablejoin.Query //join query 用 tablejoin.Query
...@@ -54,7 +54,7 @@ func TestJoin(t *testing.T) { ...@@ -54,7 +54,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save() kvs, err = tablejoin.Save()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 7, len(kvs)) assert.Equal(t, 7, len(kvs))
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("2")), nil, 0, 0) rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("2")), nil, 0, 0)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 1, len(rows)) assert.Equal(t, 1, len(rows))
...@@ -78,7 +78,7 @@ func TestJoin(t *testing.T) { ...@@ -78,7 +78,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save() kvs, err = tablejoin.Save()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 5, len(kvs)) assert.Equal(t, 5, len(kvs))
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
//改回到全部是1的情况 //改回到全部是1的情况
rightdata = &protodata.Game{GameID: "gameid1", Status: 1} rightdata = &protodata.Game{GameID: "gameid1", Status: 1}
...@@ -88,7 +88,7 @@ func TestJoin(t *testing.T) { ...@@ -88,7 +88,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save() kvs, err = tablejoin.Save()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 10, len(kvs)) assert.Equal(t, 10, len(kvs))
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("1")), nil, 0, 0) rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("1")), nil, 0, 0)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 1, len(rows)) assert.Equal(t, 1, len(rows))
......
...@@ -8,7 +8,6 @@ import ( ...@@ -8,7 +8,6 @@ import (
"fmt" "fmt"
"testing" "testing"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/db" "github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
"github.com/33cn/chain33/util" "github.com/33cn/chain33/util"
...@@ -49,7 +48,7 @@ func TestTransactinList(t *testing.T) { ...@@ -49,7 +48,7 @@ func TestTransactinList(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(kvs), 12) assert.Equal(t, len(kvs), 12)
//save to database //save to database
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
//测试查询 //测试查询
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
...@@ -187,7 +186,7 @@ func TestTransactinListAuto(t *testing.T) { ...@@ -187,7 +186,7 @@ func TestTransactinListAuto(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(kvs), 13) assert.Equal(t, len(kvs), 13)
//save to database //save to database
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
//测试查询 //测试查询
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
...@@ -255,28 +254,6 @@ func mergeDup(kvs []*types.KeyValue) (kvset []*types.KeyValue) { ...@@ -255,28 +254,6 @@ func mergeDup(kvs []*types.KeyValue) (kvset []*types.KeyValue) {
return kvset return kvset
} }
func setKV(kvdb db.DB, kvs []*types.KeyValue) {
//printKV(kvs)
batch := kvdb.NewBatch(true)
for i := 0; i < len(kvs); i++ {
if kvs[i].Value == nil {
batch.Delete(kvs[i].Key)
continue
}
batch.Set(kvs[i].Key, kvs[i].Value)
}
err := batch.Write()
if err != nil {
panic(err)
}
}
func printKV(kvs []*types.KeyValue) {
for i := 0; i < len(kvs); i++ {
fmt.Printf("KV %d %s(%s)\n", i, string(kvs[i].Key), common.ToHex(kvs[i].Value))
}
}
func TestRow(t *testing.T) { func TestRow(t *testing.T) {
rowmeta := NewTransactionRow() rowmeta := NewTransactionRow()
row := rowmeta.CreateRow() row := rowmeta.CreateRow()
...@@ -325,7 +302,7 @@ func TestDel(t *testing.T) { ...@@ -325,7 +302,7 @@ func TestDel(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(kvs), 6) assert.Equal(t, len(kvs), 6)
//save to database //save to database
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
//printKV(kvs) //printKV(kvs)
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
rows, err := query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0) rows, err := query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0)
...@@ -367,7 +344,7 @@ func TestUpdate(t *testing.T) { ...@@ -367,7 +344,7 @@ func TestUpdate(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(kvs), 3) assert.Equal(t, len(kvs), 3)
//save to database //save to database
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
rows, err := query.ListIndex("From", []byte(tx1.From()), nil, 0, 0) rows, err := query.ListIndex("From", []byte(tx1.From()), nil, 0, 0)
assert.Nil(t, err) assert.Nil(t, err)
...@@ -403,7 +380,7 @@ func TestReplace(t *testing.T) { ...@@ -403,7 +380,7 @@ func TestReplace(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 3, len(kvs)) assert.Equal(t, 3, len(kvs))
//save to database //save to database
setKV(ldb, kvs) util.SaveKVList(ldb, kvs)
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
_, err = query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0) _, err = query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0)
assert.Equal(t, err, types.ErrNotFound) assert.Equal(t, err, types.ErrNotFound)
......
...@@ -159,7 +159,15 @@ func (c *KVCreator) GetRollbackKVList() ([]*types.KeyValue, error) { ...@@ -159,7 +159,15 @@ func (c *KVCreator) GetRollbackKVList() ([]*types.KeyValue, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
return c.parseRollback(&rollbacklog) kvs, err := c.parseRollback(&rollbacklog)
if err != nil {
return nil, err
}
//reverse kvs
for left, right := 0, len(kvs)-1; left < right; left, right = left+1, right-1 {
kvs[left], kvs[right] = kvs[right], kvs[left]
}
return kvs, nil
} }
//rollbackLog rollback log //rollbackLog rollback log
......
...@@ -11,14 +11,64 @@ import ( ...@@ -11,14 +11,64 @@ import (
func TestKVCreator(t *testing.T) { func TestKVCreator(t *testing.T) {
dir, ldb, kvdb := util.CreateTestDB() dir, ldb, kvdb := util.CreateTestDB()
defer util.CloseTestDB(dir, ldb) defer util.CloseTestDB(dir, ldb)
creator := NewKVCreator(kvdb) creator := NewKVCreator(kvdb, []byte("prefix-"), nil)
creator.AddKV([]byte("a"), []byte("b")) creator.AddKVOnly([]byte("a"), []byte("b"))
_, err := kvdb.Get([]byte("a")) _, err := kvdb.Get([]byte("prefix-a"))
assert.Equal(t, err, types.ErrNotFound) assert.Equal(t, err, types.ErrNotFound)
creator.Add([]byte("a"), []byte("b")) creator.Add([]byte("a"), []byte("b"))
value, err := kvdb.Get([]byte("a")) value, err := kvdb.Get([]byte("prefix-a"))
assert.Equal(t, err, nil) assert.Equal(t, err, nil)
assert.Equal(t, value, []byte("b")) assert.Equal(t, value, []byte("b"))
creator = NewKVCreator(kvdb, []byte("prefix-"), []byte("rollback"))
creator.Add([]byte("a"), []byte("b"))
creator.Add([]byte("a1"), []byte("b1"))
creator.AddNoPrefix([]byte("np"), []byte("np-value"))
creator.AddList([]*types.KeyValue{
{Key: []byte("l1"), Value: []byte("vl1")},
{Key: []byte("l2"), Value: []byte("vl2")},
})
creator.Add([]byte("c1"), nil)
creator.Add([]byte("l2"), nil)
creator.AddRollbackKV()
assert.Equal(t, 7, len(creator.KVList()))
util.SaveKVList(ldb, creator.KVList())
kvs, err := creator.GetRollbackKVList()
assert.Nil(t, err)
assert.Equal(t, 6, len(kvs))
assert.Equal(t, []byte("b"), kvs[5].Value)
assert.Equal(t, []byte(nil), kvs[4].Value)
assert.Equal(t, []byte(nil), kvs[3].Value)
assert.Equal(t, []byte(nil), kvs[2].Value)
assert.Equal(t, []byte(nil), kvs[1].Value)
assert.Equal(t, []byte("vl2"), kvs[0].Value)
//current: a = b
//set data:
//a -> b (a -> b)
//a1 -> b1 (a1 -> nil)
//l1 -> vl1 (l1 -> nil)
//l2 -> vl2 (l2->nil)
//c1 -> nil (ignore)
//l2 -> nil (l2 -> vl2)
//rollback 的过程实际上是 set 的逆过程,就像时间倒流一样
//save rollback kvs
_, err = creator.Get([]byte("np"))
assert.Equal(t, types.ErrNotFound, err)
v, _ := creator.GetNoPrefix([]byte("np"))
assert.Equal(t, []byte("np-value"), v)
util.SaveKVList(ldb, kvs)
v, _ = kvdb.Get([]byte("prefix-a"))
assert.Equal(t, []byte("b"), v)
v, _ = creator.Get([]byte("a"))
assert.Equal(t, []byte("b"), v)
_, err = creator.Get([]byte("a1"))
assert.Equal(t, types.ErrNotFound, err)
_, err = creator.Get([]byte("l1"))
assert.Equal(t, types.ErrNotFound, err)
_, err = creator.Get([]byte("l2"))
assert.Equal(t, types.ErrNotFound, err)
_, err = creator.Get([]byte("c1"))
assert.Equal(t, types.ErrNotFound, err)
} }
func TestHeightIndexStr(t *testing.T) { func TestHeightIndexStr(t *testing.T) {
......
...@@ -108,4 +108,4 @@ message PruneData { ...@@ -108,4 +108,4 @@ message PruneData {
//用于存储db Pool数据的Value //用于存储db Pool数据的Value
message StoreValuePool { message StoreValuePool {
repeated bytes values = 1; repeated bytes values = 1;
} }
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment