• unknown's avatar
    WL#3072 Maria recovery: · 13f45b16
    unknown authored
    fix for bug: if a crash happened right after writing a REDO like this:
    REDO - UNDO - REDO*, then recovery would ignore the last REDO* (ok),
    rollback: REDO - UNDO - REDO* - REDO - CLR, and a next recovery would
    thus execute REDO* instead of skipping it again. Recovery now logs
    LOGREC_INCOMPLETE_GROUP when it meets REDO* for the first time,
    to draw a boundary and ensure it is always skipped. Tested by hand.
    Note: ma_test_all fails "maria_chk: error: Key 1 - Found too many records"
    not due to this patch (failed before).
    
    
    BitKeeper/triggers/post-commit:
      no truncation of the commit mail, or how to review patches?
    mysql-test/include/maria_verify_recovery.inc:
      let caller choose the statement used to crash (sometimes we
      want the crash to happen at special places)
    mysql-test/t/maria-recovery.test:
      user of maria_verify_recovery.inc now specifies statement which the
      script should use for crashing.
    storage/maria/ma_bitmap.c:
      it's easier to search for all places using functions from the bitmap
      module (like in ma_blockrec.c) if those exported functions all start
      with "_ma_bitmap": renaming some of them.
      Assertion that when we read a bitmap page, overwriting bitmap->map,
      we are not losing information (i.e. bitmap->changed is false).
    storage/maria/ma_blockrec.c:
      update to new names. Adding code (disabled, protected by a #ifdef)
      that I use to test certain crash scenarios (more to come).
    storage/maria/ma_blockrec.h:
      update to new names
    storage/maria/ma_checkpoint.c:
      update to new names
    storage/maria/ma_extra.c:
      update to new names
    storage/maria/ma_loghandler.c:
      new LOGREC_INCOMPLETE_GROUP
    storage/maria/ma_loghandler.h:
      new LOGREC_INCOMPLETE_GROUP
    storage/maria/ma_recovery.c:
      When at the end of the REDO phase we have identified some transactions
      with incomplete REDO groups (REDOs without an UNDO or CLR_END),
      for each of them we log LOGREC_INCOMPLETE_GROUP. This way, the
      upcoming UNDO phase can write more records for such transaction,
      a future recovery won't pair the incomplete group with the
      CLR_END (as there is LOGREC_INCOMPLETE_GROUP to draw a boundary).
    13f45b16
ma_extra.c 19.2 KB