read_callback.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. #pragma once
  6. #include "db/dbformat.h"
  7. #include "rocksdb/types.h"
  8. namespace ROCKSDB_NAMESPACE {
  9. class ReadCallback {
  10. public:
  11. explicit ReadCallback(SequenceNumber last_visible_seq)
  12. : max_visible_seq_(last_visible_seq) {}
  13. ReadCallback(SequenceNumber last_visible_seq, SequenceNumber min_uncommitted)
  14. : max_visible_seq_(last_visible_seq), min_uncommitted_(min_uncommitted) {}
  15. virtual ~ReadCallback() {}
  16. // Will be called to see if the seq number visible; if not it moves on to
  17. // the next seq number.
  18. virtual bool IsVisibleFullCheck(SequenceNumber seq) = 0;
  19. inline bool IsVisible(SequenceNumber seq) {
  20. assert(min_uncommitted_ > 0);
  21. assert(min_uncommitted_ >= kMinUnCommittedSeq);
  22. if (seq < min_uncommitted_) { // handles seq == 0 as well
  23. assert(seq <= max_visible_seq_);
  24. return true;
  25. } else if (max_visible_seq_ < seq) {
  26. assert(seq != 0);
  27. return false;
  28. } else {
  29. assert(seq != 0); // already handled in the first if-then clause
  30. return IsVisibleFullCheck(seq);
  31. }
  32. }
  33. inline SequenceNumber max_visible_seq() { return max_visible_seq_; }
  34. // Refresh to a more recent visible seq
  35. virtual void Refresh(SequenceNumber seq) { max_visible_seq_ = seq; }
  36. protected:
  37. // The max visible seq, it is usually the snapshot but could be larger if
  38. // transaction has its own writes written to db.
  39. SequenceNumber max_visible_seq_ = kMaxSequenceNumber;
  40. // Any seq less than min_uncommitted_ is committed.
  41. const SequenceNumber min_uncommitted_ = kMinUnCommittedSeq;
  42. };
  43. } // namespace ROCKSDB_NAMESPACE