cct = std::make_unique<CephContext>(CEPH_ENTITY_TYPE_OSD);
g_ceph_context = cct.get();
cct->_conf.set_config_values(values);
+}
+
+seastar::future<> AlienStore::start()
+{
store = std::make_unique<BlueStore>(cct.get(), path);
std::vector<uint64_t> cpu_cores = _parse_cpu_cores();
// cores except the first "N_CORES_FOR_SEASTAR" ones will
const auto num_threads =
get_conf<uint64_t>("crimson_alien_op_num_threads");
tp = std::make_unique<crimson::os::ThreadPool>(num_threads, 128, cpu_cores);
-}
-
-seastar::future<> AlienStore::start()
-{
return tp->start();
}
seastar::future<> AlienStore::stop()
{
+ assert(tp);
return tp->submit([this] {
for (auto [cid, ch]: coll_map) {
static_cast<AlienCollection*>(ch.get())->collection.reset();
seastar::future<> AlienStore::mount()
{
logger().debug("{}", __func__);
+ assert(tp);
return tp->submit([this] {
return store->mount();
}).then([] (int r) {
seastar::future<> AlienStore::umount()
{
logger().info("{}", __func__);
+ assert(tp);
return transaction_gate.close().then([this] {
return tp->submit([this] {
return store->umount();
{
logger().debug("{}", __func__);
store->set_fsid(osd_fsid);
+ assert(tp);
return tp->submit([this] {
return store->mkfs();
}).then([] (int r) {
uint64_t limit) const
{
logger().debug("{}", __func__);
+ assert(tp);
return seastar::do_with(std::vector<ghobject_t>(), ghobject_t(),
[=] (auto &objects, auto &next) {
objects.reserve(limit);
seastar::future<CollectionRef> AlienStore::create_new_collection(const coll_t& cid)
{
logger().debug("{}", __func__);
+ assert(tp);
return tp->submit([this, cid] {
return store->create_new_collection(cid);
}).then([this, cid] (ObjectStore::CollectionHandle c) {
seastar::future<CollectionRef> AlienStore::open_collection(const coll_t& cid)
{
logger().debug("{}", __func__);
+ assert(tp);
return tp->submit([this, cid] {
return store->open_collection(cid);
}).then([this] (ObjectStore::CollectionHandle c) {
seastar::future<std::vector<coll_t>> AlienStore::list_collections()
{
logger().debug("{}", __func__);
+ assert(tp);
return seastar::do_with(std::vector<coll_t>{}, [=] (auto &ls) {
return tp->submit([this, &ls] {
uint32_t op_flags)
{
logger().debug("{}", __func__);
+ assert(tp);
return seastar::do_with(ceph::bufferlist{}, [=] (auto &bl) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &bl] {
auto c = static_cast<AlienCollection*>(ch.get());
uint32_t op_flags)
{
logger().debug("{}", __func__);
+ assert(tp);
return seastar::do_with(ceph::bufferlist{},
[this, ch, oid, &m, op_flags](auto& bl) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()),
std::string_view name) const
{
logger().debug("{}", __func__);
+ assert(tp);
return seastar::do_with(ceph::bufferlist{}, [=] (auto &value) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &value] {
auto c =static_cast<AlienCollection*>(ch.get());
const ghobject_t& oid)
{
logger().debug("{}", __func__);
+ assert(tp);
return seastar::do_with(attrs_t{}, [=] (auto &aset) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &aset] {
auto c = static_cast<AlienCollection*>(ch.get());
-> read_errorator::future<omap_values_t>
{
logger().debug("{}", __func__);
+ assert(tp);
return seastar::do_with(omap_values_t{}, [=] (auto &values) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &values] {
auto c = static_cast<AlienCollection*>(ch.get());
-> read_errorator::future<std::tuple<bool, omap_values_t>>
{
logger().debug("{} with_start", __func__);
+ assert(tp);
return seastar::do_with(omap_values_t{}, [=] (auto &values) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &values] {
auto c = static_cast<AlienCollection*>(ch.get());
return alien_coll->with_lock([this, ch, id, &txn, &done] {
Context *crimson_wrapper =
ceph::os::Transaction::collect_all_contexts(txn);
+ assert(tp);
return tp->submit(ch->get_cid().hash_to_shard(tp->size()),
[this, ch, id, crimson_wrapper, &txn, &done] {
txn.register_on_commit(new OnCommit(id, done, crimson_wrapper, txn));
seastar::future<> AlienStore::inject_data_error(const ghobject_t& o)
{
logger().debug("{}", __func__);
+ assert(tp);
return tp->submit([=] {
return store->inject_data_error(o);
});
seastar::future<> AlienStore::inject_mdata_error(const ghobject_t& o)
{
logger().debug("{}", __func__);
+ assert(tp);
return tp->submit([=] {
return store->inject_mdata_error(o);
});
const std::string& value)
{
logger().debug("{}", __func__);
+ assert(tp);
return tp->submit([=] {
return store->write_meta(key, value);
}).then([] (int r) {
AlienStore::read_meta(const std::string& key)
{
logger().debug("{}", __func__);
+ assert(tp);
return tp->submit([this, key] {
std::string value;
int r = store->read_meta(key, &value);
seastar::future<store_statfs_t> AlienStore::stat() const
{
logger().info("{}", __func__);
+ assert(tp);
return seastar::do_with(store_statfs_t{}, [this] (store_statfs_t &st) {
return tp->submit([this, &st] {
return store->statfs(&st, nullptr);
CollectionRef ch,
const ghobject_t& oid)
{
+ assert(tp);
return seastar::do_with((struct stat){}, [this, ch, oid](auto& st) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [this, ch, oid, &st] {
auto c = static_cast<AlienCollection*>(ch.get());
const ghobject_t& oid)
-> read_errorator::future<ceph::bufferlist>
{
+ assert(tp);
return seastar::do_with(ceph::bufferlist(), [=](auto& bl) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &bl] {
auto c = static_cast<AlienCollection*>(ch.get());
uint64_t off,
uint64_t len)
{
+ assert(tp);
return seastar::do_with(std::map<uint64_t, uint64_t>(), [=](auto& destmap) {
return tp->submit(ch->get_cid().hash_to_shard(tp->size()), [=, &destmap] {
auto c = static_cast<AlienCollection*>(ch.get());
CollectionRef ch,
const ghobject_t& oid)
{
+ assert(tp);
return tp->submit(ch->get_cid().hash_to_shard(tp->size()),
[this, ch, oid] {
auto c = static_cast<AlienCollection*>(ch.get());
// needs further optimization.
seastar::future<> AlienStore::AlienOmapIterator::seek_to_first()
{
+ assert(store->tp);
return store->tp->submit(ch->get_cid().hash_to_shard(store->tp->size()),
[this] {
return iter->seek_to_first();
seastar::future<> AlienStore::AlienOmapIterator::upper_bound(
const std::string& after)
{
+ assert(store->tp);
return store->tp->submit(ch->get_cid().hash_to_shard(store->tp->size()),
[this, after] {
return iter->upper_bound(after);
seastar::future<> AlienStore::AlienOmapIterator::lower_bound(
const std::string& to)
{
+ assert(store->tp);
return store->tp->submit(ch->get_cid().hash_to_shard(store->tp->size()),
[this, to] {
return iter->lower_bound(to);
seastar::future<> AlienStore::AlienOmapIterator::next()
{
+ assert(store->tp);
return store->tp->submit(ch->get_cid().hash_to_shard(store->tp->size()),
[this] {
return iter->next();