Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
003b84a1
Commit
003b84a1
authored
Jun 27, 2019
by
kingwang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
merge chain33
parent
9c09aa74
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
77 additions
and
43 deletions
+77
-43
restore.go
vendor/github.com/33cn/chain33/blockchain/restore.go
+1
-1
db_test.go
vendor/github.com/33cn/chain33/common/db/db_test.go
+45
-0
go_level_db_test.go
vendor/github.com/33cn/chain33/common/db/go_level_db_test.go
+10
-0
list_helper.go
vendor/github.com/33cn/chain33/common/db/list_helper.go
+8
-22
queue.go
vendor/github.com/33cn/chain33/common/skiplist/queue.go
+13
-20
No files found.
vendor/github.com/33cn/chain33/blockchain/restore.go
View file @
003b84a1
...
...
@@ -9,9 +9,9 @@ import (
"fmt"
dbm
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/common/version"
"github.com/33cn/chain33/types"
dbm
"github.com/33cn/chain33/common/db"
)
// Upgrade 升级localDB和storeDB
...
...
vendor/github.com/33cn/chain33/common/db/db_test.go
View file @
003b84a1
...
...
@@ -47,6 +47,51 @@ MAIN_LOOP:
return
string
(
chars
)
}
func
testDBIteratorAllKey
(
t
*
testing
.
T
,
db
DB
)
{
var
datas
=
[][]
byte
{
[]
byte
(
"aa0"
),
[]
byte
(
"aa1"
),
[]
byte
(
"bb0"
),
[]
byte
(
"bb1"
),
[]
byte
(
"cc0"
),
[]
byte
(
"cc1"
),
}
for
_
,
v
:=
range
datas
{
db
.
Set
(
v
,
v
)
}
//一次遍历
it
:=
db
.
Iterator
(
nil
,
types
.
EmptyValue
,
false
)
i
:=
0
for
it
.
Rewind
();
it
.
Valid
();
it
.
Next
()
{
assert
.
Equal
(
t
,
it
.
Key
(),
datas
[
i
])
db
.
Delete
(
it
.
Key
())
i
++
if
i
==
2
{
break
}
}
it
.
Close
()
//从第3个开始遍历
it
=
db
.
Iterator
([]
byte
(
"aa1"
),
types
.
EmptyValue
,
false
)
i
=
2
for
it
.
Rewind
();
it
.
Valid
();
it
.
Next
()
{
assert
.
Equal
(
t
,
it
.
Key
(),
datas
[
i
])
db
.
Delete
(
it
.
Key
())
i
++
if
i
==
4
{
break
}
}
it
.
Close
()
//从第5个开始遍历
it
=
db
.
Iterator
([]
byte
(
"bb1"
),
types
.
EmptyValue
,
false
)
i
=
4
for
it
.
Rewind
();
it
.
Valid
();
it
.
Next
()
{
assert
.
Equal
(
t
,
it
.
Key
(),
datas
[
i
])
db
.
Delete
(
it
.
Key
())
i
++
if
i
==
6
{
break
}
}
it
.
Close
()
}
// 迭代测试
func
testDBIterator
(
t
*
testing
.
T
,
db
DB
)
{
t
.
Log
(
"test Set"
)
...
...
vendor/github.com/33cn/chain33/common/db/go_level_db_test.go
View file @
003b84a1
...
...
@@ -29,6 +29,16 @@ func TestGoLevelDBIterator(t *testing.T) {
testDBIterator
(
t
,
leveldb
)
}
func
TestGoLevelDBIteratorAll
(
t
*
testing
.
T
)
{
dir
,
err
:=
ioutil
.
TempDir
(
""
,
"goleveldb"
)
require
.
NoError
(
t
,
err
)
t
.
Log
(
dir
)
leveldb
,
err
:=
NewGoLevelDB
(
"goleveldb"
,
dir
,
128
)
require
.
NoError
(
t
,
err
)
defer
leveldb
.
Close
()
testDBIteratorAllKey
(
t
,
leveldb
)
}
func
TestGoLevelDBIteratorDel
(
t
*
testing
.
T
)
{
dir
,
err
:=
ioutil
.
TempDir
(
""
,
"goleveldb"
)
require
.
NoError
(
t
,
err
)
...
...
vendor/github.com/33cn/chain33/common/db/list_helper.go
View file @
003b84a1
...
...
@@ -105,9 +105,8 @@ func (db *ListHelper) IteratorScan(prefix []byte, key []byte, count int32, direc
return
}
//IteratorScanFromFirst 从头迭代
func
(
db
*
ListHelper
)
IteratorScanFromFirst
(
prefix
[]
byte
,
count
int32
)
(
values
[][]
byte
)
{
it
:=
db
.
db
.
Iterator
(
prefix
,
nil
,
false
)
func
(
db
*
ListHelper
)
iteratorScan
(
prefix
[]
byte
,
count
int32
,
reverse
bool
)
(
values
[][]
byte
)
{
it
:=
db
.
db
.
Iterator
(
prefix
,
nil
,
reverse
)
defer
it
.
Close
()
var
i
int32
for
it
.
Rewind
();
it
.
Valid
();
it
.
Next
()
{
...
...
@@ -127,27 +126,14 @@ func (db *ListHelper) IteratorScanFromFirst(prefix []byte, count int32) (values
return
}
//IteratorScanFromFirst 从头迭代
func
(
db
*
ListHelper
)
IteratorScanFromFirst
(
prefix
[]
byte
,
count
int32
)
(
values
[][]
byte
)
{
return
db
.
iteratorScan
(
prefix
,
count
,
false
)
}
//IteratorScanFromLast 从尾迭代
func
(
db
*
ListHelper
)
IteratorScanFromLast
(
prefix
[]
byte
,
count
int32
)
(
values
[][]
byte
)
{
it
:=
db
.
db
.
Iterator
(
prefix
,
nil
,
true
)
defer
it
.
Close
()
var
i
int32
for
it
.
Rewind
();
it
.
Valid
();
it
.
Next
()
{
value
:=
it
.
ValueCopy
()
if
it
.
Error
()
!=
nil
{
listlog
.
Error
(
"PrefixScan it.Value()"
,
"error"
,
it
.
Error
())
values
=
nil
return
}
// blog.Debug("PrefixScan", "key", string(item.Key()), "value", value)
values
=
append
(
values
,
value
)
i
++
if
i
==
count
{
break
}
}
return
return
db
.
iteratorScan
(
prefix
,
count
,
true
)
}
//PrefixCount 前缀数量
...
...
vendor/github.com/33cn/chain33/common/skiplist/queue.go
View file @
003b84a1
...
...
@@ -14,7 +14,7 @@ type Scorer interface {
Compare
(
Scorer
)
int
}
// Queue
价格队列模式(价格=手续费/交易字节数,价格高者优先,同价则时间早优先)
// Queue
skiplist 实现的一个 按照score 排序的队列,score相同的按照元素到的先后排序
type
Queue
struct
{
txMap
map
[
string
]
*
list
.
Element
txList
*
SkipList
...
...
@@ -86,12 +86,11 @@ func (cache *Queue) GetItem(hash string) (Scorer, error) {
}
//Insert Scorer item to queue
func
(
cache
*
Queue
)
Insert
(
hash
string
,
item
Scorer
)
error
{
cache
.
txMap
[
string
(
hash
)]
=
cache
.
insertSkipValue
(
item
)
return
nil
func
(
cache
*
Queue
)
Insert
(
hash
string
,
item
Scorer
)
{
cache
.
txMap
[
hash
]
=
cache
.
insertSkipValue
(
item
)
}
// Push
把给定tx添加到Queue;如果tx已经存在Queue中或Mempool已满则返回对应error
// Push
item 到队列中,如果插入的数据优先级比队列中更大,那么弹出优先级最小的,然后插入这个数据,否则报错
func
(
cache
*
Queue
)
Push
(
item
Scorer
)
error
{
hash
:=
item
.
Hash
()
if
cache
.
Exist
(
string
(
hash
))
{
...
...
@@ -101,21 +100,13 @@ func (cache *Queue) Push(item Scorer) error {
if
int64
(
cache
.
Size
())
>=
cache
.
maxsize
{
tail
:=
cache
.
Last
()
lasthash
:=
string
(
tail
.
Hash
())
//价格高存留
switch
sv
.
Compare
(
cache
.
CreateSkipValue
(
tail
))
{
case
Big
:
cache
.
Remove
(
lasthash
)
case
Equal
:
//再score 相同的情况下,item 之间的比较方法
//权重大的留下来
if
item
.
Compare
(
tail
)
==
Big
{
cache
.
Remove
(
lasthash
)
break
cmp
:=
sv
.
Compare
(
cache
.
CreateSkipValue
(
tail
))
if
cmp
==
Big
||
(
cmp
==
Equal
&&
item
.
Compare
(
tail
)
==
Big
)
{
err
:=
cache
.
Remove
(
lasthash
)
if
err
!=
nil
{
return
err
}
return
types
.
ErrMemFull
case
Small
:
return
types
.
ErrMemFull
default
:
}
else
{
return
types
.
ErrMemFull
}
}
...
...
@@ -129,11 +120,13 @@ func (cache *Queue) Remove(hash string) error {
if
!
ok
{
return
types
.
ErrNotFound
}
//保证txMap中先删除,这个用于计数
delete
(
cache
.
txMap
,
hash
)
err
:=
cache
.
deleteSkipValue
(
elm
)
if
err
!=
nil
{
println
(
"queue_data_crash"
)
return
err
}
delete
(
cache
.
txMap
,
hash
)
return
nil
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment