int Ndb_cluster_connection::connect(int no_retries, int retry_delay_in_seconds, int verbose) { struct ndb_mgm_reply mgm_reply; DBUG_ENTER("Ndb_cluster_connection::connect"); do { if (m_impl.m_config_retriever == 0) DBUG_RETURN(-1); if (m_impl.m_config_retriever->do_connect(no_retries, retry_delay_in_seconds, verbose)) DBUG_RETURN(1); // mgmt server not up yet Uint32 nodeId = m_impl.m_config_retriever->allocNodeId(4/*retries*/, 3/*delay*/); if(nodeId == 0) break; ndb_mgm_configuration * props = m_impl.m_config_retriever->getConfig(); if(props == 0) break; m_impl.m_transporter_facade->start_instance(nodeId, props); if (m_impl.init_nodes_vector(nodeId, *props)) { ndbout_c("Ndb_cluster_connection::connect: malloc failure"); DBUG_RETURN(-1); } for(unsigned i=0; i<m_impl.m_transporter_facade->get_registry()->m_transporter_interface.size(); i++) ndb_mgm_set_connection_int_parameter(m_impl.m_config_retriever->get_mgmHandle(), nodeId, m_impl.m_transporter_facade->get_registry() ->m_transporter_interface[i] .m_remote_nodeId, CFG_CONNECTION_SERVER_PORT, m_impl.m_transporter_facade->get_registry() ->m_transporter_interface[i] .m_s_service_port, &mgm_reply); ndb_mgm_destroy_configuration(props); m_impl.m_transporter_facade->connected(); DBUG_RETURN(0); } while(0); ndbout << "Configuration error: "; const char* erString = m_impl.m_config_retriever->getErrorString(); if (erString == 0) { erString = "No error specified!"; } ndbout << erString << endl; DBUG_RETURN(-1); }
int Ndb_cluster_connection_impl::connect(int no_retries, int retry_delay_in_seconds, int verbose) { DBUG_ENTER("Ndb_cluster_connection::connect"); do { if (m_config_retriever == 0) { if (!m_latest_error) { m_latest_error = 1; m_latest_error_msg.assign("Ndb_cluster_connection init " "error: m_config_retriever==0"); } DBUG_PRINT("exit", ("no m_config_retriever, ret: -1")); DBUG_RETURN(-1); } // the allocNodeId function will connect if not connected int alloc_error; Uint32 nodeId = m_config_retriever->allocNodeId(no_retries, retry_delay_in_seconds, verbose, alloc_error); if (!nodeId) { // Failed to allocate nodeid from mgmt server, find out // the cause and set proper error message if (!m_config_retriever->is_connected()) { // Could not connect to mgmt server m_latest_error = alloc_error; m_latest_error_msg.assfmt("%s", m_config_retriever->getErrorString()); DBUG_RETURN(1); // Recoverable error } if (alloc_error == NDB_MGM_ALLOCID_ERROR) { // A nodeid for this node was found in config, but it was not // free right now. Retry later and it might be free. m_latest_error = alloc_error; m_latest_error_msg.assfmt("%s", m_config_retriever->getErrorString()); DBUG_RETURN(1); // Recoverable error } // Fatal error, use default error break; } ndb_mgm_configuration * props = m_config_retriever->getConfig(nodeId); if(props == 0) break; if (configure(nodeId, *props)) { ndb_mgm_destroy_configuration(props); DBUG_PRINT("exit", ("malloc failure, ret: -1")); DBUG_RETURN(-1); } if (m_transporter_facade->start_instance(nodeId, props) < 0) { ndb_mgm_destroy_configuration(props); DBUG_RETURN(-1); } ndb_mgm_destroy_configuration(props); m_transporter_facade->connected(); m_latest_error = 0; m_latest_error_msg.assign(""); DBUG_PRINT("exit", ("connect ok, ret: 0")); DBUG_RETURN(0); } while(0); const char* erString = m_config_retriever->getErrorString(); if (erString == 0) { erString = "No error specified!"; } m_latest_error = 1; m_latest_error_msg.assfmt("Configuration error: %s", erString); ndbout << get_latest_error_msg() << endl; DBUG_PRINT("exit", ("connect failed, '%s' ret: -1", erString)); DBUG_RETURN(-1); }