From 9e7e1f62447ee3e9329b192a5a25ba277dd695ee Mon Sep 17 00:00:00 2001 From: Monty Date: Tue, 7 May 2024 10:47:11 +0300 Subject: [PATCH] Added 'crash_error' to Aria for recording of reason for crash) This will allow us to in the future add better error messages why an Aria table is crashed. --- storage/maria/aria_chk.c | 2 ++ storage/maria/ha_maria.cc | 2 ++ storage/maria/maria_def.h | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/storage/maria/aria_chk.c b/storage/maria/aria_chk.c index ef8e27ee704..357784c7304 100644 --- a/storage/maria/aria_chk.c +++ b/storage/maria/aria_chk.c @@ -1364,6 +1364,7 @@ static int maria_chk(HA_CHECK *param, char *filename) DBUG_PRINT("info", ("Resetting crashed state")); share->state.changed&= ~(STATE_CHANGED | STATE_CRASHED_FLAGS | STATE_IN_REPAIR); + share->crash_error= 0; } else maria_mark_crashed(info); @@ -1428,6 +1429,7 @@ static int maria_chk(HA_CHECK *param, char *filename) DBUG_PRINT("info", ("Resetting crashed state")); share->state.changed&= ~(STATE_CHANGED | STATE_CRASHED_FLAGS | STATE_IN_REPAIR); + share->crash_error= 0; } else if (!maria_is_crashed(info) && (param->testflag & T_UPDATE_STATE)) diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index 2ed19e3257e..e6febb476b5 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -1395,6 +1395,7 @@ int ha_maria::check(THD * thd, HA_CHECK_OPT * check_opt) DBUG_PRINT("info", ("Resetting crashed state")); share->state.changed&= ~(STATE_CHANGED | STATE_CRASHED_FLAGS | STATE_IN_REPAIR); + share->crash_error= 0; if (!(table->db_stat & HA_READ_ONLY)) { int tmp; @@ -1795,6 +1796,7 @@ int ha_maria::repair(THD *thd, HA_CHECK *param, bool do_optimize) DBUG_PRINT("info", ("Resetting crashed state")); share->state.changed&= ~(STATE_CHANGED | STATE_CRASHED_FLAGS | STATE_IN_REPAIR | STATE_MOVED); + share->crash_error= 0; file->update |= HA_STATE_CHANGED | HA_STATE_ROW_CHANGED; } /* diff --git a/storage/maria/maria_def.h b/storage/maria/maria_def.h index 147dc83d78a..029444f97d4 100644 --- a/storage/maria/maria_def.h +++ b/storage/maria/maria_def.h @@ -694,6 +694,7 @@ typedef struct st_maria_share LIST *open_list; /* Tables open with this share */ PAGECACHE *pagecache; /* ref to the current key cache */ MARIA_DECODE_TREE *decode_trees; + int crash_error; /* Reason for marked crashed */ /* Previous auto-increment value. Used to verify if we can restore the auto-increment counter if we have to abort an insert (duplicate key). @@ -1140,19 +1141,23 @@ struct ha_table_option_struct #define int4store_aligned(A,B) int4store((A),(B)) #define maria_mark_crashed(x) do{(x)->s->state.changed|= STATE_CRASHED; \ + (x)->s->crash_error= my_errno; \ DBUG_PRINT("error", ("Marked table crashed")); \ }while(0) #define maria_mark_crashed_share(x) \ do{(x)->state.changed|= STATE_CRASHED; \ + (x)->crash_error= my_errno; \ DBUG_PRINT("error", ("Marked table crashed")); \ }while(0) #define maria_mark_crashed_on_repair(x) do{(x)->s->state.changed|= \ STATE_CRASHED|STATE_CRASHED_ON_REPAIR; \ (x)->update|= HA_STATE_CHANGED; \ + (x)->s->crash_error= my_errno; \ DBUG_PRINT("error", ("Marked table crashed on repair")); \ }while(0) #define maria_mark_in_repair(x) do{(x)->s->state.changed|= \ STATE_CRASHED | STATE_IN_REPAIR; \ + (x)->s->crash_error= my_errno; \ (x)->update|= HA_STATE_CHANGED; \ DBUG_PRINT("error", ("Marked table crashed for repair")); \ }while(0)