2949 Jonas Oreland 2009-06-22
ndb - minor bug
get_node_alive is called wo/ locks, which means that result is unpredictable
in this case the node could die inbetweem get_node_alive and sendRecSignal
in which case wrong error code would be returned to callign function.
modified:
storage/ndb/src/ndbapi/Ndb.cpp
2948 Jonas Oreland 2009-06-22
ndb - bug#45646
Add a "has_lock" argument to send_event_report
modified:
storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
storage/ndb/src/ndbapi/NdbImpl.hpp
storage/ndb/src/ndbapi/Ndbif.cpp
storage/ndb/src/ndbapi/ndb_internal.hpp
storage/ndb/tools/restore/consumer_restore.cpp
2947 Jonas Oreland 2009-06-15
ndb - fix include inconsistencies in public ndbapi
as reported by martin z
modified:
storage/ndb/include/ndbapi/Ndb.hpp
storage/ndb/include/ndbapi/NdbBlob.hpp
storage/ndb/include/ndbapi/NdbError.hpp
storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp
storage/ndb/include/ndbapi/NdbIndexStat.hpp
storage/ndb/include/ndbapi/NdbInterpretedCode.hpp
storage/ndb/include/ndbapi/NdbScanFilter.hpp
storage/ndb/include/ndbapi/NdbScanOperation.hpp
=== modified file 'storage/ndb/src/ndbapi/Ndb.cpp'
--- a/storage/ndb/src/ndbapi/Ndb.cpp 2009-05-26 18:53:34 +0000
+++ b/storage/ndb/src/ndbapi/Ndb.cpp 2009-06-22 08:50:59 +0000
@@ -148,15 +148,9 @@ Ndb::NDB_connect(Uint32 tNode)
//***************************************************************************
int tReturnCode;
- TransporterFacade *tp = theImpl->m_transporter_facade;
DBUG_ENTER("Ndb::NDB_connect");
- bool nodeAvail = tp->get_node_alive(tNode);
- if(nodeAvail == false){
- DBUG_RETURN(0);
- }
-
NdbTransaction * tConArray = theConnectionArray[tNode];
if (tConArray != NULL) {
DBUG_RETURN(2);
@@ -211,6 +205,18 @@ Ndb::NDB_connect(Uint32 tNode)
// no need to retry with other node
DBUG_RETURN(-1);
}
+
+ /**
+ * If node was dead, report 0...
+ *
+ * Btw, the sendRecSignal-method should taken out and shot
+ */
+ switch(tReturnCode){
+ case -2:
+ case -3:
+ DBUG_RETURN(0);
+ }
+
DBUG_RETURN(3);
}//if
}//Ndb::NDB_connect()
=== modified file 'storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp'
--- a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp 2009-05-26 18:53:34 +0000
+++ b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp 2009-06-22 08:23:35 +0000
@@ -3323,7 +3323,7 @@ send_report:
data[5]= apply_gci >> 32;
data[6]= latest_gci & ~(Uint32)0;
data[7]= latest_gci >> 32;
- Ndb_internal::send_event_report(m_ndb, data,8);
+ Ndb_internal::send_event_report(true, m_ndb, data,8);
#ifdef VM_TRACE
assert(m_total_alloc >= m_free_data_sz);
#endif
=== modified file 'storage/ndb/src/ndbapi/NdbImpl.hpp'
--- a/storage/ndb/src/ndbapi/NdbImpl.hpp 2009-05-26 18:53:34 +0000
+++ b/storage/ndb/src/ndbapi/NdbImpl.hpp 2009-06-22 08:23:35 +0000
@@ -58,7 +58,7 @@ public:
NdbImpl(Ndb_cluster_connection *, Ndb&);
~NdbImpl();
- int send_event_report(Uint32 *data, Uint32 length);
+ int send_event_report(bool has_lock, Uint32 *data, Uint32 length);
Ndb &m_ndb;
Ndb * m_next_ndb_object, * m_prev_ndb_object;
=== modified file 'storage/ndb/src/ndbapi/Ndbif.cpp'
--- a/storage/ndb/src/ndbapi/Ndbif.cpp 2009-05-26 18:53:34 +0000
+++ b/storage/ndb/src/ndbapi/Ndbif.cpp 2009-06-22 08:23:35 +0000
@@ -1455,7 +1455,8 @@ NdbTransaction::sendTC_COMMIT_ACK(Transp
}
int
-NdbImpl::send_event_report(Uint32 *data, Uint32 length)
+NdbImpl::send_event_report(bool has_lock,
+ Uint32 *data, Uint32 length)
{
NdbApiSignal aSignal(m_ndb.theMyRef);
TransporterFacade *tp = m_transporter_facade;
@@ -1465,15 +1466,29 @@ NdbImpl::send_event_report(Uint32 *data,
aSignal.theLength = length;
memcpy((char *)aSignal.getDataPtrSend(), (char *)data, length*4);
+
+ int ret = 0;
+ if (!has_lock)
+ {
+ tp->lock_mutex();
+ }
Uint32 tNode;
Ndb_cluster_connection_node_iter node_iter;
m_ndb_cluster_connection.init_get_next_node(node_iter);
while ((tNode= m_ndb_cluster_connection.get_next_node(node_iter)))
{
- if(tp->get_node_alive(tNode)){
+ if(tp->get_node_alive(tNode))
+ {
tp->sendSignal(&aSignal, tNode);
- return 0;
+ goto done;
}
}
- return 1;
+
+ ret = 1;
+done:
+ if (!has_lock)
+ {
+ tp->unlock_mutex();
+ }
+ return ret;
}
=== modified file 'storage/ndb/src/ndbapi/ndb_internal.hpp'
--- a/storage/ndb/src/ndbapi/ndb_internal.hpp 2009-05-26 18:53:34 +0000
+++ b/storage/ndb/src/ndbapi/ndb_internal.hpp 2009-06-22 08:23:35 +0000
@@ -25,6 +25,6 @@ private:
friend class BackupRestore;
Ndb_internal() {}
virtual ~Ndb_internal() {}
- static int send_event_report(Ndb *ndb, Uint32 *data, Uint32 length)
- { return ndb->theImpl->send_event_report(data, length); }
+ static int send_event_report(bool has_lock, Ndb *ndb, Uint32 *data, Uint32 length)
+ { return ndb->theImpl->send_event_report(has_lock, data, length); }
};
=== modified file 'storage/ndb/tools/restore/consumer_restore.cpp'
--- a/storage/ndb/tools/restore/consumer_restore.cpp 2009-06-15 05:46:54 +0000
+++ b/storage/ndb/tools/restore/consumer_restore.cpp 2009-06-22 08:23:35 +0000
@@ -732,7 +732,7 @@ BackupRestore::report_started(unsigned b
data[0]= NDB_LE_RestoreStarted;
data[1]= backup_id;
data[2]= node_id;
- Ndb_internal::send_event_report(m_ndb, data, 3);
+ Ndb_internal::send_event_report(false /* has lock */, m_ndb, data, 3);
}
return true;
}
@@ -751,7 +751,7 @@ BackupRestore::report_meta_data(unsigned
data[5]= m_n_logfilegroup;
data[6]= m_n_datafile;
data[7]= m_n_undofile;
- Ndb_internal::send_event_report(m_ndb, data, 8);
+ Ndb_internal::send_event_report(false /* has lock */, m_ndb, data, 8);
}
return true;
}
@@ -768,7 +768,7 @@ BackupRestore::report_data(unsigned back
data[4]= 0;
data[5]= m_dataBytes & 0xFFFFFFFF;
data[6]= (m_dataBytes >> 32) & 0xFFFFFFFF;
- Ndb_internal::send_event_report(m_ndb, data, 7);
+ Ndb_internal::send_event_report(false /* has lock */, m_ndb, data, 7);
}
return true;
}
@@ -786,7 +786,7 @@ BackupRestore::report_log(unsigned backu
data[4]= 0;
data[5]= m_logBytes & 0xFFFFFFFF;
data[6]= (m_logBytes >> 32) & 0xFFFFFFFF;
- Ndb_internal::send_event_report(m_ndb, data, 7);
+ Ndb_internal::send_event_report(false /* has lock */, m_ndb, data, 7);
}
return true;
}
@@ -800,7 +800,7 @@ BackupRestore::report_completed(unsigned
data[0]= NDB_LE_RestoreCompleted;
data[1]= backup_id;
data[2]= node_id;
- Ndb_internal::send_event_report(m_ndb, data, 3);
+ Ndb_internal::send_event_report(false /* has lock */, m_ndb, data, 3);
}
return true;
}
Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20090622085059-6es3unsvnr1dk0ip.bundle
| Thread |
|---|
| • bzr push into mysql-5.1-telco-6.2 branch (jonas:2947 to 2949) | Jonas Oreland | 22 Jun |