From: Samuel Just Date: Wed, 23 Jan 2013 20:18:31 +0000 (-0800) Subject: ReplicatedPG: correctly handle omap key larger than max chunk X-Git-Tag: v0.57~144^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c3dec3e30a85ecad0090c75a38f28cb83e36232e;p=ceph.git ReplicatedPG: correctly handle omap key larger than max chunk Backport: bobtail Signed-off-by: Samuel Just --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 2cc01a6d4114..80eec2e16fc0 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5561,10 +5561,15 @@ int ReplicatedPG::send_push(int prio, int peer, for (iter->lower_bound(progress.omap_recovered_to); iter->valid(); iter->next()) { - if (available < (iter->key().size() + iter->value().length())) + if (!subop->omap_entries.empty() && + available <= (iter->key().size() + iter->value().length())) break; subop->omap_entries.insert(make_pair(iter->key(), iter->value())); - available -= (iter->key().size() + iter->value().length()); + + if ((iter->key().size() + iter->value().length()) <= available) + available -= (iter->key().size() + iter->value().length()); + else + available = 0; } if (!iter->valid()) new_progress.omap_complete = true;