Hi Sergey,
OK to push. Minor comments below.
On 12/26/08 9:36 AM, Sergey Glukhov wrote:
> #At file:///home/gluh/MySQL/mysql-5.1-bug-41441/ based on
> revid:sergey.glukhov@stripped
>
> 2754 Sergey Glukhov 2008-12-26
> Bug#41441 repair csv table crashes debug server(for 5.1 only)
> The problem: data file can not be deleted on win because
> there is another opened instance of this file.
> Data file might be opened twice, on table opening stage and
> during write_row execution. We need to close both instances
> to satisfy Win. The fix is only for 5.1, In 6.0 we have
> naitive win set of functions, so the fix will be different
> there.
> modified:
> mysql-test/r/csv.result
> mysql-test/t/csv.test
> storage/csv/ha_tina.cc
>
> per-file messages:
> mysql-test/r/csv.result
> test result
> mysql-test/t/csv.test
> test case
> storage/csv/ha_tina.cc
> The problem: data file can not be deleted on win because
> there is another opened instance of this file.
> Data file might be opened twice, on table opening stage and
> during write_row execution. We need to close both instances
> to satisfy Win. The fix is only for 5.1, In 6.0 we have
> naitive win set of functions, so the fix will be different
naitive -> native
> there.
> === modified file 'mysql-test/r/csv.result'
> --- a/mysql-test/r/csv.result 2008-12-10 09:05:18 +0000
> +++ b/mysql-test/r/csv.result 2008-12-26 11:34:20 +0000
> @@ -5394,4 +5394,17 @@ select * from t1;
> ERROR HY000: File './test/t1.CSV' not found (Errcode: 2)
> unlock tables;
> drop table t1;
> +create table t1(a enum ('a') not null) engine=csv;
> +insert into t1 values (2);
> +Warnings:
> +Warning 1265 Data truncated for column 'a' at row 1
> +select * from t1 limit 1;
> +ERROR HY000: Table 't1' is marked as crashed and should be repaired
> +repair table t1;
> +Table Op Msg_type Msg_text
> +test.t1 repair Warning Data truncated for column 'a' at row 1
> +test.t1 repair status OK
> +select * from t1 limit 1;
> +a
> +drop table t1;
> End of 5.1 tests
>
> === modified file 'mysql-test/t/csv.test'
> --- a/mysql-test/t/csv.test 2008-12-10 09:05:18 +0000
> +++ b/mysql-test/t/csv.test 2008-12-26 11:34:20 +0000
> @@ -1804,4 +1804,17 @@ unlock tables;
> drop table t1;
> --disconnect con1
>
> +#
> +# Bug#41441 repair csv table crashes debug server
> +#
> +# Note: The test should be removed after Bug#33717 is fixed
> +
> +create table t1(a enum ('a') not null) engine=csv;
> +insert into t1 values (2);
> +--error 1194
s/1194/ER_CRASHED_ON_USAGE/
> +select * from t1 limit 1;
> +repair table t1;
> +select * from t1 limit 1;
> +drop table t1;
> +
> --echo End of 5.1 tests
>
> === modified file 'storage/csv/ha_tina.cc'
> --- a/storage/csv/ha_tina.cc 2008-12-10 09:05:18 +0000
> +++ b/storage/csv/ha_tina.cc 2008-12-26 11:34:20 +0000
> @@ -1439,6 +1439,17 @@ int ha_tina::repair(THD* thd, HA_CHECK_O
> a file, which descriptor is still open. EACCES will be returned
> when trying to delete the "to"-file in my_rename().
> */
> + if (share->tina_write_opened)
> + {
> + /*
> + Data file might be opened twice, on table opening stage and
> + during write_row execution. We need to close both instances
> + to satisfy Win.
> + */
> + if(my_close(share->tina_write_filedes, MYF(0)))
Add space after the "if".
> + DBUG_RETURN(my_errno ? my_errno : -1);
> + share->tina_write_opened= FALSE;
> + }
-- Davi