]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Journaler: pay attention to return codes from read head.
authorGreg Farnum <gregory.farnum@dreamhost.com>
Tue, 28 Jun 2011 19:36:00 +0000 (12:36 -0700)
committerGreg Farnum <gregory.farnum@dreamhost.com>
Tue, 28 Jun 2011 19:37:48 +0000 (12:37 -0700)
Previously we ignored them, except for printing them out. This could
lead to bad things like creating new journals for non-existent MDSes
if you entered an invalid rank during --reset-journal.

Also assert that the stripe unit is valid
before using it as  a divisor.

Signed-off-by: Greg Farnum <gregory.farnum@dreamhost.com>
src/osdc/Journaler.cc

index a53290b2b692efc7a25fc0940fe41b0655feaf16..43eca74aa0dde2082840be30e8ec707e42028428 100644 (file)
@@ -188,6 +188,15 @@ void Journaler::_finish_read_head(int r, bufferlist& bl)
 {
   assert(state == STATE_READHEAD);
 
+  if (r!=0) {
+    ldout(cct, 0) << "error getting journal off disk"
+                  << dendl;
+    list<Context*> ls;
+    ls.swap(waitfor_recover);
+    finish_contexts(cct, ls, r);
+    return;
+  }
+
   if (bl.length() == 0) {
     ldout(cct, 1) << "_finish_read_head r=" << r << " read 0 bytes, assuming empty log" << dendl;    
     state = STATE_ACTIVE;
@@ -449,6 +458,7 @@ uint64_t Journaler::append_entry(bufferlist& bl)
 
   // flush previous object?
   uint64_t su = get_layout_period();
+  assert(su > 0);
   uint64_t write_off = write_pos % su;
   uint64_t write_obj = write_pos / su;
   uint64_t flush_obj = flush_pos / su;