Commit 20bbcc35 authored by unknown's avatar unknown

Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-maria

into  mysqlwin32.:C:/mysql-maria


mysql-test/include/wait_until_connected_again.inc:
  Auto merged
storage/maria/ha_maria.cc:
  Auto merged
storage/maria/ma_blockrec.c:
  Auto merged
storage/maria/ma_check.c:
  Auto merged
storage/maria/ma_loghandler.c:
  Auto merged
parents 99b3d018 7300af84
...@@ -85,6 +85,7 @@ extern void _db_force_flush(); ...@@ -85,6 +85,7 @@ extern void _db_force_flush();
#define DEBUGGER_OFF do { _dbug_on_= 0; } while(0) #define DEBUGGER_OFF do { _dbug_on_= 0; } while(0)
#define DEBUGGER_ON do { _dbug_on_= 1; } while(0) #define DEBUGGER_ON do { _dbug_on_= 1; } while(0)
#define IF_DBUG(A) A #define IF_DBUG(A) A
#define DBUG_ABORT() ((void)fflush(DBUG_FILE), abort())
#else /* No debugger */ #else /* No debugger */
#define DBUG_ENTER(a1) #define DBUG_ENTER(a1)
...@@ -114,6 +115,7 @@ extern void _db_force_flush(); ...@@ -114,6 +115,7 @@ extern void _db_force_flush();
#define DEBUGGER_OFF do { } while(0) #define DEBUGGER_OFF do { } while(0)
#define DEBUGGER_ON do { } while(0) #define DEBUGGER_ON do { } while(0)
#define IF_DBUG(A) #define IF_DBUG(A)
#define DBUG_ABORT() ((void)(0))
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -444,3 +444,18 @@ static uint get_thread_lib(void) ...@@ -444,3 +444,18 @@ static uint get_thread_lib(void)
} }
#endif /* THREAD */ #endif /* THREAD */
#ifdef __WIN__
/*
With Windows debug builds abort() causes a popup from CRT; as abort()
is used in tests it is annoying so we use a custom one.
*/
void abort(void)
{
#ifdef REENABLE_AFTER_FIX_FOR_BUG_31745 /* don't want a popup */
raise(SIGABRT);
#endif
_exit(3);
}
#endif
...@@ -719,7 +719,7 @@ int ha_commit_trans(THD *thd, bool all) ...@@ -719,7 +719,7 @@ int ha_commit_trans(THD *thd, bool all)
goto end; goto end;
} }
DBUG_EXECUTE_IF("crash_commit_before", abort();); DBUG_EXECUTE_IF("crash_commit_before", DBUG_ABORT(););
/* Close all cursors that can not survive COMMIT */ /* Close all cursors that can not survive COMMIT */
if (is_real_trans) /* not a statement commit */ if (is_real_trans) /* not a statement commit */
...@@ -737,7 +737,7 @@ int ha_commit_trans(THD *thd, bool all) ...@@ -737,7 +737,7 @@ int ha_commit_trans(THD *thd, bool all)
} }
status_var_increment(thd->status_var.ha_prepare_count); status_var_increment(thd->status_var.ha_prepare_count);
} }
DBUG_EXECUTE_IF("crash_commit_after_prepare", abort();); DBUG_EXECUTE_IF("crash_commit_after_prepare", DBUG_ABORT(););
if (error || (is_real_trans && xid && if (error || (is_real_trans && xid &&
(error= !(cookie= tc_log->log_xid(thd, xid))))) (error= !(cookie= tc_log->log_xid(thd, xid)))))
{ {
...@@ -745,13 +745,13 @@ int ha_commit_trans(THD *thd, bool all) ...@@ -745,13 +745,13 @@ int ha_commit_trans(THD *thd, bool all)
error= 1; error= 1;
goto end; goto end;
} }
DBUG_EXECUTE_IF("crash_commit_after_log", abort();); DBUG_EXECUTE_IF("crash_commit_after_log", DBUG_ABORT(););
} }
error=ha_commit_one_phase(thd, all) ? (cookie ? 2 : 1) : 0; error=ha_commit_one_phase(thd, all) ? (cookie ? 2 : 1) : 0;
DBUG_EXECUTE_IF("crash_commit_before_unlog", abort();); DBUG_EXECUTE_IF("crash_commit_before_unlog", DBUG_ABORT(););
if (cookie) if (cookie)
tc_log->unlog(cookie, xid); tc_log->unlog(cookie, xid);
DBUG_EXECUTE_IF("crash_commit_after", abort();); DBUG_EXECUTE_IF("crash_commit_after", DBUG_ABORT(););
end: end:
if (is_real_trans) if (is_real_trans)
start_waiting_global_read_lock(thd); start_waiting_global_read_lock(thd);
......
...@@ -4049,7 +4049,7 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event) ...@@ -4049,7 +4049,7 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
goto err; goto err;
if (flush_and_sync()) if (flush_and_sync())
goto err; goto err;
DBUG_EXECUTE_IF("half_binlogged_transaction", abort();); DBUG_EXECUTE_IF("half_binlogged_transaction", DBUG_ABORT(););
if (cache->error) // Error on read if (cache->error) // Error on read
{ {
sql_print_error(ER(ER_ERROR_ON_READ), cache->file_name, errno); sql_print_error(ER(ER_ERROR_ON_READ), cache->file_name, errno);
......
...@@ -930,7 +930,7 @@ check_and_unset_inject_value(int value) ...@@ -930,7 +930,7 @@ check_and_unset_inject_value(int value)
#define SET_ERROR_INJECT_VALUE(x) \ #define SET_ERROR_INJECT_VALUE(x) \
current_thd->error_inject_value= (x) current_thd->error_inject_value= (x)
#define ERROR_INJECT_CRASH(code) \ #define ERROR_INJECT_CRASH(code) \
DBUG_EVALUATE_IF(code, (abort(), 0), 0) DBUG_EVALUATE_IF(code, (DBUG_ABORT(), 0), 0)
#define ERROR_INJECT_ACTION(code, action) \ #define ERROR_INJECT_ACTION(code, action) \
(check_and_unset_keyword(code) ? ((action), 0) : 0) (check_and_unset_keyword(code) ? ((action), 0) : 0)
#define ERROR_INJECT(code) \ #define ERROR_INJECT(code) \
...@@ -940,7 +940,7 @@ check_and_unset_inject_value(int value) ...@@ -940,7 +940,7 @@ check_and_unset_inject_value(int value)
#define ERROR_INJECT_VALUE_ACTION(value,action) \ #define ERROR_INJECT_VALUE_ACTION(value,action) \
(check_and_unset_inject_value(value) ? (action) : 0) (check_and_unset_inject_value(value) ? (action) : 0)
#define ERROR_INJECT_VALUE_CRASH(value) \ #define ERROR_INJECT_VALUE_CRASH(value) \
ERROR_INJECT_VALUE_ACTION(value, (abort(), 0)) ERROR_INJECT_VALUE_ACTION(value, (DBUG_ABORT(), 0))
#endif #endif
......
...@@ -1678,8 +1678,7 @@ int ha_maria::enable_indexes(uint mode) ...@@ -1678,8 +1678,7 @@ int ha_maria::enable_indexes(uint mode)
DBUG_EXECUTE_IF("maria_crash_enable_index", DBUG_EXECUTE_IF("maria_crash_enable_index",
{ {
DBUG_PRINT("maria_crash_enable_index", ("now")); DBUG_PRINT("maria_crash_enable_index", ("now"));
fflush(DBUG_FILE); DBUG_ABORT();
abort();
}); });
return error; return error;
} }
......
...@@ -2864,11 +2864,7 @@ static my_bool write_block_record(MARIA_HA *info, ...@@ -2864,11 +2864,7 @@ static my_bool write_block_record(MARIA_HA *info,
translog_flush(translog_get_horizon()); translog_flush(translog_get_horizon());
}); });
DBUG_EXECUTE_IF("maria_crash", DBUG_EXECUTE_IF("maria_crash",
{ { DBUG_PRINT("maria_crash", ("now")); DBUG_ABORT(); });
DBUG_PRINT("maria_crash", ("now"));
fflush(DBUG_FILE);
abort();
});
} }
#endif #endif
......
...@@ -2813,8 +2813,7 @@ int maria_sort_index(HA_CHECK *param, register MARIA_HA *info, char *name) ...@@ -2813,8 +2813,7 @@ int maria_sort_index(HA_CHECK *param, register MARIA_HA *info, char *name)
DBUG_EXECUTE_IF("maria_crash_sort_index", DBUG_EXECUTE_IF("maria_crash_sort_index",
{ {
DBUG_PRINT("maria_crash_sort_index", ("now")); DBUG_PRINT("maria_crash_sort_index", ("now"));
fflush(DBUG_FILE); DBUG_ABORT();
abort();
}); });
DBUG_RETURN(0); DBUG_RETURN(0);
...@@ -3453,8 +3452,7 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info, ...@@ -3453,8 +3452,7 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info,
DBUG_EXECUTE_IF("maria_crash_create_index_by_sort", DBUG_EXECUTE_IF("maria_crash_create_index_by_sort",
{ {
DBUG_PRINT("maria_crash_create_index_by_sort", ("now")); DBUG_PRINT("maria_crash_create_index_by_sort", ("now"));
fflush(DBUG_FILE); DBUG_ABORT();
abort();
}); });
if (scan_inited) if (scan_inited)
{ {
...@@ -3650,8 +3648,7 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info, ...@@ -3650,8 +3648,7 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info,
DBUG_EXECUTE_IF("maria_crash_repair", DBUG_EXECUTE_IF("maria_crash_repair",
{ {
DBUG_PRINT("maria_crash_repair", ("now")); DBUG_PRINT("maria_crash_repair", ("now"));
fflush(DBUG_FILE); DBUG_ABORT();
abort();
}); });
} }
share->state.changed|= STATE_NOT_SORTED_PAGES; share->state.changed|= STATE_NOT_SORTED_PAGES;
......
...@@ -419,11 +419,7 @@ void ma_checkpoint_end(void) ...@@ -419,11 +419,7 @@ void ma_checkpoint_end(void)
flush_all_tables(1); flush_all_tables(1);
}); });
DBUG_EXECUTE_IF("maria_crash", DBUG_EXECUTE_IF("maria_crash",
{ { DBUG_PRINT("maria_crash", ("now")); DBUG_ABORT(); });
DBUG_PRINT("maria_crash", ("now"));
fflush(DBUG_FILE);
abort();
});
if (checkpoint_inited) if (checkpoint_inited)
{ {
......
...@@ -350,11 +350,20 @@ CONTROL_FILE_ERROR ma_control_file_create_or_open() ...@@ -350,11 +350,20 @@ CONTROL_FILE_ERROR ma_control_file_create_or_open()
retry= 0; retry= 0;
/*
On Windows, my_lock() uses locking() which is mandatory locking and so
prevents maria-recovery.test from copying the control file. And in case of
crash, it may take a while for Windows to unlock file, causing downtime.
*/
/**
@todo BUG We should explore my_sopen(_SH_DENYWRD) to open or create the
file under Windows.
*/
#ifndef __WIN__
/* /*
We can't here use the automatic wait in my_lock() as the alarm thread We can't here use the automatic wait in my_lock() as the alarm thread
may not yet exists. may not yet exists.
*/ */
while (my_lock(control_file_fd, F_WRLCK, 0L, F_TO_EOF, while (my_lock(control_file_fd, F_WRLCK, 0L, F_TO_EOF,
MYF(MY_SEEK_NOT_DONE | MY_FORCE_LOCK | MY_NO_WAIT))) MYF(MY_SEEK_NOT_DONE | MY_FORCE_LOCK | MY_NO_WAIT)))
{ {
...@@ -370,6 +379,7 @@ CONTROL_FILE_ERROR ma_control_file_create_or_open() ...@@ -370,6 +379,7 @@ CONTROL_FILE_ERROR ma_control_file_create_or_open()
} }
sleep(1); sleep(1);
} }
#endif
DBUG_RETURN(0); DBUG_RETURN(0);
...@@ -487,8 +497,10 @@ int ma_control_file_end() ...@@ -487,8 +497,10 @@ int ma_control_file_end()
if (control_file_fd < 0) /* already closed */ if (control_file_fd < 0) /* already closed */
DBUG_RETURN(0); DBUG_RETURN(0);
#ifndef __WIN__
(void) my_lock(control_file_fd, F_UNLCK, 0L, F_TO_EOF, (void) my_lock(control_file_fd, F_UNLCK, 0L, F_TO_EOF,
MYF(MY_SEEK_NOT_DONE | MY_FORCE_LOCK)); MYF(MY_SEEK_NOT_DONE | MY_FORCE_LOCK));
#endif
close_error= my_close(control_file_fd, MYF(MY_WME)); close_error= my_close(control_file_fd, MYF(MY_WME));
/* /*
......
...@@ -1316,9 +1316,16 @@ LSN translog_get_file_max_lsn_stored(uint32 file) ...@@ -1316,9 +1316,16 @@ LSN translog_get_file_max_lsn_stored(uint32 file)
{ {
LOGHANDLER_FILE_INFO info; LOGHANDLER_FILE_INFO info;
my_bool error;
File fd= open_logfile_by_number_no_cache(file); File fd= open_logfile_by_number_no_cache(file);
if (fd < 0 || if (fd >= 0)
translog_read_file_header(&info, fd)) {
error= translog_read_file_header(&info, fd);
my_close(fd, MYF(MY_WME));
}
else
error= TRUE;
if (error)
{ {
DBUG_PRINT("error", ("Can't read file header")); DBUG_PRINT("error", ("Can't read file header"));
DBUG_RETURN(LSN_ERROR); DBUG_RETURN(LSN_ERROR);
......
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