/
db.go
141 lines (108 loc) · 2.13 KB
/
db.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package lnbolt
import (
"fmt"
"github.com/boltdb/bolt"
"github.com/mit-dci/lit/lncore"
"os"
"path"
)
// LitBoltDB uses Bolt as a storage backend.
type LitBoltDB struct {
open bool
walletdb *bolt.DB
peerdb *bolt.DB
chandb *bolt.DB
}
// Open .
func (db *LitBoltDB) Open(dbpath string) error {
// Sanity check.
if db.open {
return fmt.Errorf("tried to open an open BoltDB database")
}
os.Mkdir(dbpath, os.ModeDir|0700)
// Figure out file paths.
wpath := path.Join(dbpath, "wallet.db")
ppath := path.Join(dbpath, "peer.db")
cpath := path.Join(dbpath, "channels.db")
var err error
walletdb, err := bolt.Open(wpath, 0644, nil)
if err != nil {
return err
}
peerdb, err := bolt.Open(ppath, 0644, nil)
if err != nil {
walletdb.Close()
return err
}
chandb, err := bolt.Open(cpath, 0644, nil)
if err != nil {
walletdb.Close()
peerdb.Close()
return err
}
// Actually set the new databases in ourselves.
db.walletdb = walletdb
db.peerdb = peerdb
db.chandb = chandb
db.open = true
return nil
}
// IsSingleFile .
func (*LitBoltDB) IsSingleFile() bool {
return false
}
// Close .
func (db *LitBoltDB) Close() error {
// Sanity check.
if !db.open {
return fmt.Errorf("tried to close a closed BoltDB database")
}
var err error
err = db.walletdb.Close()
if err != nil {
return err
}
err = db.peerdb.Close()
if err != nil {
return err
}
err = db.chandb.Close()
if err != nil {
return err
}
db.open = false
return nil
}
// Check .
func (db *LitBoltDB) Check() error {
if db.walletdb == nil {
return fmt.Errorf("Wallet DB is nil")
}
if db.peerdb == nil {
return fmt.Errorf("Peer DB is nil")
}
if db.chandb == nil {
return fmt.Errorf("Channel DB is nil")
}
return nil
}
// GetWalletDB .
func (db *LitBoltDB) GetWalletDB(cointype uint32) lncore.LitWalletStorage {
return nil
}
// GetPeerDB .
func (db *LitBoltDB) GetPeerDB() lncore.LitPeerStorage {
w := peerboltdb{}
w.db = db.peerdb
err := w.init()
if err != nil {
panic(err)
}
var w2 lncore.LitPeerStorage
w2 = &w
return w2
}
// GetChannelDB .
func (db *LitBoltDB) GetChannelDB() lncore.LitChannelStorage {
return nil
}