From: Kevin Lewis Date: June 25 2009 10:48pm Subject: bzr commit into mysql-6.0-falcon-team branch (kevin.lewis:2746) Bug#45701 List-Archive: http://lists.mysql.com/commits/77257 X-Bug: 45701 Message-Id: <0KLT00HCXGPBIZC0@mail-amer.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_UYUEQdwCUOYVeiCwsu8y2Q)" --Boundary_(ID_UYUEQdwCUOYVeiCwsu8y2Q) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///C:/Work/bzr/Merge/mysql-6.0-falcon-team/ based on revid:kevin.lewis@stripped 2746 Kevin Lewis 2009-06-25 Bug#45701 - If a table has two foreign key relationships with one other table, an alter table that drops one of the FKs will call external_lock twice for each table. And if a table has a foreign key relationship with another table, an alter that creates another foreign key relationship between the two tables will also call external_lock twice for each table. So it is necessary for Falcon to support multiple calls to external_lock by the same connection to the same table. This was not needed before the Foriegn Key implementation. So the current Connection pointer is sent into Table::SetAlter() and stored in Table::alterConnection. And alterIsActive is now an int instead of a boolean. If the same connection locks the table a second time, alterIsActive is incremented and alterConnection remains set. It is not set to NULL until alterIsActive is decremented to zero. modified: storage/falcon/StorageTable.cpp storage/falcon/Table.cpp storage/falcon/Table.h === modified file 'storage/falcon/StorageTable.cpp' --- a/storage/falcon/StorageTable.cpp 2009-05-14 05:16:08 +0000 +++ b/storage/falcon/StorageTable.cpp 2009-06-25 22:48:40 +0000 @@ -643,7 +643,7 @@ void StorageTable::clearAlter(void) bool StorageTable::setAlter(void) { - return share->table->setAlter(); + return share->table->setAlter(storageConnection->connection); } int StorageTable::alterCheck(void) === modified file 'storage/falcon/Table.cpp' --- a/storage/falcon/Table.cpp 2009-06-23 21:16:25 +0000 +++ b/storage/falcon/Table.cpp 2009-06-25 22:48:40 +0000 @@ -917,7 +917,8 @@ void Table::init(int id, const char *sch debugThawedBytes = 0; cardinality = 0; priorCardinality = 0; - alterIsActive = false; + alterIsActive = 0; + alterConnection = NULL; syncObject.setName("Table::syncObject"); syncTriggers.setName("Table::syncTriggers"); syncAlter.setName("Table::syncAlter"); @@ -1774,7 +1775,8 @@ void Table::truncate(Transaction *transa ageGroup = database->currentGeneration; debugThawedRecords = 0; debugThawedBytes = 0; - alterIsActive = false; + alterIsActive = 0; + alterConnection = NULL; deleting = false; } @@ -3695,19 +3697,21 @@ void Table::clearAlter(void) { Sync sync(&syncAlter, "Table::clearAlter"); sync.lock(Exclusive); - alterIsActive = false; + if (--alterIsActive == 0) + alterConnection = NULL; } } -bool Table::setAlter(void) +bool Table::setAlter(Connection* connection) { Sync sync(&syncAlter, "Table::setAlter"); sync.lock(Exclusive); - if (alterIsActive) + if (alterIsActive && (connection != alterConnection)) return false; - alterIsActive = true; + alterIsActive++; + alterConnection = connection; return true; } === modified file 'storage/falcon/Table.h' --- a/storage/falcon/Table.h 2009-06-02 15:25:59 +0000 +++ b/storage/falcon/Table.h 2009-06-25 22:48:40 +0000 @@ -127,7 +127,7 @@ public: int nextColumnId (int previous); void loadStuff(); void clearAlter(void); - bool setAlter(void); + bool setAlter(Connection* connection); void addTrigger (Trigger *trigger); void dropTrigger (Trigger *trigger); @@ -271,7 +271,8 @@ public: bool changed; bool eof; bool markedForDelete; - bool alterIsActive; + int alterIsActive; + Connection* alterConnection; // The connection currintly doing an alter. bool deleting; // dropping or truncating. int32 recordBitmapHighWater; int32 ageGroup; --Boundary_(ID_UYUEQdwCUOYVeiCwsu8y2Q) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/kevin.lewis@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/kevin.lewis@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: kevin.lewis@stripped # target_branch: file:///C:/Work/bzr/Merge/mysql-6.0-falcon-team/ # testament_sha1: d1198227e6093c2b799612d4b8dff44b762068b1 # timestamp: 2009-06-25 16:48:50 -0600 # source_branch: file:///C:/Work/bzr/Merge/mysql-6.0-falcon-team/ # base_revision_id: kevin.lewis@stripped\ # tfcuxzwns2ikjkb5 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWRpmC2MAA3RfgEAweX///3st DgC////wYAfcL72bvMBE022qbZWQSbWFhomohpkaaDCNGQNAAANAABJJNGhlTyng1U2Q1GgbSbU0 xPU00NAMgglP1NT1P0oAZAAAGmhoyAAAEiRMiSfo0p7Smyj9T1TaTTTTQDRoDQADmATATIwAjExM JhMENMTTASSBGgJoGpmpqeRlNNqmntRPNRqGmgZNMID8ZWSL4+UoGxsG09O2gNbRvLbfu36eW4o9 AyQ+379vuzLqrTqiGtbskcTlMhoRgGrU5Vu8NNE6VnPXrPqohR8Px8jPUcgbFgm2k2m+m5naLksr hCOjXQUsdmyUWx5HN2surDdIixya7pitMRjpl330WFCGmRqiwLvwMKC8wpWEwoY5+0tz+qeOvhxl uiZYg3WRZr6s6JzIUJmIVxr4kS6hiqqtpSHDVTiEIqmh7Kml17pyRYwSUNMgcGWxCWjVrBBbII5Q CZoRqapERgNMwNoIxKonDYdktRWsd1KkmNp0/xLTGSeqXkvQkApTqAEI8VVs6RmDI5sEeDSgKHUZ TlskTwD4oAAR3X2gGRhgchcZfNqkKdSoKQVWqKzPN8ThFAQQMgPHpiD/bFeiMFdfHLaggfO0Nilh SXmqCiyepxViR5zvDgVg6rWIhF/JG2scUJJ9QmK3ADgHhVEmRGPJ38LiR8IIdW+gizNC2JwQ11bO +vC1PpltwhZOMCNnzcF1fQJVUWidGblExzEje6Ua4UoqExEuOKzGgcl31JV02NS8nJJDhbDvdrlT LBWKoRNq3j0wVxEP0LPJ4ihzDGJRsGE4+1pI6Lcp3kKrpwQ4ZVLC6+wkRWocTRMZVKIUkDUIqlUS llZUpiJEnjBCwgqxQcPNI47NBMzesXBIcIrHdobGPAY8DUZGcPv0PI7LLscdHAzozju60g6RnRkb SIiraxtMnyGFAjtnmfN1h2F4UlAZhy+BZeYkCMpDO5r4toOBzCJ4rI5YcJE1mNSInEx8duON+FkG Uh4nIwXzuMjFEDBRUysdgiknWe03GZqOEmTXnXGO0vquLibFJORI0EWGlA4sZ5SVERFRvERgs9Dt NtwBDcW5PdATb3wsMCsnfpKx5WE6VvHkaIoYLUQjeFQqN05HT4ehFzuJz+Z4sB6sddyPi7zq2xoI j0tQ34dSaCuXtXX6olbIq46pskIVYUkVemGG/jC4IsdfkSeURQ5A1bfXEPsD0b6CRS0Ef4D1gr04 R1T8PSK1MqUPA5HuOZ5H6HidvkWiPEYGYZN6DA5mNp24bsjlQueRdNbMA35LcHAGZxwZzzUdmOC7 gcdAnrg5GeuNwi2Pa9rGUz4LzyO08z0Ws7SBE8zyKD3bcjw1FOsoN5BJEjHLbCPOW5p/H5jOtJNc cl5oaDzMxIrQgZG89VzyBKXBx8oMQZvNAV6ET4vR0aIvaIdVISP7QPIKA8ZiLhxkpuyOE17JnccZ qNRJEUPHaCHHERMLs0xHgbt4WlD1yHZfuHgbhojOXAYgs5AIw7nxhBQZJa6deT+g8rORxD2GJUrb +ivD9S7ntcnopBixLMXPHpOLfzQhFI2UlvL869VMTMy5ZpamXPS1mppyVqsxvGGFhNwgsZO2A6XA T4lcaNYvFlSX59h99iAgI62oC5LJSkrOCzHc332vc7JK8HLzEcjicd2k/5dPYI0qcQzGRgH9LmsQ s4cnrOwvy/ovNiwh0/I9MkJ7DKN6efroMpmZ1pr+A3HS+0BmzKw9WFqZQT4mIKG011H4Kx+nR2iH 0nyL8A1rLepZiO4Qqm5tAPoF3fHlO9y0x2cKy0I3tJNjAa9Q3fMUQgLxEoOmxBzVXV47zWtZ51mj QdYjyLSf7xXVj6jkMtC3i4K2yZhBly0Jcihdy4JyPz9JpwgZMmCp7+aAjEZc7lfdDYe9x8wYQQo8 tHkWnDmYIDchVablSPWDBBdnhAomcRHVVz3BR7e1Y4aV69x7isJtycWJ4z05atLgCE0BJAP97CJK wO6jyKHbhqHiZSihDPIQXPkOQiJAaqWtRUF7aTvZCbSasyMXXsiIgw9JwCPNeT6JmlcwgvENgNNt CdDOi/ym2MY2MTsWStFmVqEzMvoypHqwxVjW4m0fqVpMWoRPuqDjx70VRC0KnUalWaRbSusac+vh NdJiMMxgotNQPYwPZAqELVg6mt3QyxCg10iOzHrqWTKi1SjG3oPYUKdAywLdwY0K1Gx62bolChlH v4+Fk6e+tVK8diA7kFGo0TbxxsaDO19OdQ8MwqkpCKFiSRFYdgZMzM2/sMSQV9eKvExf+EAz47GY Ywx3ZytYHJqR4UrUKsWLKBcDtkpOg9Upa2QEVOgT5K4eIsC0m9d4gpZMqXIIQZgr5sCeKhkT+JcZ KkJDy84XH0zHjy+KvQFbE8CYyz5kGCd7bwSfVFl1dQiUQ3sOKxAx3iNyeYiMSKYuCsRwUd4lVrjl JwunO5suWg1GWwMOe20gvCquzX/F3JFOFCQGmYLYwA== --Boundary_(ID_UYUEQdwCUOYVeiCwsu8y2Q)--