]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: make object_t a string
authorSage Weil <sage@newdream.net>
Wed, 3 Jun 2009 20:39:07 +0000 (13:39 -0700)
committerSage Weil <sage@newdream.net>
Wed, 3 Jun 2009 20:39:07 +0000 (13:39 -0700)
28 files changed:
src/client/SyntheticClient.cc
src/include/cstring.h
src/include/librados.h
src/include/object.h
src/include/rados.h
src/librados.cc
src/mds/CDir.h
src/mds/CInode.cc
src/mds/MDCache.cc
src/mds/MDSTable.cc
src/mds/SessionMap.cc
src/messages/MOSDOp.h
src/messages/MOSDOpReply.h
src/os/FileStore.cc
src/os/FileStore.h
src/os/ObjectStore.h
src/osd/Ager.cc
src/osd/Ager.h
src/osd/OSD.cc
src/osd/OSD.h
src/osd/OSDMap.h
src/osd/osd_types.h
src/osdc/Filer.cc
src/osdc/Filer.h
src/osdc/Journaler.cc
src/streamtest.cc
src/testrados.c
src/testradospp.cc

index 36c4ef3b7854bcfa27e6f3a30e429f584e222e7d..424012077fa552f9046176f1059672480bbfc87c 100644 (file)
@@ -1343,7 +1343,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only)
     else if (strcmp(op, "o_stat") == 0) {
       int64_t oh = t.get_int();
       int64_t ol = t.get_int();
-      object_t oid(oh, ol);
+      object_t oid = file_object_t(oh, ol);
       lock.Lock();
       ceph_object_layout layout = client->osdmap->make_object_layout(oid, CEPH_CASDATA_RULE);
       __u64 size;
@@ -1357,7 +1357,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only)
       int64_t ol = t.get_int();
       int64_t off = t.get_int();
       int64_t len = t.get_int();
-      object_t oid(oh, ol);
+      object_t oid = file_object_t(oh, ol);
       lock.Lock();
       ceph_object_layout layout = client->osdmap->make_object_layout(oid, CEPH_CASDATA_RULE);
       bufferlist bl;
@@ -1370,7 +1370,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only)
       int64_t ol = t.get_int();
       int64_t off = t.get_int();
       int64_t len = t.get_int();
-      object_t oid(oh, ol);
+      object_t oid = file_object_t(oh, ol);
       lock.Lock();
       ceph_object_layout layout = client->osdmap->make_object_layout(oid, CEPH_CASDATA_RULE);
       bufferptr bp(len);
@@ -1388,7 +1388,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only)
       int64_t ol = t.get_int();
       int64_t off = t.get_int();
       int64_t len = t.get_int();
-      object_t oid(oh, ol);
+      object_t oid = file_object_t(oh, ol);
       lock.Lock();
       ceph_object_layout layout = client->osdmap->make_object_layout(oid, CEPH_CASDATA_RULE);
       SnapContext snapc;
