ASSERT_EQ("", test_data.init());
bufferlist bl;
- AioCompletion *aio_completion = test_data.m_cluster.aio_create_completion(nullptr, NULL, NULL);
- ASSERT_EQ(-E2BIG, test_data.m_ioctx.aio_write("foo", aio_completion, bl, UINT_MAX, 0));
- ASSERT_EQ(-E2BIG, test_data.m_ioctx.aio_append("foo", aio_completion, bl, UINT_MAX));
+ auto aio_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_EQ(-E2BIG, test_data.m_ioctx.aio_write("foo", aio_completion.get(), bl, UINT_MAX, 0));
+ ASSERT_EQ(-E2BIG, test_data.m_ioctx.aio_append("foo", aio_completion.get(), bl, UINT_MAX));
// ioctx.aio_write_full no way to overflow bl.length()
- delete aio_completion;
}
TEST(LibRadosAio, PoolQuotaPP) {
for (n = 0; n < 1024; ++n) {
ObjectWriteOperation op;
op.write_full(bl);
- librados::AioCompletion *completion =
- test_data.m_cluster.aio_create_completion();
- ASSERT_EQ(0, ioctx.aio_operate(
- "foo" + stringify(n), completion, &op,
- librados::OPERATION_FULL_TRY));
- completion->wait_for_safe();
+ auto completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_EQ(0, ioctx.aio_operate("foo" + stringify(n),
+ completion.get(), &op,
+ librados::OPERATION_FULL_TRY));
+ completion->wait_for_complete();
int r = completion->get_return_value();
- completion->release();
if (r == -EDQUOT)
break;
ASSERT_EQ(0, r);
{
ObjectWriteOperation op;
op.write_full(bl);
- librados::AioCompletion *completion =
- test_data.m_cluster.aio_create_completion();
- ASSERT_EQ(0, ioctx.aio_operate("bar", completion, &op, 0));
+ auto completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_EQ(0, ioctx.aio_operate("bar", completion.get(), &op, 0));
sleep(5);
- ASSERT_FALSE(completion->is_safe());
- completion->release();
+ ASSERT_FALSE(completion->is_complete());
}
ioctx.close();
{
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo",
- my_completion, bl1, sizeof(buf), 0));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
- delete my_completion;
}
{
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
test_data.m_ioctx.set_namespace("nspace");
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo",
- my_completion, bl1, sizeof(buf), 0));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
- delete my_completion;
}
}
TEST(LibRadosAio, WaitForSafePP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo",
- my_completion, bl1, sizeof(buf), 0));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
TestAlarm alarm;
- ASSERT_EQ(0, my_completion->wait_for_safe());
+ ASSERT_EQ(0, my_completion->wait_for_complete());
ASSERT_EQ(0, my_completion->get_return_value());
- delete my_completion;
}
TEST(LibRadosAio, RoundTripPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
- bl1, sizeof(buf), 0));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo",
- my_completion2, &bl2, sizeof(buf), 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
+ &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAio, RoundTripPP2) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
- bl1, sizeof(buf), 0));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo",
- my_completion2, &bl2, sizeof(buf), 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
+ &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
- ASSERT_EQ(0, my_completion2->wait_for_safe());
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
//using ObjectWriteOperation/ObjectReadOperation with iohint
IoCtx ioctx;
cluster.ioctx_create(pool_name.c_str(), ioctx);
- boost::scoped_ptr<AioCompletion> my_completion1(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion1 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ObjectWriteOperation op;
char buf[128];
memset(buf, 0xcc, sizeof(buf));
}
EXPECT_EQ(0, my_completion1->get_return_value());
- boost::scoped_ptr<AioCompletion> my_completion2(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
bl.clear();
ObjectReadOperation op1;
op1.read(0, sizeof(buf), &bl, NULL);
TEST(LibRadosAio, RoundTripSparseReadPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->get_return_value());
std::map<uint64_t, uint64_t> extents;
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_sparse_read("foo",
- my_completion2, &extents, &bl2, sizeof(buf), 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_sparse_read("foo", my_completion2.get(),
+ &extents, &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
ASSERT_EQ(0, my_completion2->get_return_value());
assert_eq_sparse(bl1, extents, bl2);
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioPP, ReadIntoBufferlist) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
- bl1, sizeof(buf), 0));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
char buf2[sizeof(buf)];
memset(buf2, 0xbb, sizeof(buf2));
bl2.append(buffer::create_static(sizeof(buf2), buf2));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
- &bl2, sizeof(buf), 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
+ &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioPP, XattrsRoundTripPP) {
ASSERT_EQ(0, test_data.m_ioctx.append("foo", bl1, sizeof(buf)));
bufferlist bl2;
// async getxattr
- boost::scoped_ptr<AioCompletion> my_completion
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_getxattr("foo", my_completion.get(), attr1, bl2));
{
TestAlarm alarm;
// async setxattr
AioTestDataPP test_data2;
ASSERT_EQ("", test_data2.init());
- boost::scoped_ptr<AioCompletion> my_completion2
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_setxattr("foo", my_completion2.get(), attr1, bl3));
{
TestAlarm alarm;
bufferlist bl4;
AioTestDataPP test_data3;
ASSERT_EQ("", test_data3.init());
- boost::scoped_ptr<AioCompletion> my_completion3
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_getxattr("foo", my_completion3.get(), attr1, bl4));
{
TestAlarm alarm;
// async setxattr
bufferlist bl2;
bl2.append(attr1_buf, sizeof(attr1_buf));
- boost::scoped_ptr<AioCompletion> my_completion
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_setxattr("foo", my_completion.get(), attr1, bl2));
{
TestAlarm alarm;
// async rmxattr
AioTestDataPP test_data2;
ASSERT_EQ("", test_data2.init());
- boost::scoped_ptr<AioCompletion> my_completion2
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_rmxattr("foo", my_completion2.get(), attr1));
{
TestAlarm alarm;
// async getxattr
AioTestDataPP test_data3;
ASSERT_EQ("", test_data3.init());
- boost::scoped_ptr<AioCompletion> my_completion3
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
bufferlist bl3;
ASSERT_EQ(0, test_data.m_ioctx.aio_getxattr("foo", my_completion3.get(), attr1, bl3));
{
// async setxattr
AioTestDataPP test_data4;
ASSERT_EQ("", test_data4.init());
- boost::scoped_ptr<AioCompletion> my_completion4
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion4 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_setxattr("foo_rmxattr", my_completion4.get(), attr2, bl22));
{
TestAlarm alarm;
// async rmxattr on non existing object
AioTestDataPP test_data5;
ASSERT_EQ("", test_data5.init());
- boost::scoped_ptr<AioCompletion> my_completion5
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion5 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_rmxattr("foo_rmxattr", my_completion5.get(), attr2));
{
TestAlarm alarm;
bl3.append(attr2_buf, sizeof(attr2_buf));
ASSERT_EQ(0, test_data.m_ioctx.setxattr("foo", attr2, bl3));
// call async version of getxattrs
- boost::scoped_ptr<AioCompletion> my_completion
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
std::map<std::string, bufferlist> attrset;
ASSERT_EQ(0, test_data.m_ioctx.aio_getxattrs("foo", my_completion.get(), attrset));
{
TEST(LibRadosAio, IsCompletePP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
- &bl2, sizeof(buf), 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
+ &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAio, IsSafePP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
// Busy-wait until the AIO completes.
// Normally we wouldn't do this, but we want to test rados_aio_is_safe.
while (true) {
- int is_safe = my_completion->is_safe();
- if (is_safe)
+ int is_complete = my_completion->is_complete();
+ if (is_complete)
break;
}
}
ASSERT_EQ(0, my_completion->get_return_value());
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
bufferlist bl2;
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
&bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAio, ReturnValuePP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
bufferlist bl1;
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("nonexistent",
- my_completion, &bl1, 128, 0));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("nonexistent", my_completion.get(),
+ &bl1, 128, 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(-ENOENT, my_completion->get_return_value());
- delete my_completion;
}
TEST(LibRadosAio, FlushPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xee, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
ASSERT_EQ(0, test_data.m_ioctx.aio_flush());
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
&bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAio, FlushAsyncPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *flush_completion =
- test_data.m_cluster.aio_create_completion(NULL, NULL, NULL);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ auto flush_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xee, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
- ASSERT_EQ(0, test_data.m_ioctx.aio_flush_async(flush_completion));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_flush_async(flush_completion.get()));
{
TestAlarm alarm;
ASSERT_EQ(0, flush_completion->wait_for_complete());
- ASSERT_EQ(0, flush_completion->wait_for_safe());
}
ASSERT_EQ(1, my_completion->is_complete());
- ASSERT_EQ(1, my_completion->is_safe());
ASSERT_EQ(1, flush_completion->is_complete());
- ASSERT_EQ(1, flush_completion->is_safe());
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
&bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
- delete flush_completion;
}
TEST(LibRadosAio, RoundTripWriteFullPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
memset(buf2, 0xdd, sizeof(buf2));
bufferlist bl2;
bl2.append(buf2, sizeof(buf2));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_write_full("foo", my_completion2, bl2));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write_full("foo", my_completion2.get(), bl2));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
ASSERT_EQ(0, my_completion2->get_return_value());
bufferlist bl3;
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3,
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3.get(),
&bl3, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf2), my_completion3->get_return_value());
ASSERT_EQ(sizeof(buf2), bl3.length());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf2, sizeof(buf2)));
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
}
//using ObjectWriteOperation/ObjectReadOperation with iohint
IoCtx ioctx;
cluster.ioctx_create(pool_name.c_str(), ioctx);
- boost::scoped_ptr<AioCompletion> my_completion1(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion1 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ObjectWriteOperation op;
char buf[128];
memset(buf, 0xcc, sizeof(buf));
}
EXPECT_EQ(0, my_completion1->get_return_value());
- boost::scoped_ptr<AioCompletion> my_completion2(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
bl.clear();
ObjectReadOperation op1;
op1.read(0, sizeof(buf), &bl, NULL);
TEST(LibRadosAio, RoundTripWriteSamePP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char full[128];
memset(full, 0xcc, sizeof(full));
bufferlist bl1;
bl1.append(full, sizeof(full));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(full), 0));
{
TestAlarm alarm;
memset(buf, 0xdd, sizeof(buf));
bufferlist bl2;
bl2.append(buf, sizeof(buf));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_writesame("foo", my_completion2, bl2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_writesame("foo", my_completion2.get(), bl2,
ws_write_len, 0));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
bufferlist bl3;
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3,
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3.get(),
&bl3, sizeof(full), 0));
{
TestAlarm alarm;
cmp += sizeof(buf)) {
ASSERT_EQ(0, memcmp(cmp, buf, sizeof(buf)));
}
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
}
TEST(LibRadosAio, RoundTripWriteSamePP2)
IoCtx ioctx;
cluster.ioctx_create(pool_name.c_str(), ioctx);
- boost::scoped_ptr<AioCompletion>
- wr_cmpl(cluster.aio_create_completion(0, 0, 0));
+ auto wr_cmpl = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ObjectWriteOperation op;
char buf[128];
memset(buf, 0xcc, sizeof(buf));
EXPECT_EQ(0, wr_cmpl->get_return_value());
boost::scoped_ptr<AioCompletion>
- rd_cmpl(cluster.aio_create_completion(0, 0, 0));
+ rd_cmpl(cluster.aio_create_completion(0, 0));
char *cmp;
char full[sizeof(buf) * 4];
memset(full, 0, sizeof(full));
TEST(LibRadosAio, SimpleStatPPNS) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2.get(),
&psize, &pmtime));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), psize);
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAio, SimpleStatPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2.get(),
&psize, &pmtime));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), psize);
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAio, StatRemovePP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2.get(),
&psize, &pmtime));
{
TestAlarm alarm;
ASSERT_EQ(sizeof(buf), psize);
uint64_t psize2;
time_t pmtime2;
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_remove("foo", my_completion3));
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_remove("foo", my_completion3.get()));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion3->wait_for_complete());
}
ASSERT_EQ(0, my_completion3->get_return_value());
- AioCompletion *my_completion4 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion4, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion4,
+ auto my_completion4 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion4);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion4.get(),
&psize2, &pmtime2));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion4->wait_for_complete());
}
ASSERT_EQ(-ENOENT, my_completion4->get_return_value());
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
- delete my_completion4;
}
TEST(LibRadosAio, ExecuteClassPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
bufferlist in, out;
- ASSERT_EQ(0, test_data.m_ioctx.aio_exec("foo", my_completion2,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_exec("foo", my_completion2.get(),
"hello", "say_hello", in, &out));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(std::string("Hello, world!"), std::string(out.c_str(), out.length()));
- delete my_completion;
- delete my_completion2;
}
using std::string;
header_to_set.push_back(bp);
map<string, bufferlist> to_set;
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectWriteOperation op;
to_set["foo"] = header_to_set;
to_set["foo2"] = header_to_set;
}
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectReadOperation op;
map<string, pair<bufferlist, int> > assertions;
bufferlist val;
}
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectReadOperation op;
set<string> set_got;
}
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectWriteOperation op;
set<string> to_remove;
to_remove.insert("foo2");
}
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectReadOperation op;
set<string> set_got;
}
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectWriteOperation op;
op.omap_clear();
ioctx.aio_operate("test_obj", my_completion.get(), &op);
}
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectReadOperation op;
set<string> set_got;
// omap_clear clears header *and* keys
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectWriteOperation op;
bufferlist bl;
bl.append("some data");
EXPECT_EQ(0, my_completion->get_return_value());
}
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectWriteOperation op;
op.omap_clear();
ioctx.aio_operate("foo3", my_completion.get(), &op);
EXPECT_EQ(0, my_completion->get_return_value());
}
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0));
ObjectReadOperation op;
set<string> set_got;
bufferlist hdr;
TEST(LibRadosAio, MultiWritePP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
memset(buf2, 0xdd, sizeof(buf2));
bufferlist bl2;
bl2.append(buf2, sizeof(buf2));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion2.get(),
bl2, sizeof(buf2), sizeof(buf)));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->get_return_value());
bufferlist bl3;
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3,
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3.get(),
&bl3, (sizeof(buf) + sizeof(buf2) * 3), 0));
{
TestAlarm alarm;
ASSERT_EQ(sizeof(buf) + sizeof(buf2), bl3.length());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf, sizeof(buf)));
ASSERT_EQ(0, memcmp(bl3.c_str() + sizeof(buf), buf2, sizeof(buf2)));
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
}
TEST(LibRadosAio, AioUnlockPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
ASSERT_EQ(0, test_data.m_ioctx.lock_exclusive("foo", "TestLock", "Cookie", "", NULL, 0));
- boost::scoped_ptr<AioCompletion> my_completion
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_unlock("foo", "TestLock", "Cookie", my_completion.get()));
{
TestAlarm alarm;
{
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo",
- my_completion, bl1, sizeof(buf), 0));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
- delete my_completion;
}
{
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
test_data.m_ioctx.set_namespace("nspace");
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo",
- my_completion, bl1, sizeof(buf), 0));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
- delete my_completion;
}
}
TEST(LibRadosAioEC, WaitForSafePP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo",
- my_completion, bl1, sizeof(buf), 0));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
+ bl1, sizeof(buf), 0));
TestAlarm alarm;
- ASSERT_EQ(0, my_completion->wait_for_safe());
+ ASSERT_EQ(0, my_completion->wait_for_complete());
ASSERT_EQ(0, my_completion->get_return_value());
- delete my_completion;
}
TEST(LibRadosAioEC, RoundTripPP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo",
- my_completion2, &bl2, sizeof(buf), 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
+ &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioEC, RoundTripPP2) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo",
- my_completion2, &bl2, sizeof(buf), 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
+ &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
- ASSERT_EQ(0, my_completion2->wait_for_safe());
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
//using ObjectWriteOperation/ObjectReadOperation with iohint
IoCtx ioctx;
cluster.ioctx_create(pool_name.c_str(), ioctx);
- boost::scoped_ptr<AioCompletion> my_completion1(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion1 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};;
ObjectWriteOperation op;
char buf[128];
memset(buf, 0xcc, sizeof(buf));
}
EXPECT_EQ(0, my_completion1->get_return_value());
- boost::scoped_ptr<AioCompletion> my_completion2(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
bl.clear();
ObjectReadOperation op1;
op1.read(0, sizeof(buf), &bl, NULL);
TEST(LibRadosAio, RoundTripAppendPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion.get(),
bl1, sizeof(buf)));
{
TestAlarm alarm;
memset(buf2, 0xdd, sizeof(buf2));
bufferlist bl2;
bl2.append(buf2, sizeof(buf2));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion2.get(),
bl2, sizeof(buf2)));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
bufferlist bl3;
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo",
- my_completion3, &bl3, 2 * sizeof(buf), 0));
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3.get(),
+ &bl3, 2 * sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion3->wait_for_complete());
ASSERT_EQ(sizeof(buf) * 2, bl3.length());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf, sizeof(buf)));
ASSERT_EQ(0, memcmp(bl3.c_str() + sizeof(buf), buf2, sizeof(buf2)));
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
}
TEST(LibRadosAioPP, RemoveTestPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
ASSERT_EQ(0, test_data.m_ioctx.append("foo", bl1, sizeof(buf)));
- boost::scoped_ptr<AioCompletion> my_completion
- (test_data.m_cluster.aio_create_completion
- (nullptr, nullptr, nullptr));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ASSERT_EQ(0, test_data.m_ioctx.aio_remove("foo", my_completion.get()));
{
TestAlarm alarm;
TEST(LibRadosAioEC, RoundTripSparseReadPP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
map<uint64_t, uint64_t> extents;
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_sparse_read("foo",
- my_completion2, &extents, &bl2, sizeof(buf), 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_sparse_read("foo", my_completion2.get(),
+ &extents, &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
ASSERT_EQ(0, my_completion2->get_return_value());
assert_eq_sparse(bl1, extents, bl2);
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioEC, RoundTripAppendPP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
bool requires;
ASSERT_EQ(0, test_data.m_ioctx.pool_requires_alignment2(&requires));
ASSERT_TRUE(requires);
memset(buf, 0xcc, bsize);
bufferlist bl1;
bl1.append(buf, bsize);
- ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion.get(),
bl1, bsize));
{
TestAlarm alarm;
memset(buf2, 0xdd, hbsize);
bufferlist bl2;
bl2.append(buf2, hbsize);
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion2.get(),
bl2, hbsize));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion3,
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_append("foo", my_completion3.get(),
bl2, hbsize));
{
TestAlarm alarm;
EXPECT_EQ(-EOPNOTSUPP, my_completion3->get_return_value());
bufferlist bl3;
- AioCompletion *my_completion4 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion4, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo",
- my_completion4, &bl3, bsize * 3, 0));
+ auto my_completion4 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion4);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion4.get(),
+ &bl3, bsize * 3, 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion4->wait_for_complete());
ASSERT_EQ((unsigned)tbsize, bl3.length());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf, bsize));
ASSERT_EQ(0, memcmp(bl3.c_str() + bsize, buf2, hbsize));
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
delete[] buf;
delete[] buf2;
}
TEST(LibRadosAioEC, IsCompletePP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
&bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioEC, IsSafePP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
// Busy-wait until the AIO completes.
// Normally we wouldn't do this, but we want to test rados_aio_is_safe.
while (true) {
- int is_safe = my_completion->is_safe();
- if (is_safe)
+ int is_complete = my_completion->is_complete();
+ if (is_complete)
break;
}
}
ASSERT_EQ(0, my_completion->get_return_value());
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
bufferlist bl2;
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
&bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioEC, ReturnValuePP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
bufferlist bl1;
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("nonexistent",
- my_completion, &bl1, 128, 0));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("nonexistent", my_completion.get(),
+ &bl1, 128, 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(-ENOENT, my_completion->get_return_value());
- delete my_completion;
}
TEST(LibRadosAioEC, FlushPP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xee, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
ASSERT_EQ(0, test_data.m_ioctx.aio_flush());
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
&bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioEC, FlushAsyncPP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *flush_completion =
- test_data.m_cluster.aio_create_completion(NULL, NULL, NULL);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ auto flush_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xee, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
- ASSERT_EQ(0, test_data.m_ioctx.aio_flush_async(flush_completion));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_flush_async(flush_completion.get()));
{
TestAlarm alarm;
ASSERT_EQ(0, flush_completion->wait_for_complete());
- ASSERT_EQ(0, flush_completion->wait_for_safe());
}
ASSERT_EQ(1, my_completion->is_complete());
- ASSERT_EQ(1, my_completion->is_safe());
ASSERT_EQ(1, flush_completion->is_complete());
- ASSERT_EQ(1, flush_completion->is_safe());
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion2.get(),
&bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- delete my_completion;
- delete my_completion2;
- delete flush_completion;
}
TEST(LibRadosAioEC, RoundTripWriteFullPP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
memset(buf2, 0xdd, sizeof(buf2));
bufferlist bl2;
bl2.append(buf2, sizeof(buf2));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_write_full("foo", my_completion2, bl2));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write_full("foo", my_completion2.get(), bl2));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
ASSERT_EQ(0, my_completion2->get_return_value());
bufferlist bl3;
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3,
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3.get(),
&bl3, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf2), my_completion3->get_return_value());
ASSERT_EQ(sizeof(buf2), bl3.length());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf2, sizeof(buf2)));
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
}
//using ObjectWriteOperation/ObjectReadOperation with iohint
IoCtx ioctx;
cluster.ioctx_create(pool_name.c_str(), ioctx);
- boost::scoped_ptr<AioCompletion> my_completion1(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion1 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ObjectWriteOperation op;
char buf[128];
memset(buf, 0xcc, sizeof(buf));
}
EXPECT_EQ(0, my_completion1->get_return_value());
- boost::scoped_ptr<AioCompletion> my_completion2(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
bl.clear();
ObjectReadOperation op1;
op1.read(0, sizeof(buf), &bl, NULL);
TEST(LibRadosAioEC, SimpleStatPP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2.get(),
&psize, &pmtime));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), psize);
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioEC, SimpleStatPPNS) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2.get(),
&psize, &pmtime));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), psize);
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioEC, StatRemovePP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion2.get(),
&psize, &pmtime));
{
TestAlarm alarm;
ASSERT_EQ(sizeof(buf), psize);
uint64_t psize2;
time_t pmtime2;
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_remove("foo", my_completion3));
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_remove("foo", my_completion3.get()));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion3->wait_for_complete());
}
ASSERT_EQ(0, my_completion3->get_return_value());
- AioCompletion *my_completion4 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion4, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion4,
+ auto my_completion4 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion4);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_stat("foo", my_completion4.get(),
&psize2, &pmtime2));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion4->wait_for_complete());
}
ASSERT_EQ(-ENOENT, my_completion4->get_return_value());
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
- delete my_completion4;
}
TEST(LibRadosAioEC, ExecuteClassPP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
bufferlist in, out;
- ASSERT_EQ(0, test_data.m_ioctx.aio_exec("foo", my_completion2,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_exec("foo", my_completion2.get(),
"hello", "say_hello", in, &out));
{
TestAlarm alarm;
}
ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(std::string("Hello, world!"), std::string(out.c_str(), out.length()));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAioEC, OmapPP) {
header_to_set.push_back(bp);
map<string, bufferlist> to_set;
{
- boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ObjectWriteOperation op;
to_set["foo"] = header_to_set;
to_set["foo2"] = header_to_set;
EXPECT_EQ(-EOPNOTSUPP, my_completion->get_return_value());
}
ioctx.remove("test_obj");
- destroy_one_pool_pp(pool_name, cluster);
+ destroy_one_ec_pool_pp(pool_name, cluster);
}
TEST(LibRadosAioEC, MultiWritePP) {
AioTestDataECPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
bl1.append(buf, sizeof(buf));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
memset(buf2, 0xdd, sizeof(buf2));
bufferlist bl2;
bl2.append(buf2, sizeof(buf2));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion2,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion2.get(),
bl2, sizeof(buf2), sizeof(buf)));
{
TestAlarm alarm;
ASSERT_EQ(-EOPNOTSUPP, my_completion2->get_return_value());
bufferlist bl3;
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion3, my_completion_null);
- ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3,
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion3);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo", my_completion3.get(),
&bl3, (sizeof(buf) + sizeof(buf2) * 3), 0));
{
TestAlarm alarm;
ASSERT_EQ((int)sizeof(buf), my_completion3->get_return_value());
ASSERT_EQ(sizeof(buf), bl3.length());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf, sizeof(buf)));
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
+
}
TEST(LibRadosAio, RacingRemovePP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init({{"objecter_retry_writes_after_first_reply", "true"}}));
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion, nullptr);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl;
bl.append(buf, sizeof(buf));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_NE(my_completion2, nullptr);
- ASSERT_EQ(0, test_data.m_ioctx.aio_remove("foo", my_completion2));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion2);
+ ASSERT_EQ(0, test_data.m_ioctx.aio_remove("foo", my_completion2.get()));
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(-ENOENT, my_completion2->get_return_value());
ASSERT_EQ(0, my_completion->get_return_value());
ASSERT_EQ(0, test_data.m_ioctx.stat("foo", nullptr, nullptr));
- delete my_completion;
- delete my_completion2;
}
TEST(LibRadosAio, RoundTripCmpExtPP) {
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
- AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- AioCompletion *my_completion_null = NULL;
- ASSERT_NE(my_completion, my_completion_null);
+ auto my_completion = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_TRUE(my_completion);
char full[128];
memset(full, 0xcc, sizeof(full));
bufferlist bl1;
bl1.append(full, sizeof(full));
- ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+ ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion.get(),
bl1, sizeof(full), 0));
{
TestAlarm alarm;
/* compare with match */
bufferlist cbl;
cbl.append(full, sizeof(full));
- AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_EQ(0, test_data.m_ioctx.aio_cmpext("foo", my_completion2, 0, cbl));
+ auto my_completion2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_EQ(0, test_data.m_ioctx.aio_cmpext("foo", my_completion2.get(), 0, cbl));
{
TestAlarm alarm;
memset(full, 0xdd, sizeof(full));
cbl.clear();
cbl.append(full, sizeof(full));
- AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
- nullptr, nullptr, nullptr);
- ASSERT_EQ(0, test_data.m_ioctx.aio_cmpext("foo", my_completion3, 0, cbl));
-
+ auto my_completion3 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
+ ASSERT_EQ(0, test_data.m_ioctx.aio_cmpext("foo", my_completion3.get(), 0, cbl));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion3->wait_for_complete());
}
ASSERT_EQ(-MAX_ERRNO, my_completion3->get_return_value());
-
- delete my_completion;
- delete my_completion2;
- delete my_completion3;
}
TEST(LibRadosAio, RoundTripCmpExtPP2)
IoCtx ioctx;
cluster.ioctx_create(pool_name.c_str(), ioctx);
- boost::scoped_ptr<AioCompletion>
- wr_cmpl(cluster.aio_create_completion(0, 0, 0));
+ auto wr_cmpl = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ObjectWriteOperation wr_op;
memset(buf, 0xcc, sizeof(buf));
memset(miscmp_buf, 0xdd, sizeof(miscmp_buf));
EXPECT_EQ(0, wr_cmpl->get_return_value());
/* cmpext as write op. first match then mismatch */
- boost::scoped_ptr<AioCompletion>
- wr_cmpext_cmpl(cluster.aio_create_completion(0, 0, 0));
+ auto wr_cmpext_cmpl = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
cbl.append(buf, sizeof(buf));
ret = 0;
EXPECT_EQ(0, wr_cmpext_cmpl->get_return_value());
EXPECT_EQ(0, ret);
- boost::scoped_ptr<AioCompletion>
- wr_cmpext_cmpl2(cluster.aio_create_completion(0, 0, 0));
+ auto wr_cmpext_cmpl2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
cbl.clear();
cbl.append(miscmp_buf, sizeof(miscmp_buf));
ret = 0;
EXPECT_EQ(-MAX_ERRNO, ret);
/* cmpext as read op */
- boost::scoped_ptr<AioCompletion>
- rd_cmpext_cmpl(cluster.aio_create_completion(0, 0, 0));
+ auto rd_cmpext_cmpl = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
ObjectReadOperation rd_op;
cbl.clear();
cbl.append(buf, sizeof(buf));
EXPECT_EQ(0, rd_cmpext_cmpl->get_return_value());
EXPECT_EQ(0, ret);
- boost::scoped_ptr<AioCompletion>
- rd_cmpext_cmpl2(cluster.aio_create_completion(0, 0, 0));
+ auto rd_cmpext_cmpl2 = std::unique_ptr<AioCompletion>{Rados::aio_create_completion()};
cbl.clear();
cbl.append(miscmp_buf, sizeof(miscmp_buf));
ret = 0;