Commit 9e7e1f62 authored by Monty's avatar Monty Committed by Sergei Golubchik

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.
parent 24c57165
......@@ -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))
......
......@@ -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;
}
/*
......
......@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment