#include "journal/FutureImpl.h"
#include "common/Finisher.h"
+#include "journal/JournalMetadata.h"
#include "journal/Utils.h"
namespace journal {
-FutureImpl::FutureImpl(Finisher &finisher, uint64_t tag_tid, uint64_t entry_tid,
- uint64_t commit_tid)
- : RefCountedObject(NULL, 0), m_finisher(finisher), m_tag_tid(tag_tid),
- m_entry_tid(entry_tid), m_commit_tid(commit_tid),
+FutureImpl::FutureImpl(JournalMetadataPtr journal_metadata, uint64_t tag_tid,
+ uint64_t entry_tid, uint64_t commit_tid)
+ : RefCountedObject(NULL, 0), m_journal_metadata(journal_metadata),
+ m_tag_tid(tag_tid), m_entry_tid(entry_tid), m_commit_tid(commit_tid),
m_lock(utils::unique_lock_name("FutureImpl::m_lock", this)), m_safe(false),
m_consistent(false), m_return_value(0), m_flush_state(FLUSH_STATE_NONE),
m_consistent_ack(this) {
}
if (complete && on_safe != NULL) {
- m_finisher.queue(on_safe, m_return_value);
+ m_journal_metadata->get_finisher().queue(on_safe, m_return_value);
} else if (flush_handler) {
// attached to journal object -- instruct it to flush all entries through
// this one. possible to become detached while lock is released, so flush
return;
}
}
- m_finisher.queue(on_safe, m_return_value);
+ m_journal_metadata->get_finisher().queue(on_safe, m_return_value);
}
bool FutureImpl::is_complete() const {
#include "include/assert.h"
class Context;
-class Finisher;
namespace journal {
class FutureImpl;
+class JournalMetadata;
typedef boost::intrusive_ptr<FutureImpl> FutureImplPtr;
class FutureImpl : public RefCountedObject, boost::noncopyable {
virtual void get() = 0;
virtual void put() = 0;
};
+ typedef boost::intrusive_ptr<JournalMetadata> JournalMetadataPtr;
typedef boost::intrusive_ptr<FlushHandler> FlushHandlerPtr;
- FutureImpl(Finisher &finisher, uint64_t tag_tid, uint64_t entry_tid,
- uint64_t commit_tid);
+ FutureImpl(JournalMetadataPtr journal_metadata, uint64_t tag_tid,
+ uint64_t entry_tid, uint64_t commit_tid);
void init(const FutureImplPtr &prev_future);
virtual void finish(int r) {}
};
- Finisher &m_finisher;
+ JournalMetadataPtr m_journal_metadata;
uint64_t m_tag_tid;
uint64_t m_entry_tid;
uint64_t m_commit_tid;
ObjectRecorderPtr object_ptr = get_object(splay_offset);
uint64_t commit_tid = m_journal_metadata->allocate_commit_tid(
object_ptr->get_object_number(), tag_tid, entry_tid);
- FutureImplPtr future(new FutureImpl(m_journal_metadata->get_finisher(),
- tag_tid, entry_tid, commit_tid));
+ FutureImplPtr future(new FutureImpl(m_journal_metadata, tag_tid, entry_tid,
+ commit_tid));
future->init(m_prev_future);
m_prev_future = future;
return cls::journal::client::create(m_ioctx, oid, order, splay_width, -1);
}
+journal::JournalMetadataPtr RadosTestFixture::create_metadata(
+ const std::string &oid, const std::string &client_id,
+ double commit_internal) {
+ journal::JournalMetadataPtr metadata(new journal::JournalMetadata(
+ m_ioctx, oid, client_id, commit_internal));
+ return metadata;
+}
+
int RadosTestFixture::append(const std::string &oid, const bufferlist &bl) {
librados::ObjectWriteOperation op;
op.append(bl);
virtual void SetUp();
virtual void TearDown();
- int create(const std::string &oid, uint8_t order, uint8_t splay_width);
+ int create(const std::string &oid, uint8_t order = 14,
+ uint8_t splay_width = 2);
+ journal::JournalMetadataPtr create_metadata(const std::string &oid,
+ const std::string &client_id = "client",
+ double commit_internal = 0.1);
int append(const std::string &oid, const bufferlist &bl);
- int client_register(const std::string &oid, const std::string &id,
- const std::string &description);
+ int client_register(const std::string &oid, const std::string &id = "client",
+ const std::string &description = "");
int client_commit(const std::string &oid, const std::string &id,
const cls::journal::ObjectSetPosition &commit_position);
#include "journal/FutureImpl.h"
#include "common/Cond.h"
-#include "common/Finisher.h"
#include "common/Mutex.h"
#include "gtest/gtest.h"
#include "test/journal/RadosTestFixture.h"
class TestFutureImpl : public RadosTestFixture {
public:
-
- TestFutureImpl() : m_finisher(NULL) {
- }
- ~TestFutureImpl() {
- m_finisher->stop();
- delete m_finisher;
- }
-
struct FlushHandler : public journal::FutureImpl::FlushHandler {
uint64_t refs;
uint64_t flushes;
}
};
- void SetUp() {
- RadosTestFixture::SetUp();
- m_finisher = new Finisher(reinterpret_cast<CephContext*>(m_ioctx.cct()));
- m_finisher->start();
- }
-
- journal::FutureImplPtr create_future(uint64_t tag_tid, uint64_t entry_tid,
+ journal::FutureImplPtr create_future(journal::JournalMetadataPtr metadata,
+ uint64_t tag_tid, uint64_t entry_tid,
uint64_t commit_tid,
const journal::FutureImplPtr &prev =
journal::FutureImplPtr()) {
- journal::FutureImplPtr future(new journal::FutureImpl(*m_finisher,
- tag_tid, entry_tid,
+ journal::FutureImplPtr future(new journal::FutureImpl(metadata, tag_tid,
+ entry_tid,
commit_tid));
future->init(prev);
return future;
void flush(const journal::FutureImplPtr &future) {
}
- Finisher *m_finisher;
-
FlushHandler m_flush_handler;
};
TEST_F(TestFutureImpl, Getters) {
- journal::FutureImplPtr future = create_future(234, 123, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
ASSERT_EQ(234U, future->get_tag_tid());
ASSERT_EQ(123U, future->get_entry_tid());
ASSERT_EQ(456U, future->get_commit_tid());
}
TEST_F(TestFutureImpl, Attach) {
- journal::FutureImplPtr future = create_future(234, 123, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
ASSERT_EQ(1U, m_flush_handler.refs);
}
TEST_F(TestFutureImpl, AttachWithPendingFlush) {
- journal::FutureImplPtr future = create_future(234, 123, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
future->flush(NULL);
ASSERT_TRUE(future->attach(&m_flush_handler));
}
TEST_F(TestFutureImpl, Detach) {
- journal::FutureImplPtr future = create_future(234, 123, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
future->detach();
ASSERT_EQ(0U, m_flush_handler.refs);
}
TEST_F(TestFutureImpl, DetachImplicit) {
- journal::FutureImplPtr future = create_future(234, 123, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
future.reset();
ASSERT_EQ(0U, m_flush_handler.refs);
}
TEST_F(TestFutureImpl, Flush) {
- journal::FutureImplPtr future = create_future(234, 123, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
C_SaferCond cond;
}
TEST_F(TestFutureImpl, FlushWithoutContext) {
- journal::FutureImplPtr future = create_future(234, 123, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
future->flush(NULL);
}
TEST_F(TestFutureImpl, FlushChain) {
- journal::FutureImplPtr future1 = create_future(234, 123, 456);
- journal::FutureImplPtr future2 = create_future(234, 124, 457, future1);
- journal::FutureImplPtr future3 = create_future(235, 1, 458, future2);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future1 = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future2 = create_future(metadata, 234, 124, 457,
+ future1);
+ journal::FutureImplPtr future3 = create_future(metadata, 235, 1, 458,
+ future2);
ASSERT_FALSE(future1->attach(&m_flush_handler));
ASSERT_FALSE(future2->attach(&m_flush_handler));
ASSERT_FALSE(future3->attach(&m_flush_handler));
}
TEST_F(TestFutureImpl, FlushInProgress) {
- journal::FutureImplPtr future1 = create_future(234, 123, 456);
- journal::FutureImplPtr future2 = create_future(234, 124, 457, future1);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future1 = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future2 = create_future(metadata, 234, 124, 457,
+ future1);
ASSERT_FALSE(future1->attach(&m_flush_handler));
ASSERT_FALSE(future2->attach(&m_flush_handler));
}
TEST_F(TestFutureImpl, FlushAlreadyComplete) {
- journal::FutureImplPtr future = create_future(234, 123, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
future->safe(-EIO);
C_SaferCond cond;
}
TEST_F(TestFutureImpl, Wait) {
- journal::FutureImplPtr future = create_future(234, 1, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 1, 456);
C_SaferCond cond;
future->wait(&cond);
}
TEST_F(TestFutureImpl, WaitAlreadyComplete) {
- journal::FutureImplPtr future = create_future(234, 1, 456);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future = create_future(metadata, 234, 1, 456);
future->safe(-EEXIST);
C_SaferCond cond;
}
TEST_F(TestFutureImpl, SafePreservesError) {
- journal::FutureImplPtr future1 = create_future(234, 123, 456);
- journal::FutureImplPtr future2 = create_future(234, 124, 457, future1);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future1 = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future2 = create_future(metadata, 234, 124, 457,
+ future1);
future1->safe(-EIO);
future2->safe(-EEXIST);
}
TEST_F(TestFutureImpl, ConsistentPreservesError) {
- journal::FutureImplPtr future1 = create_future(234, 123, 456);
- journal::FutureImplPtr future2 = create_future(234, 124, 457, future1);
+ std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
+
+ journal::FutureImplPtr future1 = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future2 = create_future(metadata, 234, 124, 457,
+ future1);
future2->safe(-EEXIST);
future1->safe(-EIO);
journal::JournalMetadataPtr create_metadata(const std::string &oid,
const std::string &client_id,
double commit_internal = 0.1) {
- journal::JournalMetadataPtr metadata(new journal::JournalMetadata(
- m_ioctx, oid, client_id, commit_internal));
+ journal::JournalMetadataPtr metadata = RadosTestFixture::create_metadata(
+ oid, client_id, commit_internal);
m_metadata_list.push_back(metadata);
metadata->add_listener(&m_listener);
return metadata;
RadosTestFixture::TearDown();
}
- int create(const std::string &oid, uint8_t splay_width = 2) {
- return RadosTestFixture::create(oid, 14, splay_width);
- }
-
- int client_register(const std::string &oid) {
- return RadosTestFixture::client_register(oid, "client", "");
- }
-
int client_commit(const std::string &oid,
journal::JournalPlayer::ObjectSetPosition position) {
return RadosTestFixture::client_commit(oid, "client", position);
return journal::Entry(tag_tid, entry_tid, payload_bl);
}
- journal::JournalMetadataPtr create_metadata(const std::string &oid) {
- journal::JournalMetadataPtr metadata(new journal::JournalMetadata(
- m_ioctx, oid, "client", 0.1));
- return metadata;
- }
-
journal::JournalPlayer *create_player(const std::string &oid,
const journal::JournalMetadataPtr &metadata) {
journal::JournalPlayer *player(new journal::JournalPlayer(
cls::journal::ObjectSetPosition commit_position;
- ASSERT_EQ(0, create(oid, 3));
+ ASSERT_EQ(0, create(oid, 14, 3));
ASSERT_EQ(0, client_register(oid));
ASSERT_EQ(0, client_commit(oid, commit_position));
RadosTestFixture::TearDown();
}
- int client_register(const std::string &oid) {
- return RadosTestFixture::client_register(oid, "client", "");
- }
-
- journal::JournalMetadataPtr create_metadata(const std::string &oid) {
- journal::JournalMetadataPtr metadata(new journal::JournalMetadata(
- m_ioctx, oid, "client", 0.1));
- return metadata;
- }
-
journal::JournalRecorder *create_recorder(const std::string &oid,
const journal::JournalMetadataPtr &metadata) {
journal::JournalRecorder *recorder(new journal::JournalRecorder(
return r;
}
- using RadosTestFixture::client_register;
- int client_register(const std::string &oid) {
- return RadosTestFixture::client_register(oid, "client", "");
- }
-
journal::JournalMetadataPtr create_metadata(const std::string &oid) {
- journal::JournalMetadataPtr metadata(new journal::JournalMetadata(
- m_ioctx, oid, "client", 0.1));
+ journal::JournalMetadataPtr metadata = RadosTestFixture::create_metadata(
+ oid);
m_metadata_list.push_back(metadata);
metadata->add_listener(&m_listener);
return metadata;
#include "journal/ObjectRecorder.h"
#include "common/Cond.h"
-#include "common/Finisher.h"
#include "common/Mutex.h"
#include "common/Timer.h"
#include "gtest/gtest.h"
TestObjectRecorder()
: m_flush_interval(std::numeric_limits<uint32_t>::max()),
m_flush_bytes(std::numeric_limits<uint64_t>::max()),
- m_flush_age(600),
- m_finisher(NULL)
+ m_flush_age(600)
{
}
- ~TestObjectRecorder() {
- m_finisher->stop();
- delete m_finisher;
- }
-
struct OverflowHandler : public journal::ObjectRecorder::OverflowHandler {
Mutex lock;
Cond cond;
double m_flush_age;
OverflowHandler m_overflow_handler;
- Finisher *m_finisher;
-
- void SetUp() {
- RadosTestFixture::SetUp();
- m_finisher = new Finisher(reinterpret_cast<CephContext*>(m_ioctx.cct()));
- m_finisher->start();
- }
-
void TearDown() {
for (ObjectRecorders::iterator it = m_object_recorders.begin();
it != m_object_recorders.end(); ++it) {
m_flush_age = i;
}
- journal::AppendBuffer create_append_buffer(uint64_t tag_tid, uint64_t entry_tid,
+ journal::AppendBuffer create_append_buffer(journal::JournalMetadataPtr metadata,
+ uint64_t tag_tid, uint64_t entry_tid,
const std::string &payload) {
- journal::FutureImplPtr future(new journal::FutureImpl(*m_finisher,
- tag_tid, entry_tid, 456));
+ journal::FutureImplPtr future(new journal::FutureImpl(metadata, tag_tid,
+ entry_tid, 456));
future->init(journal::FutureImplPtr());
bufferlist bl;
TEST_F(TestObjectRecorder, Append) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
- "payload");
+ journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
+ 234, 123,
+ "payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
ASSERT_FALSE(object->append(append_buffers));
ASSERT_EQ(1U, object->get_pending_appends());
- journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
- "payload");
+ journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
+ 234, 124,
+ "payload");
append_buffers = {append_buffer2};
ASSERT_FALSE(object->append(append_buffers));
ASSERT_EQ(2U, object->get_pending_appends());
TEST_F(TestObjectRecorder, AppendFlushByCount) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
set_flush_interval(2);
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
- "payload");
+ journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
+ 234, 123,
+ "payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
ASSERT_FALSE(object->append(append_buffers));
ASSERT_EQ(1U, object->get_pending_appends());
- journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
- "payload");
+ journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
+ 234, 124,
+ "payload");
append_buffers = {append_buffer2};
ASSERT_FALSE(object->append(append_buffers));
ASSERT_EQ(0U, object->get_pending_appends());
TEST_F(TestObjectRecorder, AppendFlushByBytes) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
set_flush_bytes(10);
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
- "payload");
+ journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
+ 234, 123,
+ "payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
ASSERT_FALSE(object->append(append_buffers));
ASSERT_EQ(1U, object->get_pending_appends());
- journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
- "payload");
+ journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
+ 234, 124,
+ "payload");
append_buffers = {append_buffer2};
ASSERT_FALSE(object->append(append_buffers));
ASSERT_EQ(0U, object->get_pending_appends());
TEST_F(TestObjectRecorder, AppendFlushByAge) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
set_flush_age(0.1);
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
- "payload");
+ journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
+ 234, 123,
+ "payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
ASSERT_FALSE(object->append(append_buffers));
- journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
- "payload");
+ journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
+ 234, 124,
+ "payload");
append_buffers = {append_buffer2};
ASSERT_FALSE(object->append(append_buffers));
TEST_F(TestObjectRecorder, AppendFilledObject) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
journal::ObjectRecorderPtr object = create_object(oid, 12);
std::string payload(2048, '1');
- journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
+ 234, 123,
payload);
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
ASSERT_FALSE(object->append(append_buffers));
- journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
+ journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
+ 234, 124,
payload);
append_buffers = {append_buffer2};
ASSERT_TRUE(object->append(append_buffers));
TEST_F(TestObjectRecorder, Flush) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
- "payload");
+ journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
+ 234, 123,
+ "payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
ASSERT_FALSE(object->append(append_buffers));
TEST_F(TestObjectRecorder, FlushFuture) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer = create_append_buffer(234, 123,
+ journal::AppendBuffer append_buffer = create_append_buffer(metadata,
+ 234, 123,
"payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer};
TEST_F(TestObjectRecorder, FlushDetachedFuture) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer = create_append_buffer(234, 123,
+ journal::AppendBuffer append_buffer = create_append_buffer(metadata,
+ 234, 123,
"payload");
journal::AppendBuffers append_buffers;
TEST_F(TestObjectRecorder, Overflow) {
std::string oid = get_temp_oid();
+ ASSERT_EQ(0, create(oid));
+ ASSERT_EQ(0, client_register(oid));
+ journal::JournalMetadataPtr metadata = create_metadata(oid);
+ ASSERT_EQ(0, init_metadata(metadata));
journal::ObjectRecorderPtr object1 = create_object(oid, 12);
journal::ObjectRecorderPtr object2 = create_object(oid, 12);
std::string payload(2048, '1');
- journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
+ 234, 123,
payload);
- journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
+ journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
+ 234, 124,
payload);
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1, append_buffer2};
ASSERT_EQ(0, cond.wait());
ASSERT_EQ(0U, object1->get_pending_appends());
- journal::AppendBuffer append_buffer3 = create_append_buffer(456, 123,
+ journal::AppendBuffer append_buffer3 = create_append_buffer(metadata,
+ 456, 123,
payload);
append_buffers = {append_buffer3};