#include "gtest/gtest.h"
#include <errno.h>
#include <fcntl.h>
-#include <semaphore.h>
#include <sstream>
#include <string>
#include <boost/scoped_ptr.hpp>
if (m_init) {
rados_ioctx_destroy(m_ioctx);
destroy_one_pool(m_pool_name, &m_cluster);
- sem_close(m_sem);
}
}
std::string init()
{
int ret;
- if (SEM_FAILED == (m_sem = sem_open("/test_aio_sem", O_CREAT, 0644, 0))) {
- int err = errno;
- ostringstream oss;
- oss << "sem_open failed: " << cpp_strerror(err);
- return oss.str();
- }
m_pool_name = get_temp_pool_name();
std::string err = create_one_pool(m_pool_name, &m_cluster);
if (!err.empty()) {
- sem_close(m_sem);
ostringstream oss;
oss << "create_one_pool(" << m_pool_name << ") failed: error " << err;
return oss.str();
}
ret = rados_ioctx_create(m_cluster, m_pool_name.c_str(), &m_ioctx);
if (ret) {
- sem_close(m_sem);
destroy_one_pool(m_pool_name, &m_cluster);
ostringstream oss;
oss << "rados_ioctx_create failed: error " << ret;
return "";
}
- sem_t *m_sem = nullptr;
rados_t m_cluster;
rados_ioctx_t m_ioctx;
std::string m_pool_name;
if (m_init) {
m_ioctx.close();
destroy_one_pool_pp(m_pool_name, m_cluster);
- sem_close(m_sem);
}
}
{
int ret;
- if (SEM_FAILED == (m_sem = sem_open("/test_aio_sem", O_CREAT, 0644, 0))) {
- int err = errno;
- ostringstream oss;
- oss << "sem_open failed: " << cpp_strerror(err);
- return oss.str();
- }
m_pool_name = get_temp_pool_name();
std::string err = create_one_pool_pp(m_pool_name, m_cluster, config);
if (!err.empty()) {
- sem_close(m_sem);
ostringstream oss;
oss << "create_one_pool(" << m_pool_name << ") failed: error " << err;
return oss.str();
}
ret = m_cluster.ioctx_create(m_pool_name.c_str(), m_ioctx);
if (ret) {
- sem_close(m_sem);
destroy_one_pool_pp(m_pool_name, m_cluster);
ostringstream oss;
oss << "rados_ioctx_create failed: error " << ret;
return "";
}
- sem_t *m_sem = nullptr;
Rados m_cluster;
IoCtx m_ioctx;
std::string m_pool_name;
{
AioTestData *test = static_cast<AioTestData*>(arg);
test->m_complete = true;
- sem_post(test->m_sem);
}
void set_completion_safe(rados_completion_t cb, void *arg)
{
AioTestData *test = static_cast<AioTestData*>(arg);
test->m_safe = true;
- sem_post(test->m_sem);
}
void set_completion_completePP(rados_completion_t cb, void *arg)
{
AioTestDataPP *test = static_cast<AioTestDataPP*>(arg);
test->m_complete = true;
- sem_post(test->m_sem);
}
void set_completion_safePP(rados_completion_t cb, void *arg)
{
AioTestDataPP *test = static_cast<AioTestDataPP*>(arg);
test->m_safe = true;
- sem_post(test->m_sem);
}
TEST(LibRadosAio, TooBig) {
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
my_completion2, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion2));
}
my_completion, bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
delete my_completion;
my_completion, bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
delete my_completion;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[256];
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
std::map<uint64_t, uint64_t> extents;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
rados_ioctx_set_namespace(test_data.m_ioctx, "nspace");
my_completion, buf2, sizeof(buf2), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
}
- ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
rados_completion_t my_completion2;
ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
set_completion_complete, set_completion_safe, &my_completion2));
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ 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(
if (m_init) {
rados_ioctx_destroy(m_ioctx);
destroy_one_ec_pool(m_pool_name, &m_cluster);
- sem_close(m_sem);
}
}
std::string init()
{
int ret;
- if (SEM_FAILED == (m_sem = sem_open("/test_aio_sem", O_CREAT, 0644, 0))) {
- int err = errno;
- ostringstream oss;
- oss << "sem_open failed: " << cpp_strerror(err);
- return oss.str();
- }
m_pool_name = get_temp_pool_name();
std::string err = create_one_ec_pool(m_pool_name, &m_cluster);
if (!err.empty()) {
- sem_close(m_sem);
ostringstream oss;
oss << "create_one_ec_pool(" << m_pool_name << ") failed: error " << err;
return oss.str();
}
ret = rados_ioctx_create(m_cluster, m_pool_name.c_str(), &m_ioctx);
if (ret) {
- sem_close(m_sem);
destroy_one_ec_pool(m_pool_name, &m_cluster);
ostringstream oss;
oss << "rados_ioctx_create failed: error " << ret;
return "";
}
- sem_t *m_sem;
rados_t m_cluster;
rados_ioctx_t m_ioctx;
std::string m_pool_name;
if (m_init) {
m_ioctx.close();
destroy_one_ec_pool_pp(m_pool_name, m_cluster);
- sem_close(m_sem);
}
}
std::string init()
{
int ret;
- if (SEM_FAILED == (m_sem = sem_open("/test_aio_sem", O_CREAT, 0644, 0))) {
- int err = errno;
- ostringstream oss;
- oss << "sem_open failed: " << cpp_strerror(err);
- return oss.str();
- }
m_pool_name = get_temp_pool_name();
std::string err = create_one_ec_pool_pp(m_pool_name, m_cluster);
if (!err.empty()) {
- sem_close(m_sem);
ostringstream oss;
oss << "create_one_ec_pool(" << m_pool_name << ") failed: error " << err;
return oss.str();
}
ret = m_cluster.ioctx_create(m_pool_name.c_str(), m_ioctx);
if (ret) {
- sem_close(m_sem);
destroy_one_ec_pool_pp(m_pool_name, m_cluster);
ostringstream oss;
oss << "rados_ioctx_create failed: error " << ret;
return "";
}
- sem_t *m_sem = nullptr;
Rados m_cluster;
IoCtx m_ioctx;
std::string m_pool_name;
{
AioTestDataEC *test = static_cast<AioTestDataEC*>(arg);
test->m_complete = true;
- sem_post(test->m_sem);
}
void set_completion_safeEC(rados_completion_t cb, void *arg)
{
AioTestDataEC *test = static_cast<AioTestDataEC*>(arg);
test->m_safe = true;
- sem_post(test->m_sem);
}
void set_completion_completeECPP(rados_completion_t cb, void *arg)
{
AioTestDataECPP *test = static_cast<AioTestDataECPP*>(arg);
test->m_complete = true;
- sem_post(test->m_sem);
}
void set_completion_safeECPP(rados_completion_t cb, void *arg)
{
AioTestDataECPP *test = static_cast<AioTestDataECPP*>(arg);
test->m_safe = true;
- sem_post(test->m_sem);
}
TEST(LibRadosAioEC, SimpleWrite) {
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
my_completion2, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion2));
}
my_completion, bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
delete my_completion;
my_completion, bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
delete my_completion;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[256];
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
rados_ioctx_set_namespace(test_data.m_ioctx, "nspace");
my_completion, buf2, sizeof(buf2), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, my_completion->wait_for_complete());
}
ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
rados_completion_t my_completion2;
bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
+ 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(
bl, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
- sem_wait(test_data.m_sem);
my_completion2->wait_for_complete();
my_completion->wait_for_complete();
}