]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG: correctly handle omap key larger than max chunk
authorSamuel Just <sam.just@inktank.com>
Wed, 23 Jan 2013 20:18:31 +0000 (12:18 -0800)
committerSamuel Just <sam.just@inktank.com>
Wed, 23 Jan 2013 20:35:16 +0000 (12:35 -0800)
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc

index 2cc01a6d4114c3d41c9951008217b36f3a211838..80eec2e16fc08fc1ceb4b7e72c13b76801e16157 100644 (file)
@@ -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;