From: Ole John Aske Date: September 25 2012 11:37am Subject: bzr push into mysql-5.1-telco-7.0 branch (ole.john.aske:4990 to 4991) Bug#14550056 List-Archive: http://lists.mysql.com/commits/144881 X-Bug: 14550056 Message-Id: <20120925113702.15427.28622.4991@fimafeng09.no.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 4991 Ole John Aske 2012-09-25 Fix for bug#14550056 BUSY WAIT IN DBTC::REMOVEMARKERFORFAILEDAPI IF CLIENT DISCONNECT WITH OPEN TXNS In case Dbtc::removeMarkerForFailedAPI() waits for open transactions to be terminated, it should do that with a 'sendSignalWithDelay(..., GSN_CONTINUEB, 1ms, ...)', instead of a plain 'sendSignal()' which will cause a busy loop. modified: storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 4990 Maitrayi Sabaratnam 2012-09-25 Bug#14329309 - ADD NUMBER OF RETRIES AND DELAY BETWEEN RETRIES AS START OPTIONS TO NDBD modified: storage/ndb/src/kernel/angel.cpp storage/ndb/src/kernel/angel.hpp storage/ndb/src/kernel/main.cpp storage/ndb/src/kernel/ndbd.cpp storage/ndb/src/kernel/ndbd.hpp storage/ndb/src/kernel/vm/Configuration.cpp storage/ndb/src/kernel/vm/Configuration.hpp storage/ndb/src/mgmapi/mgmapi.cpp === modified file 'storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp' --- a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 2012-09-13 08:05:29 +0000 +++ b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp 2012-09-25 11:27:32 +0000 @@ -1173,9 +1173,13 @@ Dbtc::removeMarkerForFailedAPI(Signal* s /** * The record is still active * - * Don't remove it, but continueb instead + * Don't remove it, but continueb retry with a short delay */ - break; + signal->theData[0] = TcContinueB::ZHANDLE_FAILED_API_NODE_REMOVE_MARKERS; + signal->theData[1] = nodeId; + signal->theData[2] = iter.bucket; + sendSignalWithDelay(cownref, GSN_CONTINUEB, signal, 1, 3); + return; } sendRemoveMarkers(signal, iter.curr.p); m_commitAckMarkerHash.release(iter.curr); @@ -1183,8 +1187,9 @@ Dbtc::removeMarkerForFailedAPI(Signal* s break; } m_commitAckMarkerHash.next(iter); - } + } // for (... itheData[0] = TcContinueB::ZHANDLE_FAILED_API_NODE_REMOVE_MARKERS; signal->theData[1] = nodeId; signal->theData[2] = iter.bucket; No bundle (reason: useless for push emails).