List:Commits« Previous MessageNext Message »
From:Martin Hansson Date:March 19 2008 1:54pm
Subject:Re: bk commit into 5.0 tree (mhansson:1.2597) BUG#34529
View as plain text  
Hi, I made a test for MyISAM and a 5.0 patch (as you can see :-) ). You 
were offline when I was done, so I just send you this email instead:

<gluh> 1. restore max_heap_table_size in the end of test case

done

gluh> 2. Please check this test case with valgrind and check also 
another tab  & read_record fields which maybe should be updated too.

No valgrind errors. This will be checked in pushbuild as well.

I don't think we should update any other fields in read_record nor 
join_tab. The fields that are set up in read_record at this point in 
time are in make_join_readinfo(). I find no other fields in there that 
should need to be changed just because we change handler. The handler 
change is meant to be transparent: just swapping out a memory table to disk.

OTOH I think that this bug is really a design problem. IMU a read_record 
is part of the query execution plan, and a change of handlers should be 
done before we start to compile a QEP. If you make a change in a C 
program, you run gcc again, you don't go inside the binary and start 
setting bytes are you? ;-) Alternatively, we should rerun the phase that 
initialized read_record in the first place. But this is beyond a bug fix 
IMHO. Maybe something to keep in mind if we do some bigger work on I_S?

gluh> 3. add +      tab->read_record.file= table_list->table->file; into
<gluh>       if (table_list->schema_table->fill_table(thd, table_list,
<gluh>                                                tab->select_cond))
<gluh>       {
<gluh> ..}

done.

I'm back online on Monday for more discussions.

Best Regards

Martin


mhansson@stripped wrote:
> Below is the list of changes that have just been committed into a local
> 5.0 repository of mhansson.  When mhansson does a push these changes
> will be propagated to the main repository and, within 24 hours after the
> push, to the public repository.
> For information on how to access the public repository
> see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
>
> ChangeSet@stripped, 2008-03-19 14:32:28+01:00, mhansson@riffraff.(none) +3 -0
>   Bug#34529: Crash on complex Falcon I_S select after ALTER .. PARTITION BY
>     
>   When swapping out heap I_S tables to disk, this is done after plan refinement.
>   Thus, READ_RECORD::file will still point to the (deleted) heap handler at start
>   of execution. This causes segmentation fault if join buffering is used and the 
>   query is a star query where the result is found to be empty before accessing
>   some table. In this case that table has not been initialized (i.e. had its 
>   READ_RECORD re-initialized) before the cleanup routine tries to close the handler.
>   Fixed by updating READ_RECORD::file when changing handler.
>
>   mysql-test/r/information_schema.result@stripped, 2008-03-19 14:32:27+01:00,
> mhansson@riffraff.(none) +10 -0
>     Bug#34529: Test result.
>
>   mysql-test/t/information_schema.test@stripped, 2008-03-19 14:32:27+01:00,
> mhansson@riffraff.(none) +21 -0
>     Bug#34529: Test case.
>
>   sql/sql_show.cc@stripped, 2008-03-19 14:32:27+01:00, mhansson@riffraff.(none) +2 -0
>     Bug#34529: The fix.
>
> diff -Nrup a/mysql-test/r/information_schema.result
> b/mysql-test/r/information_schema.result
> --- a/mysql-test/r/information_schema.result	2007-10-29 11:45:33 +01:00
> +++ b/mysql-test/r/information_schema.result	2008-03-19 14:32:27 +01:00
> @@ -1422,3 +1422,13 @@ show fields from information_schema.tabl
>  ERROR 42S02: Unknown table 'table_names' in information_schema
>  show keys from information_schema.table_names;
>  ERROR 42S02: Unknown table 'table_names' in information_schema
> +USE information_schema;
> +SET max_heap_table_size = 16384;
> +CREATE TABLE test.t1( a INT );
> +SELECT *
> +FROM tables ta
> +JOIN collations co ON ( co.collation_name = ta.table_catalog )
> +JOIN character_sets cs ON ( cs.character_set_name = ta.table_catalog );
>
> +TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	TABLE_TYPE	ENGINE	VERSION	ROW_FORMAT	TABLE_ROWS	AVG_ROW_LENGTH	DATA_LENGTH	MAX_DATA_LENGTH	INDEX_LENGTH	DATA_FREE	AUTO_INCREMENT	CREATE_TIME	UPDATE_TIME	CHECK_TIME	TABLE_COLLATION	CHECKSUM	CREATE_OPTIONS	TABLE_COMMENT	COLLATION_NAME	CHARACTER_SET_NAME	ID	IS_DEFAULT	IS_COMPILED	SORTLEN	CHARACTER_SET_NAME	DEFAULT_COLLATE_NAME	DESCRIPTION	MAXLEN
> +DROP TABLE test.t1;
> +SET max_heap_table_size = DEFAULT;
> diff -Nrup a/mysql-test/t/information_schema.test
> b/mysql-test/t/information_schema.test
> --- a/mysql-test/t/information_schema.test	2007-10-29 11:45:33 +01:00
> +++ b/mysql-test/t/information_schema.test	2008-03-19 14:32:27 +01:00
> @@ -1118,3 +1118,24 @@ show fields from information_schema.tabl
>  --error 1109
>  show keys from information_schema.table_names;
>  
> +#
> +# Bug#34529: Crash on complex Falcon I_S select after ALTER .. PARTITION BY
> +#
> +USE information_schema;
> +SET max_heap_table_size = 16384;
> +
> +CREATE TABLE test.t1( a INT );
> +
> +# What we need to create here is a bit of a corner case:
> +# We need a star query with information_schema tables, where the first
> +# branch of the star join produces zero rows, so that reading of the 
> +# second branch never happens. At the same time we have to make sure
> +# that data for at least the last table is swapped from MEMORY/HEAP to 
> +# MyISAM. This and only this triggers the bug.
> +SELECT *
> +FROM tables ta
> +JOIN collations co ON ( co.collation_name = ta.table_catalog )
> +JOIN character_sets cs ON ( cs.character_set_name = ta.table_catalog );
> +
> +DROP TABLE test.t1;
> +SET max_heap_table_size = DEFAULT;
> diff -Nrup a/sql/sql_show.cc b/sql/sql_show.cc
> --- a/sql/sql_show.cc	2007-12-17 09:12:06 +01:00
> +++ b/sql/sql_show.cc	2008-03-19 14:32:27 +01:00
> @@ -4073,9 +4073,11 @@ bool get_schema_tables_result(JOIN *join
>        {
>          result= 1;
>          join->error= 1;
> +        tab->read_record.file= table_list->table->file;
>          table_list->schema_table_state= executed_place;
>          break;
>        }
> +      tab->read_record.file= table_list->table->file;
>        table_list->schema_table_state= executed_place;
>      }
>    }
>
>   

Thread
bk commit into 5.0 tree (mhansson:1.2597) BUG#34529mhansson19 Mar
  • Re: bk commit into 5.0 tree (mhansson:1.2597) BUG#34529Martin Hansson19 Mar