return seastar::now();
}
-seastar::future<> CyanStore::mkfs(uuid_d osd_fsid)
+seastar::future<> CyanStore::mkfs()
{
string fsid_str;
int r = read_meta("fsid", &fsid_str);
if (r == -ENOENT) {
+ osd_fsid.generate_random();
write_meta("fsid", fmt::format("{}", osd_fsid));
} else if (r < 0) {
throw std::runtime_error("read_meta");
} else {
- logger().error("{} already has fsid {}", __func__, fsid_str);
- throw std::runtime_error("mkfs");
+ logger().info("{} already has fsid {}", __func__, fsid_str);
+ if (!osd_fsid.parse(fsid_str.c_str())) {
+ throw std::runtime_error("failed to parse fsid");
+ }
}
string fn = path + "/collections";
*value = string{buf, static_cast<size_t>(r)};
return 0;
}
+
+uuid_d CyanStore::get_fsid() const
+{
+ return osd_fsid;
+}
}
std::unordered_map<coll_t, CollectionRef> coll_map;
std::map<coll_t,CollectionRef> new_coll_map;
uint64_t used_bytes = 0;
+ uuid_d osd_fsid;
public:
CyanStore(const std::string& path);
seastar::future<> mount();
seastar::future<> umount();
- seastar::future<> mkfs(uuid_d osd_fsid);
+ seastar::future<> mkfs();
seastar::future<bufferlist> read(CollectionRef c,
const ghobject_t& oid,
uint64_t offset,
void write_meta(const std::string& key,
const std::string& value);
int read_meta(const std::string& key, std::string* value);
+ uuid_d get_fsid() const;
private:
int _write(const coll_t& cid, const ghobject_t& oid,
{
const auto data_path = local_conf().get_val<std::string>("osd_data");
store = std::make_unique<ceph::os::CyanStore>(data_path);
- uuid_d osd_fsid;
- osd_fsid.generate_random();
- return store->mkfs(osd_fsid).then([this] {
+ return store->mkfs().then([this] {
return store->mount();
- }).then([cluster_fsid, osd_fsid, this] {
+ }).then([cluster_fsid, this] {
superblock.cluster_fsid = cluster_fsid;
- superblock.osd_fsid = osd_fsid;
+ superblock.osd_fsid = store->get_fsid();
superblock.whoami = whoami;
superblock.compat_features = get_osd_initial_compat_set();