summaryrefslogtreecommitdiff
path: root/storage/ndb
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb')
-rw-r--r--storage/ndb/include/util/InputStream.hpp4
-rw-r--r--storage/ndb/include/util/OutputStream.hpp3
-rw-r--r--storage/ndb/src/common/util/InputStream.cpp6
-rw-r--r--storage/ndb/src/common/util/OutputStream.cpp17
-rw-r--r--storage/ndb/src/mgmsrv/Services.cpp7
-rw-r--r--storage/ndb/test/ndbapi/testMgm.cpp32
6 files changed, 60 insertions, 9 deletions
diff --git a/storage/ndb/include/util/InputStream.hpp b/storage/ndb/include/util/InputStream.hpp
index 928b8ff9aba..4aabf2d1160 100644
--- a/storage/ndb/include/util/InputStream.hpp
+++ b/storage/ndb/include/util/InputStream.hpp
@@ -50,10 +50,14 @@ class SocketInputStream : public InputStream {
NDB_SOCKET_TYPE m_socket;
unsigned m_timeout_ms;
bool m_startover;
+ bool m_timedout;
public:
SocketInputStream(NDB_SOCKET_TYPE socket, unsigned read_timeout_ms = 1000);
virtual ~SocketInputStream() {}
char* gets(char * buf, int bufLen);
+ bool timedout() { return m_timedout; };
+ void reset_timeout() { m_timedout= false; };
+
};
#endif
diff --git a/storage/ndb/include/util/OutputStream.hpp b/storage/ndb/include/util/OutputStream.hpp
index d56d04adc50..072d4288229 100644
--- a/storage/ndb/include/util/OutputStream.hpp
+++ b/storage/ndb/include/util/OutputStream.hpp
@@ -45,9 +45,12 @@ public:
class SocketOutputStream : public OutputStream {
NDB_SOCKET_TYPE m_socket;
unsigned m_timeout_ms;
+ bool m_timedout;
public:
SocketOutputStream(NDB_SOCKET_TYPE socket, unsigned write_timeout_ms = 1000);
virtual ~SocketOutputStream() {}
+ bool timedout() { return m_timedout; };
+ void reset_timeout() { m_timedout= false; };
int print(const char * fmt, ...);
int println(const char * fmt, ...);
diff --git a/storage/ndb/src/common/util/InputStream.cpp b/storage/ndb/src/common/util/InputStream.cpp
index 016985328a1..17703eb7e52 100644
--- a/storage/ndb/src/common/util/InputStream.cpp
+++ b/storage/ndb/src/common/util/InputStream.cpp
@@ -38,10 +38,13 @@ SocketInputStream::SocketInputStream(NDB_SOCKET_TYPE socket,
: m_socket(socket) {
m_startover= true;
m_timeout_ms = read_timeout_ms;
+ m_timedout= false;
}
char*
SocketInputStream::gets(char * buf, int bufLen) {
+ if(timedout())
+ return 0;
assert(bufLen >= 2);
int offset= 0;
if(m_startover)
@@ -63,7 +66,10 @@ SocketInputStream::gets(char * buf, int bufLen) {
m_startover= true;
if(res == -1)
+ {
+ m_timedout= true;
return 0;
+ }
return buf;
}
diff --git a/storage/ndb/src/common/util/OutputStream.cpp b/storage/ndb/src/common/util/OutputStream.cpp
index 99216ba5a28..ebc352b1b50 100644
--- a/storage/ndb/src/common/util/OutputStream.cpp
+++ b/storage/ndb/src/common/util/OutputStream.cpp
@@ -45,21 +45,38 @@ SocketOutputStream::SocketOutputStream(NDB_SOCKET_TYPE socket,
unsigned write_timeout_ms){
m_socket = socket;
m_timeout_ms = write_timeout_ms;
+ m_timedout= false;
}
int
SocketOutputStream::print(const char * fmt, ...){
va_list ap;
+
+ if(timedout())
+ return -1;
+
va_start(ap, fmt);
const int ret = vprint_socket(m_socket, m_timeout_ms, fmt, ap);
va_end(ap);
+
+ if (errno==ETIMEDOUT)
+ m_timedout= true;
+
return ret;
}
int
SocketOutputStream::println(const char * fmt, ...){
va_list ap;
+
+ if(timedout())
+ return -1;
+
va_start(ap, fmt);
const int ret = vprintln_socket(m_socket, m_timeout_ms, fmt, ap);
va_end(ap);
+
+ if (errno==ETIMEDOUT)
+ m_timedout= true;
+
return ret;
}
diff --git a/storage/ndb/src/mgmsrv/Services.cpp b/storage/ndb/src/mgmsrv/Services.cpp
index e55c4ec6349..0bbdf4a9e51 100644
--- a/storage/ndb/src/mgmsrv/Services.cpp
+++ b/storage/ndb/src/mgmsrv/Services.cpp
@@ -1641,7 +1641,12 @@ MgmApiSession::get_mgmd_nodeid(Parser_t::Context &ctx,
Properties const &args)
{
m_output->println("get mgmd nodeid reply");
- m_output->println("nodeid:%u",m_mgmsrv.getOwnNodeId());
+ m_output->println("nodeid:%u",m_mgmsrv.getOwnNodeId());
+ if(ERROR_INSERTED(1))
+ {
+ NdbSleep_SecSleep(10);
+ }
+
m_output->println("");
}
diff --git a/storage/ndb/test/ndbapi/testMgm.cpp b/storage/ndb/test/ndbapi/testMgm.cpp
index 08b9305f13d..35ad6c73ec1 100644
--- a/storage/ndb/test/ndbapi/testMgm.cpp
+++ b/storage/ndb/test/ndbapi/testMgm.cpp
@@ -218,16 +218,12 @@ int runTestApiTimeout1(NDBT_Context* ctx, NDBT_Step* step)
ndb_mgm_set_connectstring(h, mgm);
ndb_mgm_connect(h,0,0,0);
- ndbout << "Connected" << endl;
-
if(ndb_mgm_check_connection(h) < 0)
{
result= NDBT_FAILED;
goto done;
}
- ndbout << "Checked Connection" << endl;
-
ndb_mgm_reply reply;
reply.return_code= 0;
@@ -238,9 +234,7 @@ int runTestApiTimeout1(NDBT_Context* ctx, NDBT_Step* step)
goto done;
}
- ndbout << "Inserted session error" << endl;
-
- ndb_mgm_set_timeout(h,1000,1000);
+ ndb_mgm_set_timeout(h,2500);
cc= ndb_mgm_check_connection(h);
if(cc < 0)
@@ -248,7 +242,29 @@ int runTestApiTimeout1(NDBT_Context* ctx, NDBT_Step* step)
else
result= NDBT_FAILED;
- ndbout << "Tried check connection with result: " << cc << endl;
+ ndbout << "test 2" << endl;
+ ndb_mgm_connect(h,0,0,0);
+
+ cc= ndb_mgm_get_mgmd_nodeid(h);
+ if(cc==0)
+ result= NDBT_OK;
+ else
+ result= NDBT_FAILED;
+
+ if(ndb_mgm_insert_error(h, 3, 0, &reply)< 0)
+ {
+ ndbout << "failed to remove inserted error " << endl;
+ result= NDBT_FAILED;
+ goto done;
+ }
+
+ cc= ndb_mgm_get_mgmd_nodeid(h);
+ ndbout << "got node id: " << cc << endl;
+ if(cc==0)
+ result= NDBT_FAILED;
+ else
+ result= NDBT_OK;
+
done:
ndb_mgm_disconnect(h);
ndb_mgm_destroy_handle(&h);