Documentation ¶
Overview ¶
Package storage contains ledger storage implementation on top of BadgerDB engine.
Index ¶
- Variables
- type DB
- func (db *DB) AddPulse(ctx context.Context, pulse core.Pulse) error
- func (db *DB) BeginTransaction(update bool) *TransactionManager
- func (db *DB) Bootstrap(ctx context.Context) error
- func (db *DB) Close() error
- func (db *DB) CreateDrop(ctx context.Context, pulse core.PulseNumber, prevHash []byte) (*jetdrop.JetDrop, [][]byte, error)
- func (db *DB) GenesisRef() *core.RecordRef
- func (db *DB) Get(key []byte) ([]byte, error)
- func (db *DB) GetBadgerDB() *badger.DB
- func (db *DB) GetBlob(ctx context.Context, id *core.RecordID) ([]byte, error)
- func (db *DB) GetDrop(ctx context.Context, pulse core.PulseNumber) (*jetdrop.JetDrop, error)
- func (db *DB) GetLatestPulseNumber(ctx context.Context) (core.PulseNumber, error)
- func (db *DB) GetObjectIndex(ctx context.Context, id *core.RecordID, forupdate bool) (*index.ObjectLifeline, error)
- func (db *DB) GetPulse(ctx context.Context, num core.PulseNumber) (*record.PulseRecord, error)
- func (db *DB) GetRecord(ctx context.Context, id *core.RecordID) (record.Record, error)
- func (db *DB) GetRequest(ctx context.Context, id *core.RecordID) (record.Request, error)
- func (db *DB) Set(key, value []byte) error
- func (db *DB) SetBlob(ctx context.Context, pulseNumber core.PulseNumber, blob []byte) (*core.RecordID, error)
- func (db *DB) SetDrop(ctx context.Context, drop *jetdrop.JetDrop) error
- func (db *DB) SetMessage(pulseNumber core.PulseNumber, genericMessage core.Message) error
- func (db *DB) SetObjectIndex(ctx context.Context, id *core.RecordID, idx *index.ObjectLifeline) error
- func (db *DB) SetRecord(ctx context.Context, pulseNumber core.PulseNumber, rec record.Record) (*core.RecordID, error)
- func (db *DB) SetRecordBinary(key, rec []byte) error
- func (db *DB) SetTxRetiries(n int)
- func (db *DB) Update(fn func(*TransactionManager) error) error
- func (db *DB) View(fn func(*TransactionManager) error) error
- type IDLocker
- type Store
- type TransactionManager
- func (m *TransactionManager) Commit() error
- func (m *TransactionManager) Discard()
- func (m *TransactionManager) Get(key []byte) ([]byte, error)
- func (m *TransactionManager) GetBlob(ctx context.Context, id *core.RecordID) ([]byte, error)
- func (m *TransactionManager) GetLatestPulseNumber(ctx context.Context) (core.PulseNumber, error)
- func (m *TransactionManager) GetObjectIndex(ctx context.Context, id *core.RecordID, forupdate bool) (*index.ObjectLifeline, error)
- func (m *TransactionManager) GetRecord(ctx context.Context, id *core.RecordID) (record.Record, error)
- func (m *TransactionManager) GetRequest(ctx context.Context, id *core.RecordID) (record.Request, error)
- func (m *TransactionManager) Set(key, value []byte) error
- func (m *TransactionManager) SetBlob(ctx context.Context, pulseNumber core.PulseNumber, blob []byte) (*core.RecordID, error)
- func (m *TransactionManager) SetObjectIndex(ctx context.Context, id *core.RecordID, idx *index.ObjectLifeline) error
- func (m *TransactionManager) SetRecord(ctx context.Context, pulseNumber core.PulseNumber, rec record.Record) (*core.RecordID, error)
Constants ¶
This section is empty.
Variables ¶
var ( // ErrNotFound returns if record/index not found in storage. ErrNotFound = errors.New("storage object not found") // ErrConflictRetriesOver is returned if Update transaction fails on all retry attempts. ErrConflictRetriesOver = errors.New("transaction conflict retries limit exceeded") // ErrConflict is the alias for badger.ErrConflict. ErrConflict = badger.ErrConflict // ErrOverride is returned if SetRecord tries update existing record ErrOverride = errors.New("records override is forbidden") )
Functions ¶
This section is empty.
Types ¶
type DB ¶ added in v0.0.6
type DB struct {
// contains filtered or unexported fields
}
DB represents BadgerDB storage implementation.
func NewDB ¶ added in v0.0.6
NewDB returns storage.DB with BadgerDB instance initialized by opts. Creates database in provided dir or in current directory if dir parameter is empty.
func (*DB) BeginTransaction ¶ added in v0.0.6
func (db *DB) BeginTransaction(update bool) *TransactionManager
BeginTransaction opens a new transaction. All methods called on returned transaction manager will persist changes only after success on "Commit" call.
func (*DB) Close ¶ added in v0.0.6
Close wraps BadgerDB Close method.
From https://godoc.org/github.com/dgraph-io/badger#DB.Close: «It's crucial to call it to ensure all the pending updates make their way to disk. Calling DB.Close() multiple times is not safe and wouldcause panic.»
func (*DB) CreateDrop ¶ added in v0.6.0
func (db *DB) CreateDrop(ctx context.Context, pulse core.PulseNumber, prevHash []byte) ( *jetdrop.JetDrop, [][]byte, error, )
CreateDrop creates and stores jet drop for given pulse number.
Previous JetDrop hash should be provided. On success returns saved drop and slot records.
func (*DB) GenesisRef ¶ added in v0.6.0
GenesisRef returns the genesis record reference.
Genesis record is the parent for all top-level records.
func (*DB) GetBadgerDB ¶ added in v0.6.1
GetBadgerDB return badger.DB instance (for internal usage, like tests)
func (*DB) GetLatestPulseNumber ¶ added in v0.6.0
GetLatestPulseNumber returns current pulse number.
func (*DB) GetObjectIndex ¶ added in v0.0.6
func (db *DB) GetObjectIndex( ctx context.Context, id *core.RecordID, forupdate bool, ) (*index.ObjectLifeline, error)
GetObjectIndex wraps matching transaction manager method.
func (*DB) GetPulse ¶ added in v0.6.0
func (db *DB) GetPulse(ctx context.Context, num core.PulseNumber) (*record.PulseRecord, error)
GetPulse returns pulse for provided pulse number.
func (*DB) GetRequest ¶ added in v0.5.0
GetRequest wraps matching transaction manager method.
func (*DB) SetBlob ¶ added in v0.6.2
func (db *DB) SetBlob(ctx context.Context, pulseNumber core.PulseNumber, blob []byte) (*core.RecordID, error)
SetBlob saves binary value for provided pulse.
func (*DB) SetMessage ¶ added in v0.6.2
SetMessage persists message to the database
func (*DB) SetObjectIndex ¶ added in v0.0.6
func (db *DB) SetObjectIndex( ctx context.Context, id *core.RecordID, idx *index.ObjectLifeline, ) error
SetObjectIndex wraps matching transaction manager method.
func (*DB) SetRecord ¶ added in v0.0.6
func (db *DB) SetRecord(ctx context.Context, pulseNumber core.PulseNumber, rec record.Record) (*core.RecordID, error)
SetRecord wraps matching transaction manager method.
func (*DB) SetRecordBinary ¶ added in v0.6.0
SetRecordBinary saves binary record for specified key.
This method is used for data replication.
func (*DB) SetTxRetiries ¶ added in v0.0.6
SetTxRetiries sets number of retries on conflict in Update
type IDLocker ¶ added in v0.6.0
type IDLocker struct {
// contains filtered or unexported fields
}
IDLocker provides Lock/Unlock methods per record ID.
TODO: for further optimization we could use sync.Pool for mutexes.
func NewIDLocker ¶ added in v0.6.0
func NewIDLocker() *IDLocker
NewIDLocker creates new initialized IDLocker.
type Store ¶ added in v0.0.5
type Store interface { GetRecord(ctx context.Context, ref *core.RecordID) (record.Record, error) SetRecord(ctx context.Context, pulseNumber core.PulseNumber, rec record.Record) (*core.RecordID, error) GetBlob(ctx context.Context, ref *core.RecordID) ([]byte, error) SetBlob(ctx context.Context, number core.PulseNumber, blob []byte) (*core.RecordID, error) GetObjectIndex(ctx context.Context, ref *core.RecordID, forupdate bool) (*index.ObjectLifeline, error) SetObjectIndex(ctx context.Context, ref *core.RecordID, idx *index.ObjectLifeline) error GetLatestPulseNumber(ctx context.Context) (core.PulseNumber, error) }
Store is used by context unaware clients who can work inside transactions as well as outside.
type TransactionManager ¶ added in v0.0.6
type TransactionManager struct {
// contains filtered or unexported fields
}
TransactionManager is used to ensure persistent writes to disk.
func (*TransactionManager) Commit ¶ added in v0.0.6
func (m *TransactionManager) Commit() error
Commit tries to write transaction on disk. Returns error on fail.
func (*TransactionManager) Discard ¶ added in v0.0.6
func (m *TransactionManager) Discard()
Discard terminates transaction without disk writes.
func (*TransactionManager) Get ¶ added in v0.0.6
func (m *TransactionManager) Get(key []byte) ([]byte, error)
Get returns value by key.
func (*TransactionManager) GetBlob ¶ added in v0.6.2
GetBlob returns binary value stored by record ID.
func (*TransactionManager) GetLatestPulseNumber ¶ added in v0.6.0
func (m *TransactionManager) GetLatestPulseNumber(ctx context.Context) (core.PulseNumber, error)
GetLatestPulseNumber returns current pulse number.
func (*TransactionManager) GetObjectIndex ¶ added in v0.0.6
func (m *TransactionManager) GetObjectIndex( ctx context.Context, id *core.RecordID, forupdate bool, ) (*index.ObjectLifeline, error)
GetObjectIndex fetches object lifeline index.
func (*TransactionManager) GetRecord ¶ added in v0.0.6
func (m *TransactionManager) GetRecord(ctx context.Context, id *core.RecordID) (record.Record, error)
GetRecord returns record from BadgerDB by *record.Reference.
It returns ErrNotFound if the DB does not contain the key.
func (*TransactionManager) GetRequest ¶ added in v0.5.0
func (m *TransactionManager) GetRequest(ctx context.Context, id *core.RecordID) (record.Request, error)
GetRequest returns request record from BadgerDB by *record.Reference.
It returns ErrNotFound if the DB does not contain the key.
func (*TransactionManager) Set ¶ added in v0.0.6
func (m *TransactionManager) Set(key, value []byte) error
Set stores value by key.
func (*TransactionManager) SetBlob ¶ added in v0.6.2
func (m *TransactionManager) SetBlob(ctx context.Context, pulseNumber core.PulseNumber, blob []byte) (*core.RecordID, error)
SetBlob saves binary value for provided pulse.
func (*TransactionManager) SetObjectIndex ¶ added in v0.0.6
func (m *TransactionManager) SetObjectIndex( ctx context.Context, id *core.RecordID, idx *index.ObjectLifeline, ) error
SetObjectIndex stores object lifeline index.
func (*TransactionManager) SetRecord ¶ added in v0.0.6
func (m *TransactionManager) SetRecord(ctx context.Context, pulseNumber core.PulseNumber, rec record.Record) (*core.RecordID, error)
SetRecord stores record in BadgerDB and returns *record.ID of new record.
If record exists returns both *record.ID and ErrOverride error. If record not found returns nil and ErrNotFound error
Directories ¶
Path | Synopsis |
---|---|
Package storagetest contains high level API tests and test utils for other modules.
|
Package storagetest contains high level API tests and test utils for other modules. |