Skip to content

Commit

Permalink
JounralingObjectStore: journal->committed_thru after replay
Browse files Browse the repository at this point in the history
It's possible that the osd stopped between when the filestore
op_seq file was updated and when the journal was trimmed.  In
that case, it's possible that on boot the journal might be
full, and yet not be trimmed because commit_start assumes
there is no work to do.  Calling committed_thru on the journal
ensures that the journal matches committed_seq.

Backport: emperor dumpling
Fixes: 6756
Signed-off-by: Samuel Just <[email protected]>
Reviewed-by: Josh Durgin <[email protected]>
Reviewed-by: David Zafman <[email protected]>
  • Loading branch information
Samuel Just committed Nov 14, 2013
1 parent aef3378 commit d8d27f1
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/os/FileJournal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,6 @@ int FileJournal::open(uint64_t fs_op_seq)
{
dout(2) << "open " << fn << " fsid " << fsid << " fs_op_seq " << fs_op_seq << dendl;

last_committed_seq = fs_op_seq;
uint64_t next_seq = fs_op_seq + 1;

int err = _open(false);
Expand Down Expand Up @@ -528,6 +527,11 @@ int FileJournal::open(uint64_t fs_op_seq)
// find next entry
read_pos = header.start;
uint64_t seq = header.start_seq;

// last_committed_seq is 1 before the start of the journal or
// 0 if the start is 0
last_committed_seq = seq > 0 ? seq - 1 : seq;

while (1) {
bufferlist bl;
off64_t old_pos = read_pos;
Expand Down
2 changes: 2 additions & 0 deletions src/os/JournalingObjectStore.cc
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ int JournalingObjectStore::journal_replay(uint64_t fs_op_seq)
// done reading, make writeable.
journal->make_writeable();

journal->committed_thru(fs_op_seq);

return count;
}

Expand Down

0 comments on commit d8d27f1

Please sign in to comment.