forked from dgraph-io/badger
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce ManagedDB struct to perform managed transactions.
This is a bit of a cleanup of dgraph-io#280 (committed as 1d8f9b1) * Make ManagedTxns option private, so that it can be set only within the package. * Introduce a separate struct ManagedDB, which embeds badger.DB. * Introduce ManagedDB.NewTransaction() and ManagedDB.NewTransactionAt() methods. * Introduce Txn.CommitAt, applicable only to ManageDB.
- Loading branch information
1 parent
9a3390d
commit 436e090
Showing
6 changed files
with
92 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* | ||
* Copyright 2017 Dgraph Labs, Inc. and Contributors | ||
* | ||
* 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. | ||
*/ | ||
|
||
package badger | ||
|
||
// ManagedDB allows end users to manage the transactions themselves. Transaction | ||
// start and commit timestamps are set by end-user. | ||
// | ||
// This is only useful for databases built on top of Badger (like Dgraph), and | ||
// can be ignored by most users. | ||
// | ||
// WARNING: This is an experimental feature and may be changed significantly in | ||
// a future release. So please proceed with caution. | ||
type ManagedDB struct { | ||
*DB | ||
} | ||
|
||
// OpenManaged returns a new ManagedDB, which allows more control over setting | ||
// transaction timestamps. | ||
// | ||
// This is only useful for databases built on top of Badger (like Dgraph), and | ||
// can be ignored by most users. | ||
func OpenManaged(opts Options) (*ManagedDB, error) { | ||
opts.managedTxns = true | ||
db, err := Open(opts) | ||
if err != nil { | ||
return nil, err | ||
} | ||
return &ManagedDB{db}, nil | ||
} | ||
|
||
// NewTransaction overrides DB.NewTransaction() and panics when invoked. Use | ||
// NewTransactionAt() instead. | ||
func (db *ManagedDB) NewTransaction(update bool) { | ||
panic("Cannot use NewTransaction() for ManagedDB. Use NewTransactionAt() instead.") | ||
} | ||
|
||
// 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 *ManagedDB) NewTransactionAt(readTs uint64, update bool) *Txn { | ||
txn := db.DB.NewTransaction(update) | ||
txn.readTs = readTs | ||
return txn | ||
} | ||
|
||
// CommitAt commits the transaction, following the same logic as Commit(), but | ||
// at the given commit timestamp. This will panic if not used with ManagedDB. | ||
// | ||
// 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("CommitAt() can only be used with ManagedDB. Use Commit() instead.") | ||
} | ||
txn.commitTs = commitTs | ||
return txn.Commit(callback) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters