From f89a0387d14fcc8b77ee8dc749ed398164f11bfd Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 1 Jul 2008 10:33:36 -0700 Subject: [PATCH] snap: fix oid.snap --- src/TODO | 4 ---- src/ebofs/Ebofs.cc | 8 ++++---- src/ebofs/test.ebofs.cc | 6 +++--- src/include/object.h | 22 +++++++++++----------- src/include/pobject.h | 2 +- src/os/FileStore.cc | 6 +++--- src/osd/PG.cc | 2 +- src/osd/ReplicatedPG.cc | 14 +++++++------- 8 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/TODO b/src/TODO index 306df9c84f453..bb6b9dc468ff4 100644 --- a/src/TODO +++ b/src/TODO @@ -1,8 +1,4 @@ -v0.3 -- fix mon osdmap send_full/latest ... never use get_source_inst()! - v0.4 -- fix msgr protocol wrt resets, and varying connection close policies - ENOSPC - finish client failure recovery (reconnect after long eviction; and slow delayed reconnect) - make kclient sendpage (and rip out io interruption?) diff --git a/src/ebofs/Ebofs.cc b/src/ebofs/Ebofs.cc index bd50c1ebaffa1..9a2ff7cb9761c 100644 --- a/src/ebofs/Ebofs.cc +++ b/src/ebofs/Ebofs.cc @@ -3056,14 +3056,14 @@ int Ebofs::_clone(pobject_t from, pobject_t to) */ int Ebofs::pick_object_revision_lt(coll_t cid, pobject_t& oid) { - assert(oid.oid.rev > 0); // this is only useful for non-zero oid.rev + assert(oid.oid.snap > 0); // this is only useful for non-zero oid.rev int r = -EEXIST; // return code ebofs_lock.Lock(); { pobject_t orig = oid; pobject_t live = oid; - live.oid.rev = 0; + live.oid.snap = 0; if (object_tab->get_num_keys() > 0) { Table::Cursor cursor(object_tab); @@ -3076,12 +3076,12 @@ int Ebofs::pick_object_revision_lt(coll_t cid, pobject_t& oid) if (t.oid.ino != oid.oid.ino || t.oid.bno != oid.oid.bno) // passed to previous object break; - if (oid.oid.rev < t.oid.rev) { // rev < desired. possible match. + if (oid.oid.snap < t.oid.snap) { // rev < desired. possible match. r = 0; oid = t; break; } - if (firstpass && oid.oid.rev >= t.oid.rev) { // there is no old rev < desired. try live. + if (firstpass && oid.oid.snap >= t.oid.snap) { // there is no old rev < desired. try live. r = 0; oid = live; break; diff --git a/src/ebofs/test.ebofs.cc b/src/ebofs/test.ebofs.cc index 2611971b31eb4..1c333b14cbbf7 100644 --- a/src/ebofs/test.ebofs.cc +++ b/src/ebofs/test.ebofs.cc @@ -51,7 +51,7 @@ public: switch (rand() % 5) {//10) { case 0: { - oid.oid.rev = rand() % 10; + oid.oid.snap = rand() % 10; cout << t << " read " << hex << oid << dec << " at " << off << " len " << len << std::endl; bufferlist bl; fs.read(0, oid, off, len, bl); @@ -137,7 +137,7 @@ public: case 10: { pobject_t newoid = oid; - newoid.oid.rev = rand() % 10; + newoid.oid.snap = rand() % 10; cout << t << " clone " << oid << " to " << newoid << std::endl; fs.clone(0, oid, newoid, 0); } @@ -190,7 +190,7 @@ int main(int argc, const char **argv) // clone it pobject_t oid2; oid2 = oid; - oid2.oid.rev = 1; + oid2.oid.snap = 1; fs.clone(0, oid, oid2, 0); // ... diff --git a/src/include/object.h b/src/include/object.h index 3fb9a6b46789f..3513af880c76d 100644 --- a/src/include/object.h +++ b/src/include/object.h @@ -38,31 +38,31 @@ struct object_t { struct { uint64_t ino; // "file" identifier uint32_t bno; // "block" in that "file" - objectrev_t rev; // revision. normally ctime (as epoch). + objectrev_t snap; // revision. normally ctime (as epoch). } __attribute__ ((packed)); }; - object_t() : ino(0), bno(0), rev(0) {} - object_t(uint64_t i, uint32_t b) : ino(i), bno(b), rev(0) {} - object_t(uint64_t i, uint32_t b, uint64_t r) : ino(i), bno(b), rev(r) {} + object_t() : ino(0), bno(0), snap(0) {} + object_t(uint64_t i, uint32_t b) : ino(i), bno(b), snap(0) {} + object_t(uint64_t i, uint32_t b, uint64_t r) : ino(i), bno(b), snap(r) {} // IMPORTANT: make this match struct ceph_object **** object_t(const ceph_object& co) { ino = co.ino; bno = co.bno; - rev = co.rev; + snap = co.snap; } operator ceph_object() { ceph_object oid; oid.ino = ino; oid.bno = bno; - oid.rev = rev; + oid.snap = snap; return oid; } void encode(bufferlist &bl) const { ::encode(ino, bl); ::encode(bno, bl); - ::encode(rev, bl); + ::encode(snap, bl); } void decode(bufferlist::iterator &bl) { __u64 i, r; @@ -72,7 +72,7 @@ struct object_t { ::decode(r, bl); ino = i; bno = b; - rev = r; + snap = r; } } __attribute__ ((packed)); WRITE_CLASS_ENCODER(object_t) @@ -101,8 +101,8 @@ inline ostream& operator<<(ostream& out, const object_t o) { out.fill('0'); out << setw(8) << o.bno << dec; out.unsetf(ios::right); - if (o.rev) - out << '.' << o.rev; + if (o.snap) + out << '.' << o.snap; return out; } @@ -111,7 +111,7 @@ namespace __gnu_cxx { size_t operator()(const object_t &r) const { static rjhash H; static rjhash I; - return H(r.ino) ^ I(r.bno) ^ H(r.rev); + return H(r.ino) ^ I(r.bno) ^ H(r.snap); } }; diff --git a/src/include/pobject.h b/src/include/pobject.h index 5fe0d99e75d97..d5fe7319cccc2 100644 --- a/src/include/pobject.h +++ b/src/include/pobject.h @@ -73,7 +73,7 @@ namespace __gnu_cxx { size_t operator()(const pobject_t &r) const { static rjhash H; static rjhash I; - return I(r.volume) ^ I(r.rank) ^ H(r.oid.ino) ^ I(r.oid.bno) ^ I(r.oid.rev); + return I(r.volume) ^ I(r.rank) ^ H(r.oid.ino) ^ I(r.oid.bno) ^ H(r.oid.snap); } }; } diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 84820bc5d9e17..db2cace557a41 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -158,10 +158,10 @@ void FileStore::append_oname(const pobject_t &oid, char *s) char *t = s + strlen(s); #ifdef __LP64__ sprintf(t, "/%04x.%04x.%016lx.%08x.%lx", - oid.volume, oid.rank, oid.oid.ino, oid.oid.bno, oid.oid.rev); + oid.volume, oid.rank, oid.oid.ino, oid.oid.bno, oid.oid.snap); #else sprintf(t, "/%04x.%04x.%016llx.%08x.%llx", - oid.volume, oid.rank, oid.oid.ino, oid.oid.bno, oid.oid.rev); + oid.volume, oid.rank, oid.oid.ino, oid.oid.bno, oid.oid.snap); #endif //parse_object(t+1); } @@ -179,7 +179,7 @@ pobject_t FileStore::parse_object(char *s) assert(s[26] == '.'); o.oid.bno = strtoll(s+27, 0, 16); assert(s[35] == '.'); - o.oid.rev = strtoll(s+36, 0, 16); + o.oid.snap = strtoll(s+36, 0, 16); dout(0) << " got " << o << " errno " << errno << " on " << s << dendl; return o; } diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 0ac260a31730e..6646897ab2605 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1387,7 +1387,7 @@ bool PG::pick_object_rev(object_t& oid) objectrev_t crev; int r = osd->store->getattr(info.pgid, t, "crev", &crev, sizeof(crev)); assert(r >= 0); - if (crev <= oid.rev) { + if (crev <= oid.snap) { dout(10) << "pick_object_rev choosing " << t << " crev " << crev << " for " << oid << dendl; oid = t.oid; return true; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 2471b3d49f0c1..20b26e7e07097 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -509,7 +509,7 @@ void ReplicatedPG::op_read(MOSDOp *op) long r = 0; // do it. - if (oid.rev && !pick_object_rev(oid)) { + if (oid.snap && !pick_object_rev(oid)) { // we have no revision for this request. r = -EEXIST; goto done; @@ -668,7 +668,7 @@ void ReplicatedPG::prepare_op_transaction(ObjectStore::Transaction& t, const osd if (crev && rev && rev > crev) { assert(0); pobject_t noid = poid; // FIXME **** - noid.oid.rev = rev; + noid.oid.snap = rev; dout(10) << "prepare_op_transaction cloning " << poid << " crev " << crev << " to " << noid << dendl; t.clone(info.pgid, poid, noid); did_clone = true; @@ -1055,7 +1055,7 @@ objectrev_t ReplicatedPG::assign_version(MOSDOp *op) assert(nv > log.top); // will clone? - if (crev && poid.oid.rev && poid.oid.rev > crev) { + if (crev && poid.oid.snap && poid.oid.snap > crev) { clone_version = nv; nv.version++; } @@ -1066,7 +1066,7 @@ objectrev_t ReplicatedPG::assign_version(MOSDOp *op) nv.version = op->get_version().version; // clone? - if (crev && op->get_oid().rev && op->get_oid().rev > crev) { + if (crev && op->get_oid().snap && op->get_oid().snap > crev) { // backstep clone clone_version = nv; clone_version.version--; @@ -1223,7 +1223,7 @@ void ReplicatedPG::op_modify(MOSDOp *op) << " " << poid.oid << " v " << nv //<< " crev " << crev - << " rev " << poid.oid.rev + << " rev " << poid.oid.snap << " " << op->get_offset() << "~" << op->get_length() << dendl; @@ -1245,11 +1245,11 @@ void ReplicatedPG::op_modify(MOSDOp *op) if (op->get_op() != CEPH_OSD_OP_WRNOOP) { // log and update later. prepare_log_transaction(repop->t, op->get_reqid(), poid, op->get_op(), nv, - crev, poid.oid.rev, peers_complete_thru); + crev, poid.oid.snap, peers_complete_thru); prepare_op_transaction(repop->t, op->get_reqid(), info.pgid, op->get_op(), poid, op->get_offset(), op->get_length(), op->get_data(), - nv, op->get_inc_lock(), crev, poid.oid.rev); + nv, op->get_inc_lock(), crev, poid.oid.snap); } // (logical) local ack. -- 2.39.5