From 8ac00cb15cb4d3935f55f9a623fd5f28059db29c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 9 Jun 2009 20:29:34 -0700 Subject: [PATCH] osd: include ondisk magic in encoding for key ondisk state structs This will eventually allow us to incrementally migrate to updated ondisk structures by making the decoding conditional (dependent on the encoded version). At least in some cases. --- src/osd/PG.h | 6 ++++++ src/osd/osd_types.h | 26 ++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/osd/PG.h b/src/osd/PG.h index 4780f537f12..e8e6cd0b22b 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -132,6 +132,9 @@ public: bool dne() const { return history.epoch_created == 0; } void encode(bufferlist &bl) const { + __u8 v = CEPH_OSD_ONDISK_VERSION; + ::encode(v, bl); + ::encode(pgid, bl); ::encode(last_update, bl); ::encode(last_complete, bl); @@ -142,6 +145,9 @@ public: ::encode(snap_trimq, bl); } void decode(bufferlist::iterator &bl) { + __u8 v = CEPH_OSD_ONDISK_VERSION; + ::decode(v, bl); + ::decode(pgid, bl); ::decode(last_update, bl); ::decode(last_complete, bl); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 9e6b5a675d2..80ed2f7c3bf 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -24,7 +24,8 @@ -#define CEPH_OSD_ONDISK_MAGIC "ceph osd volume v015" +#define CEPH_OSD_ONDISK_VERSION 16 +#define CEPH_OSD_ONDISK_MAGIC "ceph osd volume v016" @@ -602,6 +603,9 @@ struct pg_stat_t { { } void encode(bufferlist &bl) const { + __u8 v = CEPH_OSD_ONDISK_VERSION; + ::encode(v, bl); + ::encode(version, bl); ::encode(reported, bl); ::encode(state, bl); @@ -620,6 +624,9 @@ struct pg_stat_t { ::encode(acting, bl); } void decode(bufferlist::iterator &bl) { + __u8 v; + ::decode(v, bl); + ::decode(version, bl); ::decode(reported, bl); ::decode(state, bl); @@ -734,6 +741,9 @@ public: } void encode(bufferlist &bl) const { + __u8 v = CEPH_OSD_ONDISK_VERSION; + ::encode(v, bl); + ::encode(magic, bl); ::encode(fsid, bl); ::encode(whoami, bl); @@ -745,6 +755,9 @@ public: ::encode(mounted, bl); } void decode(bufferlist::iterator &bl) { + __u8 v; + ::decode(v, bl); + ::decode(magic, bl); ::decode(fsid, bl); ::decode(whoami, bl); @@ -825,6 +838,8 @@ struct object_info_t { eversion_t version, prior_version; osd_reqid_t last_reqid; + + __u64 size; utime_t mtime; osd_reqid_t wrlock_by; // [head] @@ -834,10 +849,14 @@ struct object_info_t { bufferlist truncate_info; // bah.. messy layering. void encode(bufferlist& bl) const { + const __u8 v = CEPH_OSD_ONDISK_VERSION; + ::encode(v, bl); + ::encode(soid, bl); ::encode(version, bl); ::encode(prior_version, bl); ::encode(last_reqid, bl); + ::encode(size, bl); ::encode(mtime, bl); if (soid.snap == CEPH_NOSNAP) { ::encode(snapset, bl); @@ -847,10 +866,13 @@ struct object_info_t { ::encode(truncate_info, bl); } void decode(bufferlist::iterator& bl) { + __u8 v; + ::decode(v, bl); ::decode(soid, bl); ::decode(version, bl); ::decode(prior_version, bl); ::decode(last_reqid, bl); + ::decode(size, bl); ::decode(mtime, bl); if (soid.snap == CEPH_NOSNAP) { ::decode(snapset, bl); @@ -864,7 +886,7 @@ struct object_info_t { decode(p); } - object_info_t(sobject_t s) : soid(s) {} + object_info_t(sobject_t s) : soid(s), size(0) {} object_info_t(bufferlist& bl) { decode(bl); }