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