]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
filer: generalize file_to_extents to take a format string
authorSage Weil <sage@inktank.com>
Mon, 1 Oct 2012 23:00:28 +0000 (16:00 -0700)
committerSage Weil <sage@inktank.com>
Mon, 15 Oct 2012 22:34:03 +0000 (15:34 -0700)
Allow any format string to be used, so long as it takes a long long
unsigned.

Signed-off-by: Sage Weil <sage@inktank.com>
src/osdc/Filer.cc
src/osdc/Filer.h

index 658673e0a50c230992ff29899e833bf6fa5042c5..dde88ee84e315811c7e9e7e8fd15718a228fb9c0 100644 (file)
@@ -309,14 +309,14 @@ void Filer::_do_purge_range(PurgeRange *pr, int fin)
 #undef dout_prefix
 #define dout_prefix *_dout << "filer "
 
-void Filer::file_to_extents(CephContext *cct, inodeno_t ino,
+void Filer::file_to_extents(CephContext *cct, const char *object_format,
                            ceph_file_layout *layout,
                            uint64_t offset, uint64_t len,
                            vector<ObjectExtent>& extents)
 {
   ldout(cct, 10) << "file_to_extents " << offset << "~" << len 
-           << " on " << hex << ino << dec
-           << dendl;
+                << " format " << object_format
+                << dendl;
   assert(len > 0);
 
   /* we want only one extent per object!
@@ -343,8 +343,11 @@ void Filer::file_to_extents(CephContext *cct, inodeno_t ino,
     uint64_t objectno = objectsetno * stripe_count + stripepos;  // object id
     
     // find oid, extent
+    char buf[strlen(object_format) + 32];
+    snprintf(buf, sizeof(buf), object_format, (long long unsigned)objectno);
+    object_t oid = buf;
+
     ObjectExtent *ex = 0;
-    object_t oid = file_object_t(ino, objectno);
     if (object_extents.count(oid)) 
       ex = &object_extents[oid];
     else {
index c78205bba720d46a165f434cede371afbb99cc05..0cca029a3fcf2bf4b19c349aea096348afb4ad6a 100644 (file)
@@ -100,12 +100,21 @@ class Filer {
    * map (ino, layout, offset, len) to a (list of) OSDExtents (byte
    * ranges in objects on (primary) osds)
    */
-  static void file_to_extents(CephContext *cct, inodeno_t ino,
+  static void file_to_extents(CephContext *cct, const char *object_format,
                              ceph_file_layout *layout,
                              uint64_t offset, uint64_t len,
                              vector<ObjectExtent>& extents);
 
+  static void file_to_extents(CephContext *cct, inodeno_t ino,
+                             ceph_file_layout *layout,
+                             uint64_t offset, uint64_t len,
+                             vector<ObjectExtent>& extents) {
+    // generate prefix/format
+    char buf[32];
+    snprintf(buf, sizeof(buf), "%llx.%%08llx", (long long unsigned)ino);
 
+    file_to_extents(cct, buf, layout, offset, len, extents);
+  }
   
 
   /*** async file interface.  scatter/gather as needed. ***/