Skip to content

Commit

Permalink
Add load from disk
Browse files Browse the repository at this point in the history
  • Loading branch information
claygod committed Jun 24, 2018
1 parent 2dfd7e8 commit 302ac1a
Show file tree
Hide file tree
Showing 7 changed files with 153 additions and 17 deletions.
6 changes: 0 additions & 6 deletions account/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,8 @@ func (a *Account) Export(separator1 string, separator2 string, separator3 string

func (a *Account) Import(separator1 string, separator2 string, separator3 string, str string) error {
subs := strings.Split(str, separator1)
//fmt.Println(" +++++ ", subs)
for i := 1; i < len(subs); i++ {
key := a.ejectKey(subs[i], separator2)
//fmt.Println(" ++", key, "+++++++++++++++++++++++++++ ")
//fmt.Println(" ++", subs[i], "++ ")
s, err := importSubAccount(subs[i], separator2, separator3)
if err != nil {
return err
Expand All @@ -96,7 +93,6 @@ func (a *Account) Import(separator1 string, separator2 string, separator3 string

func (a *Account) ejectKey(str string, separator2 string) string {
subs := strings.SplitN(str, separator2, 2)
// fmt.Println(" ++^^++ ", subs)
return subs[0]
}

Expand All @@ -107,8 +103,6 @@ type Balance struct {

type SubAccount struct {
Balance
//available uint64
//blocked uint64
blocks map[string]uint64
}

Expand Down
21 changes: 20 additions & 1 deletion accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
//"fmt"

"bytes"
"strings"
// "sync"

"github.com/claygod/adb/account"
Expand Down Expand Up @@ -54,9 +55,27 @@ func (a *Accounts) Export() string {
for id, acc := range a.data {
buf.WriteString(id)
// buf.WriteString(WalSimbolSeparator1)
buf.WriteString(acc.Export(WalSimbolSeparator1, WalSimbolSeparator2, "*"))
buf.WriteString(acc.Export(WalSimbolSeparator1, WalSimbolSeparator2, WalSimbolSeparator3))
buf.WriteString("\n")
}

return buf.String()
}

func (a *Accounts) Import(str string) {
//a.Lock()
//defer a.Unlock()
accs := strings.Split(str, "\n")
for _, accStr := range accs {
key := a.ejectKey(accStr, WalSimbolSeparator2)
acc := account.New()
acc.Import(WalSimbolSeparator1, WalSimbolSeparator2, WalSimbolSeparator3, accStr)
a.data[key] = acc
}
}

func (a *Accounts) ejectKey(str string, separator2 string) string {
subs := strings.SplitN(str, separator2, 2)
// fmt.Println(" ++^^++ ", subs)
return subs[0]
}
38 changes: 29 additions & 9 deletions adb_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package adb

import (
"fmt"
"io/ioutil"
"os"
"runtime"
"sync/atomic"
Expand All @@ -21,7 +22,7 @@ type Adb struct {
accounts *Accounts
//answers *Answers
state int64
patch string
path string
//queue *Queue
//queuesPool [256]*queue.Queue
batcher *batcher.Batcher
Expand All @@ -31,9 +32,10 @@ type Adb struct {
time *time.Time
}

func New(patch string) (*Adb, error) {
func New(path string) (*Adb, error) {
// ToDo: exists dir ?
fileName := "start.txt"
wal, err := wal.New(patch, fileName, WalSimbolSeparator1) //newWal()
wal, err := wal.New(path, fileName, WalSimbolSeparator1) //newWal()
if err != nil {
return nil, err
}
Expand All @@ -42,12 +44,12 @@ func New(patch string) (*Adb, error) {
//q := newQueue(sizeBucket * 16)
b := batcher.New(wal, ch, ch2)

r := &Adb{
adb := &Adb{
accounts: newAccounts(),
//answers: newAnswers(),
//queue: q,
state: stateClosed,
patch: patch,
path: path,
batcher: b,
wal: wal,
ch: ch,
Expand All @@ -56,8 +58,7 @@ func New(patch string) (*Adb, error) {
}

b.SetBatchSize(sizeBucket) //.Start()

return r, nil
return adb, nil
}

func (a *Adb) Start() {
Expand All @@ -77,8 +78,14 @@ func (a *Adb) Save() {
a.Start()
}

func (a *Adb) Load() {
a.Stop()
a.loadFromDisk()
a.Start()
}

func (a *Adb) saveToDisk() error {
file, err := os.Create(a.patch + "adb.txt")
file, err := os.Create(a.path + "adb.txt")
if err != nil {
return err
}
Expand All @@ -89,7 +96,20 @@ func (a *Adb) saveToDisk() error {
return nil
}

func (a *Adb) load() {
func (a *Adb) loadFromDisk() error {
file, err := ioutil.ReadFile(a.path + "adb.txt")
if err != nil {
//fmt.Println(err)
panic(err)
// ToDo: read snapshots & etc.
_, err := os.Create(a.path + "adb.txt")
if err != nil {
return err
}
return nil
}
a.accounts.Import(string(file))
return nil
}

func (a *Adb) Transaction(order *Order) (*Answer, error) {
Expand Down
2 changes: 1 addition & 1 deletion adb_bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func BenchmarkTransaction(b *testing.B) { // GOGC=off go test -bench=BenchmarkTr

func BenchmarkTransactionParallel(b *testing.B) { // GOGC=off go test -bench=BenchmarkTransaction -cpuprofile cpu.out
b.StopTimer()
db, _ := New("./log/")
db, _ := New(filePatch)
db.Start()
for i := 0; i < 256; i++ {
db.accounts.AddAccount(strconv.Itoa(i))
Expand Down
1 change: 1 addition & 0 deletions adb_private.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ const sizeBucket int64 = 256
const (
WalSimbolSeparator1 string = "|"
WalSimbolSeparator2 string = ";"
WalSimbolSeparator3 string = "*"
WalSimbolBlock string = "B"
WalSimbolUnblock string = "U"
WalSimbolCredit string = "C"
Expand Down
2 changes: 2 additions & 0 deletions adb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ func TestTime1000000Trans(t *testing.T) {
//}
r, _ := New(filePatch)
r.Start()
r.Load()
r.accounts.AddAccount("111")
r.accounts.AddAccount("222")
r.accounts.Account("111").Balance("USD").Debit(9)
Expand All @@ -41,6 +42,7 @@ func TestTime1000000Trans(t *testing.T) {
func TestSave(t *testing.T) {
db, _ := New(filePatch)
db.Start()
// db.Load()

acc := account.New()
acc.Balance("USD").Debit(9)
Expand Down
100 changes: 100 additions & 0 deletions log/adb.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
9|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
30|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
32|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
71|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
81|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
88|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
19|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
36|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
47|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
49|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
3|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
4|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
39|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
96|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
97|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
2|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
13|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
48|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
53|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
59|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
90|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
18|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
35|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
46|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
72|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
79|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
80|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
91|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
92|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
1|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
16|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
55|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
58|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
68|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
69|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
86|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
94|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
85|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
28|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
38|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
45|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
57|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
62|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
83|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
84|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
25|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
43|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
52|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
64|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
67|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
17|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
26|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
29|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
34|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
40|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
73|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
77|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
98|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
7|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
12|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
24|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
33|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
44|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
60|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
82|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
65|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
5|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
10|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
21|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
27|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
31|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
42|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
61|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
87|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
99|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
6|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
76|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
78|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
8|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
14|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
22|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
41|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
54|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
93|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
15|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
50|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
51|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
56|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
74|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
23|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
37|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
63|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
70|EUR;9;0|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1
75|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
89|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
11|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
20|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
66|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0
95|USD;8;1;d8f4590320e1343a915b6394170650a8f35d6926*1|EUR;9;0

0 comments on commit 302ac1a

Please sign in to comment.