m_minimum_set = object_set;
}
-void JournalMetadata::set_active_set(uint64_t object_set) {
+int JournalMetadata::set_active_set(uint64_t object_set) {
+ C_SaferCond ctx;
+ set_active_set(object_set, &ctx);
+ return ctx.wait();
+}
+
+void JournalMetadata::set_active_set(uint64_t object_set, Context *on_finish) {
Mutex::Locker locker(m_lock);
ldout(m_cct, 20) << __func__ << ": current=" << m_active_set
<< ", new=" << object_set << dendl;
if (m_active_set >= object_set) {
+ m_work_queue->queue(on_finish, 0);
return;
}
librados::ObjectWriteOperation op;
client::set_active_set(&op, object_set);
- C_NotifyUpdate *ctx = new C_NotifyUpdate(this);
+ C_NotifyUpdate *ctx = new C_NotifyUpdate(this, on_finish);
librados::AioCompletion *comp =
librados::Rados::aio_create_completion(ctx, NULL,
utils::rados_ctx_callback);
return m_minimum_set;
}
- void set_active_set(uint64_t object_set);
+ int set_active_set(uint64_t object_set);
+ void set_active_set(uint64_t object_set, Context *on_finish);
inline uint64_t get_active_set() const {
Mutex::Locker locker(m_lock);
return m_active_set;
ASSERT_EQ(0U, metadata1->get_active_set());
- metadata1->set_active_set(123);
+ ASSERT_EQ(0, metadata1->set_active_set(123));
ASSERT_TRUE(wait_for_update(metadata1));
ASSERT_EQ(123U, metadata1->get_active_set());
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- metadata->set_active_set(2);
+ ASSERT_EQ(0, metadata->set_active_set(2));
journal::JournalPlayer *player = create_player(oid, metadata);
journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
- metadata->set_active_set(2);
+ ASSERT_EQ(0, metadata->set_active_set(2));
metadata->set_minimum_set(2);
journal::JournalPlayer *player = create_player(oid, metadata);
ASSERT_EQ(0, write_entry(oid, 0, 0, 2));
ASSERT_EQ(0, write_entry(oid, 0, 0, 4));
ASSERT_EQ(0, write_entry(oid, 3, 0, 5)); // laggy entry 0/3 in object 1
- metadata->set_active_set(1);
+ ASSERT_EQ(0, metadata->set_active_set(1));
player->prefetch_and_watch(0.25);
Entries entries;
ASSERT_EQ(0, init_metadata(metadata));
ASSERT_TRUE(wait_for_update(metadata));
- metadata->set_active_set(10);
+ ASSERT_EQ(0, metadata->set_active_set(10));
ASSERT_TRUE(wait_for_update(metadata));
uint64_t commit_tid1;
ASSERT_EQ(0, init_metadata(metadata));
ASSERT_TRUE(wait_for_update(metadata));
- metadata->set_active_set(10);
+ ASSERT_EQ(0, metadata->set_active_set(10));
ASSERT_TRUE(wait_for_update(metadata));
uint64_t commit_tid1;
ASSERT_EQ(0, init_metadata(metadata));
ASSERT_TRUE(wait_for_update(metadata));
- metadata->set_active_set(10);
+ ASSERT_EQ(0, metadata->set_active_set(10));
ASSERT_TRUE(wait_for_update(metadata));
ASSERT_EQ(0, append(oid + ".0", create_payload("payload")));