]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_test_rados: generate mix of small and large xattrs
authorSage Weil <sage@redhat.com>
Wed, 3 Dec 2014 15:35:01 +0000 (07:35 -0800)
committerSage Weil <sage@redhat.com>
Wed, 17 Dec 2014 01:07:54 +0000 (17:07 -0800)
This ensures that we exercise the large xattr handling paths in the OSD.

(Specifically, we want to trigger DBObjectMap usage on EC objects so that
we can test the fix for #10171).

Signed-off-by: Sage Weil <sage@redhat.com>
src/test/osd/Object.h
src/test/osd/RadosModel.h

index 59b492f81e2677a918bdbd9c74436e2db5475566..bffb397cfb667af5d564fcd05430938b7ae52c32 100644 (file)
@@ -218,22 +218,28 @@ public:
 
 class AttrGenerator : public RandGenerator {
   uint64_t max_len;
+  uint64_t big_max_len;
 public:
-  AttrGenerator(uint64_t max_len) : max_len(max_len) {}
+  AttrGenerator(uint64_t max_len, uint64_t big_max_len)
+    : max_len(max_len), big_max_len(big_max_len) {}
   void get_ranges_map(
     const ContDesc &cont, map<uint64_t, uint64_t> &out) {
     out.insert(pair<uint64_t, uint64_t>(0, get_length(cont)));
   }
   uint64_t get_length(const ContDesc &in) {
     RandWrap rand(in.seqnum);
-    return (rand() % max_len);
+    // make some attrs big
+    if (in.seqnum & 3)
+      return (rand() % max_len);
+    else
+      return (rand() % big_max_len);
   }
   bufferlist gen_bl(const ContDesc &in) {
     bufferlist bl;
     for (iterator i = get_iterator(in); !i.end(); ++i) {
       bl.append(*i);
     }
-    assert(bl.length() < max_len);
+    assert(bl.length() < big_max_len);
     return bl;
   }
 };
index 5a026b29d104f7356dad7c79ff62db51b5da647d..a80c10570640190e12a0fd4577f4b92a8b140385 100644 (file)
@@ -205,7 +205,7 @@ public:
     rados_id(id), initialized(false),
     max_size(max_size), 
     min_stride_size(min_stride_size), max_stride_size(max_stride_size),
-    attr_gen(2000),
+    attr_gen(2000, 20000),
     no_omap(no_omap),
     pool_snaps(pool_snaps),
     snapname_num(0)