From af4b5d420763cb701c67debc73f629e632bec72c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 3 Jun 2009 13:39:07 -0700 Subject: [PATCH] osd: make object_t a string --- src/client/SyntheticClient.cc | 12 ++--- src/include/cstring.h | 4 ++ src/include/librados.h | 12 ++--- src/include/object.h | 94 ++++++++++++++--------------------- src/include/rados.h | 19 ++----- src/librados.cc | 24 ++++----- src/mds/CDir.h | 4 +- src/mds/CInode.cc | 8 ++- src/mds/MDCache.cc | 4 +- src/mds/MDSTable.cc | 8 ++- src/mds/SessionMap.cc | 4 +- src/messages/MOSDOp.h | 12 +++-- src/messages/MOSDOpReply.h | 10 ++-- src/os/FileStore.cc | 58 ++++++++++----------- src/os/FileStore.h | 36 +++++++------- src/os/ObjectStore.h | 50 +++++++++---------- src/osd/Ager.cc | 24 +++++---- src/osd/Ager.h | 8 +-- src/osd/OSD.cc | 6 +-- src/osd/OSD.h | 8 ++- src/osd/OSDMap.h | 6 ++- src/osd/osd_types.h | 6 ++- src/osdc/Filer.cc | 2 +- src/osdc/Filer.h | 1 + src/osdc/Journaler.cc | 4 +- src/streamtest.cc | 2 +- src/testrados.c | 16 +++--- src/testradospp.cc | 4 +- 28 files changed, 221 insertions(+), 225 deletions(-) diff --git a/src/client/SyntheticClient.cc b/src/client/SyntheticClient.cc index 36c4ef3b7854b..424012077fa55 100644 --- a/src/client/SyntheticClient.cc +++ b/src/client/SyntheticClient.cc @@ -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; iosdmap->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; diff --git a/src/include/cstring.h b/src/include/cstring.h index 0307b854c4acf..8d54f73f550d9 100644 --- a/src/include/cstring.h +++ b/src/include/cstring.h @@ -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; diff --git a/src/include/librados.h b/src/include/librados.h index 5da06166385c0..685b5dc79524f 100644 --- a/src/include/librados.h +++ b/src/include/librados.h @@ -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 } diff --git a/src/include/object.h b/src/include/object.h index 5b70304f49d26..1907be8b5b0ca 100644 --- a/src/include/object.h +++ b/src/include/object.h @@ -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 { size_t operator()(const object_t &r) const { - static rjhash H; - static rjhash I; - return H(r.ino) ^ I(r.bno) ^ H(r.pad); + static hash 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 diff --git a/src/include/rados.h b/src/include/rados.h index df2d0ce3535f5..f33ac3f433989 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -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)); diff --git a/src/librados.cc b/src/librados.cc index 367b1751cb714..a47031ec1e78b 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -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); diff --git a/src/mds/CDir.h b/src/mds/CDir.h index 18be1c246583d..b5b275ff35d54 100644 --- a/src/mds/CDir.h +++ b/src/mds/CDir.h @@ -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); diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 6306bc7156bde..1a5af14ac3dc5 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -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"); diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 22768113ec2b7..6bdbcdfeb9eff 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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()); diff --git a/src/mds/MDSTable.cc b/src/mds/MDSTable.cc index a6b25c7e7a482..4f020cab64043 100644 --- a/src/mds/MDSTable.cc +++ b/src/mds/MDSTable.cc @@ -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()); diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc index f7d05e6aed20e..a0e0c43bb3e43 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -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()); diff --git a/src/messages/MOSDOp.h b/src/messages/MOSDOp.h index 13ae383722d14..0b17ec99c4848 100644 --- a/src/messages/MOSDOp.h +++ b/src/messages/MOSDOp.h @@ -31,6 +31,7 @@ class MOSDOp : public Message { private: ceph_osd_request_head head; public: + object_t oid; vector ops; bufferlist ticket; vector 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()) diff --git a/src/messages/MOSDOpReply.h b/src/messages/MOSDOpReply.h index 52b8dae1e415d..01fe8b92d70a0 100644 --- a/src/messages/MOSDOpReply.h +++ b/src/messages/MOSDOpReply.h @@ -32,10 +32,11 @@ class MOSDOpReply : public Message { ceph_osd_reply_head head; public: + object_t oid; vector 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"; diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index e6c2de7efbc24..4117931546bd4 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -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& 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& aset) +int FileStore::getattrs(coll_t cid, const pobject_t& oid, map& aset) { if (fake_attrs) return attrs.getattrs(cid, oid, aset); @@ -1644,7 +1638,7 @@ int FileStore::getattrs(coll_t cid, pobject_t oid, map& 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& aset) +int FileStore::_setattrs(coll_t cid, const pobject_t& oid, map& aset) { if (fake_attrs) return attrs.setattrs(cid, oid, aset); @@ -1688,7 +1682,7 @@ int FileStore::_setattrs(coll_t cid, pobject_t oid, map& 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); diff --git a/src/os/FileStore.h b/src/os/FileStore.h index 03c2215491044..3fc39ad5ac6be 100644 --- a/src/os/FileStore.h +++ b/src/os/FileStore.h @@ -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& 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& aset); int _getattr(const char *fn, const char *name, bufferptr& bp); int _getattrs(const char *fn, map& 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& 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& 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 diff --git a/src/os/ObjectStore.h b/src/os/ObjectStore.h index 0c384f9a79335..f31cdc1f9267d 100644 --- a/src/os/ObjectStore.h +++ b/src/os/ObjectStore.h @@ -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& attrset) { + void setattrs(coll_t cid, const pobject_t& oid, map& attrset) { map 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& aset) {return 0;}; + virtual int getattrs(coll_t cid, const pobject_t& oid, map& aset) {return 0;}; /* virtual int _setattr(coll_t cid, pobject_t oid, const char *name, const void *value, size_t size) = 0; diff --git a/src/osd/Ager.cc b/src/osd/Ager.cc index 36f9b8b1fbe96..5ba2fdda2397e 100644 --- a/src/osd/Ager.cc +++ b/src/osd/Ager.cc @@ -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() ); + while (age_objects.size() < 10) age_objects.push_back( list() ); 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); diff --git a/src/osd/Ager.h b/src/osd/Ager.h index d55c53eea73db..60a4db0ea2a17 100644 --- a/src/osd/Ager.h +++ b/src/osd/Ager.h @@ -16,16 +16,16 @@ class Ager { ObjectStore *store; private: - list age_free_oids; - pobject_t age_cur_oid; - vector< list > age_objects; + list age_free_oids; + file_object_t age_cur_oid; + vector< list > 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) {} diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index acb970a9422dc..985afe1a87866 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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 diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 52558cdc89947..6adf08ff50463 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -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); } diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 7a1ff255269da..4888a83a64830 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -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 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; diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 810b20f555e15..419cb7f095991 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -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 { diff --git a/src/osdc/Filer.cc b/src/osdc/Filer.cc index bddeef00b39e6..b53335ecdbd02 100644 --- a/src/osdc/Filer.cc +++ b/src/osdc/Filer.cc @@ -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 { diff --git a/src/osdc/Filer.h b/src/osdc/Filer.h index 5bf70a02c6912..36a642cce2abf 100644 --- a/src/osdc/Filer.h +++ b/src/osdc/Filer.h @@ -36,6 +36,7 @@ class Messenger; class OSDMap; + /**** Filer interface ***/ class Filer { diff --git a/src/osdc/Journaler.cc b/src/osdc/Journaler.cc index c8fb0ab57fa4e..e9fec63f6e115 100644 --- a/src/osdc/Journaler.cc +++ b/src/osdc/Journaler.cc @@ -101,7 +101,7 @@ void Journaler::recover(Context *onread) C_ReadHead *fin = new C_ReadHead(this); vector 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, diff --git a/src/streamtest.cc b/src/streamtest.cc index f866665184253..5882142f2cb99 100644 --- a/src/streamtest.cc +++ b/src/streamtest.cc @@ -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; diff --git a/src/testrados.c b/src/testrados.c index 062f1526e9f38..1390b98f67f7d 100644 --- a/src/testrados.c +++ b/src/testrados.c @@ -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); diff --git a/src/testradospp.cc b/src/testradospp.cc index da43217e21a54..e9d414ab2b055 100644 --- a/src/testradospp.cc +++ b/src/testradospp.cc @@ -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); -- 2.39.5