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
08d8d17c
Commit
08d8d17c
authored
Jun 22, 2019
by
liuyuhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modify write batch panic and slow del mavl key 500ms
parent
25b3c68b
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
44 additions
and
16 deletions
+44
-16
kvmvccdb.go
plugin/store/kvmvcc/kvmvccdb.go
+2
-0
kvmvcc_mavl.go
plugin/store/kvmvccmavl/kvmvcc_mavl.go
+20
-6
kvmvccdb.go
plugin/store/kvmvccmavl/kvmvccdb.go
+14
-3
prune.go
vendor/github.com/33cn/chain33/system/store/mavl/db/prune.go
+6
-6
tree.go
vendor/github.com/33cn/chain33/system/store/mavl/db/tree.go
+2
-1
No files found.
plugin/store/kvmvcc/kvmvccdb.go
View file @
08d8d17c
...
...
@@ -13,6 +13,7 @@ import (
drivers
"github.com/33cn/chain33/system/store"
"github.com/33cn/chain33/types"
"github.com/golang/protobuf/proto"
"fmt"
)
var
klog
=
log
.
New
(
"module"
,
"kvmvccdb"
)
...
...
@@ -232,6 +233,7 @@ func (mvccs *KVMVCCStore) saveKVSets(kvset []*types.KeyValue, sync bool) {
err
:=
storeBatch
.
Write
()
if
err
!=
nil
{
klog
.
Error
(
"store kvmvcc saveKVSets to db failed"
)
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
}
...
...
plugin/store/kvmvccmavl/kvmvcc_mavl.go
View file @
08d8d17c
...
...
@@ -367,6 +367,7 @@ func delMavlData(db dbm.DB) bool {
it
:=
db
.
Iterator
(
nil
,
nil
,
true
)
defer
it
.
Close
()
batch
:=
db
.
NewBatch
(
true
)
var
err
error
for
it
.
Rewind
();
it
.
Valid
();
it
.
Next
()
{
if
quit
{
return
false
...
...
@@ -374,14 +375,20 @@ func delMavlData(db dbm.DB) bool {
if
!
bytes
.
HasPrefix
(
it
.
Key
(),
mvccPrefix
)
{
// 将非mvcc的mavl数据全部删除
batch
.
Delete
(
it
.
Key
())
if
batch
.
ValueSize
()
>
batchDataSize
{
batch
.
Write
()
err
=
batch
.
Write
()
if
err
!=
nil
{
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
batch
.
Reset
()
time
.
Sleep
(
time
.
Millisecond
*
1
00
)
time
.
Sleep
(
time
.
Millisecond
*
5
00
)
}
}
}
batch
.
Set
(
genDelMavlKey
(
mvccPrefix
),
[]
byte
(
""
))
batch
.
Write
()
err
=
batch
.
Write
()
if
err
!=
nil
{
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
return
true
}
...
...
@@ -433,6 +440,7 @@ func deletePrunedMavl(db dbm.DB) {
func
deletePrunedMavlData
(
db
dbm
.
DB
,
prefix
string
)
{
it
:=
db
.
Iterator
([]
byte
(
prefix
),
nil
,
true
)
defer
it
.
Close
()
var
err
error
if
it
.
Rewind
()
&&
it
.
Valid
()
{
batch
:=
db
.
NewBatch
(
false
)
for
it
.
Next
();
it
.
Valid
();
it
.
Next
()
{
//第一个不做删除
...
...
@@ -441,11 +449,17 @@ func deletePrunedMavlData(db dbm.DB, prefix string) {
}
batch
.
Delete
(
it
.
Key
())
if
batch
.
ValueSize
()
>
batchDataSize
{
batch
.
Write
()
err
=
batch
.
Write
()
if
err
!=
nil
{
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
batch
.
Reset
()
time
.
Sleep
(
time
.
Millisecond
*
1
00
)
time
.
Sleep
(
time
.
Millisecond
*
5
00
)
}
}
batch
.
Write
()
err
=
batch
.
Write
()
if
err
!=
nil
{
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
}
}
plugin/store/kvmvccmavl/kvmvccdb.go
View file @
08d8d17c
...
...
@@ -184,7 +184,10 @@ func (mvccs *KVMVCCStore) CommitUpgrade(req *types.ReqHash) ([]byte, error) {
batch
.
Set
(
kvset
[
i
]
.
Key
,
kvset
[
i
]
.
Value
)
}
}
batch
.
Write
()
err
:=
batch
.
Write
()
if
err
!=
nil
{
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
delete
(
mvccs
.
kvsetmap
,
string
(
req
.
Hash
))
return
req
.
Hash
,
nil
}
...
...
@@ -266,6 +269,7 @@ func (mvccs *KVMVCCStore) saveKVSets(kvset []*types.KeyValue, sync bool) {
err
:=
storeBatch
.
Write
()
if
err
!=
nil
{
kmlog
.
Info
(
"KVMVCCStore saveKVSets"
,
"Write error"
,
err
)
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
}
...
...
@@ -390,13 +394,17 @@ func deleteOldKV(mp map[string][]int64, curHeight int64, batch dbm.Batch) {
return
}
batch
.
Reset
()
var
err
error
for
key
,
vals
:=
range
mp
{
if
len
(
vals
)
>
1
&&
vals
[
1
]
!=
vals
[
0
]
{
//防止相同高度时候出现的误删除
for
_
,
val
:=
range
vals
[
1
:
]
{
//从第二个开始判断
if
curHeight
>=
val
+
int64
(
pruneHeight
)
{
batch
.
Delete
(
genKeyVersion
([]
byte
(
key
),
val
))
// 删除老版本key
if
batch
.
ValueSize
()
>
batchDataSize
{
batch
.
Write
()
err
=
batch
.
Write
()
if
err
!=
nil
{
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
batch
.
Reset
()
}
}
...
...
@@ -404,7 +412,10 @@ func deleteOldKV(mp map[string][]int64, curHeight int64, batch dbm.Batch) {
}
delete
(
mp
,
key
)
}
batch
.
Write
()
err
=
batch
.
Write
()
if
err
!=
nil
{
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
}
func
genKeyVersion
(
key
[]
byte
,
height
int64
)
[]
byte
{
...
...
vendor/github.com/33cn/chain33/system/store/mavl/db/prune.go
View file @
08d8d17c
...
...
@@ -263,13 +263,13 @@ func addLeafCountKeyToSecondLevel(db dbm.DB, kvs []*types.KeyValue, batch dbm.Ba
batch
.
Set
(
genOldLeafCountKeyFromKey
(
kv
.
Key
),
kv
.
Value
)
if
batch
.
ValueSize
()
>
batchDataSize
{
if
err
=
batch
.
Write
();
err
!=
nil
{
return
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
batch
.
Reset
()
}
}
if
err
=
batch
.
Write
();
err
!=
nil
{
return
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
}
...
...
@@ -298,7 +298,7 @@ func deleteNode(db dbm.DB, mp map[string][]hashData, curHeight int64, batch dbm.
batch
.
Delete
(
val
.
hash
)
// 叶子节点hash值
if
batch
.
ValueSize
()
>
batchDataSize
{
if
err
=
batch
.
Write
();
err
!=
nil
{
return
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
batch
.
Reset
()
}
...
...
@@ -308,7 +308,7 @@ func deleteNode(db dbm.DB, mp map[string][]hashData, curHeight int64, batch dbm.
delete
(
mp
,
key
)
}
if
err
=
batch
.
Write
();
err
!=
nil
{
return
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
}
...
...
@@ -412,13 +412,13 @@ func deleteOldNode(db dbm.DB, mp map[string][]hashData, curHeight int64, batch d
delete
(
mp
,
key
)
if
batch
.
ValueSize
()
>
batchDataSize
{
if
err
=
batch
.
Write
();
err
!=
nil
{
return
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
batch
.
Reset
()
}
}
if
err
=
batch
.
Write
();
err
!=
nil
{
return
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
}
...
...
vendor/github.com/33cn/chain33/system/store/mavl/db/tree.go
View file @
08d8d17c
...
...
@@ -405,7 +405,7 @@ func (t *Tree) RemoveLeafCountKey(height int64) {
}
}
if
err
:=
batch
.
Write
();
err
!=
nil
{
return
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
}
}
...
...
@@ -713,6 +713,7 @@ func (ndb *nodeDB) Commit() error {
// Write saves
err
:=
ndb
.
batch
.
Write
()
if
err
!=
nil
{
panic
(
fmt
.
Sprint
(
"batch write err"
,
err
))
treelog
.
Error
(
"Commit batch.Write err"
,
"err"
,
err
)
}
...
...
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