TEST_F(BlockDirectoryFixture, SetYield)
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
- ASSERT_EQ(0, dir->set(block, yield));
+ ASSERT_EQ(0, dir->set(env->dpp, block, optional_yield{yield}));
boost::system::error_code ec;
request req;
TEST_F(BlockDirectoryFixture, GetYield)
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
- ASSERT_EQ(0, dir->set(block, yield));
+ ASSERT_EQ(0, dir->set(env->dpp, block, optional_yield{yield}));
{
boost::system::error_code ec;
EXPECT_EQ(std::get<0>(resp).value(), 0);
}
- ASSERT_EQ(0, dir->get(block, yield));
+ ASSERT_EQ(0, dir->get(env->dpp, block, optional_yield{yield}));
EXPECT_EQ(block->cacheObj.objName, "newoid");
{
TEST_F(BlockDirectoryFixture, CopyYield)
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
- ASSERT_EQ(0, dir->set(block, yield));
- ASSERT_EQ(0, dir->copy(block, "copyTestName", "copyBucketName", yield));
+ ASSERT_EQ(0, dir->set(env->dpp, block, optional_yield{yield}));
+ ASSERT_EQ(0, dir->copy(env->dpp, block, "copyTestName", "copyBucketName", optional_yield{yield}));
boost::system::error_code ec;
request req;
TEST_F(BlockDirectoryFixture, DelYield)
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
- ASSERT_EQ(0, dir->set(block, yield));
+ ASSERT_EQ(0, dir->set(env->dpp, block, optional_yield{yield}));
{
boost::system::error_code ec;
EXPECT_EQ(std::get<0>(resp).value(), 1);
}
- ASSERT_EQ(0, dir->del(block, yield));
+ ASSERT_EQ(0, dir->del(env->dpp, block, optional_yield{yield}));
{
boost::system::error_code ec;
TEST_F(BlockDirectoryFixture, UpdateFieldYield)
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
- ASSERT_EQ(0, dir->set(block, yield));
- ASSERT_EQ(0, dir->update_field(block, "objName", "newTestName", yield));
- ASSERT_EQ(0, dir->update_field(block, "blockHosts", "127.0.0.1:5000", yield));
+ ASSERT_EQ(0, dir->set(env->dpp, block, optional_yield{yield}));
+ ASSERT_EQ(0, dir->update_field(env->dpp, block, "objName", "newTestName", optional_yield{yield}));
+ ASSERT_EQ(0, dir->update_field(env->dpp, block, "blockHosts", "127.0.0.1:5000", optional_yield{yield}));
boost::system::error_code ec;
request req;
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
block->hostsList.push_back("127.0.0.1:6000");
- ASSERT_EQ(0, dir->set(block, yield));
- ASSERT_EQ(0, dir->remove_host(block, "127.0.0.1:6379", yield));
+ ASSERT_EQ(0, dir->set(env->dpp, block, optional_yield{yield}));
+ ASSERT_EQ(0, dir->remove_host(env->dpp, block, "127.0.0.1:6379", optional_yield{yield}));
{
boost::system::error_code ec;
EXPECT_EQ(std::get<1>(resp).value(), "127.0.0.1:6000");
}
- ASSERT_EQ(0, dir->remove_host(block, "127.0.0.1:6000", yield));
+ ASSERT_EQ(0, dir->remove_host(env->dpp, block, "127.0.0.1:6000", optional_yield{yield}));
{
boost::system::error_code ec;
ASSERT_NE(policyDriver, nullptr);
ASSERT_NE(conn, nullptr);
- dir->init(env->cct);
+ env->cct->_conf->rgw_d4n_l1_datacache_address = "127.0.0.1:6379";
cacheDriver->initialize(env->dpp);
bl.append("test data");
std::string oid = build_index(block->cacheObj.bucketName, block->cacheObj.objName, block->blockID, block->size);
if (this->policyDriver->get_cache_policy()->exist_key(build_index(block->cacheObj.bucketName, block->cacheObj.objName, block->blockID, block->size))) { /* Local copy */
- policyDriver->get_cache_policy()->update(env->dpp, oid, 0, bl.length(), "", y);
+ policyDriver->get_cache_policy()->update(env->dpp, oid, 0, bl.length(), "", false, y);
return 0;
} else {
if (this->policyDriver->get_cache_policy()->eviction(dpp, block->size, y) < 0)
return -1;
- int exists = dir->exist_key(block, y);
+ int exists = dir->exist_key(env->dpp, block, y);
if (exists > 0) { /* Remote copy */
- if (dir->get(block, y) < 0) {
+ if (dir->get(env->dpp, block, y) < 0) {
return -1;
} else {
if (!block->hostsList.empty()) {
block->globalWeight += age;
auto globalWeight = std::to_string(block->globalWeight);
- if (dir->update_field(block, "globalWeight", globalWeight, y) < 0) {
+ if (dir->update_field(env->dpp, block, "globalWeight", globalWeight, y) < 0) {
return -1;
} else {
return 0;
}
} else if (!exists) { /* No remote copy */
block->hostsList.push_back(dir->cct->_conf->rgw_d4n_l1_datacache_address);
- if (dir->set(block, y) < 0)
+ if (dir->set(env->dpp, block, y) < 0)
return -1;
- this->policyDriver->get_cache_policy()->update(dpp, oid, 0, bl.length(), "", y);
+ this->policyDriver->get_cache_policy()->update(dpp, oid, 0, bl.length(), "", false, y);
if (cacheDriver->put(dpp, oid, bl, bl.length(), attrs, y) < 0)
return -1;
return cacheDriver->set_attr(dpp, oid, "localWeight", std::to_string(age), y);
rgw::d4n::BlockDirectory* dir;
rgw::d4n::PolicyDriver* policyDriver;
rgw::cache::RedisDriver* cacheDriver;
+ rgw::sal::D4NFilterDriver* driver = nullptr;
net::io_context io;
std::shared_ptr<connection> conn;
TEST_F(LFUDAPolicyFixture, LocalGetBlockYield)
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
+ env->cct->_conf->rgw_lfuda_sync_frequency = 1;
+ dynamic_cast<rgw::d4n::LFUDAPolicy*>(policyDriver->get_cache_policy())->save_y(optional_yield{yield});
+ policyDriver->get_cache_policy()->init(env->cct, env->dpp, io, driver);
+
std::string key = block->cacheObj.bucketName + "_" + block->cacheObj.objName + "_" + std::to_string(block->blockID) + "_" + std::to_string(block->size);
- ASSERT_EQ(0, cacheDriver->put(env->dpp, key, bl, bl.length(), attrs, yield));
- policyDriver->get_cache_policy()->update(env->dpp, key, 0, bl.length(), "", yield);
+ ASSERT_EQ(0, cacheDriver->put(env->dpp, key, bl, bl.length(), attrs, optional_yield{yield}));
+ policyDriver->get_cache_policy()->update(env->dpp, key, 0, bl.length(), "", false, optional_yield{yield});
ASSERT_EQ(lfuda(env->dpp, block, cacheDriver, yield), 0);
ASSERT_EQ((bool)ec, false);
EXPECT_EQ(std::get<0>(resp).value(), "2");
conn->cancel();
+
+ delete policyDriver;
+ policyDriver = nullptr;
}, rethrow);
io.run();
attrVal.append("testBucket");
attrs.insert({"bucket_name", attrVal});
- ASSERT_EQ(0, dir->set(&victim, yield));
+ env->cct->_conf->rgw_lfuda_sync_frequency = 1;
+ dynamic_cast<rgw::d4n::LFUDAPolicy*>(policyDriver->get_cache_policy())->save_y(optional_yield{yield});
+ policyDriver->get_cache_policy()->init(env->cct, env->dpp, io, driver);
+
+ ASSERT_EQ(0, dir->set(env->dpp, &victim, optional_yield{yield}));
std::string victimKey = victim.cacheObj.bucketName + "_" + victim.cacheObj.objName + "_" + std::to_string(victim.blockID) + "_" + std::to_string(victim.size);
- ASSERT_EQ(0, cacheDriver->put(env->dpp, victimKey, bl, bl.length(), attrs, yield));
- policyDriver->get_cache_policy()->update(env->dpp, victimKey, 0, bl.length(), "", yield);
+ ASSERT_EQ(0, cacheDriver->put(env->dpp, victimKey, bl, bl.length(), attrs, optional_yield{yield}));
+ policyDriver->get_cache_policy()->update(env->dpp, victimKey, 0, bl.length(), "", false, optional_yield{yield});
/* Remote block */
block->size = cacheDriver->get_free_space(env->dpp) + 1; /* To trigger eviction */
block->hostsList.push_back("127.0.0.1:6000");
block->cacheObj.hostsList.push_back("127.0.0.1:6000");
- ASSERT_EQ(0, dir->set(block, yield));
+ ASSERT_EQ(0, dir->set(env->dpp, block, optional_yield{yield}));
+
+ { /* Avoid sending victim block to remote cache since no network is available */
+ boost::system::error_code ec;
+ request req;
+ req.push("HSET", "lfuda", "minLocalWeights_sum", "10", "minLocalWeights_size", "1");
+
+ response<boost::redis::ignore_t> resp;
+
+ conn->async_exec(req, resp, yield[ec]);
+ }
ASSERT_GE(lfuda(env->dpp, block, cacheDriver, yield), 0);
EXPECT_EQ(std::get<1>(resp).value(), 0);
EXPECT_EQ(std::get<2>(resp).value(), "1");
conn->cancel();
+
+ delete policyDriver;
+ policyDriver = nullptr;
}, rethrow);
- io.run();
+ io.run();
}
TEST_F(LFUDAPolicyFixture, BackendGetBlockYield)
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
- ASSERT_GE(lfuda(env->dpp, block, cacheDriver, yield), 0);
+ env->cct->_conf->rgw_lfuda_sync_frequency = 1;
+ dynamic_cast<rgw::d4n::LFUDAPolicy*>(policyDriver->get_cache_policy())->save_y(optional_yield{yield});
+ policyDriver->get_cache_policy()->init(env->cct, env->dpp, io, driver);
+
+ ASSERT_GE(lfuda(env->dpp, block, cacheDriver, optional_yield{yield}), 0);
cacheDriver->shutdown();
conn->async_exec(req, resp, yield[ec]);
conn->cancel();
+
+ delete policyDriver;
+ policyDriver = nullptr;
}, rethrow);
io.run();
{
boost::asio::spawn(io, [this] (boost::asio::yield_context yield) {
env->cct->_conf->rgw_lfuda_sync_frequency = 1;
- dynamic_cast<rgw::d4n::LFUDAPolicy*>(policyDriver->get_cache_policy())->save_y(yield);
- policyDriver->get_cache_policy()->init(env->cct, env->dpp, io);
+ dynamic_cast<rgw::d4n::LFUDAPolicy*>(policyDriver->get_cache_policy())->save_y(optional_yield{yield});
+ policyDriver->get_cache_policy()->init(env->cct, env->dpp, io, driver);
cacheDriver->shutdown();