mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-05-06 22:18:28 +00:00
@@ -24,6 +24,7 @@ type Storage interface {
|
|||||||
KeysByPrefix(prefix []byte) [][]byte
|
KeysByPrefix(prefix []byte) [][]byte
|
||||||
FetchByPrefix(prefix []byte) [][]byte
|
FetchByPrefix(prefix []byte) [][]byte
|
||||||
Close() error
|
Close() error
|
||||||
|
ReOpen() error
|
||||||
StartBatch()
|
StartBatch()
|
||||||
FinishBatch() error
|
FinishBatch() error
|
||||||
CompactDB() error
|
CompactDB() error
|
||||||
@@ -40,13 +41,17 @@ var (
|
|||||||
_ Storage = &levelDB{}
|
_ Storage = &levelDB{}
|
||||||
)
|
)
|
||||||
|
|
||||||
// OpenDB opens (creates) LevelDB database
|
func internalOpen(path string) (*leveldb.DB, error) {
|
||||||
func OpenDB(path string) (Storage, error) {
|
|
||||||
o := &opt.Options{
|
o := &opt.Options{
|
||||||
Filter: filter.NewBloomFilter(10),
|
Filter: filter.NewBloomFilter(10),
|
||||||
}
|
}
|
||||||
|
|
||||||
db, err := leveldb.OpenFile(path, o)
|
return leveldb.OpenFile(path, o)
|
||||||
|
}
|
||||||
|
|
||||||
|
// OpenDB opens (creates) LevelDB database
|
||||||
|
func OpenDB(path string) (Storage, error) {
|
||||||
|
db, err := internalOpen(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -148,11 +153,25 @@ func (l *levelDB) FetchByPrefix(prefix []byte) [][]byte {
|
|||||||
|
|
||||||
// Close finishes DB work
|
// Close finishes DB work
|
||||||
func (l *levelDB) Close() error {
|
func (l *levelDB) Close() error {
|
||||||
|
if l.db == nil {
|
||||||
|
panic("database already closed")
|
||||||
|
}
|
||||||
err := l.db.Close()
|
err := l.db.Close()
|
||||||
l.db = nil
|
l.db = nil
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reopen tries to re-open the database
|
||||||
|
func (l *levelDB) ReOpen() error {
|
||||||
|
if l.db != nil {
|
||||||
|
panic("database already open")
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
l.db, err = internalOpen(l.path)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// StartBatch starts batch processing of keys
|
// StartBatch starts batch processing of keys
|
||||||
//
|
//
|
||||||
// All subsequent Get, Put and Delete would work on batch
|
// All subsequent Get, Put and Delete would work on batch
|
||||||
|
|||||||
@@ -155,3 +155,23 @@ func (s *LevelDBSuite) TestCompactDB(c *C) {
|
|||||||
|
|
||||||
c.Check(s.db.CompactDB(), IsNil)
|
c.Check(s.db.CompactDB(), IsNil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *LevelDBSuite) TestReOpen(c *C) {
|
||||||
|
var (
|
||||||
|
key = []byte("key")
|
||||||
|
value = []byte("value")
|
||||||
|
)
|
||||||
|
|
||||||
|
err := s.db.Put(key, value)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
|
err = s.db.Close()
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
|
err = s.db.ReOpen()
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
|
result, err := s.db.Get(key)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
c.Assert(result, DeepEquals, value)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user