/* put everything in the transaction */
put_version(t, pending_inc.epoch, bl);
put_last_committed(t, pending_inc.epoch);
+
+ // metadata, too!
+ for (map<int,bufferlist>::iterator p = pending_metadata.begin();
+ p != pending_metadata.end();
+ ++p)
+ t->put(OSD_METADATA_PREFIX, stringify(p->first), p->second);
+ for (set<int>::iterator p = pending_metadata_rm.begin();
+ p != pending_metadata_rm.end();
+ ++p)
+ t->erase(OSD_METADATA_PREFIX, stringify(*p));
+ pending_metadata.clear();
+ pending_metadata_rm.clear();
}
void OSDMonitor::share_map_with_random_osd()
}
}
+ // metadata
+ bufferlist osd_metadata;
+ ::encode(m->metadata, osd_metadata);
+ pending_metadata[from] = osd_metadata;
+
// adjust last clean unmount epoch?
const osd_info_t& info = osdmap.get_info(from);
dout(10) << " old osd_info: " << info << dendl;
} else {
pending_inc.new_state[osd] = osdmap.get_state(osd);
pending_inc.new_uuid[osd] = uuid_d();
+ pending_metadata_rm.insert(osd);
if (any) {
ss << ", osd." << osd;
} else {
#include "messages/MOSDFailure.h"
#include "messages/MPoolOp.h"
+#define OSD_METADATA_PREFIX "osd_metadata"
+
/// information about a particular peer's failure reports for one osd
struct failure_reporter_t {
int num_reports; ///< reports from this reporter
private:
// [leader]
OSDMap::Incremental pending_inc;
+ map<int, bufferlist> pending_metadata;
+ set<int> pending_metadata_rm;
map<int, failure_info_t> failure_info;
map<int,utime_t> down_pending_out; // osd down -> out