From: Jianpeng Ma Date: Thu, 11 Dec 2014 08:28:47 +0000 (+0800) Subject: test/librados: Add test case for librados function which can handle fadvise flas. X-Git-Tag: v0.91~55^2~3^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0c802e11d9f0ee993994d391d1e00aeb76965d6a;p=ceph.git test/librados: Add test case for librados function which can handle fadvise flas. Signed-off-by: Jianpeng Ma --- diff --git a/src/test/librados/aio.cc b/src/test/librados/aio.cc index 79987299f995..86e490bb1074 100644 --- a/src/test/librados/aio.cc +++ b/src/test/librados/aio.cc @@ -435,6 +435,48 @@ TEST(LibRadosAio, RoundTripPP2) { delete my_completion2; } +//using ObjectWriteOperation/ObjectReadOperation with iohint +TEST(LibRadosAio, RoundTripPP3) +{ + Rados cluster; + std::string pool_name = get_temp_pool_name(); + ASSERT_EQ("", create_one_pool_pp(pool_name, cluster)); + IoCtx ioctx; + cluster.ioctx_create(pool_name.c_str(), ioctx); + + boost::scoped_ptr my_completion1(cluster.aio_create_completion(0, 0, 0)); + ObjectWriteOperation op; + char buf[128]; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl; + bl.append(buf); + + op.write(0, bl); + op.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ioctx.aio_operate("test_obj", my_completion1.get(), &op); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion1->wait_for_complete()); + } + EXPECT_EQ(0, my_completion1->get_return_value()); + + boost::scoped_ptr my_completion2(cluster.aio_create_completion(0, 0, 0)); + bl.clear(); + ObjectReadOperation op1; + op1.read(0, sizeof(buf), &bl, NULL); + op1.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED|LIBRADOS_OP_FLAG_FADVISE_RANDOM); + ioctx.aio_operate("test_obj", my_completion2.get(), &op1, 0); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion2->wait_for_complete()); + } + EXPECT_EQ(0, my_completion2->get_return_value()); + ASSERT_EQ(0, memcmp(buf, bl.c_str(), sizeof(buf))); + ioctx.remove("test_obj"); + destroy_one_pool_pp(pool_name, cluster); +} + + TEST(LibRadosAio, RoundTripAppend) { AioTestData test_data; rados_completion_t my_completion, my_completion2, my_completion3; @@ -968,6 +1010,47 @@ TEST(LibRadosAio, RoundTripWriteFullPP) { delete my_completion3; } +//using ObjectWriteOperation/ObjectReadOperation with iohint +TEST(LibRadosAio, RoundTripWriteFullPP2) +{ + Rados cluster; + std::string pool_name = get_temp_pool_name(); + ASSERT_EQ("", create_one_pool_pp(pool_name, cluster)); + IoCtx ioctx; + cluster.ioctx_create(pool_name.c_str(), ioctx); + + boost::scoped_ptr my_completion1(cluster.aio_create_completion(0, 0, 0)); + ObjectWriteOperation op; + char buf[128]; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl; + bl.append(buf); + + op.write_full(bl); + op.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ioctx.aio_operate("test_obj", my_completion1.get(), &op); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion1->wait_for_complete()); + } + EXPECT_EQ(0, my_completion1->get_return_value()); + + boost::scoped_ptr my_completion2(cluster.aio_create_completion(0, 0, 0)); + bl.clear(); + ObjectReadOperation op1; + op1.read(0, sizeof(buf), &bl, NULL); + op1.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED|LIBRADOS_OP_FLAG_FADVISE_RANDOM); + ioctx.aio_operate("test_obj", my_completion2.get(), &op1, 0); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion2->wait_for_complete()); + } + EXPECT_EQ(0, my_completion2->get_return_value()); + ASSERT_EQ(0, memcmp(buf, bl.c_str(), sizeof(buf))); + + ioctx.remove("test_obj"); + destroy_one_pool_pp(pool_name, cluster); +} TEST(LibRadosAio, SimpleStat) { AioTestData test_data; @@ -1902,6 +1985,49 @@ TEST(LibRadosAioEC, RoundTripPP2) { delete my_completion2; } +//using ObjectWriteOperation/ObjectReadOperation with iohint +TEST(LibRadosAioEC, RoundTripPP3) +{ + Rados cluster; + std::string pool_name = get_temp_pool_name(); + ASSERT_EQ("", create_one_pool_pp(pool_name, cluster)); + IoCtx ioctx; + cluster.ioctx_create(pool_name.c_str(), ioctx); + + boost::scoped_ptr my_completion1(cluster.aio_create_completion(0, 0, 0)); + ObjectWriteOperation op; + char buf[128]; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl; + bl.append(buf); + + op.write(0, bl); + op.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ioctx.aio_operate("test_obj", my_completion1.get(), &op); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion1->wait_for_complete()); + } + EXPECT_EQ(0, my_completion1->get_return_value()); + + boost::scoped_ptr my_completion2(cluster.aio_create_completion(0, 0, 0)); + bl.clear(); + ObjectReadOperation op1; + op1.read(0, sizeof(buf), &bl, NULL); + op1.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED|LIBRADOS_OP_FLAG_FADVISE_RANDOM); + ioctx.aio_operate("test_obj", my_completion2.get(), &op1, 0); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion2->wait_for_complete()); + } + EXPECT_EQ(0, my_completion2->get_return_value()); + ASSERT_EQ(0, memcmp(buf, bl.c_str(), sizeof(buf))); + + ioctx.remove("test_obj"); + destroy_one_pool_pp(pool_name, cluster); +} + + TEST(LibRadosAioEC, RoundTripAppend) { AioTestDataEC test_data; rados_completion_t my_completion, my_completion2, my_completion3, my_completion4; @@ -2479,6 +2605,47 @@ TEST(LibRadosAioEC, RoundTripWriteFullPP) { delete my_completion3; } +//using ObjectWriteOperation/ObjectReadOperation with iohint +TEST(LibRadosAioEC, RoundTripWriteFullPP2) +{ + Rados cluster; + std::string pool_name = get_temp_pool_name(); + ASSERT_EQ("", create_one_pool_pp(pool_name, cluster)); + IoCtx ioctx; + cluster.ioctx_create(pool_name.c_str(), ioctx); + + boost::scoped_ptr my_completion1(cluster.aio_create_completion(0, 0, 0)); + ObjectWriteOperation op; + char buf[128]; + memset(buf, 0xcc, sizeof(buf)); + bufferlist bl; + bl.append(buf); + + op.write_full(bl); + op.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ioctx.aio_operate("test_obj", my_completion1.get(), &op); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion1->wait_for_complete()); + } + EXPECT_EQ(0, my_completion1->get_return_value()); + + boost::scoped_ptr my_completion2(cluster.aio_create_completion(0, 0, 0)); + bl.clear(); + ObjectReadOperation op1; + op1.read(0, sizeof(buf), &bl, NULL); + op1.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED|LIBRADOS_OP_FLAG_FADVISE_RANDOM); + ioctx.aio_operate("test_obj", my_completion2.get(), &op1, 0); + { + TestAlarm alarm; + ASSERT_EQ(0, my_completion2->wait_for_complete()); + } + EXPECT_EQ(0, my_completion2->get_return_value()); + ASSERT_EQ(0, memcmp(buf, bl.c_str(), sizeof(buf))); + + ioctx.remove("test_obj"); + destroy_one_pool_pp(pool_name, cluster); +} TEST(LibRadosAioEC, SimpleStat) { AioTestDataEC test_data; diff --git a/src/test/librados/c_read_operations.cc b/src/test/librados/c_read_operations.cc index d29a27392515..da5f93783ff3 100644 --- a/src/test/librados/c_read_operations.cc +++ b/src/test/librados/c_read_operations.cc @@ -271,6 +271,19 @@ TEST_F(CReadOpsTest, Read) { rados_release_read_op(op); } + { + rados_read_op_t op = rados_create_read_op(); + size_t bytes_read = 0; + int rval; + rados_read_op_read(op, 0, len, buf, &bytes_read, &rval); + rados_read_op_set_flags(op, LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ASSERT_EQ(0, rados_read_op_operate(op, ioctx, obj, 0)); + ASSERT_EQ(len, (int)bytes_read); + ASSERT_EQ(0, rval); + ASSERT_EQ(0, memcmp(data, buf, len)); + rados_release_read_op(op); + } + remove_object(); } diff --git a/src/test/librados/c_write_operations.cc b/src/test/librados/c_write_operations.cc index 4202b594289d..ff08bda66896 100644 --- a/src/test/librados/c_write_operations.cc +++ b/src/test/librados/c_write_operations.cc @@ -96,6 +96,15 @@ TEST(LibRadosCWriteOps, Write) { ASSERT_EQ(2, rados_read(ioctx, "test", hi, 4, 0)); rados_release_write_op(op); + //create write op with iohint + op = rados_create_write_op(); + ASSERT_TRUE(op); + rados_write_op_write_full(op, "ceph", 4); + rados_write_op_set_flags(op, LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ASSERT_EQ(0, rados_write_op_operate(op, ioctx, "test", NULL, 0)); + ASSERT_EQ(4, rados_read(ioctx, "test", hi, 4, 0)); + rados_release_write_op(op); + // Truncate and append op = rados_create_write_op(); ASSERT_TRUE(op); diff --git a/src/test/librados/io.cc b/src/test/librados/io.cc index 8bada67c52d9..22a66db22eee 100644 --- a/src/test/librados/io.cc +++ b/src/test/librados/io.cc @@ -245,6 +245,22 @@ TEST_F(LibRadosIoPP, RoundTripPP) { ASSERT_EQ(0, memcmp(buf, cl.c_str(), sizeof(buf))); } +TEST_F(LibRadosIoPP, RoundTripPP2) +{ + bufferlist bl; + bl.append("ceph"); + ObjectWriteOperation write; + write.write(0, bl); + write.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ASSERT_EQ(0, ioctx.operate("foo", &write)); + + ObjectReadOperation read; + read.read(0, bl.length(), NULL, NULL); + read.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED|LIBRADOS_OP_FLAG_FADVISE_RANDOM); + ASSERT_EQ(0, ioctx.operate("foo", &read, &bl)); + ASSERT_EQ(0, strcmp(bl.c_str(), "ceph")); +} + TEST_F(LibRadosIo, OverlappingWriteRoundTrip) { char buf[128]; char buf2[64]; @@ -305,6 +321,22 @@ TEST_F(LibRadosIoPP, WriteFullRoundTripPP) { ASSERT_EQ(0, memcmp(bl3.c_str(), buf2, sizeof(buf2))); } +TEST_F(LibRadosIoPP, WriteFullRoundTripPP2) +{ + bufferlist bl; + bl.append("ceph"); + ObjectWriteOperation write; + write.write_full(bl); + write.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ASSERT_EQ(0, ioctx.operate("foo", &write)); + + ObjectReadOperation read; + read.read(0, bl.length(), NULL, NULL); + read.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED|LIBRADOS_OP_FLAG_FADVISE_RANDOM); + ASSERT_EQ(0, ioctx.operate("foo", &read, &bl)); + ASSERT_EQ(0, strcmp(bl.c_str(), "ceph")); +} + TEST_F(LibRadosIo, AppendRoundTrip) { char buf[64]; char buf2[64]; @@ -679,6 +711,22 @@ TEST_F(LibRadosIoECPP, RoundTripPP) { ASSERT_EQ(0, memcmp(buf, cl.c_str(), sizeof(buf))); } +TEST_F(LibRadosIoECPP, RoundTripPP2) +{ + bufferlist bl; + bl.append("ceph"); + ObjectWriteOperation write; + write.write(0, bl); + write.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ASSERT_EQ(0, ioctx.operate("foo", &write)); + + ObjectReadOperation read; + read.read(0, bl.length(), NULL, NULL); + read.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED|LIBRADOS_OP_FLAG_FADVISE_RANDOM); + ASSERT_EQ(0, ioctx.operate("foo", &read, &bl)); + ASSERT_EQ(0, strcmp(bl.c_str(), "ceph")); +} + TEST_F(LibRadosIoEC, OverlappingWriteRoundTrip) { int bsize = alignment; int dbsize = bsize * 2; @@ -750,6 +798,22 @@ TEST_F(LibRadosIoECPP, WriteFullRoundTripPP) { ASSERT_EQ(0, memcmp(bl3.c_str(), buf2, sizeof(buf2))); } +TEST_F(LibRadosIoECPP, WriteFullRoundTripPP2) +{ + bufferlist bl; + bl.append("ceph"); + ObjectWriteOperation write; + write.write_full(bl); + write.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED); + ASSERT_EQ(0, ioctx.operate("foo", &write)); + + ObjectReadOperation read; + read.read(0, bl.length(), NULL, NULL); + read.set_op_flags2(LIBRADOS_OP_FLAG_FADVISE_DONTNEED|LIBRADOS_OP_FLAG_FADVISE_RANDOM); + ASSERT_EQ(0, ioctx.operate("foo", &read, &bl)); + ASSERT_EQ(0, strcmp(bl.c_str(), "ceph")); +} + TEST_F(LibRadosIoEC, AppendRoundTrip) { char *buf = (char *)new char[alignment]; char *buf2 = (char *)new char[alignment];