class OnCommit final: public Context
{
- int cpuid;
+ seastar::alien::instance& alien;
+ const int cpuid;
Context *oncommit;
seastar::promise<> &alien_done;
public:
OnCommit(
+ seastar::alien::instance& alien,
int id,
seastar::promise<> &done,
Context *oncommit,
ceph::os::Transaction& txn)
- : cpuid(id), oncommit(oncommit),
+ : alien(alien), cpuid(id), oncommit(oncommit),
alien_done(done) {}
void finish(int) final {
- return seastar::alien::submit_to(cpuid, [this] {
+ return seastar::alien::submit_to(alien, cpuid, [this] {
if (oncommit) {
oncommit->complete(0);
}
using crimson::common::get_conf;
AlienStore::AlienStore(const std::string& path, const ConfigValues& values)
- : path{path}
+ : path{path},
+ alien{std::make_unique<seastar::alien::instance>()}
{
cct = std::make_unique<CephContext>(CEPH_ENTITY_TYPE_OSD);
g_ceph_context = cct.get();
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));
+ txn.register_on_commit(new OnCommit(*alien,
+ id, done, crimson_wrapper,
+ txn));
auto c = static_cast<AlienCollection*>(ch.get());
return store->queue_transaction(c->collection, std::move(txn));
});
#include "crimson/os/futurized_collection.h"
#include "crimson/os/futurized_store.h"
+namespace seastar::alien {
+class instance;
+}
+
namespace ceph::os {
class Transaction;
}
constexpr static unsigned MAX_KEYS_PER_OMAP_GET_CALL = 32;
mutable std::unique_ptr<crimson::os::ThreadPool> tp;
const std::string path;
+ std::unique_ptr<seastar::alien::instance> alien;
uint64_t used_bytes = 0;
std::unique_ptr<ObjectStore> store;
std::unique_ptr<CephContext> cct;
seastar::app_template app;
SeastarContext sc;
auto job = sc.with_seastar([&] {
- auto fut = seastar::alien::submit_to(0, [addr, role, count] {
+ auto fut = seastar::alien::submit_to(app.alien(), 0, [addr, role, count] {
return seastar_echo(addr, role, count);
});
fut.wait();