mirror of
https://github.com/MariaDB/server.git
synced 2025-08-29 00:08:14 +03:00
Finish WL2278 Impl 3 - Dynamic port allocation of cluster nodes.
ndb/include/util/SocketClient.hpp: Add SocketClient::set_port(unsigned short port) - Sets both m_port and m_servaddr.sin_port ndb/src/common/transporter/Transporter.hpp: Fix set_r_port to call m_socket_client->set_port(port) (if there's a socket client). ndb/src/common/transporter/TransporterRegistry.cpp: Handle non-TCP Transporter nodes correctly ndb/src/mgmsrv/main.cpp: Better document and error check connecting back to our own ndb_mgmd
This commit is contained in:
@@ -31,6 +31,10 @@ public:
|
|||||||
SocketClient(const char *server_name, unsigned short port, SocketAuthenticator *sa = 0);
|
SocketClient(const char *server_name, unsigned short port, SocketAuthenticator *sa = 0);
|
||||||
~SocketClient();
|
~SocketClient();
|
||||||
bool init();
|
bool init();
|
||||||
|
void set_port(unsigned short port) {
|
||||||
|
m_port = port;
|
||||||
|
m_servaddr.sin_port = htons(m_port);
|
||||||
|
};
|
||||||
NDB_SOCKET_TYPE connect();
|
NDB_SOCKET_TYPE connect();
|
||||||
bool close();
|
bool close();
|
||||||
};
|
};
|
||||||
|
@@ -77,7 +77,11 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Set r_port to connect to
|
* Set r_port to connect to
|
||||||
*/
|
*/
|
||||||
void set_r_port(unsigned int port) { m_r_port = port; };
|
void set_r_port(unsigned int port) {
|
||||||
|
m_r_port = port;
|
||||||
|
if(m_socket_client)
|
||||||
|
m_socket_client->set_port(port);
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Transporter(TransporterRegistry &,
|
Transporter(TransporterRegistry &,
|
||||||
|
@@ -1189,8 +1189,7 @@ TransporterRegistry::start_clients_thread()
|
|||||||
const NodeId nodeId = t->getRemoteNodeId();
|
const NodeId nodeId = t->getRemoteNodeId();
|
||||||
switch(performStates[nodeId]){
|
switch(performStates[nodeId]){
|
||||||
case CONNECTING:
|
case CONNECTING:
|
||||||
if(!t->isConnected() && !t->isServer
|
if(!t->isConnected() && !t->isServer) {
|
||||||
&& theTransporterTypes[nodeId] == tt_TCP_TRANSPORTER) {
|
|
||||||
if(t->get_r_port() <= 0) { // Port is dynamic
|
if(t->get_r_port() <= 0) { // Port is dynamic
|
||||||
Uint32 server_port= 0;
|
Uint32 server_port= 0;
|
||||||
struct ndb_mgm_reply mgm_reply;
|
struct ndb_mgm_reply mgm_reply;
|
||||||
@@ -1211,7 +1210,7 @@ TransporterRegistry::start_clients_thread()
|
|||||||
ndbout_c("Failed to get dynamic port to connect to: %d", res);
|
ndbout_c("Failed to get dynamic port to connect to: %d", res);
|
||||||
}
|
}
|
||||||
if(theTransporterTypes[nodeId] != tt_TCP_TRANSPORTER
|
if(theTransporterTypes[nodeId] != tt_TCP_TRANSPORTER
|
||||||
|| t->get_r_port() > 0)
|
|| t->get_r_port() > 0)
|
||||||
t->connect_client();
|
t->connect_client();
|
||||||
else
|
else
|
||||||
NdbSleep_MilliSleep(400);
|
NdbSleep_MilliSleep(400);
|
||||||
|
@@ -246,6 +246,7 @@ int main(int argc, char** argv)
|
|||||||
goto error_end;
|
goto error_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Construct a fake connectstring to connect back to ourselves */
|
||||||
char connect_str[20];
|
char connect_str[20];
|
||||||
if(!opt_connect_str) {
|
if(!opt_connect_str) {
|
||||||
snprintf(connect_str,20,"localhost:%u",glob.mgmObject->getPort());
|
snprintf(connect_str,20,"localhost:%u",glob.mgmObject->getPort());
|
||||||
@@ -263,7 +264,15 @@ int main(int argc, char** argv)
|
|||||||
* Connect back to ourselves so we can use mgmapi to fetch
|
* Connect back to ourselves so we can use mgmapi to fetch
|
||||||
* config info
|
* config info
|
||||||
*/
|
*/
|
||||||
DBUG_PRINT("info",("CONNECT RESULT: %d",glob.mgmObject->get_config_retriever()->do_connect(0,0,0)));
|
int mgm_connect_result;
|
||||||
|
mgm_connect_result = glob.mgmObject->get_config_retriever()->
|
||||||
|
do_connect(0,0,0);
|
||||||
|
|
||||||
|
if(mgm_connect_result<0) {
|
||||||
|
ndbout_c("Unable to connect to our own ndb_mgmd (Error %d)",
|
||||||
|
mgm_connect_result);
|
||||||
|
ndbout_c("This is probably a bug.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (glob.daemon) {
|
if (glob.daemon) {
|
||||||
|
Reference in New Issue
Block a user