int notify_sleep = 0;
// notify
-static sem_t *sem;
+static sem_t sem;
static void watch_notify_test_cb(uint8_t opcode, uint64_t ver, void *arg)
{
std::cout << __func__ << std::endl;
- sem_post(sem);
+ sem_post(&sem);
}
class LibRadosWatchNotify : public RadosTest
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
TEST_F(LibRadosWatchNotify, WatchNotify) {
- ASSERT_NE(SEM_FAILED, (sem = sem_open("/test_watch_notify_sem", O_CREAT, 0644, 0)));
+ ASSERT_EQ(0, sem_init(&sem, 0, 0));
char buf[128];
memset(buf, 0xcc, sizeof(buf));
ASSERT_EQ(0, rados_write(ioctx, "foo", buf, sizeof(buf), 0));
}
}
TestAlarm alarm;
- sem_wait(sem);
+ sem_wait(&sem);
rados_unwatch(ioctx, "foo", handle);
// when dne ...
ASSERT_EQ(-ENOENT,
rados_watch(ioctx, "dne", 0, &handle, watch_notify_test_cb, NULL));
- sem_close(sem);
+ sem_destroy(&sem);
}
TEST_F(LibRadosWatchNotifyEC, WatchNotify) {
- ASSERT_NE(SEM_FAILED, (sem = sem_open("/test_watch_notify_sem", O_CREAT, 0644, 0)));
+ ASSERT_EQ(0, sem_init(&sem, 0, 0));
char buf[128];
memset(buf, 0xcc, sizeof(buf));
ASSERT_EQ(0, rados_write(ioctx, "foo", buf, sizeof(buf), 0));
}
}
TestAlarm alarm;
- sem_wait(sem);
+ sem_wait(&sem);
rados_unwatch(ioctx, "foo", handle);
- sem_close(sem);
+ sem_destroy(&sem);
}
#pragma GCC diagnostic pop
};
// notify
-static sem_t *sem;
+static sem_t sem;
class WatchNotifyTestCtx : public WatchCtx
{
void notify(uint8_t opcode, uint64_t ver, bufferlist& bl) override
{
std::cout << __func__ << std::endl;
- sem_post(sem);
+ sem_post(&sem);
}
};
TEST_P(LibRadosWatchNotifyPP, WatchNotify) {
- ASSERT_NE(SEM_FAILED, (sem = sem_open("/test_watch_notify_sem", O_CREAT, 0644, 0)));
+ ASSERT_EQ(0, sem_init(&sem, 0, 0));
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
}
}
TestAlarm alarm;
- sem_wait(sem);
+ sem_wait(&sem);
ioctx.unwatch("foo", handle);
- sem_close(sem);
+ sem_destroy(&sem);
}
TEST_F(LibRadosWatchNotifyECPP, WatchNotify) {
- ASSERT_NE(SEM_FAILED, (sem = sem_open("/test_watch_notify_sem", O_CREAT, 0644, 0)));
+ ASSERT_EQ(0, sem_init(&sem, 0, 0));
char buf[128];
memset(buf, 0xcc, sizeof(buf));
bufferlist bl1;
}
}
TestAlarm alarm;
- sem_wait(sem);
+ sem_wait(&sem);
ioctx.unwatch("foo", handle);
- sem_close(sem);
+ sem_destroy(&sem);
}
// --
TEST_P(LibRadosWatchNotifyPP, WatchNotifyTimeout) {
- ASSERT_NE(SEM_FAILED, (sem = sem_open("/test_watch_notify_sem", O_CREAT, 0644, 0)));
+ ASSERT_EQ(0, sem_init(&sem, 0, 0));
ioctx.set_notify_timeout(1);
uint64_t handle;
WatchNotifyTestCtx ctx;
ASSERT_EQ(0, ioctx.write("foo", bl1, sizeof(buf), 0));
ASSERT_EQ(0, ioctx.watch("foo", 0, &handle, &ctx));
- sem_close(sem);
+ sem_destroy(&sem);
ASSERT_EQ(0, ioctx.unwatch("foo", handle));
}
TEST_F(LibRadosWatchNotifyECPP, WatchNotifyTimeout) {
- ASSERT_NE(SEM_FAILED, (sem = sem_open("/test_watch_notify_sem", O_CREAT, 0644, 0)));
+ ASSERT_EQ(0, sem_init(&sem, 0, 0));
ioctx.set_notify_timeout(1);
uint64_t handle;
WatchNotifyTestCtx ctx;
ASSERT_EQ(0, ioctx.write("foo", bl1, sizeof(buf), 0));
ASSERT_EQ(0, ioctx.watch("foo", 0, &handle, &ctx));
- sem_close(sem);
+ sem_destroy(&sem);
ASSERT_EQ(0, ioctx.unwatch("foo", handle));
}
{
public:
AioTestData() : m_complete(false) {
- m_sem = sem_open("test_libradosstriper_aio_sem", O_CREAT, 0644, 0);
+ sem_init(&m_sem, 0, 0);
}
~AioTestData() {
- sem_unlink("test_libradosstriper_aio_sem");
- sem_close(m_sem);
+ sem_destroy(&m_sem);
+ }
+
+ void notify() {
+ sem_post(&m_sem);
+ }
+
+ void wait() {
+ sem_wait(&m_sem);
}
- sem_t *m_sem;
bool m_complete;
+
+private:
+ sem_t m_sem;
};
void set_completion_complete(rados_completion_t cb, void *arg)
{
AioTestData *test = static_cast<AioTestData*>(arg);
test->m_complete = true;
- sem_post(test->m_sem);
+ test->notify();
}
TEST_F(StriperTest, SimpleWrite) {
memset(buf, 0xcc, sizeof(buf));
ASSERT_EQ(0, rados_striper_aio_write(striper, "StriperTest", my_completion, buf, sizeof(buf), 0));
TestAlarm alarm;
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
}
bl1.append(buf, sizeof(buf));
ASSERT_EQ(0, striper.aio_write("SimpleWritePP", my_completion, bl1, sizeof(buf), 0));
TestAlarm alarm;
- sem_wait(test_data.m_sem);
+ test_data.wait();
my_completion->release();
}
ASSERT_EQ(0, rados_striper_aio_write(striper, "WaitForSafe", my_completion, buf, sizeof(buf), 0));
TestAlarm alarm;
rados_aio_wait_for_complete(my_completion);
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
}
ASSERT_EQ(0, striper.aio_write("WaitForSafePP", my_completion, bl1, sizeof(buf), 0));
TestAlarm alarm;
my_completion->wait_for_complete();
- sem_wait(test_data.m_sem);
+ test_data.wait();
my_completion->release();
}
ASSERT_EQ(0, rados_striper_aio_write(striper, "RoundTrip", my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
+ test_data.wait();
}
char buf2[128];
memset(buf2, 0, sizeof(buf2));
rados_aio_wait_for_complete(my_completion2);
}
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
}
ASSERT_EQ(0, rados_striper_aio_write(striper, "RoundTrip2", my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
+ test_data.wait();
}
char buf2[128];
memset(buf2, 0, sizeof(buf2));
rados_aio_wait_for_complete(my_completion2);
}
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
}
ASSERT_EQ(0, striper.aio_write("RoundTripPP", my_completion, bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
+ test_data.wait();
}
bufferlist bl2;
AioCompletion *my_completion2 =
my_completion2->wait_for_complete();
}
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
my_completion->release();
my_completion2->release();
}
ASSERT_EQ(0, striper.aio_write("RoundTripPP2", my_completion, bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
+ test_data.wait();
}
bufferlist bl2;
AioCompletion *my_completion2 =
my_completion2->wait_for_complete();
}
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
my_completion->release();
my_completion2->release();
}
ASSERT_EQ(0, rados_striper_aio_write(striper, "IsComplete", my_completion, buf, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
+ test_data.wait();
}
char buf2[128];
memset(buf2, 0, sizeof(buf2));
}
}
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
}
ASSERT_EQ(0, striper.aio_write("IsCompletePP", my_completion, bl1, sizeof(buf), 0));
{
TestAlarm alarm;
- sem_wait(test_data.m_sem);
+ test_data.wait();
}
bufferlist bl2;
AioCompletion *my_completion2 =
}
}
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
my_completion->release();
my_completion2->release();
}
rados_aio_wait_for_complete(my_completion2);
}
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
}
ASSERT_EQ((int)(sizeof(buf) + sizeof(buf2)), rados_aio_get_return_value(my_completion3));
ASSERT_EQ(0, memcmp(buf3, buf, sizeof(buf)));
ASSERT_EQ(0, memcmp(buf3 + sizeof(buf), buf2, sizeof(buf2)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
rados_aio_release(my_completion3);
ASSERT_EQ(sizeof(buf) + sizeof(buf2), (unsigned)my_completion3->get_return_value());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf, sizeof(buf)));
ASSERT_EQ(0, memcmp(bl3.c_str() + sizeof(buf), buf2, sizeof(buf2)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
my_completion->release();
my_completion2->release();
my_completion3->release();
rados_aio_wait_for_complete(my_completion2);
}
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
}
my_completion2->wait_for_complete();
}
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
my_completion->release();
my_completion2->release();
}
}
ASSERT_EQ(sizeof(buf2), (unsigned)rados_aio_get_return_value(my_completion3));
ASSERT_EQ(0, memcmp(buf3, buf2, sizeof(buf2)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
rados_aio_release(my_completion3);
}
ASSERT_EQ(sizeof(buf2), (unsigned)my_completion3->get_return_value());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf2, sizeof(buf2)));
- sem_wait(test_data.m_sem);
+ test_data.wait();
my_completion->release();
my_completion2->release();
my_completion3->release();