});
}
-seastar::future<> CyanStore::mkfs()
+seastar::future<> CyanStore::mkfs(uuid_d new_osd_fsid)
{
std::string fsid_str;
int r = read_meta("fsid", &fsid_str);
if (r == -ENOENT) {
- osd_fsid.generate_random();
+ if (new_osd_fsid.is_zero()) {
+ osd_fsid.generate_random();
+ } else {
+ osd_fsid = new_osd_fsid;
+ }
write_meta("fsid", fmt::format("{}", osd_fsid));
} else if (r < 0) {
throw std::runtime_error("read_meta");
logger().info("{} already has fsid {}", __func__, fsid_str);
if (!osd_fsid.parse(fsid_str.c_str())) {
throw std::runtime_error("failed to parse fsid");
+ } else if (osd_fsid != new_osd_fsid) {
+ logger().error("on-disk fsid {} != provided {}", osd_fsid, new_osd_fsid);
+ throw std::runtime_error("unmatched osd_fsid");
}
}
seastar::future<> mount() final;
seastar::future<> umount() final;
- seastar::future<> mkfs() final;
+ seastar::future<> mkfs(uuid_d new_osd_fsid) final;
store_statfs_t stat() const final;
seastar::future<ceph::bufferlist> read(CollectionRef c,
virtual seastar::future<> mount() = 0;
virtual seastar::future<> umount() = 0;
- virtual seastar::future<> mkfs() = 0;
+ virtual seastar::future<> mkfs(uuid_d new_osd_fsid) = 0;
virtual store_statfs_t stat() const = 0;
using CollectionRef = boost::intrusive_ptr<Collection>;
seastar::future<> OSD::mkfs(uuid_d osd_uuid, uuid_d cluster_fsid)
{
- return store->mkfs().then([this] {
+ return store->mkfs(osd_uuid).then([this] {
return store->mount();
- }).then([cluster_fsid, osd_uuid, this] {
+ }).then([cluster_fsid, this] {
superblock.cluster_fsid = cluster_fsid;
- superblock.osd_fsid = osd_uuid;
+ superblock.osd_fsid = store->get_fsid();
superblock.whoami = whoami;
superblock.compat_features = get_osd_initial_compat_set();