diff options
-rwxr-xr-x | BUILD/SETUP.sh | 2 | ||||
-rwxr-xr-x | BUILD/compile-pentium-debug-max | 4 | ||||
-rw-r--r-- | sql/ha_partition.cc | 8 | ||||
-rw-r--r-- | sql/mysql_priv.h | 21 | ||||
-rw-r--r-- | sql/mysqld.cc | 4 | ||||
-rw-r--r-- | sql/set_var.cc | 3 | ||||
-rw-r--r-- | sql/sql_partition.cc | 71 | ||||
-rw-r--r-- | sql/sql_table.cc | 6 | ||||
-rw-r--r-- | sql/table.cc | 2 |
9 files changed, 76 insertions, 45 deletions
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh index e76507b1a77..00e78d0719d 100755 --- a/BUILD/SETUP.sh +++ b/BUILD/SETUP.sh @@ -71,7 +71,7 @@ pentium_cflags="$check_cpu_cflags" pentium64_cflags="$check_cpu_cflags -m64" ppc_cflags="$check_cpu_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 fast_cflags="-O3 -fno-omit-frame-pointer" diff --git a/BUILD/compile-pentium-debug-max b/BUILD/compile-pentium-debug-max index d065ed2bf71..9aa71239bd8 100755 --- a/BUILD/compile-pentium-debug-max +++ b/BUILD/compile-pentium-debug-max @@ -3,9 +3,9 @@ path=`dirname $0` . "$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" 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" diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index d318c4ab348..193fe863f8c 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -1879,8 +1879,8 @@ bool ha_partition::create_handler_file(const char *name) { part_elem= part_it++; if (part_elem->part_state != PART_NORMAL && - part_elem->part_state != PART_IS_ADDED && - part_elem->part_state != PART_IS_CHANGED) + part_elem->part_state != PART_TO_BE_ADDED && + part_elem->part_state != PART_CHANGED) continue; tablename_to_filename(part_elem->partition_name, part_name, FN_REFLEN); @@ -1931,8 +1931,8 @@ bool ha_partition::create_handler_file(const char *name) { part_elem= part_it++; if (part_elem->part_state != PART_NORMAL && - part_elem->part_state != PART_IS_ADDED && - part_elem->part_state != PART_IS_CHANGED) + part_elem->part_state != PART_TO_BE_ADDED && + part_elem->part_state != PART_CHANGED) continue; if (!m_is_sub_partitioned) { diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 22fb67ff3fb..8c207992d5e 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -608,9 +608,9 @@ struct Query_cache_query_flags in various error cases. */ #ifndef ERROR_INJECT_SUPPORT -#define ERROR_INJECTOR(x) -#define ERROR_INJECTOR_ACTION(x) -#define ERROR_INJECTOR_CRASH(x) +#define ERROR_INJECT(x) 0 +#define ERROR_INJECT_ACTION(x) 0 +#define ERROR_INJECT_CRASH(x) 0 #define SET_ERROR_INJECT_CODE(x) #define SET_ERROR_INJECT_VALUE(x) #else @@ -624,7 +624,7 @@ inline bool my_error_inject(int error) { 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; return 1; @@ -632,10 +632,10 @@ my_error_inject(int error) return 0; } -#define ERROR_INJECTOR_CRASH(code) \ - (my_error_inject((code)) ? ((DBUG_ASSERT(0)), 0) : 0 -#define ERROR_INJECTOR_ACTION(code, action) \ - (my_error_inject((code)) ? ((action), 0) : 0 +#define ERROR_INJECT_CRASH(code) \ + (my_error_inject((code)) ? ((DBUG_ASSERT(0)), 0) : 0) +#define ERROR_INJECT_ACTION(code, action) \ + (my_error_inject((code)) ? ((action), 0) : 0) #define ERROR_INJECT(code) \ (my_error_inject((code)) ? 1 : 0) #endif @@ -1146,7 +1146,7 @@ bool write_log_ph2_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt); #define WFRM_WRITE_SHADOW 1 #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 abort_and_upgrade_lock(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_threads, delayed_insert_writes; 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 query_cache_size, query_cache_min_res_unit; extern ulong slow_launch_threads, slow_launch_time; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 07e2abc1de5..d9853e26197 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -503,6 +503,10 @@ ulong aborted_threads, aborted_connects; ulong delayed_insert_timeout, delayed_insert_limit, delayed_queue_size; ulong delayed_insert_threads, delayed_insert_writes, delayed_rows_in_use; 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 binlog_cache_use= 0, binlog_cache_disk_use= 0; ulong max_connections, max_connect_errors; diff --git a/sql/set_var.cc b/sql/set_var.cc index bc6c68e87f6..4c156c134cf 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -217,10 +217,11 @@ sys_var_long_ptr sys_delayed_queue_size("delayed_queue_size", &delayed_queue_size); #ifdef ERROR_INJECT_SUPPORT 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", &error_inject_value); #endif + sys_var_event_executor sys_event_executor("event_scheduler", &event_executor_running_global_var); sys_var_long_ptr sys_expire_logs_days("expire_logs_days", diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index d2a4579f53b..ed8b62cc300 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -2459,6 +2459,7 @@ char *generate_partition_syntax(partition_info *part_info, if (write_all || (!part_info->use_default_partitions)) { + bool first= TRUE; err+= add_begin_parenthesis(fptr); i= 0; do @@ -2467,6 +2468,12 @@ char *generate_partition_syntax(partition_info *part_info, if (part_elem->part_state != PART_TO_BE_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_string(fptr, part_elem->partition_name); err+= add_space(fptr); @@ -2496,11 +2503,6 @@ char *generate_partition_syntax(partition_info *part_info, err+= add_end_parenthesis(fptr); } while (++j < no_subparts); } - if (i != (tot_no_parts-1)) - { - err+= add_comma(fptr); - err+= add_space(fptr); - } } if (i == (tot_no_parts-1)) err+= add_end_parenthesis(fptr); @@ -5179,6 +5181,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 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 2) Perform the change within the handler */ - if ((mysql_write_frm(lpt, WFRM_WRITE_SHADOW | WFRM_PACK_FRM)) || - (mysql_change_partitions(lpt))) + if (mysql_write_frm(lpt, WFRM_WRITE_SHADOW | WFRM_PACK_FRM) || + mysql_change_partitions(lpt)) { fast_alter_partition_error_handler(lpt); DBUG_RETURN(TRUE); @@ -5370,25 +5391,25 @@ uint fast_alter_partition_table(THD *thd, TABLE *table, to test if recovery is properly done. */ if (write_log_shadow_frm(lpt, FALSE) || - ERROR_INJECTOR_CRASH(1000) || + ERROR_INJECT_CRASH(1000) || mysql_write_frm(lpt, WFRM_WRITE_SHADOW) || - ERROR_INJECTOR_CRASH(1001) || + ERROR_INJECT_CRASH(1001) || write_log_drop_partition(lpt) || - ERROR_INJECTOR_CRASH(1002) || + ERROR_INJECT_CRASH(1002) || abort_and_upgrade_lock(lpt) || ((!thd->lex->no_write_to_binlog) && - write_bin_log(thd, FALSE, - thd->query, thd->query_length), FALSE) || - ERROR_INJECTOR_CRASH(1003) || + (write_bin_log(thd, FALSE, + thd->query, thd->query_length), FALSE)) || + ERROR_INJECT_CRASH(1003) || mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) || (close_open_tables_and_downgrade(lpt), FALSE) || - ERROR_INJECTOR_CRASH(1004) || + ERROR_INJECT_CRASH(1004) || table->file->extra(HA_EXTRA_PREPARE_FOR_DELETE) || - ERROR_INJECTOR_CRASH(1005) || + ERROR_INJECT_CRASH(1005) || mysql_drop_partitions(lpt) || - ERROR_INJECTOR_CRASH(1006) || + ERROR_INJECT_CRASH(1006) || write_log_completed(lpt) || - ERROR_INJECTOR_CRASH(1007) || + ERROR_INJECT_CRASH(1007) || (mysql_wait_completed_table(lpt, table), FALSE)) { fast_alter_partition_error_handler(lpt); @@ -5426,25 +5447,25 @@ uint fast_alter_partition_table(THD *thd, TABLE *table, 9) Complete query */ if (write_log_shadow_frm(lpt, FALSE) || - ERROR_INJECTED_CRASH(1010) || + ERROR_INJECT_CRASH(1010) || mysql_write_frm(lpt, WFRM_WRITE_SHADOW) || - ERROR_INJECTED_CRASH(1011) || + ERROR_INJECT_CRASH(1011) || write_log_add_partition(lpt) || - ERROR_INJECTED_CRASH(1012) || + ERROR_INJECT_CRASH(1012) || mysql_change_partitions(lpt) || - ERROR_INJECTED_CRASH(1013) || + ERROR_INJECT_CRASH(1013) || abort_and_upgrade_lock(lpt) || ((!thd->lex->no_write_to_binlog) && (write_bin_log(thd, FALSE, thd->query, thd->query_length), FALSE)) || - ERROR_INJECTED_CRASH(1014) || + ERROR_INJECT_CRASH(1014) || write_log_shadow_frm(lpt, TRUE) || - ERROR_INJECTED_CRASH(1015) || + ERROR_INJECT_CRASH(1015) || mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) || - ERROR_INJECTED_CRASH(1016) || + ERROR_INJECT_CRASH(1016) || (close_open_tables_and_downgrade(lpt), FALSE) || write_log_completed(lpt) || - ERROR_INJECTED_CRASH(1017)) + ERROR_INJECT_CRASH(1017)) { fast_alter_partition_error_handler(lpt); DBUG_RETURN(TRUE); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 809a70a0d45..fe37b70c3b3 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -307,9 +307,9 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags) /* 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, "#"); - strxmov(shadow_frm_name, path, reg_ext, NullS); + strxmov(shadow_frm_name, shadow_path, reg_ext, NullS); if (flags & WFRM_WRITE_SHADOW) { 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->key_info_buffer, &lpt->key_count, - /*select_field_count*/ 0))) + /*select_field_count*/ 0)) { DBUG_RETURN(TRUE); } diff --git a/sql/table.cc b/sql/table.cc index 046ed6d1add..ed34273334d 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -638,6 +638,7 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, #endif next_chunk+= 5 + partition_info_len; } +#if 0 if (share->mysql_version == 50106) { /* @@ -647,6 +648,7 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, */ next_chunk+= 4; } +#endif keyinfo= share->key_info; for (i= 0; i < keys; i++, keyinfo++) { |