snapshot_checker.cc 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
  2. // This source code is licensed under both the GPLv2 (found in the
  3. // COPYING file in the root directory) and Apache 2.0 License
  4. // (found in the LICENSE.Apache file in the root directory).
  5. #include "db/snapshot_checker.h"
  6. #include "port/lang.h"
  7. #include "utilities/transactions/write_prepared_txn_db.h"
  8. namespace ROCKSDB_NAMESPACE {
  9. WritePreparedSnapshotChecker::WritePreparedSnapshotChecker(
  10. WritePreparedTxnDB* txn_db)
  11. : txn_db_(txn_db) {}
  12. SnapshotCheckerResult WritePreparedSnapshotChecker::CheckInSnapshot(
  13. SequenceNumber sequence, SequenceNumber snapshot_sequence) const {
  14. bool snapshot_released = false;
  15. // TODO(myabandeh): set min_uncommitted
  16. bool in_snapshot = txn_db_->IsInSnapshot(
  17. sequence, snapshot_sequence, kMinUnCommittedSeq, &snapshot_released);
  18. if (snapshot_released) {
  19. return SnapshotCheckerResult::kSnapshotReleased;
  20. }
  21. return in_snapshot ? SnapshotCheckerResult::kInSnapshot
  22. : SnapshotCheckerResult::kNotInSnapshot;
  23. }
  24. DisableGCSnapshotChecker* DisableGCSnapshotChecker::Instance() {
  25. STATIC_AVOID_DESTRUCTION(DisableGCSnapshotChecker, instance);
  26. return &instance;
  27. }
  28. bool DataIsDefinitelyInSnapshot(SequenceNumber seqno, SequenceNumber snapshot,
  29. const SnapshotChecker* snapshot_checker) {
  30. return ((seqno) <= (snapshot) &&
  31. (snapshot_checker == nullptr ||
  32. LIKELY(snapshot_checker->CheckInSnapshot((seqno), (snapshot)) ==
  33. SnapshotCheckerResult::kInSnapshot)));
  34. }
  35. bool DataIsDefinitelyNotInSnapshot(SequenceNumber seqno,
  36. SequenceNumber snapshot,
  37. const SnapshotChecker* snapshot_checker) {
  38. return ((seqno) > (snapshot) ||
  39. (snapshot_checker != nullptr &&
  40. UNLIKELY(snapshot_checker->CheckInSnapshot((seqno), (snapshot)) ==
  41. SnapshotCheckerResult::kNotInSnapshot)));
  42. }
  43. } // namespace ROCKSDB_NAMESPACE