aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core/src/firebase/firestore/local
diff options
context:
space:
mode:
authorGravatar Greg Soltis <gsoltis@google.com>2018-03-26 11:57:34 -0700
committerGravatar GitHub <noreply@github.com>2018-03-26 11:57:34 -0700
commitf77ec68a8862bd03b430deff48022ffb179172b0 (patch)
treed6e39cc2ac36c1fb7433edc1372ec10a8064e593 /Firestore/core/src/firebase/firestore/local
parentacc5c456d39a1150bdb8658df60d215feff42f02 (diff)
Switch LevelDB MutationQueue and RemoteDocumentCache to use transactions (#968)
* Start work on leveldb transactions * Style * Working API. Not plumbed in yet * Move files into correct place * Wrangling file locations and associations * Tests pass * Add some comments * style * Fix copyright * Rewrite iterator internals to handle deletion-while-iterating. Also add tests for same * Switch to strings instead of slices * Style * More style fixes * Start switching writegroup over * Swap out write group tracking for transaction usage * Style * Response to feedback before updating docs * Style * Add comment * Initialize version_ * Satisfy the linter * Start switching writegroup over * Swap out write group tracking for transaction usage * Style * Checkpoint before implementing BatchDescription * Style * Initial plumbing for leveldb local parts * Add model::BatchId * Port leveldb_key.{h,cc} * Add string StartsWith * Add leveldb_key_test.cc to the project * Revert back to using leveldb::Slice for read/describe These operations universally operate on keys obtained from leveldb so it's actually unhelpful to force all the callers to make absl::string_views from them. * Everything passing * Drop unused function * Style * STart work on reads * Swap reads in queryCache to use transactions * Fix up tests of querycache * Drop commented out code * Cleanup * Style * Fix up for passing tests * style * Renaming * Style * Start work on ToString for transactions * Add ToString() method to LevelDbTransaction * Style * lint * Fix includes, drop runTransaction * current_transaction -> currentTransaction * LevelDbTransaction::NewIterator now returns a unique_ptr * Style * Revert addition of util::StartsWith * Add log line * Style * Add log line * Style * Add debug log line for commits, drop unused BatchDescription * STart work on reads * Swap reads in queryCache to use transactions * Start on remote documents * Transition mutation queue and remote documents to use transactions * Style * Make everything pass * Make everything pass * Make it compile * Style * Style * Revert name change, use DefaultReadOptions() * Style * Handle iterators returning bad statuses
Diffstat (limited to 'Firestore/core/src/firebase/firestore/local')
-rw-r--r--Firestore/core/src/firebase/firestore/local/leveldb_transaction.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/Firestore/core/src/firebase/firestore/local/leveldb_transaction.cc b/Firestore/core/src/firebase/firestore/local/leveldb_transaction.cc
index f7d39b2..966ccf2 100644
--- a/Firestore/core/src/firebase/firestore/local/leveldb_transaction.cc
+++ b/Firestore/core/src/firebase/firestore/local/leveldb_transaction.cc
@@ -71,8 +71,14 @@ void LevelDbTransaction::Iterator::UpdateCurrent() {
void LevelDbTransaction::Iterator::Seek(const std::string& key) {
db_iter_->Seek(key);
+ FIREBASE_ASSERT_MESSAGE(db_iter_->status().ok(),
+ "leveldb iterator reported an error: %s",
+ db_iter_->status().ToString().c_str());
for (; db_iter_->Valid() && IsDeleted(db_iter_->key()); db_iter_->Next()) {
}
+ FIREBASE_ASSERT_MESSAGE(db_iter_->status().ok(),
+ "leveldb iterator reported an error: %s",
+ db_iter_->status().ToString().c_str());
mutations_iter_ = txn_->mutations_.lower_bound(key);
UpdateCurrent();
last_version_ = txn_->version_;
@@ -109,6 +115,9 @@ void LevelDbTransaction::Iterator::AdvanceLDB() {
do {
db_iter_->Next();
} while (db_iter_->Valid() && IsDeleted(db_iter_->key()));
+ FIREBASE_ASSERT_MESSAGE(db_iter_->status().ok(),
+ "leveldb iterator reported an error: %s",
+ db_iter_->status().ToString().c_str());
}
void LevelDbTransaction::Iterator::Next() {