@@ -2146,7 +2146,7 @@ int SyntheticClient::create_objects(int nobj, int osize, int inflight)
   for (int i=start; i<end; i += inc) {
     if (time_to_stop()) break;
 
-    object_t oid(0x1000, i);
+    object_t oid = file_object_t(999, i);
     ceph_object_layout layout = client->osdmap->make_object_layout(oid, CEPH_CASDATA_RULE);
     SnapContext snapc;
     
@@ -2248,7 +2248,7 @@ int SyntheticClient::object_rw(int nobj, int osize, int wrpc,
     } else {
       o = (long)trunc(pow(r, rskew) * (double)nobj);  // exponentially skew towards 0
     }
-    object_t oid(0x1000, o);
+    object_t oid = file_object_t(999, o);
 
     ceph_object_layout layout = client->osdmap->make_object_layout(oid, CEPH_CASDATA_RULE);
     SnapContext snapc;
index 0307b854c4acfc19ff4030909fe1511dc18d7757..8d54f73f550d9868c1e2ce0430caa0d18bd4a218 100644 (file)
@@ -8,6 +8,10 @@
  * is stored with a null terminator, providing an efficient c_str()
  * method.
  */
+
+#include "buffer.h"
+#include "encoding.h"
+
 class cstring {
  private:
   int _len;
index 5da06166385c0e6bb8b1177845bf4742ea3d5a8f..685b5dc79524f64a3ed15298ef19c875b6ffc22f 100644 (file)
@@ -26,10 +26,10 @@ int rados_open_pool(const char *name, rados_pool_t *pool);
 int rados_close_pool(rados_pool_t pool);
 
 /* read/write objects */
-int rados_write(rados_pool_t pool, struct ceph_object *oid, off_t off, const char *buf, size_t len);
-int rados_read(rados_pool_t pool, struct ceph_object *oid, off_t off, char *buf, size_t len);
-int rados_remove(rados_pool_t pool, struct ceph_object *oid);
-int rados_exec(rados_pool_t pool, struct ceph_object *o, const char *cls, const char *method,
+int rados_write(rados_pool_t pool, const char *oid, off_t off, const char *buf, size_t len);
+int rados_read(rados_pool_t pool, const char *oid, off_t off, char *buf, size_t len);
+int rados_remove(rados_pool_t pool, const char *oid);
+int rados_exec(rados_pool_t pool, const char *o, const char *cls, const char *method,
               const char *in_buf, size_t in_len, char *buf, size_t out_len);
 
 /* async io */
@@ -42,8 +42,8 @@ int rados_aio_is_safe(rados_completion_t c);
 int rados_aio_get_return_value(rados_completion_t c);
 void rados_aio_release(rados_completion_t c);
 
-int rados_aio_write(rados_pool_t pool, struct ceph_object *oid, off_t off, const char *buf, size_t len, rados_completion_t *completion);
-int rados_aio_read(rados_pool_t pool, struct ceph_object *oid, off_t off, char *buf, size_t len, rados_completion_t *completion);
+int rados_aio_write(rados_pool_t pool, const char *oid, off_t off, const char *buf, size_t len, rados_completion_t *completion);
+int rados_aio_read(rados_pool_t pool, const char *oid, off_t off, char *buf, size_t len, rados_completion_t *completion);
 
 #ifdef __cplusplus
 }
index 5b70304f49d26cf0e49e40278ae6c9a25090e087..1907be8b5b0caab5facbdd554a5e09790bcc4752 100644 (file)
@@ -25,94 +25,76 @@ using namespace std;
 using namespace __gnu_cxx;
 
 #include "hash.h"
-
+#include "nstring.h"
 #include "encoding.h"
 
-
 struct object_t {
-  union {
-    __u8 raw[20];
-    struct {
-      uint64_t ino;    // "file" identifier
-      uint32_t bno;    // "block" in that "file"
-      uint64_t pad;
-    } __attribute__ ((packed));
-  } __attribute__ ((packed));
-
-  object_t() : ino(0), bno(0), pad(0) {}
-  object_t(uint64_t i, uint32_t b) : ino(i), bno(b), pad(0) {}
-
-  // IMPORTANT: make this match struct ceph_object ****
-  object_t(const ceph_object& co) {
-    ino = co.ino;
-    bno = co.bno;
-    pad = co.pad;
-  }  
-  operator ceph_object() {
-    ceph_object oid;
-    oid.ino = ino;
-    oid.bno = bno;
-    oid.pad = pad;
-    return oid;
-  }
+  nstring name;
+
+  object_t(const char *s = 0) : name(s) {}
+  
   void encode(bufferlist &bl) const {
-    ::encode(ino, bl);
-    ::encode(bno, bl);
-    ::encode(pad, bl);
+    ::encode(name, bl);
   }
   void decode(bufferlist::iterator &bl) {
-    __u64 i, r;
-    __u32 b;
-    ::decode(i, bl);
-    ::decode(b, bl);
-    ::decode(r, bl);
-    ino = i;
-    bno = b;
-    pad = r;
+    ::decode(name, bl);
   }
-} __attribute__ ((packed));
+};
 WRITE_CLASS_ENCODER(object_t)
 
 inline bool operator==(const object_t l, const object_t r) {
-  return memcmp(&l, &r, sizeof(l)) == 0;
+  return l.name == r.name;
 }
 inline bool operator!=(const object_t l, const object_t r) {
-  return memcmp(&l, &r, sizeof(l)) != 0;
+  return l.name != r.name;
 }
 inline bool operator>(const object_t l, const object_t r) {
-  return memcmp(&l, &r, sizeof(l)) > 0;
+  return l.name > r.name;
 }
 inline bool operator<(const object_t l, const object_t r) {
-  return memcmp(&l, &r, sizeof(l)) < 0;
+  return l.name < r.name;
 }
 inline bool operator>=(const object_t l, const object_t r) { 
-  return memcmp(&l, &r, sizeof(l)) >= 0;
+  return l.name >= r.name;
 }
 inline bool operator<=(const object_t l, const object_t r) {
-  return memcmp(&l, &r, sizeof(l)) <= 0;
+  return l.name <= r.name;
 }
 inline ostream& operator<<(ostream& out, const object_t o) {
-  out << hex;
-  out << o.ino << '.';
-  out.setf(ios::right);
-  out.fill('0');
-  out << setw(8) << o.bno;
-  out.unsetf(ios::right);
-  out << dec;
-  return out;
+  return out << o.name;
 }
 
 namespace __gnu_cxx {
   template<> struct hash<object_t> {
     size_t operator()(const object_t &r) const { 
-      static rjhash<uint64_t> H;
-      static rjhash<uint32_t> I;
-      return H(r.ino) ^ I(r.bno) ^ H(r.pad);
+      static hash<nstring> H;
+      return H(r.name);
     }
   };
 }
 
 
+struct file_object_t {
+  __u64 ino, bno;
+  mutable char buf[33];
+
+  file_object_t(__u64 i=0, __u64 b=0) : ino(i), bno(b) {
+    buf[0] = 0;
+  }
+  
+  const char *c_str() const {
+    if (!buf[0])
+      sprintf(buf, "%llx.%08llx", (long long unsigned)ino, (long long unsigned)bno);
+    return buf;
+  }
+
+  operator object_t() {
+    return object_t(c_str());
+  }
+};
+
+
+
 // ---------------------------
 // snaps
 
index df2d0ce3535f55b559206b744dcd56c1970e44c2..f33ac3f433989b8c1a39bde36427190542d3fada 100644 (file)
@@ -27,17 +27,6 @@ typedef __le64 ceph_snapid_t;
 #define CEPH_SNAPDIR ((__u64)(-1))
 #define CEPH_NOSNAP  ((__u64)(-2))
 
-struct ceph_object {
-       union {
-               __u8 raw[20];        /* fits a sha1 hash */
-               struct {
-                       __le64 ino;  /* inode "file" identifier */
-                       __le32 bno;  /* "block" (object) in that "file" */
-                       __le64 pad;
-               } __attribute__ ((packed));
-       };
-} __attribute__ ((packed));
-
 struct ceph_timespec {
        __le32 tv_sec;
        __le32 tv_nsec;
@@ -356,7 +345,6 @@ struct ceph_osd_op {
 struct ceph_osd_request_head {
        __le64                    tid;
        __le32                    client_inc;
-       struct ceph_object        oid;
        struct ceph_object_layout layout;
        __le32                    osdmap_epoch;
 
@@ -365,6 +353,7 @@ struct ceph_osd_request_head {
        struct ceph_timespec      mtime;
        struct ceph_eversion      reassert_version;
 
+       __le32 object_len;
        __le32 ticket_len;
 
        __le64 snapid;
@@ -372,22 +361,22 @@ struct ceph_osd_request_head {
        __le32 num_snaps;
 
        __le16 num_ops;
-       struct ceph_osd_op ops[];  /* followed by ticket, snaps */
+       struct ceph_osd_op ops[];  /* followed by ops[], object, ticket, snaps */
 } __attribute__ ((packed));
 
 struct ceph_osd_reply_head {
        __le64               tid;
        __le32               client_inc;
        __le32               flags;
-       struct ceph_object   oid;
        struct ceph_object_layout layout;
        __le32               osdmap_epoch;
        struct ceph_eversion reassert_version;
 
        __le32 result;
 
+       __le32 object_len;
        __le32 num_ops;
-       struct ceph_osd_op ops[0];
+       struct ceph_osd_op ops[0];  /* ops[], object */
 } __attribute__ ((packed));
 
 
index 367b1751cb7140833e05d3989766a33385b5ecdc..a47031ec1e78bc2531d7cc84b0651344899c96e6 100644 (file)
@@ -669,24 +669,24 @@ extern "C" int rados_close_pool(rados_pool_t pool)
   return 0;
 }
 
-extern "C" int rados_write(rados_pool_t pool, ceph_object *o, off_t off, const char *buf, size_t len)
+extern "C" int rados_write(rados_pool_t pool, const char *o, off_t off, const char *buf, size_t len)
 {
-  object_t oid(*o);
+  object_t oid(o);
   bufferlist bl;
   bl.append(buf, len);
   return radosp->write(pool, oid, off, bl, len);
 }
 
-extern "C" int rados_remove(rados_pool_t pool, ceph_object *o)
+extern "C" int rados_remove(rados_pool_t pool, const char *o)
 {
-  object_t oid(*o);
+  object_t oid(o);
   return radosp->remove(pool, oid);
 }
 
-extern "C" int rados_read(rados_pool_t pool, ceph_object *o, off_t off, char *buf, size_t len)
+extern "C" int rados_read(rados_pool_t pool, const char *o, off_t off, char *buf, size_t len)
 {
   int ret;
-  object_t oid(*o);
+  object_t oid(o);
   bufferlist bl;
   ret = radosp->read(pool, oid, off, bl, len);
   if (ret >= 0) {
@@ -699,10 +699,10 @@ extern "C" int rados_read(rados_pool_t pool, ceph_object *o, off_t off, char *bu
   return ret;
 }
 
-extern "C" int rados_exec(rados_pool_t pool, ceph_object *o, const char *cls, const char *method,
+extern "C" int rados_exec(rados_pool_t pool, const char *o, const char *cls, const char *method,
                          const char *inbuf, size_t in_len, char *buf, size_t out_len)
 {
-  object_t oid(*o);
+  object_t oid(o);
   bufferlist inbl, outbl;
   int ret;
   inbl.append(inbuf, in_len);
@@ -753,19 +753,19 @@ extern "C" void rados_aio_release(rados_completion_t c)
   ((RadosClient::AioCompletion *)c)->put();
 }
 
-extern "C" int rados_aio_read(rados_pool_t pool, struct ceph_object *o,
+extern "C" int rados_aio_read(rados_pool_t pool, const char *o,
                               off_t off, char *buf, size_t len,
                               rados_completion_t *completion)
 {
-  object_t oid(*o);
+  object_t oid(o);
   return radosp->aio_read(pool, oid, off, buf, len, (RadosClient::AioCompletion**)completion);
 }
 
-extern "C" int rados_aio_write(rados_pool_t pool, struct ceph_object *o,
+extern "C" int rados_aio_write(rados_pool_t pool, const char *o,
                               off_t off, const char *buf, size_t len,
                               rados_completion_t *completion)
 {
-  object_t oid(*o);
+  object_t oid(o);
   bufferlist bl;
   bl.append(buf, len);
   return radosp->aio_write(pool, oid, off, bl, len, (RadosClient::AioCompletion**)completion);
index 18be1c246583d3e9c0e96ad32dfdc1945ad62660..b5b275ff35d54f237536e29a2606c36cc7319ba4 100644 (file)
@@ -417,7 +417,9 @@ private:
   }
  
   // -- fetch --
-  object_t get_ondisk_object() { return object_t(ino(), frag); }
+  object_t get_ondisk_object() { 
+    return file_object_t(ino(), frag);
+  }
   void fetch(Context *c, bool ignore_authpinnability=false);
   void _fetched(bufferlist &bl);
 
index 6306bc7156bde43ba9ba7f6765df4cd5cba6e74a..1a5af14ac3dc56531849513bd80499c42e971c3b 100644 (file)
@@ -649,7 +649,9 @@ void CInode::store(Context *fin)
   m.mtime = g_clock.now();
   m.setxattr("inode", bl);
 
-  object_t oid(ino(), frag_t());
+  char n[30];
+  sprintf(n, "%llx.%08llx", (long long unsigned)ino(), (long long unsigned)frag_t());
+  object_t oid(n);
   OSDMap *osdmap = mdcache->mds->objecter->osdmap;
   ceph_object_layout ol = osdmap->make_object_layout(oid,
                                                     mdcache->mds->mdsmap->get_metadata_pg_pool());
@@ -684,7 +686,9 @@ void CInode::fetch(Context *fin)
   dout(10) << "fetch" << dendl;
 
   C_Inode_Fetched *c = new C_Inode_Fetched(this, fin);
-  object_t oid(ino(), frag_t());
+  char n[30];
+  sprintf(n, "%llx.%08llx", (long long unsigned)ino(), (long long unsigned)frag_t());
+  object_t oid(n);
 
   ObjectRead rd;
   rd.getxattr("inode");
index 22768113ec2b70ef9513e1ea7579026769bd886d..6bdbcdfeb9eff173fe98933030eac75e38f8f711 100644 (file)
@@ -4365,7 +4365,9 @@ void MDCache::_recovered(CInode *in, int r)
 
 void MDCache::purge_prealloc_ino(inodeno_t ino, Context *fin)
 {
-  object_t oid(ino, 0);
+  char n[30];
+  sprintf(n, "%llx.%08llx", (long long unsigned)ino, 0ull);
+  object_t oid(n);
   dout(10) << "purge_prealloc_ino " << ino << " oid " << oid << dendl;
   ceph_object_layout ol = mds->osdmap->make_object_layout(oid,
                                                          mds->mdsmap->get_metadata_pg_pool());
index a6b25c7e7a482b0e5b2ffc6ec0097ca95df7936c..4f020cab6404311cbbba54269572cef5742da59b 100644 (file)
@@ -62,7 +62,9 @@ void MDSTable::save(Context *onfinish, version_t v)
 
   // write (async)
   SnapContext snapc;
-  object_t oid(ino, 0);
+  char n[30];
+  sprintf(n, "mdstable_%s", table_name);
+  object_t oid(n);
   OSDMap *osdmap = mds->objecter->osdmap;
   ceph_object_layout ol = osdmap->make_object_layout(oid,
                                                     mds->mdsmap->get_metadata_pg_pool());
@@ -121,7 +123,9 @@ void MDSTable::load(Context *onfinish)
   state = STATE_OPENING;
 
   C_MT_Load *c = new C_MT_Load(this, onfinish);
-  object_t oid(ino, 0);
+  char n[30];
+  sprintf(n, "mdstable_%s", table_name);
+  object_t oid(n);
   OSDMap *osdmap = mds->objecter->osdmap;
   ceph_object_layout ol = osdmap->make_object_layout(oid,
                                                     mds->mdsmap->get_metadata_pg_pool());
index f7d05e6aed20e9a1dbd73d5cb44b975a0e97d0d8..a0e0c43bb3e4381f124adf72ce38134d554b7d68 100644 (file)
@@ -63,7 +63,7 @@ void SessionMap::load(Context *onload)
        waiting_for_load.push_back(onload);
   
   C_SM_Load *c = new C_SM_Load(this);
-  object_t oid(ino, 0);
+  object_t oid("sessionmap");
   OSDMap *osdmap = mds->objecter->osdmap;
   ceph_object_layout ol = osdmap->make_object_layout(oid,
                                                     mds->mdsmap->get_metadata_pg_pool());
@@ -115,7 +115,7 @@ void SessionMap::save(Context *onsave, version_t needv)
   encode(bl);
   committing = version;
   SnapContext snapc;
-  object_t oid(ino, 0);
+  object_t oid("sessionmap");
   OSDMap *osdmap = mds->objecter->osdmap;
   ceph_object_layout ol = osdmap->make_object_layout(oid,
                                                     mds->mdsmap->get_metadata_pg_pool());
index 13ae383722d14a3a00bfe8de10d4df857f0ad60c..0b17ec99c4848eeb1c3762811f58d98167f4a0b7 100644 (file)
@@ -31,6 +31,7 @@ class MOSDOp : public Message {
 private:
   ceph_osd_request_head head;
 public:
+  object_t oid;
   vector<ceph_osd_op> ops;
   bufferlist ticket;
   vector<snapid_t> snaps;
@@ -52,7 +53,7 @@ public:
   int get_client_inc() { return head.client_inc; }
   tid_t get_client_tid() { return head.tid; }
   
-  object_t get_oid() { return object_t(head.oid); }
+  object_t& get_oid() { return oid; }
   pg_t     get_pg() { return pg_t(head.layout.ol_pgid); }
   ceph_object_layout get_layout() { return head.layout; }
   epoch_t  get_map_epoch() { return head.osdmap_epoch; }
@@ -81,14 +82,14 @@ public:
 
 
   MOSDOp(const bufferlist& tkt, int inc, long tid,
-         object_t oid, ceph_object_layout ol, epoch_t mapepoch,
+         object_t& _oid, ceph_object_layout ol, epoch_t mapepoch,
         int flags) :
     Message(CEPH_MSG_OSD_OP),
+    oid(_oid),
     ticket(tkt) {
     memset(&head, 0, sizeof(head));
     head.tid = tid;
     head.client_inc = inc;
-    head.oid = oid;
     head.layout = ol;
     head.osdmap_epoch = mapepoch;
     head.flags = flags;
@@ -155,11 +156,13 @@ public:
 
   // marshalling
   virtual void encode_payload() {
+    head.object_len = oid.name.length();
     head.num_snaps = snaps.size();
     head.num_ops = ops.size();
     head.ticket_len = ticket.length();
     ::encode(head, payload);
     ::encode_nohead(ops, payload);
+    ::encode_nohead(oid.name, payload);
     ::encode_nohead(ticket, payload);
     ::encode_nohead(snaps, payload);
     if (head.flags & CEPH_OSD_FLAG_PEERSTAT)
@@ -170,6 +173,7 @@ public:
     bufferlist::iterator p = payload.begin();
     ::decode(head, p);
     decode_nohead(head.num_ops, ops, p);
+    decode_nohead(head.object_len, oid.name, p);
     decode_nohead(head.ticket_len, ticket, p);
     decode_nohead(head.num_snaps, snaps, p);
     if (head.flags & CEPH_OSD_FLAG_PEERSTAT)
@@ -180,7 +184,7 @@ public:
   const char *get_type_name() { return "osd_op"; }
   void print(ostream& out) {
     out << "osd_op(" << get_reqid();
-    out << " " << head.oid;
+    out << " " << oid;
 
     out << " ";
     if (may_read())
index 52b8dae1e415d3423fc89353e65c05dad956fb0c..01fe8b92d70a0e6f7ac1d04a5629630b8918731b 100644 (file)
 class MOSDOpReply : public Message {
   ceph_osd_reply_head head;
  public:
+  object_t oid;
   vector<ceph_osd_op> ops;
 
   long     get_tid() { return head.tid; }
-  object_t get_oid() { return head.oid; }
+  object_t get_oid() { return oid; }
   pg_t     get_pg() { return pg_t(head.layout.ol_pgid); }
   int      get_flags() { return head.flags; }
 
@@ -68,7 +69,7 @@ public:
     head.result = result;
     head.flags =
       (req->head.flags & ~(CEPH_OSD_FLAG_ONDISK|CEPH_OSD_FLAG_ONNVRAM|CEPH_OSD_FLAG_ACK)) | acktype;
-    head.oid = req->head.oid;
+    oid = req->oid;
     head.layout = req->head.layout;
     head.osdmap_epoch = e;
     head.reassert_version = req->head.reassert_version;
@@ -81,18 +82,21 @@ public:
     bufferlist::iterator p = payload.begin();
     ::decode(head, p);
     ::decode_nohead(head.num_ops, ops, p);
+    ::decode_nohead(head.object_len, oid.name, p);
   }
   virtual void encode_payload() {
     head.num_ops = ops.size();
+    head.object_len = oid.name.length();
     ::encode(head, payload);
     ::encode_nohead(ops, payload);
+    ::encode_nohead(oid.name, payload);
   }
 
   const char *get_type_name() { return "osd_op_reply"; }
   
   void print(ostream& out) {
     out << "osd_op_reply(" << get_reqid()
-       << " " << head.oid << " " << ops;
+       << " " << oid << " " << ops;
     if (may_write()) {
       if (is_ondisk())
        out << " ondisk";
index e6c2de7efbc2412ad509bc96f130fea781c46bda..4117931546bd4980ceaecee0de83e76662f996f8 100644 (file)
@@ -178,28 +178,22 @@ void FileStore::append_oname(const pobject_t &oid, char *s)
 {
   //assert(sizeof(oid) == 28);
   char *t = s + strlen(s);
-#ifdef __LP64__
-  sprintf(t, "/%016lx.%08x.%lx_%lx", 
-         oid.oid.ino, oid.oid.bno, oid.oid.pad, (__u64)oid.snap);
-#else
-  sprintf(t, "/%08x_%016llx.%08x.%llx_%llx", 
-         oid.oid.ino, oid.oid.bno, oid.oid.pad, (__u64)oid.snap);
-#endif
+  sprintf(t, "/%s_%llx", oid.oid.name.c_str(), (long long unsigned)oid.snap);
   //parse_object(t+1);
 }
 
 bool FileStore::parse_object(char *s, pobject_t& o)
 {
-  //assert(sizeof(o) == 28);
-  if (strlen(s) < 29 ||
-      s[16] != '.' ||
-      s[25] != '.')
-    return false;
-  o.oid.ino = strtoull(s, &s, 16);
-  o.oid.bno = strtoull(s+1, &s, 16);
-  o.oid.pad = strtoull(s+1, &s, 16);
-  o.snap = strtoull(s+1, &s, 16);
-  return true;
+  char *bar = s + strlen(s) - 1;
+  while (*bar != '_' &&
+        bar > s)
+    bar--;
+  if (*bar == '_') {
+    o.oid.name = nstring(bar-s, s);
+    o.snap = strtoull(bar+1, &s, 16);
+    return true;
+  }
+  return false;
 }
 
   //           11111111112222222222333
@@ -227,7 +221,7 @@ void FileStore::get_cdir(coll_t cid, char *s)
 #endif
 }
 
-void FileStore::get_coname(coll_t cid, pobject_t oid, char *s) 
+void FileStore::get_coname(coll_t cid, const pobject_t& oid, char *s) 
 {
   get_cdir(cid, s);
   append_oname(oid, s);
@@ -1193,7 +1187,7 @@ unsigned FileStore::apply_transaction(Transaction &t, Context *onsafe)
 // --------------------
 // objects
 
-bool FileStore::exists(coll_t cid, pobject_t oid)
+bool FileStore::exists(coll_t cid, const pobject_t& oid)
 {
   struct stat st;
   if (stat(cid, oid, &st) == 0)
@@ -1202,7 +1196,7 @@ bool FileStore::exists(coll_t cid, pobject_t oid)
     return false;
 }
   
-int FileStore::stat(coll_t cid, pobject_t oid, struct stat *st)
+int FileStore::stat(coll_t cid, const pobject_t& oid, struct stat *st)
 {
   char fn[PATH_MAX];
   get_coname(cid, oid, fn);
@@ -1211,7 +1205,7 @@ int FileStore::stat(coll_t cid, pobject_t oid, struct stat *st)
   return r < 0 ? -errno:r;
 }
 
-int FileStore::read(coll_t cid, pobject_t oid, 
+int FileStore::read(coll_t cid, const pobject_t& oid, 
                     __u64 offset, size_t len,
                     bufferlist& bl) {
   char fn[PATH_MAX];
@@ -1249,7 +1243,7 @@ int FileStore::read(coll_t cid, pobject_t oid,
 
 
 
-int FileStore::_remove(coll_t cid, pobject_t oid) 
+int FileStore::_remove(coll_t cid, const pobject_t& oid) 
 {
   char fn[PATH_MAX];
   get_coname(cid, oid, fn);
@@ -1260,7 +1254,7 @@ int FileStore::_remove(coll_t cid, pobject_t oid)
   return r;
 }
 
-int FileStore::_truncate(coll_t cid, pobject_t oid, __u64 size)
+int FileStore::_truncate(coll_t cid, const pobject_t& oid, __u64 size)
 {
   char fn[PATH_MAX];
   get_coname(cid, oid, fn);
@@ -1272,7 +1266,7 @@ int FileStore::_truncate(coll_t cid, pobject_t oid, __u64 size)
 }
 
 
-int FileStore::_touch(coll_t cid, pobject_t oid)
+int FileStore::_touch(coll_t cid, const pobject_t& oid)
 {
   char fn[PATH_MAX];
   get_coname(cid, oid, fn);
@@ -1291,7 +1285,7 @@ int FileStore::_touch(coll_t cid, pobject_t oid)
   return r;
 }
 
-int FileStore::_write(coll_t cid, pobject_t oid, 
+int FileStore::_write(coll_t cid, const pobject_t& oid, 
                      __u64 offset, size_t len,
                      const bufferlist& bl)
 {
@@ -1337,7 +1331,7 @@ int FileStore::_write(coll_t cid, pobject_t oid,
   return r;
 }
 
-int FileStore::_zero(coll_t cid, pobject_t oid, __u64 offset, size_t len)
+int FileStore::_zero(coll_t cid, const pobject_t& oid, __u64 offset, size_t len)
 {
   // write zeros.. yuck!
   bufferptr bp(len);
@@ -1599,7 +1593,7 @@ int FileStore::_getattrs(const char *fn, map<nstring,bufferptr>& aset)
 
 // objects
 
-int FileStore::getattr(coll_t cid, pobject_t oid, const char *name,
+int FileStore::getattr(coll_t cid, const pobject_t& oid, const char *name,
                       void *value, size_t size) 
 {
   if (fake_attrs) return attrs.getattr(cid, oid, name, value, size);
@@ -1614,7 +1608,7 @@ int FileStore::getattr(coll_t cid, pobject_t oid, const char *name,
   return r;
 }
 
-int FileStore::getattr(coll_t cid, pobject_t oid, const char *name, bufferptr &bp)
+int FileStore::getattr(coll_t cid, const pobject_t& oid, const char *name, bufferptr &bp)
 {
   if (fake_attrs) return attrs.getattr(cid, oid, name, bp);
 
@@ -1628,7 +1622,7 @@ int FileStore::getattr(coll_t cid, pobject_t oid, const char *name, bufferptr &b
   return r;
 }
 
-int FileStore::getattrs(coll_t cid, pobject_t oid, map<nstring,bufferptr>& aset) 
+int FileStore::getattrs(coll_t cid, const pobject_t& oid, map<nstring,bufferptr>& aset) 
 {
   if (fake_attrs) return attrs.getattrs(cid, oid, aset);
 
@@ -1644,7 +1638,7 @@ int FileStore::getattrs(coll_t cid, pobject_t oid, map<nstring,bufferptr>& aset)
 
 
 
-int FileStore::_setattr(coll_t cid, pobject_t oid, const char *name,
+int FileStore::_setattr(coll_t cid, const pobject_t& oid, const char *name,
                        const void *value, size_t size) 
 {
   if (fake_attrs) return attrs.setattr(cid, oid, name, value, size);
@@ -1659,7 +1653,7 @@ int FileStore::_setattr(coll_t cid, pobject_t oid, const char *name,
   return r;
 }
 
-int FileStore::_setattrs(coll_t cid, pobject_t oid, map<nstring,bufferptr>& aset) 
+int FileStore::_setattrs(coll_t cid, const pobject_t& oid, map<nstring,bufferptr>& aset) 
 {
   if (fake_attrs) return attrs.setattrs(cid, oid, aset);
 
@@ -1688,7 +1682,7 @@ int FileStore::_setattrs(coll_t cid, pobject_t oid, map<nstring,bufferptr>& aset
 }
 
 
-int FileStore::_rmattr(coll_t cid, pobject_t oid, const char *name) 
+int FileStore::_rmattr(coll_t cid, const pobject_t& oid, const char *name) 
 {
   if (fake_attrs) return attrs.rmattr(cid, oid, name);
 
index 03c221549104420abe41bc939ebb060743ec1ea5..3fc39ad5ac6becc69d9dd72bc5145ccacf89ad88 100644 (file)
@@ -53,7 +53,7 @@ class FileStore : public JournalingObjectStore {
   void append_oname(const pobject_t &oid, char *s);
   //void get_oname(pobject_t oid, char *s);
   void get_cdir(coll_t cid, char *s);
-  void get_coname(coll_t cid, pobject_t oid, char *s);
+  void get_coname(coll_t cid, const pobject_t& oid, char *s);
   bool parse_object(char *s, pobject_t& o);
   bool parse_coll(char *s, coll_t& c);
   
@@ -104,18 +104,18 @@ class FileStore : public JournalingObjectStore {
   int pick_object_revision_lt(pobject_t& oid) {
     return 0;
   }
-  bool exists(coll_t cid, pobject_t oid);
-  int stat(coll_t cid, pobject_t oid, struct stat *st);
-  int read(coll_t cid, pobject_t oid, __u64 offset, size_t len, bufferlist& bl);
-
-  int _touch(coll_t cid, pobject_t oid);
-  int _write(coll_t cid, pobject_t oid, __u64 offset, size_t len, const bufferlist& bl);
-  int _zero(coll_t cid, pobject_t oid, __u64 offset, size_t len);
-  int _truncate(coll_t cid, pobject_t oid, __u64 size);
+  bool exists(coll_t cid, const pobject_t& oid);
+  int stat(coll_t cid, const pobject_t& oid, struct stat *st);
+  int read(coll_t cid, const pobject_t& oid, __u64 offset, size_t len, bufferlist& bl);
+
+  int _touch(coll_t cid, const pobject_t& oid);
+  int _write(coll_t cid, const pobject_t& oid, __u64 offset, size_t len, const bufferlist& bl);
+  int _zero(coll_t cid, const pobject_t& oid, __u64 offset, size_t len);
+  int _truncate(coll_t cid, const pobject_t& oid, __u64 size);
   int _clone(coll_t cid, pobject_t oldoid, pobject_t newoid);
   int _clone_range(coll_t cid, pobject_t oldoid, pobject_t newoid, __u64 off, __u64 len);
   int _do_clone_range(int from, int to, __u64 off, __u64 len);
-  int _remove(coll_t cid, pobject_t oid);
+  int _remove(coll_t cid, const pobject_t& oid);
 
   void _start_sync();
 
@@ -123,16 +123,16 @@ class FileStore : public JournalingObjectStore {
   void sync(Context *onsafe);
 
   // attrs
-  int getattr(coll_t cid, pobject_t oid, const char *name, void *value, size_t size);
-  int getattr(coll_t cid, pobject_t oid, const char *name, bufferptr &bp);
-  int getattrs(coll_t cid, pobject_t oid, map<nstring,bufferptr>& aset);
+  int getattr(coll_t cid, const pobject_t& oid, const char *name, void *value, size_t size);
+  int getattr(coll_t cid, const pobject_t& oid, const char *name, bufferptr &bp);
+  int getattrs(coll_t cid, const pobject_t& oid, map<nstring,bufferptr>& aset);
 
   int _getattr(const char *fn, const char *name, bufferptr& bp);
   int _getattrs(const char *fn, map<nstring,bufferptr>& aset);
 
-  int _setattr(coll_t cid, pobject_t oid, const char *name, const void *value, size_t size);
-  int _setattrs(coll_t cid, pobject_t oid, map<nstring,bufferptr>& aset);
-  int _rmattr(coll_t cid, pobject_t oid, const char *name);
+  int _setattr(coll_t cid, const pobject_t& oid, const char *name, const void *value, size_t size);
+  int _setattrs(coll_t cid, const pobject_t& oid, map<nstring,bufferptr>& aset);
+  int _rmattr(coll_t cid, const pobject_t& oid, const char *name);
 
   int collection_getattr(coll_t c, const char *name, void *value, size_t size);
   int collection_getattr(coll_t c, const char *name, bufferlist& bl);
@@ -156,8 +156,8 @@ class FileStore : public JournalingObjectStore {
   int _collection_remove(coll_t c, pobject_t o);
 
   int pick_object_revision_lt(coll_t cid, pobject_t& oid) { return -1; }
-  void trim_from_cache(coll_t cid, pobject_t oid, __u64 offset, size_t len) {}
-  int is_cached(coll_t cid, pobject_t oid, __u64 offset, size_t len) { return -1; }
+  void trim_from_cache(coll_t cid, const pobject_t& oid, __u64 offset, size_t len) {}
+  int is_cached(coll_t cid, const pobject_t& oid, __u64 offset, size_t len) { return -1; }
 };
 
 #endif
index 0c384f9a79335ab30ef11d62125e46f2e06db7cf..f31cdc1f9267da2650500cd343858513057fc80c 100644 (file)
@@ -173,7 +173,7 @@ public:
       int op = OP_STARTSYNC;
       ops.push_back(op);
     }
-    void touch(coll_t cid, pobject_t oid) {
+    void touch(coll_t cid, const pobject_t& oid) {
       int op = OP_TOUCH;
       ops.push_back(op);
       cids.push_back(cid);
@@ -181,7 +181,7 @@ public:
       //len++;
       //blen += 3;
     }
-    void write(coll_t cid, pobject_t oid, __u64 off, size_t len, const bufferlist& bl) {
+    void write(coll_t cid, const pobject_t& oid, __u64 off, size_t len, const bufferlist& bl) {
       int op = OP_WRITE;
       ops.push_back(op);
       cids.push_back(cid);
@@ -192,7 +192,7 @@ public:
       //len++;
       //blen += 3 + bl.buffers().size();
     }
-    void zero(coll_t cid, pobject_t oid, __u64 off, size_t len) {
+    void zero(coll_t cid, const pobject_t& oid, __u64 off, size_t len) {
       int op = OP_ZERO;
       ops.push_back(op);
       cids.push_back(cid);
@@ -202,7 +202,7 @@ public:
       //len++;
       //blen += 3 + 1;
     }
-    void trim_from_cache(coll_t cid, pobject_t oid, __u64 off, size_t len) {
+    void trim_from_cache(coll_t cid, const pobject_t& oid, __u64 off, size_t len) {
       int op = OP_TRIMCACHE;
       ops.push_back(op);
       cids.push_back(cid);
@@ -211,7 +211,7 @@ public:
       lengths.push_back(len);
       //len++;
     }
-    void truncate(coll_t cid, pobject_t oid, __u64 off) {
+    void truncate(coll_t cid, const pobject_t& oid, __u64 off) {
       int op = OP_TRUNCATE;
       ops.push_back(op);
       cids.push_back(cid);
@@ -220,7 +220,7 @@ public:
       //len++;
       //blen++;
     }
-    void remove(coll_t cid, pobject_t oid) {
+    void remove(coll_t cid, const pobject_t& oid) {
       int op = OP_REMOVE;
       ops.push_back(op);
       cids.push_back(cid);
@@ -228,17 +228,17 @@ public:
       //len++;
       //blen++;
     }
-    void setattr(coll_t cid, pobject_t oid, const char* name, const void* val, int len) {
+    void setattr(coll_t cid, const pobject_t& oid, const char* name, const void* val, int len) {
       bufferlist bl;
       bl.append((char*)val, len);
       setattr(cid, oid, name, bl);
     }
-    void setattr(coll_t cid, pobject_t oid, nstring& s, bufferlist& val) {
+    void setattr(coll_t cid, const pobject_t& oid, nstring& s, bufferlist& val) {
       attrnames2.push_back(nstring());
       attrnames2.back().swap(s);
       setattr(cid, oid, attrnames2.back().c_str(), val);
     }
-    void setattr(coll_t cid, pobject_t oid, const char* name, bufferlist& val) {
+    void setattr(coll_t cid, const pobject_t& oid, const char* name, bufferlist& val) {
       int op = OP_SETATTR;
       ops.push_back(op);
       cids.push_back(cid);
@@ -248,7 +248,7 @@ public:
       //len++;
       //blen++;
     }
-    void setattrs(coll_t cid, pobject_t oid, map<nstring,bufferptr>& attrset) {
+    void setattrs(coll_t cid, const pobject_t& oid, map<nstring,bufferptr>& attrset) {
       map<nstring,bufferptr> empty;
       int op = OP_SETATTRS;
       ops.push_back(op);
@@ -259,12 +259,12 @@ public:
       //len++;
       //blen += 5 + attrset.size();     // HACK allowance for removing old attrs
     }
-    void rmattr(coll_t cid, pobject_t oid, nstring& s) {
+    void rmattr(coll_t cid, const pobject_t& oid, nstring& s) {
       attrnames2.push_back(nstring());
       attrnames2.back().swap(s);
       rmattr(cid, oid, attrnames2.back().c_str());
     }
-    void rmattr(coll_t cid, pobject_t oid, const char* name) {
+    void rmattr(coll_t cid, const pobject_t& oid, const char* name) {
       int op = OP_RMATTR;
       ops.push_back(op);
       cids.push_back(cid);
@@ -273,7 +273,7 @@ public:
       //len++;
       //blen++;
     }
-    void clone(coll_t cid, pobject_t oid, pobject_t noid) {
+    void clone(coll_t cid, const pobject_t& oid, pobject_t noid) {
       int op = OP_CLONE;
       ops.push_back(op);
       cids.push_back(cid);
@@ -282,7 +282,7 @@ public:
       //len++;
       //blen += 5;
     }
-    void clone_range(coll_t cid, pobject_t oid, pobject_t noid, __u64 off, __u64 len) {
+    void clone_range(coll_t cid, const pobject_t& oid, pobject_t noid, __u64 off, __u64 len) {
       int op = OP_CLONERANGE;
       ops.push_back(op);
       cids.push_back(cid);
@@ -307,7 +307,7 @@ public:
       //len++;
       //blen++;
     }
-    void collection_add(coll_t cid, coll_t ocid, pobject_t oid) {
+    void collection_add(coll_t cid, coll_t ocid, const pobject_t& oid) {
       int op = OP_COLL_ADD;
       ops.push_back(op);
       cids.push_back(cid);
@@ -316,7 +316,7 @@ public:
       //len++;
       //blen++;
     }
-    void collection_remove(coll_t cid, pobject_t oid) {
+    void collection_remove(coll_t cid, const pobject_t& oid) {
       int op = OP_COLL_REMOVE;
       ops.push_back(op);
       cids.push_back(cid);
@@ -414,9 +414,9 @@ public:
 
   // objects
   virtual int pick_object_revision_lt(coll_t cid, pobject_t& oid) = 0;
-  virtual bool exists(coll_t cid, pobject_t oid) = 0;                   // useful?
-  virtual int stat(coll_t cid, pobject_t oid, struct stat *st) = 0;     // struct stat?
-  virtual int read(coll_t cid, pobject_t oid, __u64 offset, size_t len, bufferlist& bl) = 0;
+  virtual bool exists(coll_t cid, const pobject_t& oid) = 0;                   // useful?
+  virtual int stat(coll_t cid, const pobject_t& oid, struct stat *st) = 0;     // struct stat?
+  virtual int read(coll_t cid, const pobject_t& oid, __u64 offset, size_t len, bufferlist& bl) = 0;
 
   /*
   virtual int _remove(coll_t cid, pobject_t oid) = 0;
@@ -431,19 +431,19 @@ public:
   }
   */
 
-  virtual void trim_from_cache(coll_t cid, pobject_t oid, __u64 offset, size_t len) = 0; //{ }
-  virtual int is_cached(coll_t cid, pobject_t oid, __u64 offset, size_t len) = 0;  //{ return -1; }
+  virtual void trim_from_cache(coll_t cid, const pobject_t& oid, __u64 offset, size_t len) = 0; //{ }
+  virtual int is_cached(coll_t cid, const pobject_t& oid, __u64 offset, size_t len) = 0;  //{ return -1; }
 
-  virtual int getattr(coll_t cid, pobject_t oid, const char *name, void *value, size_t size) = 0;
-  virtual int getattr(coll_t cid, pobject_t oid, const char *name, bufferptr& value) = 0;
-  int getattr(coll_t cid, pobject_t oid, const char *name, bufferlist& value) {
+  virtual int getattr(coll_t cid, const pobject_t& oid, const char *name, void *value, size_t size) = 0;
+  virtual int getattr(coll_t cid, const pobject_t& oid, const char *name, bufferptr& value) = 0;
+  int getattr(coll_t cid, const pobject_t& oid, const char *name, bufferlist& value) {
     bufferptr bp;
     int r = getattr(cid, oid, name, bp);
     if (bp.length())
       value.push_back(bp);
     return r;
   }
-  virtual int getattrs(coll_t cid, pobject_t oid, map<nstring,bufferptr>& aset) {return 0;};
+  virtual int getattrs(coll_t cid, const pobject_t& oid, map<nstring,bufferptr>& aset) {return 0;};
 
   /*
   virtual int _setattr(coll_t cid, pobject_t oid, const char *name, const void *value, size_t size) = 0;
index 36f9b8b1fbe961306cf27cad980ed0339bca277e..5ba2fdda2397ec1043e61a682bb19085bcac1b43 100644 (file)
@@ -33,14 +33,14 @@ int myrand()
 }
 
 
-pobject_t Ager::age_get_oid() {
+file_object_t Ager::age_get_oid() {
   if (!age_free_oids.empty()) {
-    pobject_t o = age_free_oids.front();
+    file_object_t o = age_free_oids.front();
     age_free_oids.pop_front();
     return o;
   }
-  pobject_t last = age_cur_oid;
-  ++age_cur_oid.oid.bno;
+  file_object_t last = age_cur_oid;
+  ++age_cur_oid.bno;
   return last;
 }
 
@@ -77,7 +77,7 @@ uint64_t Ager::age_fill(float pc, utime_t until) {
         avail - free > .02) 
       store->sync();
 
-    pobject_t poid = age_get_oid();
+    file_object_t poid = age_get_oid();
     
     int b = myrand() % 10;
     age_objects[b].push_back(poid);
@@ -117,12 +117,13 @@ uint64_t Ager::age_fill(float pc, utime_t until) {
       bufferlist sbl;
       sbl.substr_of(bl, 0, t);
       ObjectStore::Transaction tr;
-      tr.write(0, poid, off, t, sbl);
+      pobject_t oid(poid, 0);
+      tr.write(0, oid, off, t, sbl);
       store->apply_transaction(tr);
       off += t;
       s -= t;
     }
-    poid.oid.bno++;
+    poid.bno++;
   }
 
   return wrote*4; // KB
@@ -154,13 +155,14 @@ void Ager::age_empty(float pc) {
       n = nper;
       continue;
     }
-    pobject_t poid = age_objects[b].front();
+    file_object_t poid = age_objects[b].front();
     age_objects[b].pop_front();
     
     generic_dout(2) << "age_empty at " << free << " / " << avail << " / " << pc << " removing " << hex << poid << dec << dendl;
     
     ObjectStore::Transaction t;
-    t.remove(0, poid);
+    pobject_t oid(poid, 0);
+    t.remove(0, oid);
     store->apply_transaction(t);
     age_free_oids.push_back(poid);
   }
@@ -213,7 +215,7 @@ void Ager::age(int time,
   utime_t nextfl = start;
   nextfl.sec_ref() += freelist_inc;
 
-  while (age_objects.size() < 10) age_objects.push_back( list<pobject_t>() );
+  while (age_objects.size() < 10) age_objects.push_back( list<file_object_t>() );
   
   if (fake_size_mb) {
     int fake_bl = fake_size_mb * 256;
@@ -229,7 +231,7 @@ void Ager::age(int time,
   // init size distn (once)
   if (!did_distn) {
     did_distn = true;
-    age_cur_oid = pobject_t(object_t(0,1), 0);
+    age_cur_oid = file_object_t(888, 0);
     file_size_distn.add(1, 19.0758125+0.65434375);
     file_size_distn.add(512, 35.6566);
     file_size_distn.add(1024, 27.7271875);
index d55c53eea73dbd46e988bf258916c641d381f53e..60a4db0ea2a17a3b53ab0a97016ba9eab0c43223 100644 (file)
@@ -16,16 +16,16 @@ class Ager {
   ObjectStore *store;
 
  private:
-  list<pobject_t>           age_free_oids;
-  pobject_t                 age_cur_oid;
-  vector< list<pobject_t> > age_objects;
+  list<file_object_t>           age_free_oids;
+  file_object_t                 age_cur_oid;
+  vector< list<file_object_t> > age_objects;
   Distribution file_size_distn; //kb
   bool         did_distn;
 
   void age_empty(float pc);
   uint64_t age_fill(float pc, utime_t until);
   ssize_t age_pick_size();
-  pobject_t age_get_oid();
+  file_object_t age_get_oid();
 
  public:
   Ager(ObjectStore *s) : store(s), did_distn(false) {} 
index acb970a9422dc7ca78e75daa28731d86077f63af..985afe1a8786643250f7b319cfef3e9e90138b47 100644 (file)
@@ -155,9 +155,10 @@ int OSD::mkfs(const char *dev, const char *jdev, ceph_fsid_t fsid, int whoami)
     bl.push_back(bp);
     cout << "testing disk bandwidth..." << std::endl;
     utime_t start = g_clock.now();
+    object_t oid("disk_bw_test");
     for (int i=0; i<1000; i++) {
       ObjectStore::Transaction t;
-      t.write(0, pobject_t(object_t(999,i), 0), 0, bl.length(), bl);
+      t.write(0, pobject_t(oid, 0), i*bl.length(), bl.length(), bl);
       store->apply_transaction(t);
     }
     store->sync();
@@ -165,8 +166,7 @@ int OSD::mkfs(const char *dev, const char *jdev, ceph_fsid_t fsid, int whoami)
     end -= start;
     cout << "measured " << (1000.0 / (double)end) << " mb/sec" << std::endl;
     ObjectStore::Transaction tr;
-    for (int i=0; i<1000; i++) 
-      tr.remove(0, pobject_t(object_t(999,i), 0));
+    tr.remove(0, pobject_t(oid, 0));
     store->apply_transaction(tr);
     
     // set osd weight
index 52558cdc899479cd428870c891f9969c01b863a3..6adf08ff50463171fa18ff8388a06c2c36b5696d 100644 (file)
@@ -123,10 +123,14 @@ public:
   int get_nodeid() { return whoami; }
   
   static pobject_t get_osdmap_pobject_name(epoch_t epoch) { 
-    return pobject_t(object_t(0, epoch << 1), 0); 
+    char foo[20];
+    sprintf(foo, "osdmap.%d", epoch);
+    return pobject_t(object_t(foo), 0); 
   }
   static pobject_t get_inc_osdmap_pobject_name(epoch_t epoch) { 
-    return pobject_t(object_t(0, (epoch << 1) + 1), 0); 
+    char foo[20];
+    sprintf(foo, "inc_osdmap.%d", epoch);
+    return pobject_t(object_t(foo), 0); 
   }
   
 
index 7a1ff255269dad72f25d9b2debbc9674c7ce9f10..4888a83a648300ef3aa7c629346f612b5da839b6 100644 (file)
@@ -639,6 +639,9 @@ private:
 
   ceph_object_layout make_object_layout(object_t oid, int pg_pool, int preferred=-1, int object_stripe_unit = 0) {
     // calculate ps (placement seed)
+    static hash<object_t> H;
+    ps_t ps = H(oid);
+    /*
     ps_t ps;  // NOTE: keep full precision, here!
     switch (g_conf.osd_object_layout) {
     case CEPH_OBJECT_LAYOUT_LINEAR:
@@ -659,7 +662,8 @@ private:
 
     default:
       assert(0);
-    }
+      }*/
+    
 
     //cout << "preferred " << preferred << " num " << num << " mask " << num_mask << " ps " << ps << endl;
 
index 810b20f555e156b06703c2f68de705c655a85912..419cb7f0959917b327a7db3d74252cfdea9370e1 100644 (file)
@@ -104,7 +104,7 @@ enum {
 
 //#define CEPH_POOL(poolset, size) (((poolset) << 8) + (size))
 
-#define OSD_SUPERBLOCK_POBJECT sobject_t(object_t(0,0), 0)
+#define OSD_SUPERBLOCK_POBJECT sobject_t(object_t("osd_superblock"), 0)
 
 // placement group id
 struct pg_t {
@@ -131,7 +131,9 @@ struct pg_t {
   operator uint64_t() const { return u.pg64; }
 
   pobject_t to_log_pobject() const { 
-    return pobject_t(object_t(u.pg64, 0), CEPH_NOSNAP);
+    char foo[20];
+    sprintf(foo, "pg_log_%llx", (long long unsigned)u.pg64);
+    return pobject_t(object_t(foo), CEPH_NOSNAP);
   }
 
   coll_t to_coll() const {
index bddeef00b39e69ae8c1837d698a2b29453b1bd65..b53335ecdbd027127917a6668d6e2639eb631e63 100644 (file)
@@ -244,7 +244,7 @@ void Filer::file_to_extents(inodeno_t ino, ceph_file_layout *layout,
     
     // find oid, extent
     ObjectExtent *ex = 0;
-    object_t oid( ino, objectno );
+    object_t oid = file_object_t(ino, objectno);
     if (object_extents.count(oid)) 
       ex = &object_extents[oid];
     else {
index 5bf70a02c69120b75423431b136a5da168108210..36a642cce2abf84a6d699eff9a0b945ff433bda3 100644 (file)
@@ -36,6 +36,7 @@ class Messenger;
 class OSDMap;
 
 
+
 /**** Filer interface ***/
 
 class Filer {
index c8fb0ab57fa4ea63e397f5e16ffe324b03e033c5..e9fec63f6e1153ac2db4049f912cbcf6afac69c2 100644 (file)
@@ -101,7 +101,7 @@ void Journaler::recover(Context *onread)
   C_ReadHead *fin = new C_ReadHead(this);
   vector<snapid_t> snaps;
 
-  object_t oid(ino, 0);
+  object_t oid = file_object_t(ino, 0);
   ceph_object_layout ol = objecter->osdmap->make_object_layout(oid, pg_pool);
   objecter->read_full(oid, ol, CEPH_NOSNAP, &fin->bl, 0, fin);
 }
@@ -204,7 +204,7 @@ void Journaler::write_head(Context *oncommit)
   ::encode(last_written, bl);
   SnapContext snapc;
   
-  object_t oid(ino, 0);
+  object_t oid = file_object_t(ino, 0);
   ceph_object_layout ol = objecter->osdmap->make_object_layout(oid, pg_pool);
   objecter->write_full(oid, ol, snapc, bl, g_clock.now(), 0, 
                       NULL, 
index f8666651842538631059668df694eec07cfd1550..5882142f2cb99dccdec665f63632d5ebace49dba 100644 (file)
@@ -117,7 +117,7 @@ int main(int argc, const char **argv)
   //cout << "stop at " << end << std::endl;
   cout << "# offset\tack\tcommit" << std::endl;
   while (now < end) {
-    pobject_t poid(object_t(1, 1), 0);
+    pobject_t poid(object_t("streamtest"), 0);
     utime_t start = now;
     set_start(pos, now);
     ObjectStore::Transaction t;
index 062f1526e9f38eef14753b7d4e37ceab0a9cf59d..1390b98f67f7dbcd7a3c16a8beefe66ce281cb46 100644 (file)
@@ -31,28 +31,24 @@ int main(int argc, const char **argv)
   time(&tm);
   snprintf(buf, 128, "%s", ctime(&tm));
 
-  struct ceph_object oid;
-  memset(&oid, 0, sizeof(oid));
-  oid.ino = 0x2010;
+  const char *oid = "foo";
 
   rados_pool_t pool;
   int r = rados_open_pool("data", &pool);
   printf("open pool result = %d, pool = %d\n", r, pool);
 
-  rados_write(pool, &oid, 0, buf, strlen(buf) + 1);
-  rados_exec(pool, &oid, "test", "foo", buf, strlen(buf) + 1, buf, 128);
+  rados_write(pool, oid, 0, buf, strlen(buf) + 1);
+  rados_exec(pool, oid, "test", "foo", buf, strlen(buf) + 1, buf, 128);
   printf("exec result=%s\n", buf);
-  int size = rados_read(pool, &oid, 0, buf2, 128);
+  int size = rados_read(pool, oid, 0, buf2, 128);
   printf("read result=%s\n", buf2);
   printf("size=%d\n", size);
 
 
   // test aio
   rados_completion_t a, b;
-  oid.bno = 1;
-  rados_aio_write(pool, &oid, 0, buf, 100, &a);
-  oid.bno = 2;
-  rados_aio_write(pool, &oid, 0, buf, 100, &b);
+  rados_aio_write(pool, "a", 0, buf, 100, &a);
+  rados_aio_write(pool, "b", 0, buf, 100, &b);
   rados_aio_wait_for_safe(a);
   printf("a safe\n");
   rados_aio_wait_for_safe(b);
index da43217e21a549849b0f09e4a10114d3390c4190..e9d414ab2b0556da5aa11ae736f6f72a27803c90 100644 (file)
@@ -42,9 +42,7 @@ int main(int argc, const char **argv)
   snprintf(buf, 128, "%s", ctime(&tm));
   bl.append(buf, strlen(buf));
 
-  object_t oid;
-  memset(&oid, 0, sizeof(oid));
-  oid.ino = 0x2010;
+  object_t oid("foo");
 
   rados_pool_t pool;
   int r = rados.open_pool("data", &pool);