Commit aa8b15b7 authored by unknown's avatar unknown
Browse files

[PATCH] WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request

use portable method, getting milliseconds between calls - Linux would
let us do funky stuff by getting the timeout from select(2). Everywhere
else sucks and doesn't let us do that :(

Index: ndb-work/storage/ndb/include/util/InputStream.hpp
===================================================================


storage/ndb/include/util/InputStream.hpp:
  WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/include/util/OutputStream.hpp:
  WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/include/util/socket_io.h:
  WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/src/common/util/InputStream.cpp:
  WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/src/common/util/OutputStream.cpp:
  WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/src/common/util/socket_io.cpp:
  WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
storage/ndb/src/mgmsrv/Services.cpp:
  WL#3704 mgmapi timeouts: Change to have total timeout for call, not per request
parent c59722ad
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ extern FileInputStream Stdin;
class SocketInputStream : public InputStream {
  NDB_SOCKET_TYPE m_socket;
  unsigned m_timeout_ms;
  unsigned m_timeout_remain;
  bool m_startover;
  bool m_timedout;
public:
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ class SocketOutputStream : public OutputStream {
  NDB_SOCKET_TYPE m_socket;
  unsigned m_timeout_ms;
  bool m_timedout;
  unsigned m_timeout_remain;
public:
  SocketOutputStream(NDB_SOCKET_TYPE socket, unsigned write_timeout_ms = 1000);
  virtual ~SocketOutputStream() {}
+12 −7
Original line number Diff line number Diff line
@@ -28,15 +28,20 @@ extern "C" {

  int read_socket(NDB_SOCKET_TYPE, int timeout_ms, char *, int len);

  int readln_socket(NDB_SOCKET_TYPE socket, int timeout_millis,
  int readln_socket(NDB_SOCKET_TYPE socket, int timeout_millis, int *time,
                    char * buf, int buflen, NdbMutex *mutex);

  int write_socket(NDB_SOCKET_TYPE, int timeout_ms, const char[], int len);

  int print_socket(NDB_SOCKET_TYPE, int timeout_ms, const char *, ...); 
  int println_socket(NDB_SOCKET_TYPE, int timeout_ms, const char *, ...); 
  int vprint_socket(NDB_SOCKET_TYPE, int timeout_ms, const char *, va_list); 
  int vprintln_socket(NDB_SOCKET_TYPE, int timeout_ms, const char *, va_list); 
  int write_socket(NDB_SOCKET_TYPE, int timeout_ms, int *time,
                   const char[], int len);

  int print_socket(NDB_SOCKET_TYPE, int timeout_ms, int *time,
                   const char *, ...);
  int println_socket(NDB_SOCKET_TYPE, int timeout_ms, int *time,
                     const char *, ...);
  int vprint_socket(NDB_SOCKET_TYPE, int timeout_ms, int *time,
                    const char *, va_list);
  int vprintln_socket(NDB_SOCKET_TYPE, int timeout_ms, int *time,
                      const char *, va_list);

#ifdef  __cplusplus
}
+8 −3
Original line number Diff line number Diff line
@@ -37,7 +37,8 @@ SocketInputStream::SocketInputStream(NDB_SOCKET_TYPE socket,
				     unsigned read_timeout_ms)
  : m_socket(socket) {
  m_startover= true;
  m_timeout_ms = read_timeout_ms;
  m_timeout_remain= m_timeout_ms = read_timeout_ms;

  m_timedout= false;
}

@@ -55,9 +56,13 @@ SocketInputStream::gets(char * buf, int bufLen) {
  else
    offset= strlen(buf);

  int res = readln_socket(m_socket, m_timeout_ms, buf+offset, bufLen-offset, m_mutex);
  int time= 0;
  int res = readln_socket(m_socket, m_timeout_remain, &time,
                          buf+offset, bufLen-offset, m_mutex);

  if(res == 0)
  if(res >= 0)
    m_timeout_remain-=time;
  if(res == 0 || m_timeout_remain<=0)
  {
    m_timedout= true;
    buf[0]=0;
+17 −5
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ FileOutputStream::println(const char * fmt, ...){
SocketOutputStream::SocketOutputStream(NDB_SOCKET_TYPE socket,
				       unsigned write_timeout_ms){
  m_socket = socket;
  m_timeout_ms = write_timeout_ms;
  m_timeout_remain= m_timeout_ms = write_timeout_ms;
  m_timedout= false;
}

@@ -55,12 +55,18 @@ SocketOutputStream::print(const char * fmt, ...){
  if(timedout())
    return -1;

  int time= 0;
  va_start(ap, fmt);
  const int ret = vprint_socket(m_socket, m_timeout_ms, fmt, ap);
  int ret = vprint_socket(m_socket, m_timeout_ms, &time, fmt, ap);
  va_end(ap);

  if (errno==ETIMEDOUT)
  if(ret >= 0)
    m_timeout_remain-=time;
  if(errno==ETIMEDOUT || m_timeout_remain<=0)
  {
    m_timedout= true;
    ret= -1;
  }

  return ret;
}
@@ -71,12 +77,18 @@ SocketOutputStream::println(const char * fmt, ...){
  if(timedout())
    return -1;

  int time= 0;
  va_start(ap, fmt);
  const int ret = vprintln_socket(m_socket, m_timeout_ms, fmt, ap);
  int ret = vprintln_socket(m_socket, m_timeout_ms, &time, fmt, ap);
  va_end(ap);

  if (errno==ETIMEDOUT)
  if(ret >= 0)
    m_timeout_remain-=time;
  if (errno==ETIMEDOUT || m_timeout_remain<=0)
  {
    m_timedout= true;
    ret= -1;
  }

  return ret;
}
Loading