From: John Embretsen Date: May 15 2009 8:55am Subject: Weekly Falcon bazaar merge List-Archive: http://lists.mysql.com/falcon/739 Message-Id: <4A0D2E17.9080302@Sun.COM> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_8FgPYEp5Nx/vrZ0YE6hyQw)" --Boundary_(ID_8FgPYEp5Nx/vrZ0YE6hyQw) Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Hi falconers, I just finished the weekly merge of our bazaar branches mysql-6.0 --> mysql-6.0-falcon --> mysql-6.0-falcon-team and mysql-6.0-falcon-team --> mysql-6.0-falcon Commit comments from merged revisions are attached to this E-mail. As always, please test your code tree for unusual problems like compile errors or the like. The latest merge will appear in the public falcon branch on Launchpad within a couple of hours. You can create your own local branch from launchpad: bzr branch lp:~mysql/mysql-server/mysql-6.0-falcon (see https://code.launchpad.net/~mysql/mysql-server/mysql-6.0-falcon) Cheers and happy compiling, -- John H. Embretsen QA Engineer, Sun Microsystems --Boundary_(ID_8FgPYEp5Nx/vrZ0YE6hyQw) Content-type: text/plain; name=merged-from-main-2009-05-14.txt Content-transfer-encoding: 7BIT Content-disposition: inline; filename=merged-from-main-2009-05-14.txt Merged 8 revision(s): ------------------------------------------------------------ revno: 2849 committer: Alexander Nozdrin branch nick: 6.0 timestamp: Wed 2009-05-13 07:25:49 +0400 message: Fix default.conf ------------------------------------------------------------ revno: 2848 committer: Luis Soares branch nick: 6.0-rpl timestamp: Tue 2009-05-12 09:58:44 +0100 message: merge: 6.0 --> 6.0-rpl manually resoved conflicts: .bzr-mysql/default.cnf ------------------------------------------------------------ revno: 2847 committer: Luis Soares branch nick: 6.0-rpl timestamp: Mon 2009-05-11 11:22:35 +0100 message: BUG#44779: binlog.binlog_max_extension may be causing failure on next test in PB Disabling test while conducting analysis. ------------------------------------------------------------ revno: 2846 committer: He Zhenxing branch nick: 6.0-rpl timestamp: Fri 2009-05-08 15:49:21 +0800 message: BUG#44058 Possible semi-sync replication bugs Fix previous patch. Move thd_enter_cond/thd_exit_cond from plugin.h to replication.h ------------------------------------------------------------ revno: 2845 committer: Luis Soares branch nick: 6.0-rpl timestamp: Thu 2009-05-07 12:44:40 +0100 message: merge: 6.0 --> 6.0-rpl conflicts resolved manually: Text conflict in .bzr-mysql/default.conf Text conflict in mysql-test/suite/rpl/t/disabled.def ------------------------------------------------------------ revno: 2844 committer: Luis Soares branch nick: 6.0-rpl-b40045 timestamp: Wed 2009-04-29 17:48:59 +0100 message: BUG#40045: Replication failure on RBR + no PK + UPDATE + integer key + char with no key Row based replication would break if updating a row and using a key for searching for the correct row to update. This was observed when using MyISAM storage engine on the slave. Since MyISAM does not provide partial row fetch (HA_PARTIAL_COLUMN_READ) , the comparison between the row fetched on the slave and the before image (BI) replicated from master would fail. This happened because the BI (which sometimes was only part of the row) would always be compared against a complete row. Furthermore, the read set mask was not being properly set in some cases when using keys (not unique nor primary) which would lead to partial row matches, thence changes might end up in the wrong row. This patch addresses this by changing the record_compare function for taking into consideration the fields set on the readset and the engine used on the slave. Furthermore, it also moves the mark columns needed for update on the master so that read_set bitmap is always correct. ------------------------------------------------------------ revno: 2843 committer: Andrei Elkin branch nick: 6.0-rpl-bug38716-restart_slave_kill_crashed timestamp: Wed 2009-04-29 15:58:20 +0300 message: merge from 6.0-rpl for a local bug branch ------------------------------------------------------------ revno: 2842 committer: Andrei Elkin branch nick: 6.0-rpl-bug38716-restart_slave_kill_crashed timestamp: Tue 2009-04-28 00:18:21 +0300 message: Bug #38716 slave crashed after 'stop slave' during concurrent stop/start/reset Bug #44312 deadlock between IO thread and SLAVE START The issue in terminate_slave_threads() of bug#38716 was reproduced in a slighly different form. terminate_slave_threads() should not acquire run_lock when it's called from slave_thread()->start_slave_threads(); that leads to an assertion on run_lock mutex. OTH, init_slave()->start_slave_threads() path requires terminate_slave_threads() to be invoked with skip_lock == false. No other crashes has been found using the regression stress test program. Another issues is a deadlock as described separately in Bug #44312. It was caused by grabbing two mutexes by IO thread and STARTing SLAVE thread in reverse order. Fixed: terminate_slave_threads() does not request locking in start_slave_threads() when it's called from start_slave() and does it when it's called from init_slave(); rotate_relay_log() does not acquire mi->run_lock which is safe. The rli->inited is not guarded by this mutex, and locking of the mutex in the function contradicts the safe pattern of locking with run_lock. --Boundary_(ID_8FgPYEp5Nx/vrZ0YE6hyQw) Content-type: text/plain; name=merged-from-falcon-team-2009-05-15.txt Content-transfer-encoding: 7BIT Content-disposition: inline; filename=merged-from-falcon-team-2009-05-15.txt Merged 8 revisions from mysql-6.0-falcon-team: ------------------------------------------------------------ revno: 2706 committer: John H. Embretsen branch nick: mysql-6.0-falcon-team-to-merge timestamp: Fri 2009-05-15 09:20:04 +0200 message: Merge: mysql-6.0 --> mysql-6.0-falcon --> mysql-6.0-falcon-team in preparation for merge mysql-6.0-falcon-team --> mysql-6.0-falcon .bzr-mysql/default.conf (tree name) adjusted. ------------------------------------------------------------ revno: 2705 committer: Kevin Lewis branch nick: mysql-6.0-falcon-team timestamp: Thu 2009-05-14 00:16:08 -0500 message: Bug#44850 - Delete the member variable StorageTable::dataStream since it can point into Storagetable::record.data.record, which can be chilled while it exists. Instead, use local pointers that are protected by a CycleLock so that even if the data.record is chilled, that buffer will be accessable until the next cycle. Fix Record::deleteData so that it works for chilled records. Also, fix Record::getDataMemUsage() so that it does not thaw. That was an inadvertent change from a recent patch. ------------------------------------------------------------ revno: 2704 committer: Kevin Lewis branch nick: mysql-6.0-falcon-team timestamp: Tue 2009-05-12 17:58:23 -0500 message: Code Cleanup and compile warnings Fix the previous patch for Bug#43344 & Bug#44721 that made a call to getAllocatedSize() from inside a thaw. This caused a recursive loop and a stack overflow. ------------------------------------------------------------ revno: 2703 committer: Kevin Lewis branch nick: mysql-6.0-falcon-team timestamp: Tue 2009-05-12 10:27:23 -0500 message: merge ------------------------------------------------------------ revno: 2702 committer: Kevin Lewis branch nick: mysql-6.0-falcon-team timestamp: Tue 2009-05-12 09:35:40 -0500 message: Bug#43344 & Bug#44721 Second patch (comprehensive) with review changes This series of changes closes many gaps in which a data buffer can get thawed and then re-chilled almost immediatly which can cause the use of a bad data buffer pointer. For 44344, it makes the act of chilling and thawing records an atomic operation which uses CAS. Each call to thaw returns a valid pointer to the buffer that was thawed so that it can be used during the current cycle as long as the caller has a CycleLock. Record.h, Record.cpp, RecordVersion.h & RecordVersion.cpp; The most significant change is that when a data buffer is chilled, it recieves the value (-1) and this happens atomically. Record::state == recChilled is no longer used. The record.data pointer is now always read once, checked, and returned up the call stack to where it is used. hasRecord() is changed from an inline function to a virtual function for both Record and RecordVersion. hasRecord() and isChilled() are added so that the record can check data.record itself. setEncodedRecord() and thaw() return the pointer to the buffer that they just created and put into data.record so that the caller does not have to rely on that buffer being there later. getEncodedValue() uses the recordData pointer of the caller instead of getting it again from data.record. getAllocatedSize() is added so that the number of bytes in a buffer holding the record can be consistently known. It is used in several places. chillData() is similar to and replaces deleteData() during SRLUpdateRecords::chill isDeleted() is also added so that the common (state == recDeleted) check can be done by the record itself. This is not fully implemented yet because we need to get away from the over-use of these state flags. They are somewhat unreliable on multiple CPUs unless they are set with CAS. getRecordData() is also changed from an inline to a virtual function. findRecordData() is like getRecordData but without the thaw. It is used in three places along the call stack for thawing a record to check if another thread has already thawed that record. This is not likely now because of the use of syncThaw. But syncThaw may no longer be necessary. isAllocated() is an inline function used about 6 times to determine if a pointer is real or not. SRLUpdateRecords.h & SRLUpdateRecords.cpp; thaw() returns the data buffer thawed in addition to the number of bytes reallocated. chill() is not sent the dataLength anymore since it calculates that itself. SerialLog.h, SerialLog.cpp, transaction.h, transaction.cpp; Since the number of bytes chilled and thawed stored in the SerialLog and Transaction were being maintained but not used, I deleted those variables and code used to maintain them. The number of allocated bytes associated with a Transaction is stored in totalRecorddata and is still maintained. transaction.cpp Even though backlogging is not currently active, the choice whether to backlog any particular record needed to be enhanced. Along with replacing hasRecord(false) with isChilled(), it should avoid backlogging record chains that do not start at the base record. That is checked with isSuperceded(). Also, backlogging should occur for deleted records as well as newly chilled records. ------------------------------------------------------------ revno: 2701 committer: Kevin Lewis branch nick: mysql-6.0-falcon-team timestamp: Fri 2009-05-08 13:37:39 -0500 message: Code Cleanup Record.cpp; Use addRef so that REC_HISTORY is saved. Also use totalLength which was already added up. Record.h; correct comment SRLBlobDelete.cpp; Adjust spacing SRLUpdateRecords.cpp; Delete unneeded tabs. Change unexpected condition for wrong page number into an assert. This should not happen. SerialLogFile.cpp; change inconsistent formatting. Table.cpp; Deleted both actions when wasLock is true. state was alredy set to recDeleted and this is not a correct place to set decrement deletedRecords. This would make this value < zero. Then that possibility was tested for at the bottom of Transaction::removeRecordNoLock(). I left the test in place, but deleted this mistake. The result of this, if it had not been tested for, is just bad log reporting. Transaction.cpp; Enhanced the LogXARecovery reporting to use TransID instead of a transaction pointer and also display the SQL statement. ------------------------------------------------------------ revno: 2700 committer: Olav.Sandstaa branch nick: falcon-dbug-fix timestamp: Thu 2009-05-07 20:29:18 +0200 message: Merging... ------------------------------------------------------------ revno: 2699 committer: Olav.Sandstaa branch nick: falcon-dbug-fix timestamp: Wed 2009-05-06 21:40:24 +0200 message: Fixed two DBUG traces to log the correct method name. --Boundary_(ID_8FgPYEp5Nx/vrZ0YE6hyQw)--