From ce7d00ac1642d84c1d9111156a544c37801c5adf Mon Sep 17 00:00:00 2001 From: lvshuhua Date: Wed, 7 Dec 2016 15:47:47 +0800 Subject: [PATCH] rgw: fix versioned bucket data sync fail when upload is busy Fixes: http://tracker.ceph.com/issues/18208 Signed-off-by: lvshuhua --- src/rgw/rgw_data_sync.cc | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 48276e79150e..607cd6be374e 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -2416,7 +2416,7 @@ class RGWBucketShardIncrementalSyncCR : public RGWCoroutine { boost::intrusive_ptr lease_cr; list list_result; list::iterator entries_iter; - map > squash_map; + map, pair > squash_map; rgw_bucket_shard_inc_sync_marker& inc_marker; rgw_obj_key key; rgw_bi_log_entry *entry{nullptr}; @@ -2476,11 +2476,8 @@ int RGWBucketShardIncrementalSyncCR::operate() if (e.state != CLS_RGW_STATE_COMPLETE) { continue; } - auto& squash_entry = squash_map[e.object]; - if (squash_entry.first == e.timestamp && - e.op == CLS_RGW_OP_DEL) { - squash_entry.second = e.op; - } else if (squash_entry.first < e.timestamp) { + auto& squash_entry = squash_map[make_pair(e.object, e.instance)]; + if (squash_entry.first <= e.timestamp) { squash_entry = make_pair<>(e.timestamp, e.op); } } @@ -2533,7 +2530,7 @@ int RGWBucketShardIncrementalSyncCR::operate() marker_tracker.try_update_high_marker(cur_id, 0, entry->timestamp); continue; } - if (make_pair<>(entry->timestamp, entry->op) != squash_map[entry->object]) { + if (make_pair<>(entry->timestamp, entry->op) != squash_map[make_pair(entry->object, entry->instance)]) { set_status() << "squashed operation, skipping"; ldout(sync_env->cct, 20) << "[inc sync] skipping object: " << bucket_shard_str{bs} << "/" << key << ": squashed operation" << dendl; -- 2.47.3