#At file:///home/jonas/src/telco-7.1/ based on revid:bernhard.ocklin@stripped
3800 Jonas Oreland 2010-09-13 [merge]
ndb - merge 70 to 71
modified:
mysql-test/collections/default.experimental
sql/ha_ndbcluster_binlog.cc
storage/ndb/include/ndbapi/NdbDictionary.hpp
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
storage/ndb/src/ndbapi/NdbDictionary.cpp
storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp
=== modified file 'mysql-test/collections/default.experimental'
--- a/mysql-test/collections/default.experimental 2010-03-15 09:31:35 +0000
+++ b/mysql-test/collections/default.experimental 2010-09-13 09:39:27 +0000
@@ -3,6 +3,8 @@
binlog.binlog_unsafe @solaris # Bug #47128 Test "binlog_unsafe" exceds default stack allocation
+rpl_ndb.rpl_ndb_typeconv_all @solaris # bug#52131
+rpl_ndb.rpl_ndb_typeconv_lossy @solaris # bug#52131
funcs_1.charset_collation_1 # depends on compile-time decisions
=== modified file 'sql/ha_ndbcluster_binlog.cc'
--- a/sql/ha_ndbcluster_binlog.cc 2010-09-01 10:08:49 +0000
+++ b/sql/ha_ndbcluster_binlog.cc 2010-09-13 14:31:30 +0000
@@ -1734,6 +1734,7 @@ ndbcluster_update_slock(THD *thd,
}
if (trans->execute(NdbTransaction::NoCommit))
goto err;
+
bitmap_clear_bit(&slock, node_id);
{
NdbOperation *op= 0;
@@ -1768,6 +1769,7 @@ ndbcluster_update_slock(THD *thd,
{
DBUG_PRINT("info", ("node %d cleared lock on '%s.%s'",
node_id, db, table_name));
+ dict->forceGCPWait(1);
break;
}
err:
@@ -2161,6 +2163,7 @@ int ndbcluster_log_schema_op(THD *thd,
if (trans->execute(NdbTransaction::Commit) == 0)
{
DBUG_PRINT("info", ("logged: %s", query));
+ dict->forceGCPWait(1);
break;
}
err:
=== modified file 'storage/ndb/include/ndbapi/NdbDictionary.hpp'
--- a/storage/ndb/include/ndbapi/NdbDictionary.hpp 2010-05-27 09:56:43 +0000
+++ b/storage/ndb/include/ndbapi/NdbDictionary.hpp 2010-09-13 14:31:30 +0000
@@ -2321,6 +2321,7 @@ public:
* Force gcp and wait for gcp complete
*/
int forceGCPWait();
+ int forceGCPWait(int type);
#endif
/** @} *******************************************************************/
=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2010-09-06 08:20:33 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2010-09-13 14:31:30 +0000
@@ -25078,6 +25078,9 @@ Dbdict::trans_commit_first(Signal* signa
signal->theData[2] = gci_hi;
signal->theData[3] = gci_lo;
sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 20, 4);
+
+ signal->theData[0] = 6099;
+ sendSignal(DBDIH_REF, GSN_DUMP_STATE_ORD, signal, 1, JBB);
}
else
{
=== modified file 'storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2010-08-17 10:11:01 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2010-09-13 14:31:30 +0000
@@ -17454,6 +17454,20 @@ Dbdih::execDUMP_STATE_ORD(Signal* signal
SET_ERROR_INSERT_VALUE2(7216, signal->theData[1]);
return;
}
+ DECLARE_DUMP0(DBDIH, 6099, "Start microgcp")
+ {
+ if (isMaster())
+ {
+ jam();
+ m_micro_gcp.m_master.m_start_time = 0;
+ }
+ else
+ {
+ jam();
+ sendSignal(cmasterdihref, GSN_DUMP_STATE_ORD, signal, 1, JBB);
+ }
+ return;
+ }
}//Dbdih::execDUMP_STATE_ORD()
void
=== modified file 'storage/ndb/src/ndbapi/NdbDictionary.cpp'
--- a/storage/ndb/src/ndbapi/NdbDictionary.cpp 2010-07-26 12:08:40 +0000
+++ b/storage/ndb/src/ndbapi/NdbDictionary.cpp 2010-09-13 14:31:30 +0000
@@ -2542,7 +2542,13 @@ NdbDictionary::Dictionary::invalidateInd
int
NdbDictionary::Dictionary::forceGCPWait()
{
- return m_impl.forceGCPWait();
+ return forceGCPWait(0);
+}
+
+int
+NdbDictionary::Dictionary::forceGCPWait(int type)
+{
+ return m_impl.forceGCPWait(type);
}
void
=== modified file 'storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp'
--- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp 2010-08-30 09:51:49 +0000
+++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp 2010-09-13 14:31:30 +0000
@@ -5760,42 +5760,72 @@ NdbDictInterface::execOLD_LIST_TABLES_CO
}
int
-NdbDictionaryImpl::forceGCPWait()
+NdbDictionaryImpl::forceGCPWait(int type)
{
- return m_receiver.forceGCPWait();
+ return m_receiver.forceGCPWait(type);
}
int
-NdbDictInterface::forceGCPWait()
+NdbDictInterface::forceGCPWait(int type)
{
NdbApiSignal tSignal(m_reference);
- WaitGCPReq* const req = CAST_PTR(WaitGCPReq, tSignal.getDataPtrSend());
- req->senderRef = m_reference;
- req->senderData = 0;
- req->requestType = WaitGCPReq::CompleteForceStart;
- tSignal.theReceiversBlockNumber = DBDIH;
- tSignal.theVerId_signalNumber = GSN_WAIT_GCP_REQ;
- tSignal.theLength = WaitGCPReq::SignalLength;
-
- const Uint32 RETRIES = 100;
- for (Uint32 i = 0; i < RETRIES; i++)
- {
- m_transporter->lock_mutex();
- Uint16 aNodeId = m_transporter->get_an_alive_node();
- if (aNodeId == 0) {
- m_error.code= 4009;
+ if (type == 0)
+ {
+ WaitGCPReq* const req = CAST_PTR(WaitGCPReq, tSignal.getDataPtrSend());
+ req->senderRef = m_reference;
+ req->senderData = 0;
+ req->requestType = WaitGCPReq::CompleteForceStart;
+ tSignal.theReceiversBlockNumber = DBDIH;
+ tSignal.theVerId_signalNumber = GSN_WAIT_GCP_REQ;
+ tSignal.theLength = WaitGCPReq::SignalLength;
+
+ const Uint32 RETRIES = 100;
+ for (Uint32 i = 0; i < RETRIES; i++)
+ {
+ m_transporter->lock_mutex();
+ Uint16 aNodeId = m_transporter->get_an_alive_node();
+ if (aNodeId == 0) {
+ m_error.code= 4009;
+ m_transporter->unlock_mutex();
+ return -1;
+ }
+ if (m_transporter->sendSignal(&tSignal, aNodeId) != 0) {
+ m_transporter->unlock_mutex();
+ continue;
+ }
+
+ m_error.code= 0;
+ m_waiter.m_node = aNodeId;
+ m_waiter.m_state = WAIT_LIST_TABLES_CONF;
+ m_waiter.wait(DICT_WAITFOR_TIMEOUT);
m_transporter->unlock_mutex();
- return -1;
+ return 0;
}
- if (m_transporter->sendSignal(&tSignal, aNodeId) != 0) {
+ return -1;
+ }
+ else if (type == 1)
+ {
+ tSignal.getDataPtrSend()[0] = 6099;
+ tSignal.theReceiversBlockNumber = DBDIH;
+ tSignal.theVerId_signalNumber = GSN_DUMP_STATE_ORD;
+ tSignal.theLength = 1;
+
+ const Uint32 RETRIES = 100;
+ for (Uint32 i = 0; i < RETRIES; i++)
+ {
+ m_transporter->lock_mutex();
+ Uint16 aNodeId = m_transporter->get_an_alive_node();
+ if (aNodeId == 0) {
+ m_error.code= 4009;
+ m_transporter->unlock_mutex();
+ return -1;
+ }
+ if (m_transporter->sendSignal(&tSignal, aNodeId) != 0) {
+ m_transporter->unlock_mutex();
+ continue;
+ }
m_transporter->unlock_mutex();
- continue;
}
- m_error.code= 0;
- m_waiter.m_node = aNodeId;
- m_waiter.m_state = WAIT_LIST_TABLES_CONF;
- m_waiter.wait(DICT_WAITFOR_TIMEOUT);
- m_transporter->unlock_mutex();
return 0;
}
return -1;
=== modified file 'storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp'
--- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp 2010-07-26 12:08:40 +0000
+++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp 2010-09-13 14:31:30 +0000
@@ -658,7 +658,7 @@ public:
LinearSectionPtr ptr[3],
Uint32 noOfSections, bool fullyQualifiedNames);
- int forceGCPWait();
+ int forceGCPWait(int type);
static int parseTableInfo(NdbTableImpl ** dst,
const Uint32 * data, Uint32 len,
@@ -833,7 +833,7 @@ public:
int executeSubscribeEvent(NdbEventOperationImpl &, Uint32 & buckets);
int stopSubscribeEvent(NdbEventOperationImpl &);
- int forceGCPWait();
+ int forceGCPWait(int type);
int listObjects(List& list, NdbDictionary::Object::Type type,
bool fullyQualified);
Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20100913143515-2n43qu1r0sndz535.bundle
| Thread |
|---|
| • bzr commit into mysql-5.1-telco-7.1 branch (jonas:3800) | Jonas Oreland | 13 Sep |