1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

WL #2826: Sixth step, made it work with test cases

This commit is contained in:
pappa@c-5c0be253.1238-1-64736c10.cust.bredbandsbolaget.se
2006-02-03 12:05:29 -05:00
parent 3397e693b8
commit da5713e486
9 changed files with 76 additions and 45 deletions

View File

@ -71,7 +71,7 @@ pentium_cflags="$check_cpu_cflags"
pentium64_cflags="$check_cpu_cflags -m64" pentium64_cflags="$check_cpu_cflags -m64"
ppc_cflags="$check_cpu_cflags" ppc_cflags="$check_cpu_cflags"
sparc_cflags="" sparc_cflags=""
error_inject_flag="--with-error-inject " error_inject="--with-error-inject "
# be as fast as we can be without losing our ability to backtrace # be as fast as we can be without losing our ability to backtrace
fast_cflags="-O3 -fno-omit-frame-pointer" fast_cflags="-O3 -fno-omit-frame-pointer"

View File

@ -3,9 +3,9 @@
path=`dirname $0` path=`dirname $0`
. "$path/SETUP.sh" $@ --with-debug=full . "$path/SETUP.sh" $@ --with-debug=full
extra_flags="$pentium_cflags $debug_cflags $max_cflags $error_inject_flag" extra_flags="$pentium_cflags $debug_cflags $max_cflags"
c_warnings="$c_warnings $debug_extra_warnings" c_warnings="$c_warnings $debug_extra_warnings"
cxx_warnings="$cxx_warnings $debug_extra_warnings" cxx_warnings="$cxx_warnings $debug_extra_warnings"
extra_configs="$pentium_configs $debug_configs $max_configs" extra_configs="$pentium_configs $debug_configs $max_configs $error_inject"
. "$path/FINISH.sh" . "$path/FINISH.sh"

View File

