[PATCH] WL#3704 mgmapi timeouts: update NDBAPI usage of mgmapi for timeouts

Default timout of 30secs for ConfigRetriever

Default timout of 5sec for use by Transporter (ports etc).

And Ndb_cluster_connection::set_timeout() api for setting timeout from
NDBAPI applications. Should be called before connect. e.g.

c.set_timeout(4200);
c.connect();

Index: ndb-work/storage/ndb/include/mgmcommon/ConfigRetriever.hpp
===================================================================
parent 420e9ed8
...@@ -28,7 +28,8 @@ class ConfigRetriever { ...@@ -28,7 +28,8 @@ class ConfigRetriever {
public: public:
ConfigRetriever(const char * _connect_string, ConfigRetriever(const char * _connect_string,
Uint32 version, Uint32 nodeType, Uint32 version, Uint32 nodeType,
const char * _bind_address = 0); const char * _bind_address = 0,
int timeout_ms = 30000);
~ConfigRetriever(); ~ConfigRetriever();
int do_connect(int no_retries, int retry_delay_in_seconds, int verbose); int do_connect(int no_retries, int retry_delay_in_seconds, int verbose);
......
...@@ -61,6 +61,24 @@ public: ...@@ -61,6 +61,24 @@ public:
*/ */
void set_name(const char *name); void set_name(const char *name);
/**
* Set timeout
*
* Used as a timeout when talking to the management server,
* helps limit the amount of time that we may block when connecting
*
* Basically just calls ndb_mgm_set_timeout(h,ms).
*
* The default is 30 seconds.
*
* @param timeout_ms millisecond timeout. As with ndb_mgm_set_timeout,
* only increments of 1000 are really supported,
* with not to much gaurentees about calls completing
* in any hard amount of time.
* @return 0 on success
*/
int set_timeout(int timeout_ms);
/** /**
* Connect to a cluster management server * Connect to a cluster management server
* *
......
...@@ -45,7 +45,8 @@ ...@@ -45,7 +45,8 @@
ConfigRetriever::ConfigRetriever(const char * _connect_string, ConfigRetriever::ConfigRetriever(const char * _connect_string,
Uint32 version, Uint32 node_type, Uint32 version, Uint32 node_type,
const char * _bindaddress) const char * _bindaddress,
int timeout_ms)
{ {
DBUG_ENTER("ConfigRetriever::ConfigRetriever"); DBUG_ENTER("ConfigRetriever::ConfigRetriever");
...@@ -61,6 +62,8 @@ ConfigRetriever::ConfigRetriever(const char * _connect_string, ...@@ -61,6 +62,8 @@ ConfigRetriever::ConfigRetriever(const char * _connect_string,
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
ndb_mgm_set_timeout(m_handle, timeout_ms);
if (ndb_mgm_set_connectstring(m_handle, _connect_string)) if (ndb_mgm_set_connectstring(m_handle, _connect_string))
{ {
BaseString tmp(ndb_mgm_get_latest_error_msg(m_handle)); BaseString tmp(ndb_mgm_get_latest_error_msg(m_handle));
......
...@@ -119,6 +119,7 @@ void TransporterRegistry::set_mgm_handle(NdbMgmHandle h) ...@@ -119,6 +119,7 @@ void TransporterRegistry::set_mgm_handle(NdbMgmHandle h)
if (m_mgm_handle) if (m_mgm_handle)
ndb_mgm_destroy_handle(&m_mgm_handle); ndb_mgm_destroy_handle(&m_mgm_handle);
m_mgm_handle= h; m_mgm_handle= h;
ndb_mgm_set_timeout(m_mgm_handle, 5000);
#ifndef DBUG_OFF #ifndef DBUG_OFF
if (h) if (h)
{ {
......
...@@ -666,5 +666,12 @@ Ndb_cluster_connection::get_active_ndb_objects() const ...@@ -666,5 +666,12 @@ Ndb_cluster_connection::get_active_ndb_objects() const
{ {
return m_impl.m_transporter_facade->get_active_ndb_objects(); return m_impl.m_transporter_facade->get_active_ndb_objects();
} }
int Ndb_cluster_connection::set_timeout(int timeout_ms)
{
return ndb_mgm_set_timeout(m_impl.m_config_retriever->get_mgmHandle(),
timeout_ms);
}
template class Vector<Ndb_cluster_connection_impl::Node>; template class Vector<Ndb_cluster_connection_impl::Node>;
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