Commit 94bd61e2 authored by knielsen@devsrv-b.mysql.com's avatar knielsen@devsrv-b.mysql.com

Merge bk-internal:/home/bk/mysql-5.1

into  mysql.com:/data0/knielsen/tmp-5.1
parents b1c686cc 0a75f5fe
--source include/have_ndb.inc --source include/have_ndb.inc
-- source include/not_embedded.inc -- source include/not_embedded.inc
--disable_query_log
set new=on;
--enable_query_log
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
......
...@@ -6,6 +6,10 @@ ...@@ -6,6 +6,10 @@
-- source include/have_ndb.inc -- source include/have_ndb.inc
--disable_query_log
set new=on;
--enable_query_log
--disable_warnings --disable_warnings
DROP TABLE IF EXISTS test.t1; DROP TABLE IF EXISTS test.t1;
DROP TABLE IF EXISTS test.t2; DROP TABLE IF EXISTS test.t2;
......
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
--disable_query_log
set new=on;
--enable_query_log
# #
# Partition by range, generate node group error # Partition by range, generate node group error
# #
......
...@@ -5,6 +5,10 @@ ...@@ -5,6 +5,10 @@
# #
#-- source include/have_partition.inc #-- source include/have_partition.inc
--disable_query_log
set new=on;
--enable_query_log
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
......
...@@ -6,6 +6,10 @@ ...@@ -6,6 +6,10 @@
# #
#-- source include/have_partition.inc #-- source include/have_partition.inc
--disable_query_log
set new=on;
--enable_query_log
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
......
...@@ -9869,7 +9869,6 @@ uint ha_ndbcluster::set_up_partition_info(partition_info *part_info, ...@@ -9869,7 +9869,6 @@ uint ha_ndbcluster::set_up_partition_info(partition_info *part_info,
} }
else else
{ {
#ifdef NOT_YET
if (!current_thd->variables.new_mode) if (!current_thd->variables.new_mode)
{ {
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR, push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
...@@ -9878,9 +9877,8 @@ uint ha_ndbcluster::set_up_partition_info(partition_info *part_info, ...@@ -9878,9 +9877,8 @@ uint ha_ndbcluster::set_up_partition_info(partition_info *part_info,
ndbcluster_hton_name, ndbcluster_hton_name,
"LIST, RANGE and HASH partition disabled by default," "LIST, RANGE and HASH partition disabled by default,"
" use --new option to enable"); " use --new option to enable");
return HA_ERR_UNSUPPORTED; DBUG_RETURN(HA_ERR_UNSUPPORTED);
} }
#endif
/* /*
Create a shadow field for those tables that have user defined Create a shadow field for those tables that have user defined
partitioning. This field stores the value of the partition partitioning. This field stores the value of the partition
......
...@@ -1553,6 +1553,7 @@ private: ...@@ -1553,6 +1553,7 @@ private:
const char* aCatalogName, const char* aSchemaName); const char* aCatalogName, const char* aSchemaName);
void connected(Uint32 block_reference); void connected(Uint32 block_reference);
void report_node_connected(Uint32 nodeId);
NdbTransaction* startTransactionLocal(Uint32 aPrio, Uint32 aFragmentId); NdbTransaction* startTransactionLocal(Uint32 aPrio, Uint32 aFragmentId);
......
...@@ -2667,7 +2667,8 @@ Suma::reportAllSubscribers(Signal *signal, ...@@ -2667,7 +2667,8 @@ Suma::reportAllSubscribers(Signal *signal,
{ {
SubTableData * data = (SubTableData*)signal->getDataPtrSend(); SubTableData * data = (SubTableData*)signal->getDataPtrSend();
if (table_event == NdbDictionary::Event::_TE_SUBSCRIBE) if (table_event == NdbDictionary::Event::_TE_SUBSCRIBE &&
!c_startup.m_restart_server_node_id)
{ {
data->gci = m_last_complete_gci + 1; data->gci = m_last_complete_gci + 1;
data->tableId = subPtr.p->m_tableId; data->tableId = subPtr.p->m_tableId;
......
...@@ -396,6 +396,8 @@ ClusterMgr::execNF_COMPLETEREP(const Uint32 * theData){ ...@@ -396,6 +396,8 @@ ClusterMgr::execNF_COMPLETEREP(const Uint32 * theData){
void void
ClusterMgr::reportConnected(NodeId nodeId){ ClusterMgr::reportConnected(NodeId nodeId){
DBUG_ENTER("ClusterMgr::reportConnected");
DBUG_PRINT("info", ("nodeId: %u", nodeId));
/** /**
* Ensure that we are sending heartbeat every 100 ms * Ensure that we are sending heartbeat every 100 ms
* until we have got the first reply from NDB providing * until we have got the first reply from NDB providing
...@@ -421,6 +423,7 @@ ClusterMgr::reportConnected(NodeId nodeId){ ...@@ -421,6 +423,7 @@ ClusterMgr::reportConnected(NodeId nodeId){
theNode.nfCompleteRep = true; theNode.nfCompleteRep = true;
theFacade.ReportNodeAlive(nodeId); theFacade.ReportNodeAlive(nodeId);
DBUG_VOID_RETURN;
} }
void void
......
...@@ -1521,6 +1521,46 @@ NdbEventBuffer::complete_outof_order_gcis() ...@@ -1521,6 +1521,46 @@ NdbEventBuffer::complete_outof_order_gcis()
ndbout_c("complete_outof_order_gcis: m_latestGCI: %lld", m_latestGCI); ndbout_c("complete_outof_order_gcis: m_latestGCI: %lld", m_latestGCI);
} }
void
NdbEventBuffer::report_node_connected(Uint32 node_id)
{
NdbEventOperation* op= m_ndb->getEventOperation(0);
if (op == 0)
return;
DBUG_ENTER("NdbEventBuffer::report_node_connected");
SubTableData data;
LinearSectionPtr ptr[3];
bzero(&data, sizeof(data));
bzero(ptr, sizeof(ptr));
data.tableId = ~0;
data.operation = NdbDictionary::Event::_TE_ACTIVE;
data.req_nodeid = (Uint8)node_id;
data.ndbd_nodeid = (Uint8)node_id;
data.logType = SubTableData::LOG;
data.gci = m_latestGCI + 1;
/**
* Insert this event for each operation
*/
{
// no need to lock()/unlock(), receive thread calls this
NdbEventOperationImpl* impl = &op->m_impl;
do if (!impl->m_node_bit_mask.isclear())
{
data.senderData = impl->m_oid;
insertDataL(impl, &data, ptr);
} while((impl = impl->m_next));
for (impl = m_dropped_ev_op; impl; impl = impl->m_next)
if (!impl->m_node_bit_mask.isclear())
{
data.senderData = impl->m_oid;
insertDataL(impl, &data, ptr);
}
}
DBUG_VOID_RETURN;
}
void void
NdbEventBuffer::report_node_failure(Uint32 node_id) NdbEventBuffer::report_node_failure(Uint32 node_id)
{ {
......
...@@ -422,6 +422,7 @@ public: ...@@ -422,6 +422,7 @@ public:
void execSUB_GCP_COMPLETE_REP(const SubGcpCompleteRep * const rep); void execSUB_GCP_COMPLETE_REP(const SubGcpCompleteRep * const rep);
void complete_outof_order_gcis(); void complete_outof_order_gcis();
void report_node_connected(Uint32 node_id);
void report_node_failure(Uint32 node_id); void report_node_failure(Uint32 node_id);
void completeClusterFailed(); void completeClusterFailed();
......
...@@ -177,6 +177,7 @@ Ndb::executeMessage(void* NdbObject, ...@@ -177,6 +177,7 @@ Ndb::executeMessage(void* NdbObject,
void Ndb::connected(Uint32 ref) void Ndb::connected(Uint32 ref)
{ {
// cluster connect, a_node == own reference
theMyRef= ref; theMyRef= ref;
Uint32 tmpTheNode= refToNode(ref); Uint32 tmpTheNode= refToNode(ref);
Uint64 tBlockNo= refToBlock(ref); Uint64 tBlockNo= refToBlock(ref);
...@@ -209,16 +210,30 @@ void Ndb::connected(Uint32 ref) ...@@ -209,16 +210,30 @@ void Ndb::connected(Uint32 ref)
theNode= tmpTheNode; // flag that Ndb object is initialized theNode= tmpTheNode; // flag that Ndb object is initialized
} }
void Ndb::report_node_connected(Uint32 nodeId)
{
if (theEventBuffer)
{
// node connected
// eventOperations in the ndb object should be notified
theEventBuffer->report_node_connected(nodeId);
}
}
void void
Ndb::statusMessage(void* NdbObject, Uint32 a_node, bool alive, bool nfComplete) Ndb::statusMessage(void* NdbObject, Uint32 a_node, bool alive, bool nfComplete)
{ {
DBUG_ENTER("Ndb::statusMessage"); DBUG_ENTER("Ndb::statusMessage");
DBUG_PRINT("info", ("a_node: %u alive: %u nfComplete: %u",
a_node, alive, nfComplete));
Ndb* tNdb = (Ndb*)NdbObject; Ndb* tNdb = (Ndb*)NdbObject;
if (alive) { if (alive) {
if (nfComplete) { if (nfComplete) {
// cluster connect, a_node == own reference
tNdb->connected(a_node); tNdb->connected(a_node);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
}//if }//if
tNdb->report_node_connected(a_node);
} else { } else {
if (nfComplete) { if (nfComplete) {
tNdb->report_node_failure_completed(a_node); tNdb->report_node_failure_completed(a_node);
......
...@@ -794,6 +794,8 @@ TransporterFacade::connected() ...@@ -794,6 +794,8 @@ TransporterFacade::connected()
void void
TransporterFacade::ReportNodeDead(NodeId tNodeId) TransporterFacade::ReportNodeDead(NodeId tNodeId)
{ {
DBUG_ENTER("TransporterFacade::ReportNodeDead");
DBUG_PRINT("enter",("nodeid= %d", tNodeId));
/** /**
* When a node fails we must report this to each Ndb object. * When a node fails we must report this to each Ndb object.
* The function that is used for communicating node failures is called. * The function that is used for communicating node failures is called.
...@@ -810,6 +812,7 @@ TransporterFacade::ReportNodeDead(NodeId tNodeId) ...@@ -810,6 +812,7 @@ TransporterFacade::ReportNodeDead(NodeId tNodeId)
(*RegPC) (obj, tNodeId, false, false); (*RegPC) (obj, tNodeId, false, false);
} }
} }
DBUG_VOID_RETURN;
} }
void void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment