]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdc/Striper: test zero-length add_partial_result
authorSage Weil <sage@inktank.com>
Tue, 28 Jan 2014 18:09:17 +0000 (10:09 -0800)
committerSage Weil <sage@inktank.com>
Tue, 28 Jan 2014 18:30:48 +0000 (10:30 -0800)
If we add a partial result that is 0-length, we used to hit an assert in
buffer::list::splice().  Add a unit test to verify the fix.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
(cherry picked from commit 28c7388d320a47657c2e12c46907f1bf40672b08)

src/test/test_striper.cc

index 262fba326aa7a2ae3353fc053a09636683aaae5c..2e6b0bc47622d084f2acf806464c1151846a0833 100644 (file)
@@ -26,6 +26,37 @@ TEST(Striper, Stripe1)
   ASSERT_EQ(94208u, ex[2].truncate_size);
 }
 
+TEST(Striper, EmptyPartialResult)
+{
+  ceph_file_layout l;
+  memset(&l, 0, sizeof(l));
+
+  l.fl_object_size = 4194304;
+  l.fl_stripe_unit = 4194304;
+  l.fl_stripe_count = 1;
+
+  vector<ObjectExtent> ex;
+  Striper::file_to_extents(g_ceph_context, 1, &l, 725549056, 131072, 72554905600, ex);
+  cout << "ex " << ex << std::endl;
+  ASSERT_EQ(2u, ex.size());
+
+  Striper::StripedReadResult r;
+
+  bufferlist bl;
+  r.add_partial_result(g_ceph_context, bl, ex[1].buffer_extents);
+
+  bufferptr bp(65536);
+  bp.zero();
+  bl.append(bp);
+
+  r.add_partial_result(g_ceph_context, bl, ex[0].buffer_extents);
+
+  bufferlist outbl;
+  r.assemble_result(g_ceph_context, outbl, false);
+
+  ASSERT_EQ(65536, outbl.length());
+}
+
 
 
 int main(int argc, char **argv)