Skip to content

Commit

Permalink
osd/PrimaryLogPG: do not use approx_size() for log trimming
Browse files Browse the repository at this point in the history
There might be holes on log versions, thus the approx_size()
should (almost) always overestimate the actual number of log entries.
As a result, we might be at the risk of accessing violation
while searching for the oldest log entry to keep in the log list later.

Fix the above problem by counting the precise number of current
log entries instead.

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
  • Loading branch information
xiexingguo committed Oct 17, 2017
1 parent 3455a38 commit 024b5bc
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/osd/PrimaryLogPG.cc
Expand Up @@ -1539,10 +1539,11 @@ void PrimaryLogPG::calc_trim_to()
eversion_t limit = MIN(
min_last_complete_ondisk,
pg_log.get_can_rollback_to());
size_t log_size = pg_log.get_log().log.size();
if (limit != eversion_t() &&
limit != pg_trim_to &&
pg_log.get_log().approx_size() > target) {
size_t num_to_trim = pg_log.get_log().approx_size() - target;
log_size > target) {
size_t num_to_trim = log_size - target;
if (num_to_trim < cct->_conf->osd_pg_log_trim_min) {
return;
}
Expand Down

0 comments on commit 024b5bc

Please sign in to comment.