summaryrefslogtreecommitdiffstats
path: root/include/framework/reconstruction/TieringPolicy.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/framework/reconstruction/TieringPolicy.h')
-rw-r--r--include/framework/reconstruction/TieringPolicy.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/include/framework/reconstruction/TieringPolicy.h b/include/framework/reconstruction/TieringPolicy.h
index ce8130e..55f5f47 100644
--- a/include/framework/reconstruction/TieringPolicy.h
+++ b/include/framework/reconstruction/TieringPolicy.h
@@ -21,8 +21,8 @@ class TieringPolicy : public ReconstructionPolicy<ShardType, QueryType> {
LevelVector;
public:
- TieringPolicy(size_t scale_factor, size_t buffer_size)
- : m_scale_factor(scale_factor), m_buffer_size(buffer_size) {}
+ TieringPolicy(size_t scale_factor, size_t buffer_size, size_t modifier=0)
+ : m_scale_factor(scale_factor), m_buffer_size(buffer_size), m_size_modifier(modifier) {}
std::vector<ReconstructionVector> get_reconstruction_tasks(
const Version<ShardType, QueryType> *version, LockManager &lock_mngr) const override {
@@ -34,7 +34,7 @@ public:
ReconstructionVector reconstructions;
auto levels = version->get_structure()->get_level_vector();
- level_index target_level = find_reconstruction_target(levels);
+ level_index target_level = find_reconstruction_target(levels, version->get_structure()->get_record_count());
assert(target_level != -1);
level_index source_level = 0;
@@ -60,11 +60,11 @@ public:
}
private:
- level_index find_reconstruction_target(LevelVector &levels) const {
+ level_index find_reconstruction_target(LevelVector &levels, size_t reccnt) const {
level_index target_level = invalid_level_idx;
for (level_index i = 1; i < (level_index)levels.size(); i++) {
- if (levels[i]->get_shard_count() + 1 <= capacity()) {
+ if (levels[i]->get_shard_count() + 1 <= capacity(reccnt)) {
target_level = i;
break;
}
@@ -73,9 +73,10 @@ private:
return target_level;
}
- inline size_t capacity() const { return m_scale_factor; }
+ inline size_t capacity(size_t reccnt) const { return m_scale_factor * std::pow(std::log(reccnt), m_size_modifier); }
size_t m_scale_factor;
size_t m_buffer_size;
+ size_t m_size_modifier;
};
} // namespace de