From ca5d46112cbf6e2dd37808f4307b78488c8cfd9a Mon Sep 17 00:00:00 2001
From: unknown <tomas@poseidon.ndb.mysql.com>
Date: Wed, 15 Jun 2005 12:29:55 +0200
Subject: [PATCH] Bug #11221  	Mysqld does not automatically reconnecting to
 cluster with cluster restart

---
 .../transporter/TransporterDefinitions.hpp     |  2 +-
 ndb/src/common/mgmcommon/IPCConfig.cpp         |  6 ++----
 .../common/transporter/TransporterRegistry.cpp | 18 +++++++++++++++---
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/ndb/include/transporter/TransporterDefinitions.hpp b/ndb/include/transporter/TransporterDefinitions.hpp
index 43af6749a85..8fc407b6d9c 100644
--- a/ndb/include/transporter/TransporterDefinitions.hpp
+++ b/ndb/include/transporter/TransporterDefinitions.hpp
@@ -56,7 +56,7 @@ const Uint32 MAX_MESSAGE_SIZE = (12+4+4+(4*25)+(3*4)+4*MAX_SECTION_SIZE);
  * information specific to a transporter type.
  */
 struct TransporterConfiguration {
-  Uint32 port;
+  Int32 s_port; // negative port number implies dynamic port
   const char *remoteHostName;
   const char *localHostName;
   NodeId remoteNodeId;
diff --git a/ndb/src/common/mgmcommon/IPCConfig.cpp b/ndb/src/common/mgmcommon/IPCConfig.cpp
index f45bc6ead54..f935f8ffab4 100644
--- a/ndb/src/common/mgmcommon/IPCConfig.cpp
+++ b/ndb/src/common/mgmcommon/IPCConfig.cpp
@@ -271,14 +271,12 @@ IPCConfig::configureTransporters(Uint32 nodeId,
 
       If we're not using dynamic ports, we don't do anything.
     */
-    if((int)server_port<0)
-      server_port= -server_port;
 
     conf.localNodeId    = nodeId;
     conf.remoteNodeId   = remoteNodeId;
     conf.checksum       = checksum;
     conf.signalId       = sendSignalId;
-    conf.port           = server_port;
+    conf.s_port         = server_port;
     conf.localHostName  = localHostName;
     conf.remoteHostName = remoteHostName;
 
@@ -350,7 +348,7 @@ IPCConfig::configureTransporters(Uint32 nodeId,
       if (!iter.get(CFG_TCP_PROXY, &proxy)) {
 	if (strlen(proxy) > 0 && nodeId2 == nodeId) {
 	  // TODO handle host:port
-	  conf.port = atoi(proxy);
+	  conf.s_port = atoi(proxy);
 	}
       }
       
diff --git a/ndb/src/common/transporter/TransporterRegistry.cpp b/ndb/src/common/transporter/TransporterRegistry.cpp
index 5ffd3ac334e..e636766560b 100644
--- a/ndb/src/common/transporter/TransporterRegistry.cpp
+++ b/ndb/src/common/transporter/TransporterRegistry.cpp
@@ -290,7 +290,7 @@ TransporterRegistry::createTCPTransporter(TransporterConfiguration *config) {
 					    config->tcp.maxReceiveSize,
 					    config->localHostName,
 					    config->remoteHostName,
-					    config->port,
+					    config->s_port,
 					    config->isMgmConnection,
 					    localNodeId,
 					    config->remoteNodeId,
@@ -392,7 +392,7 @@ TransporterRegistry::createSCITransporter(TransporterConfiguration *config) {
   SCI_Transporter * t = new SCI_Transporter(*this,
                                             config->localHostName,
                                             config->remoteHostName,
-                                            config->port,
+                                            config->s_port,
 					    config->isMgmConnection,
                                             config->sci.sendLimit, 
 					    config->sci.bufferSize,
@@ -458,7 +458,7 @@ TransporterRegistry::createSHMTransporter(TransporterConfiguration *config) {
   SHM_Transporter * t = new SHM_Transporter(*this,
 					    config->localHostName,
 					    config->remoteHostName,
-					    config->port,
+					    config->s_port,
 					    config->isMgmConnection,
 					    localNodeId,
 					    config->remoteNodeId,
@@ -1170,7 +1170,10 @@ TransporterRegistry::do_connect(NodeId node_id)
   case DISCONNECTING:
     break;
   }
+  DBUG_ENTER("TransporterRegistry::do_connect");
+  DBUG_PRINT("info",("performStates[%d]=CONNECTING",node_id));
   curr_state= CONNECTING;
+  DBUG_VOID_RETURN;
 }
 void
 TransporterRegistry::do_disconnect(NodeId node_id)
@@ -1186,21 +1189,30 @@ TransporterRegistry::do_disconnect(NodeId node_id)
   case DISCONNECTING:
     return;
   }
+  DBUG_ENTER("TransporterRegistry::do_disconnect");
+  DBUG_PRINT("info",("performStates[%d]=DISCONNECTING",node_id));
   curr_state= DISCONNECTING;
+  DBUG_VOID_RETURN;
 }
 
 void
 TransporterRegistry::report_connect(NodeId node_id)
 {
+  DBUG_ENTER("TransporterRegistry::report_connect");
+  DBUG_PRINT("info",("performStates[%d]=CONNECTED",node_id));
   performStates[node_id] = CONNECTED;
   reportConnect(callbackObj, node_id);
+  DBUG_VOID_RETURN;
 }
 
 void
 TransporterRegistry::report_disconnect(NodeId node_id, int errnum)
 {
+  DBUG_ENTER("TransporterRegistry::report_connect");
+  DBUG_PRINT("info",("performStates[%d]=DISCONNECTED",node_id));
   performStates[node_id] = DISCONNECTED;
   reportDisconnect(callbackObj, node_id, errnum);
+  DBUG_VOID_RETURN;
 }
 
 void
-- 
2.30.9