summaryrefslogtreecommitdiff
path: root/storage/ndb/src/mgmapi
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2006-09-15 11:43:49 +0200
committerunknown <jonas@perch.ndb.mysql.com>2006-09-15 11:43:49 +0200
commitfe4672d7082c8b93db86a65368e58aa754e6bf0c (patch)
tree16617a8068500c1f0e700829f94901889b1c4a76 /storage/ndb/src/mgmapi
parentba6b37a005544016e02a8900ff04aaa069d10bf2 (diff)
parentdc8649badabcf6e871071eedbbdf4375a89e03e3 (diff)
downloadmariadb-git-fe4672d7082c8b93db86a65368e58aa754e6bf0c.tar.gz
Merge perch.ndb.mysql.com:/home/jonas/src/50-work
into perch.ndb.mysql.com:/home/jonas/src/51-work storage/ndb/include/ndb_version.h.in: Auto merged storage/ndb/src/common/util/SocketClient.cpp: Auto merged storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp: Auto merged storage/ndb/include/kernel/GlobalSignalNumbers.h: Auto merged storage/ndb/include/mgmapi/mgmapi.h: Auto merged storage/ndb/include/mgmcommon/ConfigRetriever.hpp: Auto merged storage/ndb/include/util/SocketClient.hpp: Auto merged storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp: Auto merged storage/ndb/src/common/transporter/Transporter.cpp: Auto merged storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp: Auto merged storage/ndb/src/kernel/vm/Configuration.cpp: Auto merged storage/ndb/src/mgmapi/mgmapi.cpp: Auto merged storage/ndb/include/kernel/signaldata/CopyFrag.hpp: merge storage/ndb/src/common/debugger/signaldata/SignalNames.cpp: merge storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp: merge storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: merge storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp: merge
Diffstat (limited to 'storage/ndb/src/mgmapi')
-rw-r--r--storage/ndb/src/mgmapi/mgmapi.cpp74
1 files changed, 68 insertions, 6 deletions
diff --git a/storage/ndb/src/mgmapi/mgmapi.cpp b/storage/ndb/src/mgmapi/mgmapi.cpp
index 620338094fc..9e977b2cc6a 100644
--- a/storage/ndb/src/mgmapi/mgmapi.cpp
+++ b/storage/ndb/src/mgmapi/mgmapi.cpp
@@ -107,6 +107,7 @@ struct ndb_mgm_handle {
int mgmd_version_major;
int mgmd_version_minor;
int mgmd_version_build;
+ char * m_bindaddress;
};
#define SET_ERROR(h, e, s) setError(h, e, __LINE__, s)
@@ -168,6 +169,7 @@ ndb_mgm_create_handle()
h->cfg_i = -1;
h->errstream = stdout;
h->m_name = 0;
+ h->m_bindaddress = 0;
strncpy(h->last_error_desc, "No error", NDB_MGM_MAX_ERR_DESC_SIZE);
@@ -215,6 +217,22 @@ ndb_mgm_set_connectstring(NdbMgmHandle handle, const char * mgmsrv)
DBUG_RETURN(0);
}
+extern "C"
+int
+ndb_mgm_set_bindaddress(NdbMgmHandle handle, const char * arg)
+{
+ DBUG_ENTER("ndb_mgm_set_bindaddress");
+ if (handle->m_bindaddress)
+ free(handle->m_bindaddress);
+
+ if (arg)
+ handle->m_bindaddress = strdup(arg);
+ else
+ handle->m_bindaddress = 0;
+
+ DBUG_RETURN(0);
+}
+
/**
* Destroy a handle
*/
@@ -241,6 +259,8 @@ ndb_mgm_destroy_handle(NdbMgmHandle * handle)
#endif
(*handle)->cfg.~LocalConfig();
my_free((*handle)->m_name, MYF(MY_ALLOW_ZERO_PTR));
+ if ((*handle)->m_bindaddress)
+ free((*handle)->m_bindaddress);
my_free((char*)* handle,MYF(MY_ALLOW_ZERO_PTR));
* handle = 0;
DBUG_VOID_RETURN;
@@ -433,6 +453,7 @@ ndb_mgm_connect(NdbMgmHandle handle, int no_retries,
BaseString::snprintf(logname, 64, "mgmapi.log");
handle->logfile = fopen(logname, "w");
#endif
+ char buf[1024];
/**
* Do connect
@@ -440,6 +461,50 @@ ndb_mgm_connect(NdbMgmHandle handle, int no_retries,
LocalConfig &cfg= handle->cfg;
NDB_SOCKET_TYPE sockfd= NDB_INVALID_SOCKET;
Uint32 i;
+ int binderror = 0;
+ SocketClient s(0, 0);
+ if (!s.init())
+ {
+ fprintf(handle->errstream,
+ "Unable to create socket, "
+ "while trying to connect with connect string: %s\n",
+ cfg.makeConnectString(buf,sizeof(buf)));
+
+ setError(handle, NDB_MGM_COULD_NOT_CONNECT_TO_SOCKET, __LINE__,
+ "Unable to create socket, "
+ "while trying to connect with connect string: %s\n",
+ cfg.makeConnectString(buf,sizeof(buf)));
+ DBUG_RETURN(-1);
+ }
+
+ if (handle->m_bindaddress)
+ {
+ BaseString::snprintf(buf, sizeof(buf), handle->m_bindaddress);
+ unsigned short portno = 0;
+ char * port = strchr(buf, ':');
+ if (port != 0)
+ {
+ portno = atoi(port+1);
+ * port = 0;
+ }
+ int err;
+ if ((err = s.bind(buf, portno)) != 0)
+ {
+ fprintf(handle->errstream,
+ "Unable to bind local address %s errno: %d, "
+ "while trying to connect with connect string: %s\n",
+ handle->m_bindaddress, err,
+ cfg.makeConnectString(buf,sizeof(buf)));
+
+ setError(handle, NDB_MGM_BIND_ADDRESS, __LINE__,
+ "Unable to bind local address %s errno: %d, "
+ "while trying to connect with connect string: %s\n",
+ handle->m_bindaddress, err,
+ cfg.makeConnectString(buf,sizeof(buf)));
+ DBUG_RETURN(-1);
+ }
+ }
+
while (sockfd == NDB_INVALID_SOCKET)
{
// do all the mgmt servers
@@ -447,8 +512,7 @@ ndb_mgm_connect(NdbMgmHandle handle, int no_retries,
{
if (cfg.ids[i].type != MgmId_TCP)
continue;
- SocketClient s(cfg.ids[i].name.c_str(), cfg.ids[i].port);
- sockfd = s.connect();
+ sockfd = s.connect(cfg.ids[i].name.c_str(), cfg.ids[i].port);
if (sockfd != NDB_INVALID_SOCKET)
break;
}
@@ -456,19 +520,17 @@ ndb_mgm_connect(NdbMgmHandle handle, int no_retries,
break;
#ifndef DBUG_OFF
{
- char buf[1024];
DBUG_PRINT("info",("Unable to connect with connect string: %s",
cfg.makeConnectString(buf,sizeof(buf))));
}
#endif
if (verbose > 0) {
- char buf[1024];
- fprintf(handle->errstream, "Unable to connect with connect string: %s\n",
+ fprintf(handle->errstream,
+ "Unable to connect with connect string: %s\n",
cfg.makeConnectString(buf,sizeof(buf)));
verbose= -1;
}
if (no_retries == 0) {
- char buf[1024];
setError(handle, NDB_MGM_COULD_NOT_CONNECT_TO_SOCKET, __LINE__,
"Unable to connect with connect string: %s",
cfg.makeConnectString(buf,sizeof(buf)));