#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!
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 {
* 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. ***/