./crushtool -c cm.txt -o cm
./osdmaptool --clobber --import-crush cm .ceph_osdmap
- ./ceph osd setmap -i .ceph_osdmap
+ ./ceph osd setmap 2 -i .ceph_osdmap
fi
# build and inject an initial osd map
$CEPH_BIN/osdmaptool --clobber --createsimple .ceph_monmap 4 --print .ceph_osdmap
-$CEPH_BIN/cmonctl osd setmap -i .ceph_osdmap
+$CEPH_BIN/cmonctl osd setmap 2 -i .ceph_osdmap
# stop monitor
killall cmon
paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs));
return true;
}
- else if (m->cmd[1] == "setmap") {
+ else if (m->cmd[1] == "setmap" && m->cmd.size() == 3) {
OSDMap map;
map.decode(m->get_data());
+ epoch_t e = atoi(m->cmd[2].c_str());
if (ceph_fsid_equal(&map.fsid, &mon->monmap->fsid)) {
- map.epoch = pending_inc.epoch; // make sure epoch is correct
- map.encode(pending_inc.fullmap);
- string rs = "set osd map";
- paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs));
- return true;
- }
- ss << "osdmap fsid " << map.fsid << " does not match monitor fsid " << mon->monmap->fsid;
+ if (pending_inc.epoch == e) {
+ map.epoch = pending_inc.epoch; // make sure epoch is correct
+ map.encode(pending_inc.fullmap);
+ string rs = "set osd map";
+ paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs));
+ return true;
+ } else
+ ss << "next osdmap epoch " << pending_inc.epoch << " != " << e;
+ } else
+ ss << "osdmap fsid " << map.fsid << " does not match monitor fsid " << mon->monmap->fsid;
err = -EINVAL;
}
else if (m->cmd[1] == "setmaxosd" && m->cmd.size() > 2) {
# build and inject an initial osd map
$CEPH_BIN/osdmaptool --clobber --createsimple .ceph_monmap 4 --print .ceph_osdmap # --pgbits 2
-$CEPH_BIN/cmonctl osd setmap -i .ceph_osdmap
+$CEPH_BIN/cmonctl osd setmap 2 -i .ceph_osdmap
for osd in 0 #1 2 3 #4 5 6 7 8 9 10 11 12 13 14 15
do
if [ $new -eq 1 ]; then
# build and inject an initial osd map
$CEPH_BIN/osdmaptool --clobber --createsimple .ceph_monmap 4 .ceph_osdmap # --pgbits 2
- $CEPH_BIN/ceph osd setmap -i .ceph_osdmap
+ $CEPH_BIN/ceph osd setmap 2 -i .ceph_osdmap
fi
fi