@ -1879,8 +1879,8 @@ bool ha_partition::create_handler_file(const char *name)
{ {
part_elem= part_it++; part_elem= part_it++;
if (part_elem->part_state != PART_NORMAL && if (part_elem->part_state != PART_NORMAL &&
part_elem->part_state != PART_IS_ADDED && part_elem->part_state != PART_TO_BE_ADDED &&
part_elem->part_state != PART_IS_CHANGED) part_elem->part_state != PART_CHANGED)
continue; continue;
tablename_to_filename(part_elem->partition_name, part_name, tablename_to_filename(part_elem->partition_name, part_name,
FN_REFLEN); FN_REFLEN);
@ -1931,8 +1931,8 @@ bool ha_partition::create_handler_file(const char *name)
{ {
part_elem= part_it++; part_elem= part_it++;
if (part_elem->part_state != PART_NORMAL && if (part_elem->part_state != PART_NORMAL &&
part_elem->part_state != PART_IS_ADDED && part_elem->part_state != PART_TO_BE_ADDED &&
part_elem->part_state != PART_IS_CHANGED) part_elem->part_state != PART_CHANGED)
continue; continue;
if (!m_is_sub_partitioned) if (!m_is_sub_partitioned)
{ {

View File

@ -608,9 +608,9 @@ struct Query_cache_query_flags
in various error cases. in various error cases.
*/ */
#ifndef ERROR_INJECT_SUPPORT #ifndef ERROR_INJECT_SUPPORT
#define ERROR_INJECTOR(x) #define ERROR_INJECT(x) 0
#define ERROR_INJECTOR_ACTION(x) #define ERROR_INJECT_ACTION(x) 0
#define ERROR_INJECTOR_CRASH(x) #define ERROR_INJECT_CRASH(x) 0
#define SET_ERROR_INJECT_CODE(x) #define SET_ERROR_INJECT_CODE(x)
#define SET_ERROR_INJECT_VALUE(x) #define SET_ERROR_INJECT_VALUE(x)
#else #else
@ -624,7 +624,7 @@ inline bool
my_error_inject(int error) my_error_inject(int error)
{ {
THD *thd= current_thd; THD *thd= current_thd;
if (thd->variables.error_inject_code == error) if (thd->variables.error_inject_code == (uint)error)
{ {
thd->variables.error_inject_code= 0; thd->variables.error_inject_code= 0;
return 1; return 1;
@ -632,10 +632,10 @@ my_error_inject(int error)
return 0; return 0;
} }
#define ERROR_INJECTOR_CRASH(code) \ #define ERROR_INJECT_CRASH(code) \
(my_error_inject((code)) ? ((DBUG_ASSERT(0)), 0) : 0 (my_error_inject((code)) ? ((DBUG_ASSERT(0)), 0) : 0)
#define ERROR_INJECTOR_ACTION(code, action) \ #define ERROR_INJECT_ACTION(code, action) \
(my_error_inject((code)) ? ((action), 0) : 0 (my_error_inject((code)) ? ((action), 0) : 0)
#define ERROR_INJECT(code) \ #define ERROR_INJECT(code) \
(my_error_inject((code)) ? 1 : 0) (my_error_inject((code)) ? 1 : 0)
#endif #endif
@ -1146,7 +1146,7 @@ bool write_log_ph2_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt);
#define WFRM_WRITE_SHADOW 1 #define WFRM_WRITE_SHADOW 1
#define WFRM_INSTALL_SHADOW 2 #define WFRM_INSTALL_SHADOW 2
#define WFRM_PACK_FRM #define WFRM_PACK_FRM 4
bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags); bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags);
bool abort_and_upgrade_lock(ALTER_PARTITION_PARAM_TYPE *lpt); bool abort_and_upgrade_lock(ALTER_PARTITION_PARAM_TYPE *lpt);
void close_open_tables_and_downgrade(ALTER_PARTITION_PARAM_TYPE *lpt); void close_open_tables_and_downgrade(ALTER_PARTITION_PARAM_TYPE *lpt);
@ -1317,6 +1317,9 @@ extern ulong delayed_insert_timeout;
extern ulong delayed_insert_limit, delayed_queue_size; extern ulong delayed_insert_limit, delayed_queue_size;
extern ulong delayed_insert_threads, delayed_insert_writes; extern ulong delayed_insert_threads, delayed_insert_writes;
extern ulong delayed_rows_in_use,delayed_insert_errors; extern ulong delayed_rows_in_use,delayed_insert_errors;
#ifdef ERROR_INJECT_SUPPORT
extern ulong error_inject_code, error_inject_value;
#endif
extern ulong slave_open_temp_tables; extern ulong slave_open_temp_tables;
extern ulong query_cache_size, query_cache_min_res_unit; extern ulong query_cache_size, query_cache_min_res_unit;
extern ulong slow_launch_threads, slow_launch_time; extern ulong slow_launch_threads, slow_launch_time;

View File

@ -503,6 +503,10 @@ ulong aborted_threads, aborted_connects;
ulong delayed_insert_timeout, delayed_insert_limit, delayed_queue_size; ulong delayed_insert_timeout, delayed_insert_limit, delayed_queue_size;
ulong delayed_insert_threads, delayed_insert_writes, delayed_rows_in_use; ulong delayed_insert_threads, delayed_insert_writes, delayed_rows_in_use;
ulong delayed_insert_errors,flush_time; ulong delayed_insert_errors,flush_time;
#ifdef ERROR_INJECT_SUPPORT
ulong error_inject_code= 0;
ulong error_inject_value= 0;
#endif
ulong specialflag=0; ulong specialflag=0;
ulong binlog_cache_use= 0, binlog_cache_disk_use= 0; ulong binlog_cache_use= 0, binlog_cache_disk_use= 0;
ulong max_connections, max_connect_errors; ulong max_connections, max_connect_errors;

View File

@ -217,10 +217,11 @@ sys_var_long_ptr sys_delayed_queue_size("delayed_queue_size",
&delayed_queue_size); &delayed_queue_size);
#ifdef ERROR_INJECT_SUPPORT #ifdef ERROR_INJECT_SUPPORT
sys_var_long_ptr sys_error_inject_code("error_inject_code", sys_var_long_ptr sys_error_inject_code("error_inject_code",
&error_inject_code); &error_inject_code);
sys_var_long_ptr sys_error_inject_value("error_inject_value", sys_var_long_ptr sys_error_inject_value("error_inject_value",
&error_inject_value); &error_inject_value);
#endif #endif
sys_var_event_executor sys_event_executor("event_scheduler", sys_var_event_executor sys_event_executor("event_scheduler",
&event_executor_running_global_var); &event_executor_running_global_var);
sys_var_long_ptr sys_expire_logs_days("expire_logs_days", sys_var_long_ptr sys_expire_logs_days("expire_logs_days",

View File

@ -2459,6 +2459,7 @@ char *generate_partition_syntax(partition_info *part_info,
if (write_all || (!part_info->use_default_partitions)) if (write_all || (!part_info->use_default_partitions))
{ {
bool first= TRUE;
err+= add_begin_parenthesis(fptr); err+= add_begin_parenthesis(fptr);
i= 0; i= 0;
do do
@ -2467,6 +2468,12 @@ char *generate_partition_syntax(partition_info *part_info,
if (part_elem->part_state != PART_TO_BE_DROPPED && if (part_elem->part_state != PART_TO_BE_DROPPED &&
part_elem->part_state != PART_REORGED_DROPPED) part_elem->part_state != PART_REORGED_DROPPED)
{ {
if (!first)
{
err+= add_comma(fptr);
err+= add_space(fptr);
}
first= FALSE;
err+= add_partition(fptr); err+= add_partition(fptr);
err+= add_string(fptr, part_elem->partition_name); err+= add_string(fptr, part_elem->partition_name);
err+= add_space(fptr); err+= add_space(fptr);
@ -2496,11 +2503,6 @@ char *generate_partition_syntax(partition_info *part_info,
err+= add_end_parenthesis(fptr); err+= add_end_parenthesis(fptr);
} while (++j < no_subparts); } while (++j < no_subparts);
} }
if (i != (tot_no_parts-1))
{
err+= add_comma(fptr);
err+= add_space(fptr);
}
} }
if (i == (tot_no_parts-1)) if (i == (tot_no_parts-1))
err+= add_end_parenthesis(fptr); err+= add_end_parenthesis(fptr);
@ -5178,6 +5180,25 @@ write_log_ph2_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
} }
/*
Remove entry from table log and release resources for others to use
SYNOPSIS
write_log_completed()
lpt Struct containing parameters
RETURN VALUES
TRUE Error
FALSE Success
*/
static
bool
write_log_completed(ALTER_PARTITION_PARAM_TYPE *lpt)
{
DBUG_ENTER("write_log_ph2_change_partition");
DBUG_RETURN(FALSE);
}
/* /*
Actually perform the change requested by ALTER TABLE of partitions Actually perform the change requested by ALTER TABLE of partitions
previously prepared. previously prepared.
@ -5308,8 +5329,8 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
1) Write the new frm, pack it and then delete it 1) Write the new frm, pack it and then delete it
2) Perform the change within the handler 2) Perform the change within the handler
*/ */
if ((mysql_write_frm(lpt, WFRM_WRITE_SHADOW | WFRM_PACK_FRM)) || if (mysql_write_frm(lpt, WFRM_WRITE_SHADOW | WFRM_PACK_FRM) ||
(mysql_change_partitions(lpt))) mysql_change_partitions(lpt))
{ {
fast_alter_partition_error_handler(lpt); fast_alter_partition_error_handler(lpt);
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
@ -5370,25 +5391,25 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
to test if recovery is properly done. to test if recovery is properly done.
*/ */
if (write_log_shadow_frm(lpt, FALSE) || if (write_log_shadow_frm(lpt, FALSE) ||
ERROR_INJECTOR_CRASH(1000) || ERROR_INJECT_CRASH(1000) ||
mysql_write_frm(lpt, WFRM_WRITE_SHADOW) || mysql_write_frm(lpt, WFRM_WRITE_SHADOW) ||
ERROR_INJECTOR_CRASH(1001) || ERROR_INJECT_CRASH(1001) ||
write_log_drop_partition(lpt) || write_log_drop_partition(lpt) ||
ERROR_INJECTOR_CRASH(1002) || ERROR_INJECT_CRASH(1002) ||
abort_and_upgrade_lock(lpt) || abort_and_upgrade_lock(lpt) ||
((!thd->lex->no_write_to_binlog) && ((!thd->lex->no_write_to_binlog) &&
write_bin_log(thd, FALSE, (write_bin_log(thd, FALSE,
thd->query, thd->query_length), FALSE) || thd->query, thd->query_length), FALSE)) ||
ERROR_INJECTOR_CRASH(1003) || ERROR_INJECT_CRASH(1003) ||
mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) || mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
(close_open_tables_and_downgrade(lpt), FALSE) || (close_open_tables_and_downgrade(lpt), FALSE) ||
ERROR_INJECTOR_CRASH(1004) || ERROR_INJECT_CRASH(1004) ||
table->file->extra(HA_EXTRA_PREPARE_FOR_DELETE) || table->file->extra(HA_EXTRA_PREPARE_FOR_DELETE) ||
ERROR_INJECTOR_CRASH(1005) || ERROR_INJECT_CRASH(1005) ||
mysql_drop_partitions(lpt) || mysql_drop_partitions(lpt) ||
ERROR_INJECTOR_CRASH(1006) || ERROR_INJECT_CRASH(1006) ||
write_log_completed(lpt) || write_log_completed(lpt) ||
ERROR_INJECTOR_CRASH(1007) || ERROR_INJECT_CRASH(1007) ||
(mysql_wait_completed_table(lpt, table), FALSE)) (mysql_wait_completed_table(lpt, table), FALSE))
{ {
fast_alter_partition_error_handler(lpt); fast_alter_partition_error_handler(lpt);
@ -5426,25 +5447,25 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
9) Complete query 9) Complete query
*/ */
if (write_log_shadow_frm(lpt, FALSE) || if (write_log_shadow_frm(lpt, FALSE) ||
ERROR_INJECTED_CRASH(1010) || ERROR_INJECT_CRASH(1010) ||
mysql_write_frm(lpt, WFRM_WRITE_SHADOW) || mysql_write_frm(lpt, WFRM_WRITE_SHADOW) ||
ERROR_INJECTED_CRASH(1011) || ERROR_INJECT_CRASH(1011) ||
write_log_add_partition(lpt) || write_log_add_partition(lpt) ||
ERROR_INJECTED_CRASH(1012) || ERROR_INJECT_CRASH(1012) ||
mysql_change_partitions(lpt) || mysql_change_partitions(lpt) ||
ERROR_INJECTED_CRASH(1013) || ERROR_INJECT_CRASH(1013) ||
abort_and_upgrade_lock(lpt) || abort_and_upgrade_lock(lpt) ||
((!thd->lex->no_write_to_binlog) && ((!thd->lex->no_write_to_binlog) &&
(write_bin_log(thd, FALSE, (write_bin_log(thd, FALSE,
thd->query, thd->query_length), FALSE)) || thd->query, thd->query_length), FALSE)) ||
ERROR_INJECTED_CRASH(1014) || ERROR_INJECT_CRASH(1014) ||
write_log_shadow_frm(lpt, TRUE) || write_log_shadow_frm(lpt, TRUE) ||
ERROR_INJECTED_CRASH(1015) || ERROR_INJECT_CRASH(1015) ||
mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) || mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
ERROR_INJECTED_CRASH(1016) || ERROR_INJECT_CRASH(1016) ||
(close_open_tables_and_downgrade(lpt), FALSE) || (close_open_tables_and_downgrade(lpt), FALSE) ||
write_log_completed(lpt) || write_log_completed(lpt) ||
ERROR_INJECTED_CRASH(1017)) ERROR_INJECT_CRASH(1017))
{ {
fast_alter_partition_error_handler(lpt); fast_alter_partition_error_handler(lpt);
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);

View File

@ -307,9 +307,9 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
/* /*
Build shadow frm file name Build shadow frm file name
*/ */
build_table_filename(shadow_path, sizeof(path), lpt->db, build_table_filename(shadow_path, sizeof(shadow_path), lpt->db,
lpt->table_name, "#"); lpt->table_name, "#");
strxmov(shadow_frm_name, path, reg_ext, NullS); strxmov(shadow_frm_name, shadow_path, reg_ext, NullS);
if (flags & WFRM_WRITE_SHADOW) if (flags & WFRM_WRITE_SHADOW)
{ {
if (mysql_copy_create_list(lpt->create_list, if (mysql_copy_create_list(lpt->create_list,
@ -324,7 +324,7 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
lpt->table->file, lpt->table->file,
&lpt->key_info_buffer, &lpt->key_info_buffer,
&lpt->key_count, &lpt->key_count,
/*select_field_count*/ 0))) /*select_field_count*/ 0))
{ {
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
} }

View File

@ -638,6 +638,7 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
#endif #endif
next_chunk+= 5 + partition_info_len; next_chunk+= 5 + partition_info_len;
} }
#if 0
if (share->mysql_version == 50106) if (share->mysql_version == 50106)
{ {
/* /*
@ -647,6 +648,7 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
*/ */
next_chunk+= 4; next_chunk+= 4;
} }
#endif
keyinfo= share->key_info; keyinfo= share->key_info;
for (i= 0; i < keys; i++, keyinfo++) for (i= 0; i < keys; i++, keyinfo++)
{ {