Zero  0.1.0
bf_tree_cleaner.h
Go to the documentation of this file.
1 /*
2  * (c) Copyright 2011-2014, Hewlett-Packard Development Company, LP
3  */
4 
5 #ifndef __BF_TREE_CLEANER_H
6 #define __BF_TREE_CLEANER_H
7 
8 #include "page_cleaner.h"
9 #include "bf_tree_cb.h"
10 #include <functional>
11 
16 enum class cleaner_policy {
19  oldest_lsn,
20  mixed,
22  lru,
23  no_policy
24 };
25 
32 
34 
36 
38 
39  uint16_t ref_count;
40 
42  page_lsn(cb.get_page_lsn()),
43  rec_lsn(cb.get_rec_lsn()),
44  idx(idx),
45  pid(cb._pid),
46  ref_count(cb._ref_count_ex) {}
47 
48  friend std::ostream& operator<<(std::ostream& out, const cleaner_cb_info& cb);
49 };
50 
52 using policy_predicate_t =
53 std::function<bool(const cleaner_cb_info&, const cleaner_cb_info&)>;
54 
56 public:
65  bf_tree_cleaner(const sm_options& _options);
66 
71  ~bf_tree_cleaner();
72 
73 protected:
74  virtual void do_work();
75 
77  policy_predicate_t get_policy_predicate(cleaner_policy p);
78 
79  bool ignore_min_write_now() const {
80  if (min_write_size <= 1) {
81  return true;
82  }
83  return min_write_ignore_freq > 0 &&
84  (get_rounds_completed() % min_write_ignore_freq == 0);
85  }
86 
87 private:
88  void collect_candidates();
89 
90  void clean_candidates();
91 
92  void flush_clusters(const vector<size_t>& clusters);
93 
94  bool latch_and_copy(PageID, bf_idx, size_t wpos);
95 
96  // Methods used by cleaning without a policy
97  void clean_no_policy();
98 
99  void flush_workspace_no_clusters(size_t count);
100 
104  vector<cleaner_cb_info> candidates;
105 
108 
110 
113 
114  // Ignore min write size every N rounds (0 for never)
116 };
117 
119  if (s == "highest_refcount") {
121  }
122  if (s == "lowest_refcount") {
124  }
125  if (s == "oldest_lsn") {
127  }
128  if (s == "mixed") {
129  return cleaner_policy::mixed;
130  }
131  if (s == "highest_density") {
133  }
134  if (s == "lru") {
135  return cleaner_policy::lru;
136  }
137  if (s == "no_policy") {
139  }
140  w_assert0(false);
141 }
142 
143 #endif // __BF_TREE_CLEANER_H
bool ignore_min_write_now() const
Definition: bf_tree_cleaner.h:79
lsn_t rec_lsn
Definition: bf_tree_cleaner.h:33
Control block in the new buffer pool class.
Definition: bf_tree_cb.h:53
size_t num_candidates
Cleaner policy options.
Definition: bf_tree_cleaner.h:107
lsn_t page_lsn
Definition: bf_tree_cleaner.h:31
size_t min_write_ignore_freq
Definition: bf_tree_cleaner.h:115
uint16_t ref_count
Definition: bf_tree_cleaner.h:39
Definition: page_cleaner.h:17
Start-up parameters for the storage engine. See OPTIONS.
Definition: sm_options.h:24
Definition: bf_tree_cleaner.h:30
uint32_t bf_idx
Definition: basics.h:56
uint32_t PageID
Definition: basics.h:45
#define w_assert0(x)
Default assert/debug level is 0.
Definition: w_base.h:175
Definition: bf_tree_cleaner.h:55
cleaner_cb_info(bf_idx idx, const bf_tree_cb_t &cb)
Definition: bf_tree_cleaner.h:41
Log Sequence Number. See Log Sequence Numbers (LSN).
Definition: lsn.h:243
bf_idx idx
Definition: bf_tree_cleaner.h:35
std::ostream & operator<<(std::ostream &os, const ConfigFile &cf)
Definition: confparser.cpp:83
cleaner_policy make_cleaner_policy(string s)
Definition: bf_tree_cleaner.h:118
std::function< bool(const cleaner_cb_info &, const cleaner_cb_info &)> policy_predicate_t
Definition: bf_tree_cleaner.h:53
PageID pid
Definition: bf_tree_cleaner.h:37
cleaner_policy policy
Definition: bf_tree_cleaner.h:109
vector< cleaner_cb_info > candidates
Definition: bf_tree_cleaner.h:104
size_t min_write_size
Only write out clusters of pages with this minimum size.
Definition: bf_tree_cleaner.h:112
cleaner_policy
Definition: bf_tree_cleaner.h:16