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
98df01c0
Commit
98df01c0
authored
Jan 10, 2020
by
linj
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
实现trade 数据库 order 升级
parent
812368e2
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
109 additions
and
4 deletions
+109
-4
localdb_v1.go
plugin/dapp/trade/executor/localdb_v1.go
+109
-4
No files found.
plugin/dapp/trade/executor/localdb_v1.go
View file @
98df01c0
...
...
@@ -4,6 +4,8 @@ import (
"bytes"
dbm
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
pty
"github.com/33cn/plugin/plugin/dapp/trade/types"
"github.com/pkg/errors"
)
...
...
@@ -28,8 +30,17 @@ const (
orderASTHK
=
"LODB-trade-order-asthk:"
)
// TradeUpdateLocalDBV2 trade 本地数据库升级
func
TradeUpdateLocalDBV2
(
localDB
dbm
.
DB
,
total
int
)
error
{
err
:=
UpdateLocalDBPart2
(
localDB
,
total
)
if
err
!=
nil
{
return
err
}
return
UpdateLocalDBPart1
(
localDB
,
total
)
}
// UpdateLocalDBPart1 手动生成KV,需要在原有数据库中删除
func
UpdateLocalDBPart1
(
localDB
dbm
.
DB
)
error
{
func
UpdateLocalDBPart1
(
localDB
dbm
.
DB
,
total
int
)
error
{
prefixes
:=
[]
string
{
sellOrderSHTAS
,
sellOrderASTS
,
...
...
@@ -43,7 +54,7 @@ func UpdateLocalDBPart1(localDB dbm.DB) error {
}
for
_
,
prefix
:=
range
prefixes
{
err
:=
delOnePrefix
(
localDB
,
prefix
)
err
:=
delOnePrefix
(
localDB
,
prefix
,
total
)
if
err
!=
nil
{
tradelog
.
Error
(
"UpdateLocalDBPart1 failed"
,
"err"
,
err
)
return
errors
.
Cause
(
err
)
...
...
@@ -52,9 +63,8 @@ func UpdateLocalDBPart1(localDB dbm.DB) error {
return
nil
}
func
delOnePrefix
(
localDB
dbm
.
DB
,
prefix
string
)
(
err
error
)
{
func
delOnePrefix
(
localDB
dbm
.
DB
,
prefix
string
,
total
int
)
(
err
error
)
{
allDeleted
:=
false
total
:=
10000
for
!
allDeleted
{
allDeleted
,
err
=
delOnePrefixLimit
(
localDB
,
prefix
,
total
)
if
err
!=
nil
{
...
...
@@ -104,3 +114,98 @@ func delOnePrefixLimit(localDB dbm.DB, prefix string, total int) (allDeleted boo
return
count
<
total
,
nil
}
// UpdateLocalDBPart2 升级order
// order 从 v1 升级到 v2
// 通过tableV1 删除, 通过tableV2 添加, 无需通过每个区块扫描对应的交易
func
UpdateLocalDBPart2
(
localDB
dbm
.
DB
,
total
int
)
error
{
kvdb
:=
dbm
.
NewKVDB
(
localDB
)
if
getVersion
()
==
2
{
return
nil
}
err
:=
upgradeOrder
(
kvdb
,
total
)
if
err
!=
nil
{
return
err
}
setVersion
(
2
)
return
nil
}
var
v
=
1
func
getVersion
()
int
{
return
v
}
func
setVersion
(
v1
int
)
{
v
=
v1
}
// TODO trade local version 记录下相关信息
// version = 1/2
func
upgradeOrder
(
kvdb
dbm
.
KVDB
,
total
int
)
(
err
error
)
{
allDeleted
:=
false
for
!
allDeleted
{
allDeleted
,
err
=
upgradeOrderLimit
(
kvdb
,
total
)
if
err
!=
nil
{
return
err
}
}
return
nil
}
func
upgradeOrderLimit
(
kvdb
dbm
.
KVDB
,
total
int
)
(
allDeleted
bool
,
err
error
)
{
tab2
:=
NewOrderTableV2
(
kvdb
)
tab
:=
NewOrderTable
(
kvdb
)
q1
:=
tab
.
GetQuery
(
kvdb
)
var
order1
pty
.
LocalOrder
rows
,
err
:=
q1
.
List
(
"key"
,
&
order1
,
[]
byte
(
""
),
int32
(
total
),
0
)
if
err
!=
nil
&&
err
!=
types
.
ErrNotFound
{
return
false
,
errors
.
Wrap
(
err
,
"upgradeOrderLimit list from order v1 table"
)
}
for
_
,
row
:=
range
rows
{
o1
,
ok
:=
row
.
Data
.
(
*
pty
.
LocalOrder
)
if
!
ok
{
return
false
,
errors
.
Wrap
(
types
.
ErrTypeAsset
,
"decode order v1"
)
}
err
=
tab2
.
Add
(
o1
)
if
err
!=
nil
{
return
false
,
errors
.
Wrap
(
err
,
"upgradeOrderLimit add to order v2 table"
)
}
err
=
tab
.
Del
([]
byte
(
o1
.
GetKey
()))
if
err
!=
nil
{
return
false
,
errors
.
Wrap
(
err
,
"upgradeOrderLimit add to order v2 table"
)
}
}
kvs
,
err
:=
tab2
.
Save
()
if
err
!=
nil
{
return
false
,
errors
.
Wrap
(
err
,
"upgradeOrderLimit save-add to order v2 table"
)
}
kvs2
,
err
:=
tab
.
Save
()
if
err
!=
nil
{
return
false
,
errors
.
Wrap
(
err
,
"upgradeOrderLimit save-del to order v1 table"
)
}
kvs
=
append
(
kvs
,
kvs2
...
)
kvdb
.
Begin
()
for
_
,
kv
:=
range
kvs
{
err
=
kvdb
.
Set
(
kv
.
GetKey
(),
kv
.
GetValue
())
if
err
!=
nil
{
break
}
}
if
err
!=
nil
{
kvdb
.
Rollback
()
return
false
,
errors
.
Wrap
(
err
,
"upgradeOrderLimit kvdb set"
)
}
err
=
kvdb
.
Commit
()
if
err
!=
nil
{
kvdb
.
Rollback
()
return
false
,
errors
.
Wrap
(
err
,
"upgradeOrderLimit kvdb set"
)
}
return
len
(
rows
)
<
total
,
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