Bug #17877 | Corrupted spatial index | ||
---|---|---|---|
Submitted: | 2 Mar 2006 21:23 | Modified: | 11 Jul 2006 8:11 |
Reporter: | Michael Jiang | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: MyISAM storage engine | Severity: | S2 (Serious) |
Version: | 4.1.15-standard | OS: | Linux (RHEL3 (x86)) |
Assigned to: | Ingo Strüwing | CPU Architecture: | Any |
Tags: | corruption, myisam, spatial |
[2 Mar 2006 21:23]
Michael Jiang
[3 Mar 2006 12:15]
Hartmut Holzgraefe
verified on 5.0bk: single row test case: DROP TABLE IF EXISTS `tempTable`; CREATE TABLE `tempTable` ( `geometry` geometry NOT NULL default '', SPATIAL KEY `gndx` (`geometry`(32)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO tempTable (geometry) VALUES ( PolygonFromText('POLYGON((-18.6086111000 -66.9327777000, -18.6055555000 -66.8158332999, -18.7186111000 -66.8102777000, -18.7211111000 -66.9269443999, -18.6086111000 -66.9327777000))')); CHECK TABLE tempTable EXTENDED; +----------------+-------+----------+--------------------------------------------+ | Table | Op | Msg_type | Msg_text | +----------------+-------+----------+--------------------------------------------+ | test.tempTable | check | error | Record at: 0 Can't find key for index: 1 | | test.tempTable | check | error | Corrupt | +----------------+-------+----------+--------------------------------------------+ After this a 2nd INSERT reults in: ERROR 145 (HY000): Table './test/tempTable' is marked as crashed and should be repaired but when INSERTing the two rows right away and only checking the table after that all works fine mysql> drop table tempTable; Query OK, 0 rows affected (0.05 sec)
[14 Jun 2006 11:34]
Ingo Strüwing
A wrong comparison operator was used for table checking. The result was that it checked for non-matching spatial keys. This succeeded if at least two different keys were present, but failed if only the matching key was present. Unfortunately it is not checked if the index entry points to the record from which the key was generated. Otherwise a different check result would have been printed. So this test case does not show the existence of a bug in spatial index handling, just in checking. The following patch will fix the table checking.
[14 Jun 2006 12:02]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/7628
[14 Jun 2006 19:58]
Ingo Strüwing
The first patch was not appropriate for non-unique indexes.
[15 Jun 2006 5:37]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/7683
[28 Jun 2006 12:30]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/8406
[29 Jun 2006 12:07]
Ingo Strüwing
Pushed to mysql-5.0-engines.
[6 Jul 2006 13:48]
Ingo Strüwing
Pushed to mysql-5.1-engines.
[8 Jul 2006 19:09]
Ingo Strüwing
CHECK TABLE could complain about a fully intact spatial index. A wrong comparison operator was used for table checking. The result was that it checked for non-matching spatial keys. This succeeded if at least two different keys were present, but failed if only the matching key was present. I fixed the key comparison. Pushed to 5.1.12 and 5.0.24 and 4.1.21.
[11 Jul 2006 8:11]
MC Brown
Noted in the 4.1, 5.0 and 5.1 changelogs: Checking a spatial table (using <literal>CHECK TABLE</literal>) with an index and only one row would indicate a table corruption. (Bug #17877)
[13 Jul 2006 3:34]
Paul DuBois
5.0.x fix went to 5.0.25 instead.
[9 Oct 2006 2:34]
Jon Stephens
Updated changelog entries per Support request (JamesD).