From: Casey Bodley Date: Thu, 25 Apr 2019 13:58:31 +0000 (-0400) Subject: rgw: data/bilog trimming tracks min markers as strings X-Git-Tag: v14.2.5~110^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4c46245fc531ec97065992983734125e698fd8c4;p=ceph.git rgw: data/bilog trimming tracks min markers as strings Signed-off-by: Casey Bodley (cherry picked from commit f758f7c133135a14cd28a12f3860195ce58c1351) Conflicts: src/rgw/rgw_trim_datalog.cc moved from rgw_data_sync.cc --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 4c1cc9f68e5..bd6c4b50a47 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -3545,14 +3545,6 @@ const std::string& get_stable_marker(const rgw_data_sync_marker& m) return m.state == m.FullSync ? m.next_step_marker : m.marker; } -/// comparison operator for take_min_markers() -bool operator<(const rgw_data_sync_marker& lhs, - const rgw_data_sync_marker& rhs) -{ - // sort by stable marker - return get_stable_marker(lhs) < get_stable_marker(rhs); -} - /// populate the container starting with 'dest' with the minimum stable marker /// of each shard for all of the peers in [first, last) template @@ -3561,18 +3553,12 @@ void take_min_markers(IterIn first, IterIn last, IterOut dest) if (first == last) { return; } - // initialize markers with the first peer's - auto m = dest; - for (auto &shard : first->sync_markers) { - *m = std::move(shard.second); - ++m; - } - // for remaining peers, replace with smaller markers - for (auto p = first + 1; p != last; ++p) { - m = dest; + for (auto p = first; p != last; ++p) { + auto m = dest; for (auto &shard : p->sync_markers) { - if (shard.second < *m) { - *m = std::move(shard.second); + const auto& stable = get_stable_marker(shard.second); + if (*m > stable) { + *m = stable; } ++m; } @@ -3587,7 +3573,7 @@ class DataLogTrimCR : public RGWCoroutine { const int num_shards; const std::string& zone_id; //< my zone id std::vector peer_status; //< sync status for each peer - std::vector min_shard_markers; //< min marker per shard + std::vector min_shard_markers; //< min marker per shard std::vector& last_trim; //< last trimmed marker per shard int ret{0}; @@ -3651,16 +3637,15 @@ int DataLogTrimCR::operate() for (int i = 0; i < num_shards; i++) { const auto& m = min_shard_markers[i]; - auto& stable = get_stable_marker(m); - if (stable <= last_trim[i]) { + if (m <= last_trim[i]) { continue; } ldout(cct, 10) << "trimming log shard " << i - << " at marker=" << stable + << " at marker=" << m << " last_trim=" << last_trim[i] << dendl; using TrimCR = RGWSyncLogTrimCR; spawn(new TrimCR(store, store->data_log->get_oid(i), - stable, &last_trim[i]), + m, &last_trim[i]), true); } }