}
uint64_t divisor = pool.info.get_pg_num_divisor(info.pgid.pgid);
+ assert(divisor > 0);
uint64_t num_user_objects = info.stats.stats.sum.num_objects;
info.stats.stats.sum.num_objects;
dirty_micro =
num_dirty * avg_size * 1000000 /
- (pool.info.target_max_bytes / divisor);
+ MAX(pool.info.target_max_bytes / divisor, 1);
full_micro =
num_user_objects * avg_size * 1000000 /
- (pool.info.target_max_bytes / divisor);
+ MAX(pool.info.target_max_bytes / divisor, 1);
}
if (pool.info.target_max_objects) {
uint64_t dirty_objects_micro =
num_dirty * 1000000 /
- (pool.info.target_max_objects / divisor);
+ MAX(pool.info.target_max_objects / divisor, 1);
if (dirty_objects_micro > dirty_micro)
dirty_micro = dirty_objects_micro;
uint64_t full_objects_micro =
- num_user_objects * 1000000 / (pool.info.target_max_objects / divisor);
+ num_user_objects * 1000000 /
+ MAX(pool.info.target_max_objects / divisor, 1);
if (full_objects_micro > full_micro)
full_micro = full_objects_micro;
}
// set effort in [0..1] range based on where we are between
evict_mode = TierAgentState::EVICT_MODE_SOME;
uint64_t over = full_micro - evict_target;
- uint64_t span = 1000000 - evict_target;
+ uint64_t span;
+ if (evict_target >= 1000000)
+ span = 1;
+ else
+ span = 1000000 - evict_target;
evict_effort = MAX(over * 1000000 / span,
(unsigned)(1000000.0 * g_conf->osd_agent_min_evict_effort));