storage

package
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 16, 2018 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Overview

Package storage contains ledger storage implementation on top of BadgerDB engine.

Index

Constants

This section is empty.

Variables

View Source
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

func NewDB(conf configuration.Ledger, opts *badger.Options) (*DB, error)

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) AddPulse added in v0.6.0

func (db *DB) AddPulse(pulse core.Pulse) error

AddPulse saves new pulse data and updates index.

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) Bootstrap added in v0.0.6

func (db *DB) Bootstrap() error

Bootstrap creates initial records in storage.

func (*DB) Close added in v0.0.6

func (db *DB) Close() error

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(pulse core.PulseNumber, prevHash []byte) (*jetdrop.JetDrop, [][2][]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

func (db *DB) GenesisRef() *record.Reference

GenesisRef returns the genesis record reference.

Genesis record is the parent for all top-level records.

func (*DB) Get added in v0.0.6

func (db *DB) Get(key []byte) ([]byte, error)

Get wraps matching transaction manager method.

func (*DB) GetClassIndex added in v0.0.6

func (db *DB) GetClassIndex(id *record.ID, forupdate bool) (*index.ClassLifeline, error)

GetClassIndex wraps matching transaction manager method.

func (*DB) GetDrop added in v0.0.6

func (db *DB) GetDrop(pulse core.PulseNumber) (*jetdrop.JetDrop, error)

GetDrop returns jet drop for a given pulse number.

func (*DB) GetLatestPulseNumber added in v0.6.0

func (db *DB) GetLatestPulseNumber() (core.PulseNumber, error)

GetLatestPulseNumber returns current pulse number.

func (*DB) GetObjectIndex added in v0.0.6

func (db *DB) GetObjectIndex(id *record.ID, forupdate bool) (*index.ObjectLifeline, error)

GetObjectIndex wraps matching transaction manager method.

func (*DB) GetPulse added in v0.6.0

func (db *DB) GetPulse(num core.PulseNumber) (*record.PulseRecord, error)

GetPulse returns pulse for provided pulse number.

func (*DB) GetRecord added in v0.0.6

func (db *DB) GetRecord(id *record.ID) (record.Record, error)

GetRecord wraps matching transaction manager method.

func (*DB) GetRequest added in v0.5.0

func (db *DB) GetRequest(id *record.ID) (record.Request, error)

GetRequest wraps matching transaction manager method.

func (*DB) Set added in v0.0.6

func (db *DB) Set(key, value []byte) error

Set wraps matching transaction manager method.

func (*DB) SetClassIndex added in v0.0.6

func (db *DB) SetClassIndex(id *record.ID, idx *index.ClassLifeline) error

SetClassIndex wraps matching transaction manager method.

func (*DB) SetDrop added in v0.0.6

func (db *DB) SetDrop(drop *jetdrop.JetDrop) error

SetDrop saves provided JetDrop in db.

func (*DB) SetObjectIndex added in v0.0.6

func (db *DB) SetObjectIndex(id *record.ID, idx *index.ObjectLifeline) error

SetObjectIndex wraps matching transaction manager method.

func (*DB) SetRecord added in v0.0.6

func (db *DB) SetRecord(rec record.Record) (*record.ID, error)

SetRecord wraps matching transaction manager method.

func (*DB) SetRecordBinary added in v0.6.0

func (db *DB) SetRecordBinary(key, rec []byte) error

SetRecordBinary saves binary record for specified key.

This method is used for data replication.

func (*DB) SetRequest added in v0.5.0

func (db *DB) SetRequest(req record.Request) (*record.ID, error)

SetRequest wraps matching transaction manager method.

func (*DB) SetTxRetiries added in v0.0.6

func (db *DB) SetTxRetiries(n int)

SetTxRetiries sets number of retries on conflict in Update

func (*DB) Update added in v0.0.6

func (db *DB) Update(fn func(*TransactionManager) error) error

Update accepts transaction function and commits changes. All calls to received transaction manager will be consistent and written tp disk or an error will be returned.

func (*DB) View added in v0.0.6

func (db *DB) View(fn func(*TransactionManager) error) error

View accepts transaction function. All calls to received transaction manager will be consistent.

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.

func (*IDLocker) Lock added in v0.6.0

func (l *IDLocker) Lock(id *record.ID)

Lock locks mutex belonged to record ID. If mutex does not exist, it will be created in concurrent safe fashion.

func (*IDLocker) Unlock added in v0.6.0

func (l *IDLocker) Unlock(id *record.ID)

Unlock unlocks mutex belonged to record ID.

type Store added in v0.0.5

type Store interface {
	GetRecord(ref *record.ID) (record.Record, error)
	SetRecord(rec record.Record) (*record.ID, error)
	GetClassIndex(ref *record.ID, forupdate bool) (*index.ClassLifeline, error)
	SetClassIndex(ref *record.ID, idx *index.ClassLifeline) error
	GetObjectIndex(ref *record.ID, forupdate bool) (*index.ObjectLifeline, error)
	SetObjectIndex(ref *record.ID, idx *index.ObjectLifeline) error
	GetLatestPulseNumber() (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) GetClassIndex added in v0.0.6

func (m *TransactionManager) GetClassIndex(id *record.ID, forupdate bool) (*index.ClassLifeline, error)

GetClassIndex fetches class lifeline's index.

func (*TransactionManager) GetLatestPulseNumber added in v0.6.0

func (m *TransactionManager) GetLatestPulseNumber() (core.PulseNumber, error)

GetLatestPulseNumber returns current pulse number.

func (*TransactionManager) GetObjectIndex added in v0.0.6

func (m *TransactionManager) GetObjectIndex(id *record.ID, forupdate bool) (*index.ObjectLifeline, error)

GetObjectIndex fetches object lifeline index.

func (*TransactionManager) GetRecord added in v0.0.6

func (m *TransactionManager) GetRecord(id *record.ID) (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(id *record.ID) (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) SetClassIndex added in v0.0.6

func (m *TransactionManager) SetClassIndex(id *record.ID, idx *index.ClassLifeline) error

SetClassIndex stores class lifeline index.

func (*TransactionManager) SetObjectIndex added in v0.0.6

func (m *TransactionManager) SetObjectIndex(id *record.ID, idx *index.ObjectLifeline) error

SetObjectIndex stores object lifeline index.

func (*TransactionManager) SetRecord added in v0.0.6

func (m *TransactionManager) SetRecord(rec record.Record) (*record.ID, 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

func (*TransactionManager) SetRequest added in v0.5.0

func (m *TransactionManager) SetRequest(req record.Request) (*record.ID, error)

SetRequest stores request record in BadgerDB and returns *record.ID of new record.

If record exists SetRequest just returns *record.ID without 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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL