});
}
-seastar::future<> AlienStore::mkfs(uuid_d osd_fsid)
+AlienStore::mkfs_ertr::future<> AlienStore::mkfs(uuid_d osd_fsid)
{
logger().debug("{}", __func__);
store->set_fsid(osd_fsid);
assert(tp);
return tp->submit([this] {
return store->mkfs();
- }).then([] (int r) {
- assert(r == 0);
- return seastar::now();
+ }).then([] (int r) -> mkfs_ertr::future<> {
+ if (r != 0) {
+ return crimson::stateful_ec{
+ std::error_code(-r, std::generic_category()) };
+ } else {
+ return mkfs_ertr::now();
+ }
});
}
seastar::future<> mount() final;
seastar::future<> umount() final;
- seastar::future<> mkfs(uuid_d new_osd_fsid) final;
+ mkfs_ertr::future<> mkfs(uuid_d new_osd_fsid) final;
read_errorator::future<ceph::bufferlist> read(CollectionRef c,
const ghobject_t& oid,
uint64_t offset,
};
};
-seastar::future<> CyanStore::mkfs(uuid_d new_osd_fsid)
+CyanStore::mkfs_ertr::future<> CyanStore::mkfs(uuid_d new_osd_fsid)
{
- return read_meta("fsid").then([=](auto&& ret) {
+ return read_meta("fsid").then([=](auto&& ret) -> mkfs_ertr::future<> {
auto& [r, fsid_str] = ret;
if (r == -ENOENT) {
if (new_osd_fsid.is_zero()) {
}
return write_meta("fsid", fmt::format("{}", osd_fsid));
} else if (r < 0) {
- throw std::runtime_error("read_meta");
+ static const char msg[]{"read_meta"};
+ return crimson::stateful_ec{ singleton_ec<msg>() };
} else {
logger().info("mkfs already has fsid {}", fsid_str);
if (!osd_fsid.parse(fsid_str.c_str())) {
- throw std::runtime_error("failed to parse fsid");
+ static const char msg[]{"failed to parse fsid"};
+ return crimson::stateful_ec{ singleton_ec<msg>() };
} 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");
+ static const char msg[]{"unmatched osd_fsid"};
+ return crimson::stateful_ec{ singleton_ec<msg>() };
} else {
- return seastar::now();
+ return mkfs_ertr::now();
}
}
- }).then([this]{
+ }).safe_then([this]{
std::string fn = path + "/collections";
ceph::bufferlist bl;
std::set<coll_t> collections;
ceph::encode(collections, bl);
return crimson::write_file(std::move(bl), fn);
- }).then([this] {
+ }).safe_then([this] {
return write_meta("type", "memstore");
});
}
seastar::future<> mount() final;
seastar::future<> umount() final;
- seastar::future<> mkfs(uuid_d new_osd_fsid) final;
+ mkfs_ertr::future<> mkfs(uuid_d new_osd_fsid) final;
seastar::future<store_statfs_t> stat() const final;
seastar::future<struct stat> stat(
CollectionRef c,
virtual seastar::future<> mount() = 0;
virtual seastar::future<> umount() = 0;
- virtual seastar::future<> mkfs(uuid_d new_osd_fsid) = 0;
+ using mkfs_ertr = crimson::errorator<crimson::stateful_ec>;
+ virtual mkfs_ertr::future<> mkfs(uuid_d new_osd_fsid) = 0;
virtual seastar::future<store_statfs_t> stat() const = 0;
using CollectionRef = boost::intrusive_ptr<FuturizedCollection>;
);
}
-seastar::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
+SeaStore::mkfs_ertr::future<> SeaStore::mkfs(uuid_d new_osd_fsid)
{
return segment_manager->mkfs(
seastore_meta_t{new_osd_fsid}
seastar::future<> mount() final;
seastar::future<> umount() final;
- seastar::future<> mkfs(uuid_d new_osd_fsid) final;
+ mkfs_ertr::future<> mkfs(uuid_d new_osd_fsid) final;
seastar::future<store_statfs_t> stat() const final;
read_errorator::future<ceph::bufferlist> read(
seastar::future<> OSD::mkfs(uuid_d osd_uuid, uuid_d cluster_fsid)
{
return store.start().then([this, osd_uuid] {
- return store.mkfs(osd_uuid);
+ return store.mkfs(osd_uuid).handle_error(
+ crimson::stateful_ec::handle([] (const auto& ec) {
+ logger().error("error creating empty object store in {}: ({}) {}",
+ local_conf().get_val<std::string>("osd_data"),
+ ec.value(), ec.message());
+ std::exit(EXIT_FAILURE);
+ }));
}).then([this] {
return store.mount();
}).then([cluster_fsid, this] {
TMTestState::_destroy();
}
- virtual seastar::future<> _mkfs() final {
+ virtual FuturizedStore::mkfs_ertr::future<> _mkfs() final {
return TMTestState::_mkfs(
- ).then([this] {
+ ).safe_then([this] {
return tm->mount(
).safe_then([this] {
return repeat_eagain([this] {
}
virtual seastar::future<> _teardown() = 0;
- virtual seastar::future<> _mkfs() = 0;
+ virtual FuturizedStore::mkfs_ertr::future<> _mkfs() = 0;
virtual seastar::future<> _mount() = 0;
void restart() {
});
}
- virtual seastar::future<> _mkfs() {
+ virtual FuturizedStore::mkfs_ertr::future<> _mkfs() {
return tm->mkfs(
).handle_error(
crimson::ct_error::assert_all{"Error in teardown"}
return seastore->mount();
}
- virtual seastar::future<> _mkfs() {
+ virtual FuturizedStore::mkfs_ertr::future<> _mkfs() {
return seastore->mkfs(uuid_d{});
}
};