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  }