mirror of
https://github.com/luxfi/zapdb.git
synced 2026-10-30 15:12:20 +00:00
The module has been github.com/luxfi/zapdb for a while, but the package inside it still declared itself badger, so every consumer had to write zapdb "github.com/luxfi/zapdb" // package badger and the alias existed only to paper over the mismatch. 56 root files and the 134 qualified references inside the repo now say zapdb. Backward compatible in both directions: an existing consumer with the alias keeps compiling (the alias is now merely redundant), and one without it starts compiling instead of failing on an undefined zapdb. Directory badger/ and its cmd package are untouched — that is the CLI, and its binary is named badger. Build and vet clean; suite green except TestZRestore, which wants a /tmp/zb/src benchmark fixture and fails identically without this change. Co-authored-by: Hanzo Dev <[email protected]>
79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
/*
|
|
* SPDX-FileCopyrightText: © 2017-2025 Istari Digital, Inc.
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package zapdb
|
|
|
|
// OpenManaged returns a new DB, which allows more control over setting
|
|
// transaction timestamps, aka managed mode.
|
|
//
|
|
// This is only useful for databases built on top of Badger (like Dgraph), and
|
|
// can be ignored by most users.
|
|
func OpenManaged(opts Options) (*DB, error) {
|
|
opts.managedTxns = true
|
|
return Open(opts)
|
|
}
|
|
|
|
// NewTransactionAt follows the same logic as DB.NewTransaction(), but uses the
|
|
// provided read timestamp.
|
|
//
|
|
// This is only useful for databases built on top of Badger (like Dgraph), and
|
|
// can be ignored by most users.
|
|
func (db *DB) NewTransactionAt(readTs uint64, update bool) *Txn {
|
|
if !db.opt.managedTxns {
|
|
panic("Cannot use NewTransactionAt with managedDB=false. Use NewTransaction instead.")
|
|
}
|
|
txn := db.newTransaction(update, true)
|
|
txn.readTs = readTs
|
|
return txn
|
|
}
|
|
|
|
// NewWriteBatchAt is similar to NewWriteBatch but it allows user to set the commit timestamp.
|
|
// NewWriteBatchAt is supposed to be used only in the managed mode.
|
|
func (db *DB) NewWriteBatchAt(commitTs uint64) *WriteBatch {
|
|
if !db.opt.managedTxns {
|
|
panic("cannot use NewWriteBatchAt with managedDB=false. Use NewWriteBatch instead")
|
|
}
|
|
|
|
wb := db.newWriteBatch(true)
|
|
wb.commitTs = commitTs
|
|
wb.txn.commitTs = commitTs
|
|
return wb
|
|
}
|
|
func (db *DB) NewManagedWriteBatch() *WriteBatch {
|
|
if !db.opt.managedTxns {
|
|
panic("cannot use NewManagedWriteBatch with managedDB=false. Use NewWriteBatch instead")
|
|
}
|
|
|
|
wb := db.newWriteBatch(true)
|
|
return wb
|
|
}
|
|
|
|
// CommitAt commits the transaction, following the same logic as Commit(), but
|
|
// at the given commit timestamp. This will panic if not used with managed transactions.
|
|
//
|
|
// This is only useful for databases built on top of Badger (like Dgraph), and
|
|
// can be ignored by most users.
|
|
func (txn *Txn) CommitAt(commitTs uint64, callback func(error)) error {
|
|
if !txn.db.opt.managedTxns {
|
|
panic("Cannot use CommitAt with managedDB=false. Use Commit instead.")
|
|
}
|
|
txn.commitTs = commitTs
|
|
if callback == nil {
|
|
return txn.Commit()
|
|
}
|
|
txn.CommitWith(callback)
|
|
return nil
|
|
}
|
|
|
|
// SetDiscardTs sets a timestamp at or below which, any invalid or deleted
|
|
// versions can be discarded from the LSM tree, and thence from the value log to
|
|
// reclaim disk space. Can only be used with managed transactions.
|
|
func (db *DB) SetDiscardTs(ts uint64) {
|
|
if !db.opt.managedTxns {
|
|
panic("Cannot use SetDiscardTs with managedDB=false.")
|
|
}
|
|
db.orc.setDiscardTs(ts)
|
|
}
|