...

Source file src/github.com/theupdateframework/go-tuf/client/leveldbstore/leveldbstore.go

Documentation: github.com/theupdateframework/go-tuf/client/leveldbstore

     1  package client
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/syndtr/goleveldb/leveldb"
     7  	"github.com/syndtr/goleveldb/leveldb/errors"
     8  	"github.com/syndtr/goleveldb/leveldb/storage"
     9  
    10  	tuf_client "github.com/theupdateframework/go-tuf/client"
    11  )
    12  
    13  func FileLocalStore(path string) (tuf_client.LocalStore, error) {
    14  	fd, err := storage.OpenFile(path, false)
    15  	if err != nil {
    16  		return nil, err
    17  	}
    18  
    19  	db, err := leveldb.Open(fd, nil)
    20  	if err != nil && errors.IsCorrupted(err) {
    21  		db, err = leveldb.Recover(fd, nil)
    22  	}
    23  
    24  	return &fileLocalStore{fd: fd, db: db}, err
    25  }
    26  
    27  type fileLocalStore struct {
    28  	fd storage.Storage
    29  	db *leveldb.DB
    30  }
    31  
    32  func (f *fileLocalStore) GetMeta() (map[string]json.RawMessage, error) {
    33  	meta := make(map[string]json.RawMessage)
    34  	db_itr := f.db.NewIterator(nil, nil)
    35  	for db_itr.Next() {
    36  		vcopy := make([]byte, len(db_itr.Value()))
    37  		copy(vcopy, db_itr.Value())
    38  		meta[string(db_itr.Key())] = vcopy
    39  	}
    40  	db_itr.Release()
    41  	return meta, db_itr.Error()
    42  }
    43  
    44  func (f *fileLocalStore) SetMeta(name string, meta json.RawMessage) error {
    45  	return f.db.Put([]byte(name), []byte(meta), nil)
    46  }
    47  
    48  func (f *fileLocalStore) DeleteMeta(name string) error {
    49  	return f.db.Delete([]byte(name), nil)
    50  }
    51  
    52  func (f *fileLocalStore) Close() error {
    53  	// Always close both before returning any errors
    54  	dbCloseErr := f.db.Close()
    55  	fdCloseErr := f.fd.Close()
    56  	if dbCloseErr != nil {
    57  		return dbCloseErr
    58  	}
    59  	return fdCloseErr
    60  }
    61  

View as plain text