]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Create new static function PG::_write_info() for use by PG import
authorDavid Zafman <david.zafman@inktank.com>
Fri, 5 Apr 2013 21:03:18 +0000 (14:03 -0700)
committerDavid Zafman <david.zafman@inktank.com>
Fri, 19 Apr 2013 18:29:18 +0000 (11:29 -0700)
Signed-off-by: David Zafman <david.zafman@inktank.com>
src/osd/PG.cc
src/osd/PG.h

index 095e207389789c4c90505c8dcf0d094eb8dc33bc..78c05246ea97cfcae47286a301d287b608032041 100644 (file)
@@ -2493,11 +2493,17 @@ void PG::upgrade(ObjectStore *store, const interval_set<snapid_t> &snapcolls)
   assert(r == 0);
 }
 
-void PG::write_info(ObjectStore::Transaction& t)
+int PG::_write_info(ObjectStore::Transaction& t, epoch_t epoch,
+    pg_info_t &info, coll_t coll,
+    map<epoch_t,pg_interval_t> &past_intervals,
+    interval_set<snapid_t> &snap_collections,
+    hobject_t &infos_oid,
+    __u8 info_struct_v, bool dirty_big_info)
 {
   // pg state
 
-  assert(info_struct_v <= cur_struct_v);
+  if (info_struct_v > cur_struct_v)
+    return -EINVAL;
 
   // Only need to write struct_v to attr when upgrading
   if (info_struct_v < cur_struct_v) {
@@ -2511,7 +2517,7 @@ void PG::write_info(ObjectStore::Transaction& t)
   // info.  store purged_snaps separately.
   interval_set<snapid_t> purged_snaps;
   map<string,bufferlist> v;
-  ::encode(get_osdmap()->get_epoch(), v[get_epoch_key(info.pgid)]);
+  ::encode(epoch, v[get_epoch_key(info.pgid)]);
   purged_snaps.swap(info.purged_snaps);
   ::encode(info, v[get_info_key(info.pgid)]);
   purged_snaps.swap(info.purged_snaps);
@@ -2522,10 +2528,20 @@ void PG::write_info(ObjectStore::Transaction& t)
     ::encode(past_intervals, bigbl);
     ::encode(snap_collections, bigbl);
     ::encode(info.purged_snaps, bigbl);
-    dout(20) << "write_info bigbl " << bigbl.length() << dendl;
+    //dout(20) << "write_info bigbl " << bigbl.length() << dendl;
   }
 
-  t.omap_setkeys(coll_t::META_COLL, osd->infos_oid, v);
+  t.omap_setkeys(coll_t::META_COLL, infos_oid, v);
+
+  return 0;
+}
+
+void PG::write_info(ObjectStore::Transaction& t)
+{
+  int ret = _write_info(t, get_osdmap()->get_epoch(), info, coll,
+     past_intervals, snap_collections, osd->infos_oid,
+     info_struct_v, dirty_big_info);
+  assert(ret == 0);
 
   dirty_info = false;
   dirty_big_info = false;
index f437bafbb16e1511929040271f0642653a6523c1..5ab9caa2ebe9c6a4447a4fda664944af62fb0686 100644 (file)
@@ -1831,6 +1831,12 @@ private:
   void write_log(ObjectStore::Transaction& t);
 public:
 
+  static int _write_info(ObjectStore::Transaction& t, epoch_t epoch,
+    pg_info_t &info, coll_t coll,
+    map<epoch_t,pg_interval_t> &past_intervals,
+    interval_set<snapid_t> &snap_collections,
+    hobject_t &infos_oid,
+    __u8 info_struct_v, bool dirty_big_info);
   void write_if_dirty(ObjectStore::Transaction& t);
 
   void add_log_entry(pg_log_entry_t& e, bufferlist& log_bl);