Skip to content

Commit

Permalink
Merge pull request #9038 from dillaman/wip-15817
Browse files Browse the repository at this point in the history
jewel: journal: incorrectly computed object offset within set

Reviewed-by: Jason Dillaman <dillaman@redhat.com>
  • Loading branch information
Jason Dillaman committed May 10, 2016
2 parents 1bb1a3a + f18b14b commit 63d2d23
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/journal/JournalPlayer.cc
Expand Up @@ -410,7 +410,7 @@ bool JournalPlayer::verify_playback_ready() {
entry.get_entry_tid() == 0) {
uint8_t splay_width = m_journal_metadata->get_splay_width();
m_active_tag_tid = entry.get_tag_tid();
m_splay_offset = object_player->get_object_number() / splay_width;
m_splay_offset = object_player->get_object_number() % splay_width;

ldout(m_cct, 20) << __func__ << ": new tag " << entry.get_tag_tid() << " "
<< "detected, adjusting offset to "
Expand Down
49 changes: 49 additions & 0 deletions src/test/journal/test_JournalPlayer.cc
Expand Up @@ -403,3 +403,52 @@ TEST_F(TestJournalPlayer, PrefetchSkippedObject) {
ASSERT_TRUE(metadata->get_last_allocated_entry_tid(234, &last_tid));
ASSERT_EQ(126U, last_tid);
}

TEST_F(TestJournalPlayer, ImbalancedJournal) {
std::string oid = get_temp_oid();

journal::JournalPlayer::ObjectPositions positions = {
cls::journal::ObjectPosition(9, 300, 1),
cls::journal::ObjectPosition(8, 300, 0),
cls::journal::ObjectPosition(10, 200, 4334),
cls::journal::ObjectPosition(11, 200, 4331) };
cls::journal::ObjectSetPosition commit_position(positions);

ASSERT_EQ(0, create(oid, 14, 4));
ASSERT_EQ(0, client_register(oid));
ASSERT_EQ(0, client_commit(oid, commit_position));

journal::JournalMetadataPtr metadata = create_metadata(oid);
ASSERT_EQ(0, init_metadata(metadata));
metadata->set_active_set(2);
metadata->set_minimum_set(2);

journal::JournalPlayer *player = create_player(oid, metadata);

ASSERT_EQ(0, write_entry(oid, 8, 300, 0));
ASSERT_EQ(0, write_entry(oid, 8, 301, 0));
ASSERT_EQ(0, write_entry(oid, 9, 300, 1));
ASSERT_EQ(0, write_entry(oid, 9, 301, 1));
ASSERT_EQ(0, write_entry(oid, 10, 200, 4334));
ASSERT_EQ(0, write_entry(oid, 10, 301, 2));
ASSERT_EQ(0, write_entry(oid, 11, 200, 4331));
ASSERT_EQ(0, write_entry(oid, 11, 301, 3));

player->prefetch();

Entries entries;
ASSERT_TRUE(wait_for_entries(player, 4, &entries));
ASSERT_TRUE(wait_for_complete(player));

Entries expected_entries;
expected_entries = {
create_entry(301, 0),
create_entry(301, 1),
create_entry(301, 2),
create_entry(301, 3)};
ASSERT_EQ(expected_entries, entries);

uint64_t last_tid;
ASSERT_TRUE(metadata->get_last_allocated_entry_tid(301, &last_tid));
ASSERT_EQ(3U, last_tid);
}

0 comments on commit 63d2d23

Please sign in to comment.