• Sergey Vojtovich's avatar
    Backport from 6.0-codebase. · 40ec012c
    Sergey Vojtovich authored
    WL#3951 - MyISAM: Additional Error Logs for Data Corruption
    
    When table corruption is detected, in addition to current error message
    provide following information:
    - list of threads (and queries) accessing a table;
    - thread_id of a thread that detected corruption;
    - source file name and line number where this corruption was detected;
    - optional extra information (string).
    
    mysql-test/r/myisam_crash_before_flush_keys.result:
      Adjusted a test case according to WL#3951.
    mysql-test/t/myisam_crash_before_flush_keys.test:
      Adjusted a test case according to WL#3951.
    storage/myisam/CMakeLists.txt:
      Added mi_extrafunc.h to myisam sources list.
    storage/myisam/Makefile.am:
      Added mi_extrafunc.h to myisam headers list.
    storage/myisam/ha_myisam.cc:
      Added _mi_report_crashed() function (reports additional information
      whenever table corruption is detected).
    storage/myisam/mi_extrafunc.h:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/mi_locking.c:
      For every call to mi_lock_database(F_[RD|WR|EXTRA_]LCK) - add
      current thread to the list of threads accessing this table.
      
      For every call to mi_lock_database(F_UNLCK) - remove current
      thread from the list of threads accessing this table.
    storage/myisam/mi_test1.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/mi_test2.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/mi_test3.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/myisam_ftdump.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/myisamchk.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/myisamdef.h:
      Extra elements are added to MI_INFO and MYISAM_SHARE structures.
      MI_INFO is extended with LIST element, that holds a pointer to
      THD object accessing a table. MYISAM_SHARE is extended with LIST
      (list of threads accessing a table).
      
      Whenever table is marked as crashed, call mi_report_crashed() macro
      to provide useful information.
    storage/myisam/myisamlog.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/myisampack.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/rt_test.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisam/sp_test.c:
      All standalone programs must define their version of _mi_report_crashed()
      by including mi_extrafunc.h.
    storage/myisammrg/ha_myisammrg.cc:
      For each unedrlying table initialize `in_use' variable.
    40ec012c
myisamchk.c 60.8 KB