rafthyperleveldb

package module
v0.0.0-...-4f82785 Latest Latest
Warning

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

Go to latest
Published: Aug 17, 2018 License: Apache-2.0 Imports: 6 Imported by: 0

README

raft-hyperleveldb

Raft backend using HyperDex's HyperLevelDB

Use Case

Drop it in instead of BoltDB if your workload is highly concurrent and write intensive. See their writeup for more details

Example

logStore, _ := rafthyperleveldb.NewHyperLevelDBStore("/path/to/raft/db", rafthyperleveldb.High)

myRaft, _ := raft.NewRaft(config, (*fsm)(c), logStore, logStore, snapshots, transport)

Benchmark

HyperLevelDB:

BenchmarkHyperLevelDBStore_FirstIndex-8          1000000              1031 ns/op
BenchmarkHyperLevelDBStore_LastIndex-8           1000000              1477 ns/op
BenchmarkHyperLevelDBStore_GetLog-8              2000000               935 ns/op
BenchmarkHyperLevelDBStore_StoreLog-8             200000              9662 ns/op
BenchmarkHyperLevelDBStore_StoreLogs-8            100000             17323 ns/op
BenchmarkHyperLevelDBStore_DeleteRange-8          100000             19645 ns/op
BenchmarkHyperLevelDBStore_Set-8                  200000              9936 ns/op
BenchmarkHyperLevelDBStore_Get-8                 2000000               795 ns/op
BenchmarkHyperLevelDBStore_SetUint64-8            200000              9086 ns/op
BenchmarkHyperLevelDBStore_GetUint64-8           2000000               856 ns/op

Remarks

Credit to https://github.com/tidwall/raft-leveldb for the original raft-leveldb

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (

	// An error indicating a given key does not exist
	ErrKeyNotFound = errors.New("not found")
)

Functions

This section is empty.

Types

type HyperLevelDBStore

type HyperLevelDBStore struct {
	// contains filtered or unexported fields
}

HyperLevelDBStore provides access to BoltDB for Raft to store and retrieve log entries. It also provides key/value storage, and can be used as a LogStore and StableStore.

func NewHyperLevelDBStore

func NewHyperLevelDBStore(path string, durability Level) (*HyperLevelDBStore, error)

NewHyperLevelDBStore takes a file path and returns a connected Raft backend.

func (*HyperLevelDBStore) Close

func (b *HyperLevelDBStore) Close() error

Close is used to gracefully close the DB connection.

func (*HyperLevelDBStore) DeleteRange

func (b *HyperLevelDBStore) DeleteRange(min, max uint64) error

DeleteRange is used to delete logs within a given range inclusively.

func (*HyperLevelDBStore) FirstIndex

func (b *HyperLevelDBStore) FirstIndex() (uint64, error)

FirstIndex returns the first known index from the Raft log.

func (*HyperLevelDBStore) Get

func (b *HyperLevelDBStore) Get(k []byte) ([]byte, error)

Get is used to retrieve a value from the k/v store by key

func (*HyperLevelDBStore) GetLog

func (b *HyperLevelDBStore) GetLog(idx uint64, log *raft.Log) error

GetLog is used to retrieve a log from BoltDB at a given index.

func (*HyperLevelDBStore) GetUint64

func (b *HyperLevelDBStore) GetUint64(key []byte) (uint64, error)

GetUint64 is like Get, but handles uint64 values

func (*HyperLevelDBStore) LastIndex

func (b *HyperLevelDBStore) LastIndex() (uint64, error)

LastIndex returns the last known index from the Raft log.

func (*HyperLevelDBStore) Peers

func (b *HyperLevelDBStore) Peers() ([]string, error)

Peers returns raft peers

func (*HyperLevelDBStore) Set

func (b *HyperLevelDBStore) Set(k, v []byte) error

Set is used to set a key/value set outside of the raft log

func (*HyperLevelDBStore) SetPeers

func (b *HyperLevelDBStore) SetPeers(peers []string) error

SetPeers sets raft peers

func (*HyperLevelDBStore) SetUint64

func (b *HyperLevelDBStore) SetUint64(key []byte, val uint64) error

SetUint64 is like Set, but handles uint64 values

func (*HyperLevelDBStore) StoreLog

func (b *HyperLevelDBStore) StoreLog(log *raft.Log) error

StoreLog is used to store a single raft log

func (*HyperLevelDBStore) StoreLogs

func (b *HyperLevelDBStore) StoreLogs(logs []*raft.Log) error

StoreLogs is used to store a set of raft logs

type Level

type Level int
const (
	Low    Level = -1
	Medium Level = 0
	High   Level = 1
)

Jump to

Keyboard shortcuts

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