// vim: ts=8 sw=2 smarttab
#include "journal/FutureImpl.h"
-#include "journal/JournalMetadata.h"
#include "journal/Utils.h"
namespace journal {
-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),
+FutureImpl::FutureImpl(uint64_t tag_tid, uint64_t entry_tid,
+ uint64_t commit_tid)
+ : RefCountedObject(NULL, 0), 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_journal_metadata->queue(on_safe, m_return_value);
+ on_safe->complete(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_journal_metadata->queue(on_safe, m_return_value);
+
+ on_safe->complete(m_return_value);
}
bool FutureImpl::is_complete() const {
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(JournalMetadataPtr journal_metadata, uint64_t tag_tid,
- uint64_t entry_tid, uint64_t commit_tid);
+ FutureImpl(uint64_t tag_tid, uint64_t entry_tid, uint64_t commit_tid);
void init(const FutureImplPtr &prev_future);
virtual void finish(int r) {}
};
- 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, tag_tid, entry_tid,
- commit_tid));
+ FutureImplPtr future(new FutureImpl(tag_tid, entry_tid, commit_tid));
future->init(m_prev_future);
m_prev_future = future;
}
};
- journal::FutureImplPtr create_future(journal::JournalMetadataPtr metadata,
- uint64_t tag_tid, uint64_t entry_tid,
+ journal::FutureImplPtr create_future(uint64_t tag_tid, uint64_t entry_tid,
uint64_t commit_tid,
const journal::FutureImplPtr &prev =
journal::FutureImplPtr()) {
- journal::FutureImplPtr future(new journal::FutureImpl(metadata, tag_tid,
+ journal::FutureImplPtr future(new journal::FutureImpl(tag_tid,
entry_tid,
commit_tid));
future->init(prev);
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future = create_future(234, 123, 456);
ASSERT_EQ(234U, future->get_tag_tid());
ASSERT_EQ(123U, future->get_entry_tid());
ASSERT_EQ(456U, future->get_commit_tid());
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future = create_future(234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
ASSERT_EQ(1U, m_flush_handler.refs);
}
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future = create_future(234, 123, 456);
future->flush(NULL);
ASSERT_TRUE(future->attach(&m_flush_handler));
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future = create_future(234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
future->detach();
ASSERT_EQ(0U, m_flush_handler.refs);
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future = create_future(234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
future.reset();
ASSERT_EQ(0U, m_flush_handler.refs);
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future = create_future(234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
C_SaferCond cond;
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future = create_future(234, 123, 456);
ASSERT_FALSE(future->attach(&m_flush_handler));
future->flush(NULL);
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,
+ journal::FutureImplPtr future1 = create_future(234, 123, 456);
+ journal::FutureImplPtr future2 = create_future(234, 124, 457,
future1);
- journal::FutureImplPtr future3 = create_future(metadata, 235, 1, 458,
+ journal::FutureImplPtr future3 = create_future(235, 1, 458,
future2);
ASSERT_FALSE(future1->attach(&m_flush_handler));
ASSERT_FALSE(future2->attach(&m_flush_handler));
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,
+ journal::FutureImplPtr future1 = create_future(234, 123, 456);
+ journal::FutureImplPtr future2 = create_future(234, 124, 457,
future1);
ASSERT_FALSE(future1->attach(&m_flush_handler));
ASSERT_FALSE(future2->attach(&m_flush_handler));
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 123, 456);
+ journal::FutureImplPtr future = create_future(234, 123, 456);
future->safe(-EIO);
C_SaferCond cond;
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 1, 456);
+ journal::FutureImplPtr future = create_future(234, 1, 456);
C_SaferCond cond;
future->wait(&cond);
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- journal::FutureImplPtr future = create_future(metadata, 234, 1, 456);
+ journal::FutureImplPtr future = create_future(234, 1, 456);
future->safe(-EEXIST);
C_SaferCond cond;
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,
+ journal::FutureImplPtr future1 = create_future(234, 123, 456);
+ journal::FutureImplPtr future2 = create_future(234, 124, 457,
future1);
future1->safe(-EIO);
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,
+ journal::FutureImplPtr future1 = create_future(234, 123, 456);
+ journal::FutureImplPtr future2 = create_future(234, 124, 457,
future1);
future2->safe(-EEXIST);
m_flush_age = i;
}
- journal::AppendBuffer create_append_buffer(journal::JournalMetadataPtr metadata,
- uint64_t tag_tid, uint64_t entry_tid,
+ journal::AppendBuffer create_append_buffer(uint64_t tag_tid, uint64_t entry_tid,
const std::string &payload) {
- journal::FutureImplPtr future(new journal::FutureImpl(metadata, tag_tid,
- entry_tid, 456));
+ journal::FutureImplPtr future(new journal::FutureImpl(tag_tid, entry_tid,
+ 456));
future->init(journal::FutureImplPtr());
bufferlist bl;
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(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(metadata,
- 234, 124,
+ journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
"payload");
append_buffers = {append_buffer2};
ASSERT_FALSE(object->append(append_buffers));
set_flush_interval(2);
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(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(metadata,
- 234, 124,
+ journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
"payload");
append_buffers = {append_buffer2};
ASSERT_FALSE(object->append(append_buffers));
set_flush_bytes(10);
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(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(metadata,
- 234, 124,
+ journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
"payload");
append_buffers = {append_buffer2};
ASSERT_FALSE(object->append(append_buffers));
set_flush_age(0.1);
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
"payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
ASSERT_FALSE(object->append(append_buffers));
- journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
- 234, 124,
+ journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
"payload");
append_buffers = {append_buffer2};
ASSERT_FALSE(object->append(append_buffers));
journal::ObjectRecorderPtr object = create_object(oid, 12);
std::string payload(2048, '1');
- journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
payload);
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
ASSERT_FALSE(object->append(append_buffers));
- journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
- 234, 124,
+ journal::AppendBuffer append_buffer2 = create_append_buffer(234, 124,
payload);
append_buffers = {append_buffer2};
ASSERT_TRUE(object->append(append_buffers));
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
"payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer1};
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer = create_append_buffer(234, 123,
"payload");
journal::AppendBuffers append_buffers;
append_buffers = {append_buffer};
journal::ObjectRecorderPtr object = create_object(oid, 24);
- journal::AppendBuffer append_buffer = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer = create_append_buffer(234, 123,
"payload");
journal::AppendBuffers append_buffers;
journal::ObjectRecorderPtr object2 = create_object(oid, 12);
std::string payload(2048, '1');
- journal::AppendBuffer append_buffer1 = create_append_buffer(metadata,
- 234, 123,
+ journal::AppendBuffer append_buffer1 = create_append_buffer(234, 123,
payload);
- journal::AppendBuffer append_buffer2 = create_append_buffer(metadata,
- 234, 124,
+ journal::AppendBuffer append_buffer2 = create_append_buffer(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(metadata,
- 456, 123,
+ journal::AppendBuffer append_buffer3 = create_append_buffer(456, 123,
payload);
append_buffers = {append_buffer3};