diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 48276e79150..607cd6be374 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;