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
c2a382d9
Commit
c2a382d9
authored
Feb 14, 2019
by
liuyuhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add kvmvccMavl
parent
a09d4922
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
194 additions
and
93 deletions
+194
-93
round_state.go
plugin/consensus/tendermint/types/round_state.go
+3
-3
certutils.go
...rt/authority/tools/cryptogen/generator/utils/certutils.go
+6
-6
init.go
plugin/store/init/init.go
+3
-3
kvmvccMavl.go
plugin/store/kvmvccMavl/kvmvccMavl.go
+112
-46
kvmvccMavl_test.go
plugin/store/kvmvccMavl/kvmvccMavl_test.go
+63
-24
kvmvccdb.go
plugin/store/kvmvccMavl/kvmvccdb.go
+1
-4
mavl.go
plugin/store/kvmvccMavl/mavl.go
+6
-7
No files found.
plugin/consensus/tendermint/types/round_state.go
View file @
c2a382d9
...
@@ -117,9 +117,9 @@ type RoundState struct {
...
@@ -117,9 +117,9 @@ type RoundState struct {
// RoundStateMessage ...
// RoundStateMessage ...
func
(
rs
*
RoundState
)
RoundStateMessage
()
*
tmtypes
.
NewRoundStepMsg
{
func
(
rs
*
RoundState
)
RoundStateMessage
()
*
tmtypes
.
NewRoundStepMsg
{
return
&
tmtypes
.
NewRoundStepMsg
{
return
&
tmtypes
.
NewRoundStepMsg
{
Height
:
rs
.
Height
,
Height
:
rs
.
Height
,
Round
:
int32
(
rs
.
Round
),
Round
:
int32
(
rs
.
Round
),
Step
:
int32
(
rs
.
Step
),
Step
:
int32
(
rs
.
Step
),
SecondsSinceStartTime
:
int32
(
time
.
Since
(
rs
.
StartTime
)
.
Seconds
()),
SecondsSinceStartTime
:
int32
(
time
.
Since
(
rs
.
StartTime
)
.
Seconds
()),
LastCommitRound
:
int32
(
rs
.
LastCommit
.
Round
()),
LastCommitRound
:
int32
(
rs
.
LastCommit
.
Round
()),
}
}
...
...
plugin/dapp/cert/authority/tools/cryptogen/generator/utils/certutils.go
View file @
c2a382d9
...
@@ -78,9 +78,9 @@ func ParseX509CertificateToSm2(x509Cert *x509.Certificate) *sm2.Certificate {
...
@@ -78,9 +78,9 @@ func ParseX509CertificateToSm2(x509Cert *x509.Certificate) *sm2.Certificate {
UnknownExtKeyUsage
:
x509Cert
.
UnknownExtKeyUsage
,
UnknownExtKeyUsage
:
x509Cert
.
UnknownExtKeyUsage
,
BasicConstraintsValid
:
x509Cert
.
BasicConstraintsValid
,
BasicConstraintsValid
:
x509Cert
.
BasicConstraintsValid
,
IsCA
:
x509Cert
.
IsCA
,
IsCA
:
x509Cert
.
IsCA
,
MaxPathLen
:
x509Cert
.
MaxPathLen
,
MaxPathLen
:
x509Cert
.
MaxPathLen
,
MaxPathLenZero
:
x509Cert
.
MaxPathLenZero
,
MaxPathLenZero
:
x509Cert
.
MaxPathLenZero
,
SubjectKeyId
:
x509Cert
.
SubjectKeyId
,
SubjectKeyId
:
x509Cert
.
SubjectKeyId
,
AuthorityKeyId
:
x509Cert
.
AuthorityKeyId
,
AuthorityKeyId
:
x509Cert
.
AuthorityKeyId
,
...
@@ -141,9 +141,9 @@ func ParseSm2CertificateToX509(sm2Cert *sm2.Certificate) *x509.Certificate {
...
@@ -141,9 +141,9 @@ func ParseSm2CertificateToX509(sm2Cert *sm2.Certificate) *x509.Certificate {
UnknownExtKeyUsage
:
sm2Cert
.
UnknownExtKeyUsage
,
UnknownExtKeyUsage
:
sm2Cert
.
UnknownExtKeyUsage
,
BasicConstraintsValid
:
sm2Cert
.
BasicConstraintsValid
,
BasicConstraintsValid
:
sm2Cert
.
BasicConstraintsValid
,
IsCA
:
sm2Cert
.
IsCA
,
IsCA
:
sm2Cert
.
IsCA
,
MaxPathLen
:
sm2Cert
.
MaxPathLen
,
MaxPathLen
:
sm2Cert
.
MaxPathLen
,
MaxPathLenZero
:
sm2Cert
.
MaxPathLenZero
,
MaxPathLenZero
:
sm2Cert
.
MaxPathLenZero
,
SubjectKeyId
:
sm2Cert
.
SubjectKeyId
,
SubjectKeyId
:
sm2Cert
.
SubjectKeyId
,
AuthorityKeyId
:
sm2Cert
.
AuthorityKeyId
,
AuthorityKeyId
:
sm2Cert
.
AuthorityKeyId
,
...
...
plugin/store/init/init.go
View file @
c2a382d9
package
init
package
init
import
(
import
(
_
"github.com/33cn/plugin/plugin/store/kvdb"
//auto gen
_
"github.com/33cn/plugin/plugin/store/kvdb"
//auto gen
_
"github.com/33cn/plugin/plugin/store/kvmvcc"
//auto gen
_
"github.com/33cn/plugin/plugin/store/kvmvcc"
//auto gen
_
"github.com/33cn/plugin/plugin/store/mpt"
//auto gen
_
"github.com/33cn/plugin/plugin/store/kvmvccMavl"
//auto gen
_
"github.com/33cn/plugin/plugin/store/kvmvccMavl"
//auto gen
_
"github.com/33cn/plugin/plugin/store/mpt"
//auto gen
)
)
plugin/store/kvmvccMavl/kvmvccMavl.go
View file @
c2a382d9
...
@@ -2,29 +2,45 @@
...
@@ -2,29 +2,45 @@
// Use of this source code is governed by a BSD-style
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// license that can be found in the LICENSE file.
package
kvmvccMavl
// Package kvmvccmavl kvmvcc+mavl接口
package
kvmvccmavl
import
(
import
(
"bytes"
"errors"
"fmt"
"sync"
"sync/atomic"
dbm
"github.com/33cn/chain33/common/db"
clog
"github.com/33cn/chain33/common/log"
clog
"github.com/33cn/chain33/common/log"
log
"github.com/33cn/chain33/common/log/log15"
log
"github.com/33cn/chain33/common/log/log15"
"github.com/33cn/chain33/queue"
"github.com/33cn/chain33/queue"
drivers
"github.com/33cn/chain33/system/store"
drivers
"github.com/33cn/chain33/system/store"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
"github.com/hashicorp/golang-lru"
"github.com/hashicorp/golang-lru"
"errors"
)
)
var
(
var
(
kmlog
=
log
.
New
(
"module"
,
"kvmvccMavl"
)
kmlog
=
log
.
New
(
"module"
,
"kvmvccMavl"
)
ErrStateHashLost
=
errors
.
New
(
"ErrStateHashLost"
)
// ErrStateHashLost ...
kvmvccMavlFork
int64
=
200
*
10000
ErrStateHashLost
=
errors
.
New
(
"ErrStateHashLost"
)
kvmvccMavlFork
int64
=
200
*
10000
isDelMavlData
=
false
delMavlDataHeight
=
kvmvccMavlFork
+
10000
delMavlDataState
int32
wg
sync
.
WaitGroup
quit
bool
)
)
const
(
const
(
canceSize
=
2048
//可以缓存2048个roothash, height对
canceSize
=
2048
//可以缓存2048个roothash, height对
batchDataSize
=
1024
*
1024
*
1
delMavlStateStart
=
1
delMavlStateEnd
=
0
mvccPrefix
=
".-mvcc-."
//同common/db中的mvccPrefix一致
)
)
// SetLogLevel set log level
// SetLogLevel set log level
func
SetLogLevel
(
level
string
)
{
func
SetLogLevel
(
level
string
)
{
clog
.
SetLogLevel
(
level
)
clog
.
SetLogLevel
(
level
)
...
@@ -39,13 +55,12 @@ func init() {
...
@@ -39,13 +55,12 @@ func init() {
drivers
.
Reg
(
"kvmvccMavl"
,
New
)
drivers
.
Reg
(
"kvmvccMavl"
,
New
)
}
}
// KV
MVCC
MavlStore provide kvmvcc and mavl store interface implementation
// KV
m
MavlStore provide kvmvcc and mavl store interface implementation
type
KV
MVCC
MavlStore
struct
{
type
KV
m
MavlStore
struct
{
*
drivers
.
BaseStore
*
drivers
.
BaseStore
*
KVMVCCStore
*
KVMVCCStore
*
MavlStore
*
MavlStore
cance
*
lru
.
Cache
cance
*
lru
.
Cache
}
}
type
subKVMVCCConfig
struct
{
type
subKVMVCCConfig
struct
{
...
@@ -70,7 +85,7 @@ type subConfig struct {
...
@@ -70,7 +85,7 @@ type subConfig struct {
// New construct KVMVCCStore module
// New construct KVMVCCStore module
func
New
(
cfg
*
types
.
Store
,
sub
[]
byte
)
queue
.
Module
{
func
New
(
cfg
*
types
.
Store
,
sub
[]
byte
)
queue
.
Module
{
bs
:=
drivers
.
NewBaseStore
(
cfg
)
bs
:=
drivers
.
NewBaseStore
(
cfg
)
var
kvms
*
KV
MVCC
MavlStore
var
kvms
*
KV
m
MavlStore
var
subcfg
subConfig
var
subcfg
subConfig
var
subKVMVCCcfg
subKVMVCCConfig
var
subKVMVCCcfg
subKVMVCCConfig
var
subMavlcfg
subMavlConfig
var
subMavlcfg
subMavlConfig
...
@@ -78,31 +93,38 @@ func New(cfg *types.Store, sub []byte) queue.Module {
...
@@ -78,31 +93,38 @@ func New(cfg *types.Store, sub []byte) queue.Module {
types
.
MustDecode
(
sub
,
&
subcfg
)
types
.
MustDecode
(
sub
,
&
subcfg
)
subKVMVCCcfg
.
EnableMVCCIter
=
subcfg
.
EnableMVCCIter
subKVMVCCcfg
.
EnableMVCCIter
=
subcfg
.
EnableMVCCIter
subMavlcfg
.
EnableMavlPrefix
=
subcfg
.
EnableMavlPrefix
subMavlcfg
.
EnableMavlPrefix
=
subcfg
.
EnableMavlPrefix
subMavlcfg
.
EnableMVCC
=
subcfg
.
EnableMVCC
subMavlcfg
.
EnableMVCC
=
subcfg
.
EnableMVCC
subMavlcfg
.
EnableMavlPrune
=
subcfg
.
EnableMavlPrune
subMavlcfg
.
EnableMavlPrune
=
subcfg
.
EnableMavlPrune
subMavlcfg
.
PruneHeight
=
subcfg
.
PruneHeight
subMavlcfg
.
PruneHeight
=
subcfg
.
PruneHeight
}
}
cance
,
err
:=
lru
.
New
(
canceSize
)
cance
,
err
:=
lru
.
New
(
canceSize
)
if
err
!=
nil
{
if
err
!=
nil
{
panic
(
"new KV
MVCC
MavlStore fail"
)
panic
(
"new KV
m
MavlStore fail"
)
}
}
kvms
=
&
KV
MVCC
MavlStore
{
bs
,
NewKVMVCC
(
&
subKVMVCCcfg
,
bs
.
GetDB
()),
kvms
=
&
KV
m
MavlStore
{
bs
,
NewKVMVCC
(
&
subKVMVCCcfg
,
bs
.
GetDB
()),
NewMavl
(
&
subMavlcfg
,
bs
.
GetDB
()),
cance
}
NewMavl
(
&
subMavlcfg
,
bs
.
GetDB
()),
cance
}
// 查询是否已经删除mavl
_
,
err
=
bs
.
GetDB
()
.
Get
(
genDelMavlKey
(
mvccPrefix
))
if
err
==
nil
{
isDelMavlData
=
true
}
bs
.
SetChild
(
kvms
)
bs
.
SetChild
(
kvms
)
return
kvms
return
kvms
}
}
// Close the KVMVCCMavlStore module
// Close the KVmMavlStore module
func
(
kvmMavls
*
KVMVCCMavlStore
)
Close
()
{
func
(
kvmMavls
*
KVmMavlStore
)
Close
()
{
quit
=
true
wg
.
Wait
()
kvmMavls
.
BaseStore
.
Close
()
kvmMavls
.
BaseStore
.
Close
()
kvmMavls
.
KVMVCCStore
.
Close
()
kvmMavls
.
KVMVCCStore
.
Close
()
kvmMavls
.
MavlStore
.
Close
()
kvmMavls
.
MavlStore
.
Close
()
kmlog
.
Info
(
"store kvmMavls closed"
)
kmlog
.
Info
(
"store kvmMavls closed"
)
}
}
// Set kvs with statehash to KV
MVCC
MavlStore
// Set kvs with statehash to KV
m
MavlStore
func
(
kvmMavls
*
KV
MVCC
MavlStore
)
Set
(
datas
*
types
.
StoreSet
,
sync
bool
)
([]
byte
,
error
)
{
func
(
kvmMavls
*
KV
m
MavlStore
)
Set
(
datas
*
types
.
StoreSet
,
sync
bool
)
([]
byte
,
error
)
{
// 这里后续需要考虑分叉回退
// 这里后续需要考虑分叉回退
if
datas
.
Height
<
kvmvccMavlFork
{
if
datas
.
Height
<
kvmvccMavlFork
{
hash
,
err
:=
kvmMavls
.
MavlStore
.
Set
(
datas
,
sync
)
hash
,
err
:=
kvmMavls
.
MavlStore
.
Set
(
datas
,
sync
)
...
@@ -123,13 +145,18 @@ func (kvmMavls *KVMVCCMavlStore) Set(datas *types.StoreSet, sync bool) ([]byte,
...
@@ -123,13 +145,18 @@ func (kvmMavls *KVMVCCMavlStore) Set(datas *types.StoreSet, sync bool) ([]byte,
if
err
==
nil
{
if
err
==
nil
{
kvmMavls
.
cance
.
Add
(
string
(
hash
),
datas
.
Height
)
kvmMavls
.
cance
.
Add
(
string
(
hash
),
datas
.
Height
)
}
}
// 删除Mavl数据
if
datas
.
Height
>
delMavlDataHeight
&&
!
isDelMavlData
&&
!
isDelMavling
()
{
wg
.
Add
(
1
)
go
DelMavl
(
kvmMavls
.
GetDB
())
}
return
hash
,
err
return
hash
,
err
}
}
// Get kvs with statehash from KV
MVCC
MavlStore
// Get kvs with statehash from KV
m
MavlStore
func
(
kvmMavls
*
KV
MVCC
MavlStore
)
Get
(
datas
*
types
.
StoreGet
)
[][]
byte
{
func
(
kvmMavls
*
KV
m
MavlStore
)
Get
(
datas
*
types
.
StoreGet
)
[][]
byte
{
if
value
,
ok
:=
kvmMavls
.
cance
.
Get
(
string
(
datas
.
StateHash
));
ok
{
if
value
,
ok
:=
kvmMavls
.
cance
.
Get
(
string
(
datas
.
StateHash
));
ok
{
if
value
.
(
int64
)
<
kvmvccMavlFork
{
if
value
.
(
int64
)
<
kvmvccMavlFork
{
return
kvmMavls
.
MavlStore
.
Get
(
datas
)
return
kvmMavls
.
MavlStore
.
Get
(
datas
)
}
}
return
kvmMavls
.
KVMVCCStore
.
Get
(
datas
)
return
kvmMavls
.
KVMVCCStore
.
Get
(
datas
)
...
@@ -137,8 +164,8 @@ func (kvmMavls *KVMVCCMavlStore) Get(datas *types.StoreGet) [][]byte {
...
@@ -137,8 +164,8 @@ func (kvmMavls *KVMVCCMavlStore) Get(datas *types.StoreGet) [][]byte {
return
kvmMavls
.
KVMVCCStore
.
Get
(
datas
)
return
kvmMavls
.
KVMVCCStore
.
Get
(
datas
)
}
}
// MemSet set kvs to the mem of KV
MVCC
MavlStore module and return the StateHash
// MemSet set kvs to the mem of KV
m
MavlStore module and return the StateHash
func
(
kvmMavls
*
KV
MVCC
MavlStore
)
MemSet
(
datas
*
types
.
StoreSet
,
sync
bool
)
([]
byte
,
error
)
{
func
(
kvmMavls
*
KV
m
MavlStore
)
MemSet
(
datas
*
types
.
StoreSet
,
sync
bool
)
([]
byte
,
error
)
{
// 这里后续需要考虑分叉回退
// 这里后续需要考虑分叉回退
if
datas
.
Height
<
kvmvccMavlFork
{
if
datas
.
Height
<
kvmvccMavlFork
{
hash
,
err
:=
kvmMavls
.
MavlStore
.
MemSet
(
datas
,
sync
)
hash
,
err
:=
kvmMavls
.
MavlStore
.
MemSet
(
datas
,
sync
)
...
@@ -159,21 +186,23 @@ func (kvmMavls *KVMVCCMavlStore) MemSet(datas *types.StoreSet, sync bool) ([]byt
...
@@ -159,21 +186,23 @@ func (kvmMavls *KVMVCCMavlStore) MemSet(datas *types.StoreSet, sync bool) ([]byt
if
err
==
nil
{
if
err
==
nil
{
kvmMavls
.
cance
.
Add
(
string
(
hash
),
datas
.
Height
)
kvmMavls
.
cance
.
Add
(
string
(
hash
),
datas
.
Height
)
}
}
// 删除Mavl数据
if
datas
.
Height
>
delMavlDataHeight
&&
!
isDelMavlData
&&
!
isDelMavling
()
{
wg
.
Add
(
1
)
go
DelMavl
(
kvmMavls
.
GetDB
())
}
return
hash
,
err
return
hash
,
err
}
}
// Commit kvs in the mem of KV
MVCC
MavlStore module to state db and return the StateHash
// Commit kvs in the mem of KV
m
MavlStore module to state db and return the StateHash
func
(
kvmMavls
*
KV
MVCC
MavlStore
)
Commit
(
req
*
types
.
ReqHash
)
([]
byte
,
error
)
{
func
(
kvmMavls
*
KV
m
MavlStore
)
Commit
(
req
*
types
.
ReqHash
)
([]
byte
,
error
)
{
if
value
,
ok
:=
kvmMavls
.
cance
.
Get
(
string
(
req
.
Hash
));
ok
{
if
value
,
ok
:=
kvmMavls
.
cance
.
Get
(
string
(
req
.
Hash
));
ok
{
if
value
.
(
int64
)
<
kvmvccMavlFork
{
if
value
.
(
int64
)
<
kvmvccMavlFork
{
hash
,
err
:=
kvmMavls
.
MavlStore
.
Commit
(
req
)
hash
,
err
:=
kvmMavls
.
MavlStore
.
Commit
(
req
)
if
err
!=
nil
{
if
err
!=
nil
{
return
hash
,
err
return
hash
,
err
}
}
_
,
err
=
kvmMavls
.
KVMVCCStore
.
Commit
(
req
)
_
,
err
=
kvmMavls
.
KVMVCCStore
.
Commit
(
req
)
if
err
!=
nil
{
return
hash
,
err
}
return
hash
,
err
return
hash
,
err
}
}
return
kvmMavls
.
KVMVCCStore
.
Commit
(
req
)
return
kvmMavls
.
KVMVCCStore
.
Commit
(
req
)
...
@@ -181,18 +210,15 @@ func (kvmMavls *KVMVCCMavlStore) Commit(req *types.ReqHash) ([]byte, error) {
...
@@ -181,18 +210,15 @@ func (kvmMavls *KVMVCCMavlStore) Commit(req *types.ReqHash) ([]byte, error) {
return
kvmMavls
.
KVMVCCStore
.
Commit
(
req
)
return
kvmMavls
.
KVMVCCStore
.
Commit
(
req
)
}
}
// Rollback kvs in the mem of KV
MVCC
MavlStore module and return the StateHash
// Rollback kvs in the mem of KV
m
MavlStore module and return the StateHash
func
(
kvmMavls
*
KV
MVCC
MavlStore
)
Rollback
(
req
*
types
.
ReqHash
)
([]
byte
,
error
)
{
func
(
kvmMavls
*
KV
m
MavlStore
)
Rollback
(
req
*
types
.
ReqHash
)
([]
byte
,
error
)
{
if
value
,
ok
:=
kvmMavls
.
cance
.
Get
(
string
(
req
.
Hash
));
ok
{
if
value
,
ok
:=
kvmMavls
.
cance
.
Get
(
string
(
req
.
Hash
));
ok
{
if
value
.
(
int64
)
<
kvmvccMavlFork
{
if
value
.
(
int64
)
<
kvmvccMavlFork
{
hash
,
err
:=
kvmMavls
.
MavlStore
.
Rollback
(
req
)
hash
,
err
:=
kvmMavls
.
MavlStore
.
Rollback
(
req
)
if
err
!=
nil
{
if
err
!=
nil
{
return
hash
,
err
return
hash
,
err
}
}
_
,
err
=
kvmMavls
.
KVMVCCStore
.
Rollback
(
req
)
_
,
err
=
kvmMavls
.
KVMVCCStore
.
Rollback
(
req
)
if
err
!=
nil
{
return
hash
,
err
}
return
hash
,
err
return
hash
,
err
}
}
return
kvmMavls
.
KVMVCCStore
.
Rollback
(
req
)
return
kvmMavls
.
KVMVCCStore
.
Rollback
(
req
)
...
@@ -201,9 +227,9 @@ func (kvmMavls *KVMVCCMavlStore) Rollback(req *types.ReqHash) ([]byte, error) {
...
@@ -201,9 +227,9 @@ func (kvmMavls *KVMVCCMavlStore) Rollback(req *types.ReqHash) ([]byte, error) {
}
}
// IterateRangeByStateHash travel with Prefix by StateHash to get the latest version kvs.
// IterateRangeByStateHash travel with Prefix by StateHash to get the latest version kvs.
func
(
kvmMavls
*
KV
MVCC
MavlStore
)
IterateRangeByStateHash
(
statehash
[]
byte
,
start
[]
byte
,
end
[]
byte
,
ascending
bool
,
fn
func
(
key
,
value
[]
byte
)
bool
)
{
func
(
kvmMavls
*
KV
m
MavlStore
)
IterateRangeByStateHash
(
statehash
[]
byte
,
start
[]
byte
,
end
[]
byte
,
ascending
bool
,
fn
func
(
key
,
value
[]
byte
)
bool
)
{
if
value
,
ok
:=
kvmMavls
.
cance
.
Get
(
string
(
statehash
));
ok
{
if
value
,
ok
:=
kvmMavls
.
cance
.
Get
(
string
(
statehash
));
ok
{
if
value
.
(
int64
)
<
kvmvccMavlFork
{
if
value
.
(
int64
)
<
kvmvccMavlFork
{
kvmMavls
.
MavlStore
.
IterateRangeByStateHash
(
statehash
,
start
,
end
,
ascending
,
fn
)
kvmMavls
.
MavlStore
.
IterateRangeByStateHash
(
statehash
,
start
,
end
,
ascending
,
fn
)
return
return
}
}
...
@@ -211,16 +237,15 @@ func (kvmMavls *KVMVCCMavlStore) IterateRangeByStateHash(statehash []byte, start
...
@@ -211,16 +237,15 @@ func (kvmMavls *KVMVCCMavlStore) IterateRangeByStateHash(statehash []byte, start
return
return
}
}
kvmMavls
.
KVMVCCStore
.
IterateRangeByStateHash
(
statehash
,
start
,
end
,
ascending
,
fn
)
kvmMavls
.
KVMVCCStore
.
IterateRangeByStateHash
(
statehash
,
start
,
end
,
ascending
,
fn
)
return
}
}
// ProcEvent handles supported events
// ProcEvent handles supported events
func
(
kvmMavls
*
KV
MVCC
MavlStore
)
ProcEvent
(
msg
queue
.
Message
)
{
func
(
kvmMavls
*
KV
m
MavlStore
)
ProcEvent
(
msg
queue
.
Message
)
{
msg
.
ReplyErr
(
"KV
MVCC
MavlStore"
,
types
.
ErrActionNotSupport
)
msg
.
ReplyErr
(
"KV
m
MavlStore"
,
types
.
ErrActionNotSupport
)
}
}
// Del set kvs to nil with StateHash
// Del set kvs to nil with StateHash
func
(
kvmMavls
*
KV
MVCC
MavlStore
)
Del
(
req
*
types
.
StoreDel
)
([]
byte
,
error
)
{
func
(
kvmMavls
*
KV
m
MavlStore
)
Del
(
req
*
types
.
StoreDel
)
([]
byte
,
error
)
{
// 这里后续需要考虑分叉回退
// 这里后续需要考虑分叉回退
if
req
.
Height
<
kvmvccMavlFork
{
if
req
.
Height
<
kvmvccMavlFork
{
hash
,
err
:=
kvmMavls
.
MavlStore
.
Del
(
req
)
hash
,
err
:=
kvmMavls
.
MavlStore
.
Del
(
req
)
...
@@ -244,6 +269,48 @@ func (kvmMavls *KVMVCCMavlStore) Del(req *types.StoreDel) ([]byte, error) {
...
@@ -244,6 +269,48 @@ func (kvmMavls *KVMVCCMavlStore) Del(req *types.StoreDel) ([]byte, error) {
return
hash
,
err
return
hash
,
err
}
}
//
TODO
数据库中mavl的清除
//
DelMavl
数据库中mavl的清除
// 达到kvmvccMavlFork + 100000 后触发清除
// 达到kvmvccMavlFork + 100000 后触发清除
// it := db.Iterator(nil, mvccPrefix, true)
func
DelMavl
(
db
dbm
.
DB
)
{
\ No newline at end of file
defer
wg
.
Done
()
setDelMavl
(
delMavlStateStart
)
defer
setDelMavl
(
delMavlStateEnd
)
isDel
:=
delMavlData
(
db
)
if
isDel
{
isDelMavlData
=
true
kmlog
.
Info
(
"DelMavl success"
)
}
}
func
delMavlData
(
db
dbm
.
DB
)
bool
{
it
:=
db
.
Iterator
(
nil
,
nil
,
true
)
batch
:=
db
.
NewBatch
(
true
)
for
it
.
Rewind
();
it
.
Valid
();
it
.
Next
()
{
if
quit
{
return
false
}
if
!
bytes
.
HasPrefix
(
it
.
Key
(),
[]
byte
(
mvccPrefix
))
{
// 将非mvcc的mavl数据全部删除
batch
.
Delete
(
it
.
Key
())
if
batch
.
ValueSize
()
>
batchDataSize
{
batch
.
Write
()
batch
.
Reset
()
}
}
}
batch
.
Set
(
genDelMavlKey
(
mvccPrefix
),
[]
byte
(
""
))
batch
.
Write
()
return
true
}
func
genDelMavlKey
(
prefix
string
)
[]
byte
{
delMavl
:=
"--delMavlData--"
return
[]
byte
(
fmt
.
Sprintf
(
"%s%s"
,
prefix
,
delMavl
))
}
func
isDelMavling
()
bool
{
return
atomic
.
LoadInt32
(
&
delMavlDataState
)
==
1
}
func
setDelMavl
(
state
int32
)
{
atomic
.
StoreInt32
(
&
delMavlDataState
,
state
)
}
plugin/store/kvmvccMavl/kvmvccMavl_test.go
View file @
c2a382d9
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// license that can be found in the LICENSE file.
package
kvmvcc
M
avl
package
kvmvcc
m
avl
import
(
import
(
"encoding/json"
"encoding/json"
...
@@ -37,7 +37,7 @@ func TestKvmvccMavlNewClose(t *testing.T) {
...
@@ -37,7 +37,7 @@ func TestKvmvccMavlNewClose(t *testing.T) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
t
,
store
)
assert
.
NotNil
(
t
,
store
)
store
.
Close
()
store
.
Close
()
...
@@ -49,7 +49,7 @@ func TestKvmvccMavlSetGet(t *testing.T) {
...
@@ -49,7 +49,7 @@ func TestKvmvccMavlSetGet(t *testing.T) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
t
,
store
)
assert
.
NotNil
(
t
,
store
)
kvmvccMavlFork
=
50
kvmvccMavlFork
=
50
...
@@ -82,7 +82,7 @@ func TestKvmvccMavlMemSet(t *testing.T) {
...
@@ -82,7 +82,7 @@ func TestKvmvccMavlMemSet(t *testing.T) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
t
,
store
)
assert
.
NotNil
(
t
,
store
)
kvmvccMavlFork
=
50
kvmvccMavlFork
=
50
...
@@ -120,7 +120,7 @@ func TestKvmvccMavlCommit(t *testing.T) {
...
@@ -120,7 +120,7 @@ func TestKvmvccMavlCommit(t *testing.T) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
t
,
store
)
assert
.
NotNil
(
t
,
store
)
var
kv
[]
*
types
.
KeyValue
var
kv
[]
*
types
.
KeyValue
...
@@ -166,7 +166,7 @@ func TestKvmvccMavlCommit(t *testing.T) {
...
@@ -166,7 +166,7 @@ func TestKvmvccMavlCommit(t *testing.T) {
get
:=
&
types
.
StoreGet
{
StateHash
:
frontHash
,
Keys
:
keys
}
get
:=
&
types
.
StoreGet
{
StateHash
:
frontHash
,
Keys
:
keys
}
values
:=
store
.
Get
(
get
)
values
:=
store
.
Get
(
get
)
require
.
Equal
(
t
,
len
(
values
),
len
(
keys
))
require
.
Equal
(
t
,
len
(
values
),
len
(
keys
))
for
i
,
_
:=
range
keys
{
for
i
:=
range
keys
{
require
.
Equal
(
t
,
kv
[
i
]
.
Value
,
values
[
i
])
require
.
Equal
(
t
,
kv
[
i
]
.
Value
,
values
[
i
])
}
}
}
}
...
@@ -175,7 +175,7 @@ func TestKvmvccMavlCommit(t *testing.T) {
...
@@ -175,7 +175,7 @@ func TestKvmvccMavlCommit(t *testing.T) {
get
:=
&
types
.
StoreGet
{
StateHash
:
hash
,
Keys
:
keys
}
get
:=
&
types
.
StoreGet
{
StateHash
:
hash
,
Keys
:
keys
}
values
:=
store
.
Get
(
get
)
values
:=
store
.
Get
(
get
)
require
.
Equal
(
t
,
len
(
values
),
len
(
keys
))
require
.
Equal
(
t
,
len
(
values
),
len
(
keys
))
for
i
,
_
:=
range
keys
{
for
i
:=
range
keys
{
require
.
Equal
(
t
,
kv
[
i
]
.
Value
,
values
[
i
])
require
.
Equal
(
t
,
kv
[
i
]
.
Value
,
values
[
i
])
}
}
}
}
...
@@ -187,7 +187,7 @@ func TestKvmvccMavlRollback(t *testing.T) {
...
@@ -187,7 +187,7 @@ func TestKvmvccMavlRollback(t *testing.T) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
t
,
store
)
assert
.
NotNil
(
t
,
store
)
var
kv
[]
*
types
.
KeyValue
var
kv
[]
*
types
.
KeyValue
...
@@ -250,7 +250,7 @@ func TestKvmvccdbRollbackBatch(t *testing.T) {
...
@@ -250,7 +250,7 @@ func TestKvmvccdbRollbackBatch(t *testing.T) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
t
,
store
)
assert
.
NotNil
(
t
,
store
)
var
kv
[]
*
types
.
KeyValue
var
kv
[]
*
types
.
KeyValue
...
@@ -351,7 +351,7 @@ func TestIterateRangeByStateHash(t *testing.T) {
...
@@ -351,7 +351,7 @@ func TestIterateRangeByStateHash(t *testing.T) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
t
,
store
)
assert
.
NotNil
(
t
,
store
)
execaddr
:=
"0111vcBNSEA7fZhAdLJphDwQRQJa111"
execaddr
:=
"0111vcBNSEA7fZhAdLJphDwQRQJa111"
...
@@ -499,6 +499,45 @@ func GetRandomString(length int) string {
...
@@ -499,6 +499,45 @@ func GetRandomString(length int) string {
return
common
.
GetRandPrintString
(
20
,
length
)
return
common
.
GetRandPrintString
(
20
,
length
)
}
}
func
TestDelMavlData
(
t
*
testing
.
T
)
{
dir
,
err
:=
ioutil
.
TempDir
(
""
,
"example"
)
assert
.
Nil
(
t
,
err
)
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KVmMavlStore
)
assert
.
NotNil
(
t
,
store
)
db
:=
store
.
GetDB
()
db
.
Set
([]
byte
(
mvccPrefix
),
[]
byte
(
"value1"
))
db
.
Set
([]
byte
(
fmt
.
Sprintf
(
"%s123"
,
mvccPrefix
)),
[]
byte
(
"value2"
))
db
.
Set
([]
byte
(
fmt
.
Sprintf
(
"%s546"
,
mvccPrefix
)),
[]
byte
(
"value3"
))
db
.
Set
([]
byte
(
fmt
.
Sprintf
(
"123%s"
,
mvccPrefix
)),
[]
byte
(
"value4"
))
db
.
Set
([]
byte
(
"key11"
),
[]
byte
(
"value11"
))
db
.
Set
([]
byte
(
"key22"
),
[]
byte
(
"value22"
))
delMavlData
(
db
)
v
,
err
:=
db
.
Get
([]
byte
(
mvccPrefix
))
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
[]
byte
(
"value1"
),
v
)
v
,
err
=
db
.
Get
([]
byte
(
fmt
.
Sprintf
(
"%s123"
,
mvccPrefix
)))
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
[]
byte
(
"value2"
),
v
)
v
,
err
=
db
.
Get
([]
byte
(
fmt
.
Sprintf
(
"%s546"
,
mvccPrefix
)))
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
[]
byte
(
"value3"
),
v
)
_
,
err
=
db
.
Get
([]
byte
(
fmt
.
Sprintf
(
"123%s"
,
mvccPrefix
)))
require
.
Error
(
t
,
err
)
_
,
err
=
db
.
Get
([]
byte
(
"key11"
))
require
.
Error
(
t
,
err
)
_
,
err
=
db
.
Get
([]
byte
(
"key22"
))
require
.
Error
(
t
,
err
)
_
,
err
=
db
.
Get
(
genDelMavlKey
(
mvccPrefix
))
require
.
NoError
(
t
,
err
)
}
func
BenchmarkGetkmvccMavl
(
b
*
testing
.
B
)
{
benchmarkGet
(
b
,
false
)
}
func
BenchmarkGetkmvccMavl
(
b
*
testing
.
B
)
{
benchmarkGet
(
b
,
false
)
}
func
BenchmarkGetkmvcc
(
b
*
testing
.
B
)
{
benchmarkGet
(
b
,
true
)
}
func
BenchmarkGetkmvcc
(
b
*
testing
.
B
)
{
benchmarkGet
(
b
,
true
)
}
...
@@ -509,7 +548,7 @@ func benchmarkGet(b *testing.B, isResetForkHeight bool) {
...
@@ -509,7 +548,7 @@ func benchmarkGet(b *testing.B, isResetForkHeight bool) {
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -570,7 +609,7 @@ func benchmarkStoreGetKvs4N(b *testing.B, isResetForkHeight bool) {
...
@@ -570,7 +609,7 @@ func benchmarkStoreGetKvs4N(b *testing.B, isResetForkHeight bool) {
}
}
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
var
kv
[]
*
types
.
KeyValue
var
kv
[]
*
types
.
KeyValue
...
@@ -618,7 +657,7 @@ func benchmarkStoreGetKvsForNN(b *testing.B, isResetForkHeight bool) {
...
@@ -618,7 +657,7 @@ func benchmarkStoreGetKvsForNN(b *testing.B, isResetForkHeight bool) {
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -688,7 +727,7 @@ func benchmarkStoreGetKvsFor10000(b *testing.B, isResetForkHeight bool) {
...
@@ -688,7 +727,7 @@ func benchmarkStoreGetKvsFor10000(b *testing.B, isResetForkHeight bool) {
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -763,7 +802,7 @@ func benchmarkGetIter(b *testing.B, isResetForkHeight bool) {
...
@@ -763,7 +802,7 @@ func benchmarkGetIter(b *testing.B, isResetForkHeight bool) {
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -816,7 +855,7 @@ func benchmarkSet(b *testing.B, isResetForkHeight bool) {
...
@@ -816,7 +855,7 @@ func benchmarkSet(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
b
.
Log
(
dir
)
b
.
Log
(
dir
)
...
@@ -863,7 +902,7 @@ func benchmarkStoreSet(b *testing.B, isResetForkHeight bool) {
...
@@ -863,7 +902,7 @@ func benchmarkStoreSet(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -908,7 +947,7 @@ func benchmarkSetIter(b *testing.B, isResetForkHeight bool) {
...
@@ -908,7 +947,7 @@ func benchmarkSetIter(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
b
.
Log
(
dir
)
b
.
Log
(
dir
)
...
@@ -955,7 +994,7 @@ func benchmarkMemSet(b *testing.B, isResetForkHeight bool) {
...
@@ -955,7 +994,7 @@ func benchmarkMemSet(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -999,7 +1038,7 @@ func benchmarkStoreMemSet(b *testing.B, isResetForkHeight bool) {
...
@@ -999,7 +1038,7 @@ func benchmarkStoreMemSet(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -1047,7 +1086,7 @@ func benchmarkCommit(b *testing.B, isResetForkHeight bool) {
...
@@ -1047,7 +1086,7 @@ func benchmarkCommit(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -1097,7 +1136,7 @@ func benchmarkStoreCommit(b *testing.B, isResetForkHeight bool) {
...
@@ -1097,7 +1136,7 @@ func benchmarkStoreCommit(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
var
storeCfg
=
newStoreCfg
(
dir
)
var
storeCfg
=
newStoreCfg
(
dir
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
nil
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -1151,7 +1190,7 @@ func benchmarkIterMemSet(b *testing.B, isResetForkHeight bool) {
...
@@ -1151,7 +1190,7 @@ func benchmarkIterMemSet(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
@@ -1194,7 +1233,7 @@ func benchmarkIterCommit(b *testing.B, isResetForkHeight bool) {
...
@@ -1194,7 +1233,7 @@ func benchmarkIterCommit(b *testing.B, isResetForkHeight bool) {
defer
os
.
RemoveAll
(
dir
)
// clean up
defer
os
.
RemoveAll
(
dir
)
// clean up
os
.
RemoveAll
(
dir
)
//删除已存在目录
os
.
RemoveAll
(
dir
)
//删除已存在目录
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
storeCfg
,
sub
:=
newStoreCfgIter
(
dir
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
MVCC
MavlStore
)
store
:=
New
(
storeCfg
,
sub
)
.
(
*
KV
m
MavlStore
)
assert
.
NotNil
(
b
,
store
)
assert
.
NotNil
(
b
,
store
)
if
isResetForkHeight
{
if
isResetForkHeight
{
...
...
plugin/store/kvmvccMavl/kvmvccdb.go
View file @
c2a382d9
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// license that can be found in the LICENSE file.
package
kvmvcc
M
avl
package
kvmvcc
m
avl
import
(
import
(
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common"
...
@@ -12,10 +12,8 @@ import (
...
@@ -12,10 +12,8 @@ import (
"github.com/golang/protobuf/proto"
"github.com/golang/protobuf/proto"
)
)
var
maxRollbackNum
=
200
var
maxRollbackNum
=
200
// KVMVCCStore provide kvmvcc store interface implementation
// KVMVCCStore provide kvmvcc store interface implementation
type
KVMVCCStore
struct
{
type
KVMVCCStore
struct
{
db
dbm
.
DB
db
dbm
.
DB
...
@@ -24,7 +22,6 @@ type KVMVCCStore struct {
...
@@ -24,7 +22,6 @@ type KVMVCCStore struct {
enableMVCCIter
bool
enableMVCCIter
bool
}
}
// NewKVMVCC construct KVMVCCStore module
// NewKVMVCC construct KVMVCCStore module
func
NewKVMVCC
(
sub
*
subKVMVCCConfig
,
db
dbm
.
DB
)
*
KVMVCCStore
{
func
NewKVMVCC
(
sub
*
subKVMVCCConfig
,
db
dbm
.
DB
)
*
KVMVCCStore
{
var
kvs
*
KVMVCCStore
var
kvs
*
KVMVCCStore
...
...
plugin/store/kvmvccMavl/mavl.go
View file @
c2a382d9
...
@@ -2,20 +2,19 @@
...
@@ -2,20 +2,19 @@
// Use of this source code is governed by a BSD-style
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// license that can be found in the LICENSE file.
// Package mavl 默克尔平衡树接口
package
kvmvccmavl
package
kvmvccMavl
import
(
import
(
"sync"
"sync"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common"
dbm
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/queue"
"github.com/33cn/chain33/queue"
"github.com/33cn/chain33/system/store/mavl/db"
"github.com/33cn/chain33/system/store/mavl/db"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
dbm
"github.com/33cn/chain33/common/db"
)
)
// Store mavl store struct
//
Mavl
Store mavl store struct
type
MavlStore
struct
{
type
MavlStore
struct
{
db
dbm
.
DB
db
dbm
.
DB
trees
*
sync
.
Map
trees
*
sync
.
Map
...
@@ -30,9 +29,9 @@ func NewMavl(sub *subMavlConfig, db dbm.DB) *MavlStore {
...
@@ -30,9 +29,9 @@ func NewMavl(sub *subMavlConfig, db dbm.DB) *MavlStore {
var
subcfg
subMavlConfig
var
subcfg
subMavlConfig
if
sub
!=
nil
{
if
sub
!=
nil
{
subcfg
.
EnableMavlPrefix
=
sub
.
EnableMavlPrefix
subcfg
.
EnableMavlPrefix
=
sub
.
EnableMavlPrefix
subcfg
.
EnableMVCC
=
sub
.
EnableMVCC
subcfg
.
EnableMVCC
=
sub
.
EnableMVCC
subcfg
.
EnableMavlPrune
=
sub
.
EnableMavlPrune
subcfg
.
EnableMavlPrune
=
sub
.
EnableMavlPrune
subcfg
.
PruneHeight
=
sub
.
PruneHeight
subcfg
.
PruneHeight
=
sub
.
PruneHeight
}
}
mavls
:=
&
MavlStore
{
db
,
&
sync
.
Map
{},
subcfg
.
EnableMavlPrefix
,
subcfg
.
EnableMVCC
,
subcfg
.
EnableMavlPrune
,
subcfg
.
PruneHeight
}
mavls
:=
&
MavlStore
{
db
,
&
sync
.
Map
{},
subcfg
.
EnableMavlPrefix
,
subcfg
.
EnableMVCC
,
subcfg
.
EnableMavlPrune
,
subcfg
.
PruneHeight
}
mavl
.
EnableMavlPrefix
(
subcfg
.
EnableMavlPrefix
)
mavl
.
EnableMavlPrefix
(
subcfg
.
EnableMavlPrefix
)
...
...
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