Documentation ¶
Overview ¶
Copyright 2022 Codenotary Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Index ¶
- Constants
- Variables
- type AppFactoryFunc
- type HistoryReader
- type HistoryReaderSpec
- type KVT
- type Options
- func (opts *Options) Validate() error
- func (opts *Options) WithAppFactory(appFactory AppFactoryFunc) *Options
- func (opts *Options) WithCacheSize(cacheSize int) *Options
- func (opts *Options) WithCleanupPercentage(cleanupPercentage float32) *Options
- func (opts *Options) WithCommitLogMaxOpenedFiles(commitLogMaxOpenedFiles int) *Options
- func (opts *Options) WithCompactionThld(compactionThld int) *Options
- func (opts *Options) WithDelayDuringCompaction(delay time.Duration) *Options
- func (opts *Options) WithFileMode(fileMode os.FileMode) *Options
- func (opts *Options) WithFileSize(fileSize int) *Options
- func (opts *Options) WithFlushBufferSize(size int) *Options
- func (opts *Options) WithFlushThld(flushThld int) *Options
- func (opts *Options) WithHistoryLogMaxOpenedFiles(historyLogMaxOpenedFiles int) *Options
- func (opts *Options) WithLogger(logger logger.Logger) *Options
- func (opts *Options) WithMaxActiveSnapshots(maxActiveSnapshots int) *Options
- func (opts *Options) WithMaxKeySize(maxKeySize int) *Options
- func (opts *Options) WithMaxNodeSize(maxNodeSize int) *Options
- func (opts *Options) WithMaxValueSize(maxValueSize int) *Options
- func (opts *Options) WithNodesLogMaxOpenedFiles(nodesLogMaxOpenedFiles int) *Options
- func (opts *Options) WithReadOnly(readOnly bool) *Options
- func (opts *Options) WithRenewSnapRootAfter(renewSnapRootAfter time.Duration) *Options
- func (opts *Options) WithSyncThld(syncThld int) *Options
- type Reader
- type ReaderSpec
- type Snapshot
- func (s *Snapshot) Close() error
- func (s *Snapshot) Get(key []byte) (value []byte, ts uint64, hc uint64, err error)
- func (s *Snapshot) GetWithPrefix(prefix []byte, neq []byte) (key []byte, value []byte, ts uint64, hc uint64, err error)
- func (s *Snapshot) History(key []byte, offset uint64, descOrder bool, limit int) (tss []uint64, hCount uint64, err error)
- func (s *Snapshot) NewHistoryReader(spec *HistoryReaderSpec) (*HistoryReader, error)
- func (s *Snapshot) NewReader(spec ReaderSpec) (r *Reader, err error)
- func (s *Snapshot) Set(key, value []byte) error
- func (s *Snapshot) Ts() uint64
- func (s *Snapshot) WriteTo(nw, hw io.Writer, writeOpts *WriteOpts) (rootOffset, minOffset int64, wN, wH int64, err error)
- type TBtree
- func (t *TBtree) BulkInsert(kvts []*KVT) error
- func (t *TBtree) Close() error
- func (t *TBtree) Compact() (uint64, error)
- func (t *TBtree) Flush() (wN, wH int64, err error)
- func (t *TBtree) FlushWith(cleanupPercentage float32, synced bool) (wN, wH int64, err error)
- func (t *TBtree) Get(key []byte) (value []byte, ts uint64, hc uint64, err error)
- func (t *TBtree) GetOptions() *Options
- func (t *TBtree) GetWithPrefix(prefix []byte, neq []byte) (key []byte, value []byte, ts uint64, hc uint64, err error)
- func (t *TBtree) History(key []byte, offset uint64, descOrder bool, limit int) (tss []uint64, hCount uint64, err error)
- func (t *TBtree) IncreaseTs(ts uint64) error
- func (t *TBtree) Insert(key []byte, value []byte) error
- func (t *TBtree) Snapshot() (*Snapshot, error)
- func (t *TBtree) SnapshotCount() (uint64, error)
- func (t *TBtree) SnapshotMustIncludeTs(ts uint64) (*Snapshot, error)
- func (t *TBtree) SnapshotMustIncludeTsWithRenewalPeriod(ts uint64, renewalPeriod time.Duration) (*Snapshot, error)
- func (t *TBtree) Sync() error
- func (t *TBtree) SyncSnapshot() (*Snapshot, error)
- func (t *TBtree) Ts() uint64
- type WriteOpts
Constants ¶
const ( InnerNodeType = iota LeafNodeType )
const ( MetaVersion = "VERSION" MetaMaxNodeSize = "MAX_NODE_SIZE" MetaMaxKeySize = "MAX_KEY_SIZE" MetaMaxValueSize = "MAX_VALUE_SIZE" )
const DefaultCacheSize = 100_000
const DefaultCleanUpPercentage float32 = 0
const DefaultCommitLogMaxOpenedFiles = 1
const DefaultCompactionThld = 2
const DefaultDelayDuringCompaction = time.Duration(10) * time.Millisecond
const DefaultFileMode = os.FileMode(0755)
const DefaultFileSize = 1 << 26 // 64Mb
const DefaultFlushBufferSize = 4096
const DefaultFlushThld = 100_000
const DefaultHistoryLogMaxOpenedFiles = 1
const DefaultMaxActiveSnapshots = 100
const DefaultMaxKeySize = 1024
const DefaultMaxNodeSize = 4096
const DefaultMaxValueSize = 512
const DefaultNodesLogMaxOpenedFiles = 10
const DefaultRenewSnapRootAfter = time.Duration(1000) * time.Millisecond
const DefaultSyncThld = 1_000_000
const MinCacheSize = 1
const Version = 3
Variables ¶
var ErrAlreadyClosed = errors.New("tbtree: index already closed")
var ErrCompactAlreadyInProgress = errors.New("tbtree: compact already in progress")
var ErrCompactionThresholdNotReached = errors.New("tbtree: compaction threshold not yet reached")
var ErrCorruptedCLog = errors.New("tbtree: commit log is corrupted")
var ErrCorruptedFile = errors.New("tbtree: file is corrupted")
var ErrIllegalArguments = fmt.Errorf("tbtree: %w", embedded.ErrIllegalArguments)
var ErrIllegalState = embedded.ErrIllegalState // TODO: grpc error mapping hardly relies on the actual message, see IllegalStateHandlerInterceptor
var ErrIncompatibleDataFormat = errors.New("tbtree: incompatible data format")
var ErrInvalidOptions = fmt.Errorf("%w: invalid options", ErrIllegalArguments)
var ErrKeyNotFound = fmt.Errorf("tbtree: %w", embedded.ErrKeyNotFound)
var ErrNoMoreEntries = fmt.Errorf("tbtree: %w", embedded.ErrNoMoreEntries)
var ErrOffsetOutOfRange = fmt.Errorf("tbtree: %w", embedded.ErrOffsetOutOfRange)
var ErrReadersNotClosed = errors.New("tbtree: readers not closed")
var ErrReadingFileContent = errors.New("tbtree: error reading required file content")
var ErrSnapshotsNotClosed = errors.New("tbtree: snapshots not closed")
var ErrTargetPathAlreadyExists = errors.New("tbtree: target folder already exists")
var ErrorMaxKeySizeExceeded = errors.New("tbtree: max key size exceeded")
var ErrorMaxValueSizeExceeded = errors.New("tbtree: max value size exceeded")
var ErrorPathIsNotADirectory = errors.New("tbtree: path is not a directory")
var ErrorToManyActiveSnapshots = errors.New("tbtree: max active snapshots limit reached")
Functions ¶
This section is empty.
Types ¶
type AppFactoryFunc ¶ added in v1.0.5
type AppFactoryFunc func( rootPath string, subPath string, opts *multiapp.Options, ) (appendable.Appendable, error)
type HistoryReader ¶ added in v0.9.1
type HistoryReader struct {
// contains filtered or unexported fields
}
func (*HistoryReader) Close ¶ added in v0.9.1
func (r *HistoryReader) Close() error
func (*HistoryReader) Read ¶ added in v0.9.1
func (r *HistoryReader) Read() (tss []uint64, err error)
type HistoryReaderSpec ¶ added in v0.9.1
type Options ¶
type Options struct {
// contains filtered or unexported fields
}
func DefaultOptions ¶
func DefaultOptions() *Options
func (*Options) WithAppFactory ¶ added in v1.0.5
func (opts *Options) WithAppFactory(appFactory AppFactoryFunc) *Options
func (*Options) WithCacheSize ¶
func (*Options) WithCleanupPercentage ¶ added in v1.2.3
func (*Options) WithCommitLogMaxOpenedFiles ¶ added in v1.2.3
func (*Options) WithCompactionThld ¶ added in v0.9.2
func (*Options) WithDelayDuringCompaction ¶ added in v0.9.2
func (*Options) WithFileSize ¶
func (*Options) WithFlushBufferSize ¶ added in v1.2.3
func (*Options) WithFlushThld ¶
func (*Options) WithHistoryLogMaxOpenedFiles ¶ added in v1.2.3
func (*Options) WithLogger ¶ added in v1.2.4
func (*Options) WithMaxActiveSnapshots ¶
func (*Options) WithMaxKeySize ¶ added in v1.2.4
func (*Options) WithMaxNodeSize ¶
func (*Options) WithMaxValueSize ¶ added in v1.2.4
func (*Options) WithNodesLogMaxOpenedFiles ¶ added in v1.2.3
func (*Options) WithReadOnly ¶
func (*Options) WithRenewSnapRootAfter ¶
func (*Options) WithSyncThld ¶ added in v1.2.3
type Reader ¶
type Reader struct {
// contains filtered or unexported fields
}
func (*Reader) ReadBetween ¶ added in v1.3.0
type ReaderSpec ¶
type Snapshot ¶
type Snapshot struct {
// contains filtered or unexported fields
}
Snapshot implements a snapshot on top of a B-tree data structure. It provides methods for storing and retrieving key-value pairs. The snapshot maintains a consistent view of the underlying data structure. It uses a lock to ensure concurrent access safety. Snapshot represents a consistent view of a B-tree data structure.
func (*Snapshot) Close ¶
Close closes the snapshot and releases any associated resources. It locks the snapshot for writing, checks if there are any active readers, and marks the snapshot as closed. The method returns an error if there are active readers. Example usage:
err := snapshot.Close()
func (*Snapshot) Get ¶
Get retrieves the value associated with the given key from the snapshot. It locks the snapshot for reading, and delegates the retrieval to the root node. The method returns the value, timestamp, hash count, and an error. Example usage:
value, timestamp, hashCount, err := snapshot.Get([]byte("key"))
func (*Snapshot) GetWithPrefix ¶ added in v1.5.0
func (s *Snapshot) GetWithPrefix(prefix []byte, neq []byte) (key []byte, value []byte, ts uint64, hc uint64, err error)
GetWithPrefix retrieves the key-value pair with a specific prefix from the snapshot. It locks the snapshot for reading, and delegates the retrieval to the root node. The method returns the key, value, timestamp, hash count, and an error. Example usage:
key, value, timestamp, hashCount, err := snapshot.GetWithPrefix([]byte("prefix"), []byte("neq"))
func (*Snapshot) History ¶ added in v0.9.1
func (s *Snapshot) History(key []byte, offset uint64, descOrder bool, limit int) (tss []uint64, hCount uint64, err error)
History retrieves the history of a key in the snapshot. It locks the snapshot for reading, and delegates the history retrieval to the root node. The method returns an array of timestamps, the hash count, and an error. Example usage:
timestamps, hashCount, err := snapshot.History([]byte("key"), 0, true, 10)
func (*Snapshot) NewHistoryReader ¶ added in v0.9.1
func (s *Snapshot) NewHistoryReader(spec *HistoryReaderSpec) (*HistoryReader, error)
NewHistoryReader creates a new history reader for the snapshot. It locks the snapshot for reading and creates a new history reader based on the given specification. The method returns the history reader and an error if the creation fails. Example usage:
reader, err := snapshot.NewHistoryReader(&HistoryReaderSpec{Key: []byte("key"), Limit: 10})
func (*Snapshot) NewReader ¶ added in v0.9.1
func (s *Snapshot) NewReader(spec ReaderSpec) (r *Reader, err error)
NewReader creates a new reader for the snapshot. It locks the snapshot for writing and creates a new reader based on the given specification. The method returns the reader and an error if the creation fails. Example usage:
reader, err := snapshot.NewReader(ReaderSpec{Prefix: []byte("prefix"), DescOrder: true})
func (*Snapshot) Set ¶ added in v1.2.0
Set inserts a key-value pair into the snapshot. It locks the snapshot, performs the insertion, and updates the root node if necessary. The method handles splitting of nodes to maintain the B-tree structure. It returns an error if the insertion fails. Example usage:
err := snapshot.Set([]byte("key"), []byte("value"))
func (*Snapshot) Ts ¶
Ts returns the timestamp associated with the root node of the snapshot. It locks the snapshot for reading and returns the timestamp. Example usage:
timestamp := snapshot.Ts()
func (*Snapshot) WriteTo ¶
func (s *Snapshot) WriteTo(nw, hw io.Writer, writeOpts *WriteOpts) (rootOffset, minOffset int64, wN, wH int64, err error)
WriteTo writes the snapshot to the specified writers. It locks the snapshot for writing, performs the write operation on the root node, and returns the root offset, minimum offset, number of bytes written to nw and hw, and an error if any.
Parameters: - nw: The writer to write the snapshot's nodes. - hw: The writer to write the snapshot's history. - writeOpts: The options for the write operation.
Returns: - rootOffset: The offset of the root node in the written data. - minOffset: The minimum offset of all written nodes. - wN: The number of bytes written to nw. - wH: The number of bytes written to hw. - err: An error if the write operation fails or the arguments are invalid.
Example usage:
rootOffset, minOffset, wN, wH, err := snapshot.WriteTo(nw, hw, &WriteOpts{})
type TBtree ¶
type TBtree struct {
// contains filtered or unexported fields
}
TBTree implements a timed-btree
func OpenWith ¶
func OpenWith(path string, nLog, hLog, cLog appendable.Appendable, opts *Options) (*TBtree, error)
func (*TBtree) BulkInsert ¶
BulkInsert inserts multiple entries atomically. It is possible to specify a logical timestamp for each entry. Timestamps with zero will be associated with the current time plus one. The specified timestamp must be greater than the root's current timestamp. Timestamps must be increased by one for each additional entry for a key.
func (*TBtree) GetOptions ¶ added in v0.9.1
func (*TBtree) GetWithPrefix ¶ added in v1.5.0
func (*TBtree) IncreaseTs ¶ added in v1.2.3
func (*TBtree) SnapshotCount ¶ added in v1.0.5
SnapshotCount returns the number of stored snapshots Note: snapshotCount(compact(t)) = 1
func (*TBtree) SnapshotMustIncludeTs ¶ added in v1.5.0
func (*TBtree) SnapshotMustIncludeTsWithRenewalPeriod ¶ added in v1.5.0
func (t *TBtree) SnapshotMustIncludeTsWithRenewalPeriod(ts uint64, renewalPeriod time.Duration) (*Snapshot, error)
SnapshotMustIncludeTsWithRenewalPeriod returns a new snapshot based on an existent dumped root (snapshot reuse). Current root may be dumped if there are no previous root already stored on disk or if the dumped one was old enough. If ts is 0, any snapshot not older than renewalPeriod may be used. If renewalPeriod is 0, renewal period is not taken into consideration