]> git.apps.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>
Sat, 26 Jan 2013 01:23:33 +0000 (17:23 -0800)
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
(cherry picked from commit c3dec3e30a85ecad0090c75a38f28cb83e36232e)

src/osd/ReplicatedPG.cc

index 2e503d06862224f2ae363b3534ebe3d75837096a..61522db832d4cf09592b152ded8fb4443af18423 100644 (file)
@@ -5559,10 +5559,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;