summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README65
-rw-r--r--include/my_global.h3
-rw-r--r--include/violite.h4
-rw-r--r--ndb/src/mgmsrv/MgmtSrvr.cpp5
-rw-r--r--ndb/src/ndbapi/SignalSender.cpp10
-rw-r--r--sql-common/client.c2
-rw-r--r--sql/net_serv.cc2
-rw-r--r--vio/vio.c4
-rw-r--r--vio/vio_priv.h2
-rw-r--r--vio/viosocket.c9
-rw-r--r--vio/viossl.c9
11 files changed, 67 insertions, 48 deletions
diff --git a/README b/README
index 29851358765..88cdaaf67d4 100644
--- a/README
+++ b/README
@@ -1,52 +1,35 @@
-This is a release of MySQL, a GPL (free) SQL database server (more
-licence information in the PUBLIC file and in the reference manual).
+This is a release of MySQL, a dual-license SQL database server.
+MySQL is brought to you by the MySQL team at MySQL AB.
-Please read the "Upgrading from..." section in the manual first, if you are
-migrating from older versions of MySQL!
+License information can be found in these files:
+- For GPL (free) distributions, see the COPYING file.
+- For commercial distributions, see the MySQLEULA.txt file.
-The latest information about MySQL can be found at:
-http://www.mysql.com
-To see what it can do take a look at the features section in the
-manual.
+For further information about MySQL or additional documentation, see:
+- The latest information about MySQL: http://www.mysql.com
+- The current MySQL documentation: http:/dev.mysql.com/doc
-For installation instructions see the Installation chapter in the
-manual.
+Some manual sections of special interest:
-For future plans see the TODO appendix in the manual.
+- If you are migrating from an older version of MySQL, please read the
+ "Upgrading from..." section first!
+- To see what MySQL can do, take a look at the features section.
+- For installation instructions, see the Installation chapter.
+- For future plans, see the TODO appendix.
+- For the new features/bugfix history, see the News appendix.
+- For the currently known bugs/misfeatures (known errors) see the problems
+ appendix.
+- For a list of developers and other contributors, see the Credits
+ appendix.
-New features/bug fixes history is in the news appendix in the manual.
-
-For the currently known bugs/misfeatures (known errors) see the bugs
-appendix in the manual.
-
-For examples of SQL and benchmarking information see the bench
-directory.
-
-The manual mentioned above can be found in the Docs directory. The
-manual is available in the following formats: as plain ASCII text in
-Docs/manual.txt, in HTML format in Docs/manual_toc.html, as GNU Info in
-Docs/mysql.info and as PostScript in Docs/manual.ps.
-
-MySQL is brought to you by the MySQL team at MySQL AB
-
-For a list of developers and other contributors, see the Credits appendix
-in the manual.
+A local copy of the MySQL Reference Manual can be found in the Docs
+directory in GNU Info format. You can also browse the manual online or
+download it in any of several formats at the URL given earlier in this
+file.
************************************************************
IMPORTANT:
-Send bug (error) reports, questions and comments to the mailing list
-at mysql@lists.mysql.com
-
-Please use the 'mysqlbug' script when posting bug reports or questions
-about MySQL. mysqlbug will gather some information about your system
-and start your editor with a form in which you can describe your
-problem. Bug reports might be silently ignored by the MySQL
-maintainers if there is not a good reason included in the report as to
-why mysqlbug has not been used. A report that says 'MySQL does not
-work for me. Why?' is not considered a valid bug report.
-
-The mysqlbug script can be found in the 'scripts' directory of the
-distribution, that is '<where-you-installed-mysql>/scripts'.
+Bug or error reports should be sent to http://bugs.mysql.com.
diff --git a/include/my_global.h b/include/my_global.h
index f3d42106458..0f99aacd079 100644
--- a/include/my_global.h
+++ b/include/my_global.h
@@ -801,6 +801,7 @@ typedef off_t os_off_t;
#define socket_errno WSAGetLastError()
#define SOCKET_EINTR WSAEINTR
#define SOCKET_EAGAIN WSAEINPROGRESS
+#define SOCKET_ETIMEDOUT WSAETIMEDOUT
#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK
#define SOCKET_ENFILE ENFILE
#define SOCKET_EMFILE EMFILE
@@ -808,6 +809,7 @@ typedef off_t os_off_t;
#define socket_errno sock_errno()
#define SOCKET_EINTR SOCEINTR
#define SOCKET_EAGAIN SOCEINPROGRESS
+#define SOCKET_ETIMEDOUT SOCKET_EINTR
#define SOCKET_EWOULDBLOCK SOCEWOULDBLOCK
#define SOCKET_ENFILE SOCENFILE
#define SOCKET_EMFILE SOCEMFILE
@@ -817,6 +819,7 @@ typedef off_t os_off_t;
#define closesocket(A) close(A)
#define SOCKET_EINTR EINTR
#define SOCKET_EAGAIN EAGAIN
+#define SOCKET_ETIMEDOUT SOCKET_EINTR
#define SOCKET_EWOULDBLOCK EWOULDBLOCK
#define SOCKET_ENFILE ENFILE
#define SOCKET_EMFILE EMFILE
diff --git a/include/violite.h b/include/violite.h
index 4b644051dd2..fbc6a546cc5 100644
--- a/include/violite.h
+++ b/include/violite.h
@@ -68,6 +68,8 @@ int vio_fastsend(Vio *vio);
int vio_keepalive(Vio *vio, my_bool onoff);
/* Whenever we should retry the last read/write operation. */
my_bool vio_should_retry(Vio *vio);
+/* Check that operation was timed out */
+my_bool vio_was_interrupted(Vio *vio);
/* Short text description of the socket for those, who are curious.. */
const char* vio_description(Vio *vio);
/* Return the type of the connection */
@@ -146,6 +148,7 @@ int vio_close_shared_memory(Vio * vio);
#define vio_fastsend(vio) (vio)->fastsend(vio)
#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive)
#define vio_should_retry(vio) (vio)->should_retry(vio)
+#define vio_was_interrupted(vio) (vio)->was_interrupted(vio)
#define vio_close(vio) ((vio)->vioclose)(vio)
#define vio_peer_addr(vio, buf, prt) (vio)->peer_addr(vio, buf, prt)
#define vio_in_addr(vio, in) (vio)->in_addr(vio, in)
@@ -188,6 +191,7 @@ struct st_vio
my_bool (*peer_addr)(Vio*, char *, uint16*);
void (*in_addr)(Vio*, struct in_addr*);
my_bool (*should_retry)(Vio*);
+ my_bool (*was_interrupted)(Vio*);
int (*vioclose)(Vio*);
void (*timeout)(Vio*, unsigned int which, unsigned int timeout);
void *ssl_arg;
diff --git a/ndb/src/mgmsrv/MgmtSrvr.cpp b/ndb/src/mgmsrv/MgmtSrvr.cpp
index 011643237f8..56c24e5f862 100644
--- a/ndb/src/mgmsrv/MgmtSrvr.cpp
+++ b/ndb/src/mgmsrv/MgmtSrvr.cpp
@@ -2501,10 +2501,7 @@ MgmtSrvr::startBackup(Uint32& backupId, int waitCompleted)
case GSN_NODE_FAILREP:{
const NodeFailRep * const rep =
CAST_CONSTPTR(NodeFailRep, signal->getDataPtr());
-#ifdef VM_TRACE
- ndbout_c("Node %d failed", rep->failNo);
-#endif
- if (rep->failNo == nodeId ||
+ if (NodeBitmask::get(rep->theNodes,nodeId) ||
waitCompleted == 1)
return 1326;
// wait for next signal
diff --git a/ndb/src/ndbapi/SignalSender.cpp b/ndb/src/ndbapi/SignalSender.cpp
index a1c80f22041..327f34f178a 100644
--- a/ndb/src/ndbapi/SignalSender.cpp
+++ b/ndb/src/ndbapi/SignalSender.cpp
@@ -250,14 +250,22 @@ SignalSender::execNodeStatus(void* signalSender,
// node shutdown complete
s->header.theVerId_signalNumber = GSN_NF_COMPLETEREP;
NFCompleteRep *rep = (NFCompleteRep *)s->getDataPtrSend();
+ rep->blockNo = 0;
+ rep->nodeId = 0;
rep->failedNodeId = nodeId;
+ rep->unused = 0;
+ rep->from = 0;
}
else
{
// node failure
s->header.theVerId_signalNumber = GSN_NODE_FAILREP;
NodeFailRep *rep = (NodeFailRep *)s->getDataPtrSend();
- rep->failNo = nodeId;
+ rep->failNo = 0;
+ rep->masterNodeId = 0;
+ rep->noOfNodes = 1;
+ NodeBitmask::clear(rep->theNodes);
+ NodeBitmask::set(rep->theNodes,nodeId);
}
ss->m_jobBuffer.push_back(s);
diff --git a/sql-common/client.c b/sql-common/client.c
index 73e136f7366..3979b9304f7 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -602,7 +602,7 @@ net_safe_read(MYSQL *mysql)
DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d",
vio_description(net->vio),len));
#ifdef MYSQL_SERVER
- if (vio_errno(net->vio) == SOCKET_EINTR)
+ if (vio_was_interrupted(net->vio))
return (packet_error);
#endif /*MYSQL_SERVER*/
end_server(mysql);
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index 9d84d0b2427..93fa7ac938c 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -759,7 +759,7 @@ my_real_read(NET *net, ulong *complen)
net->error= 2; /* Close socket */
net->report_error= 1;
#ifdef MYSQL_SERVER
- net->last_errno= (interrupted ? ER_NET_READ_INTERRUPTED :
+ net->last_errno= (vio_was_interrupted(net->vio) ? ER_NET_READ_INTERRUPTED :
ER_NET_READ_ERROR);
#endif
goto end;
diff --git a/vio/vio.c b/vio/vio.c
index 4660efe3048..45572b93ed6 100644
--- a/vio/vio.c
+++ b/vio/vio.c
@@ -50,6 +50,7 @@ void vio_reset(Vio* vio, enum enum_vio_type type,
vio->fastsend =vio_fastsend;
vio->viokeepalive =vio_keepalive;
vio->should_retry =vio_should_retry;
+ vio->was_interrupted=vio_was_interrupted;
vio->vioclose =vio_close_pipe;
vio->peer_addr =vio_peer_addr;
vio->in_addr =vio_in_addr;
@@ -69,6 +70,7 @@ void vio_reset(Vio* vio, enum enum_vio_type type,
vio->fastsend =vio_fastsend;
vio->viokeepalive =vio_keepalive;
vio->should_retry =vio_should_retry;
+ vio->was_interrupted=vio_was_interrupted;
vio->vioclose =vio_close_shared_memory;
vio->peer_addr =vio_peer_addr;
vio->in_addr =vio_in_addr;
@@ -88,6 +90,7 @@ void vio_reset(Vio* vio, enum enum_vio_type type,
vio->fastsend =vio_ssl_fastsend;
vio->viokeepalive =vio_ssl_keepalive;
vio->should_retry =vio_ssl_should_retry;
+ vio->was_interrupted=vio_ssl_was_interrupted;
vio->vioclose =vio_ssl_close;
vio->peer_addr =vio_ssl_peer_addr;
vio->in_addr =vio_ssl_in_addr;
@@ -105,6 +108,7 @@ void vio_reset(Vio* vio, enum enum_vio_type type,
vio->fastsend =vio_fastsend;
vio->viokeepalive =vio_keepalive;
vio->should_retry =vio_should_retry;
+ vio->was_interrupted=vio_was_interrupted;
vio->vioclose =vio_close;
vio->peer_addr =vio_peer_addr;
vio->in_addr =vio_in_addr;
diff --git a/vio/vio_priv.h b/vio/vio_priv.h
index 3a75a08021d..c1c78cc6efa 100644
--- a/vio/vio_priv.h
+++ b/vio/vio_priv.h
@@ -39,6 +39,8 @@ int vio_ssl_fastsend(Vio *vio);
int vio_ssl_keepalive(Vio *vio, my_bool onoff);
/* Whenever we should retry the last read/write operation. */
my_bool vio_ssl_should_retry(Vio *vio);
+/* Check that operation was timed out */
+my_bool vio_ssl_was_interrupted(Vio *vio);
/* When the workday is over... */
int vio_ssl_close(Vio *vio);
/* Return last error number */
diff --git a/vio/viosocket.c b/vio/viosocket.c
index c7561890ead..0f1abfeea46 100644
--- a/vio/viosocket.c
+++ b/vio/viosocket.c
@@ -196,6 +196,15 @@ vio_should_retry(Vio * vio __attribute__((unused)))
}
+my_bool
+vio_was_interrupted(Vio *vio __attribute__((unused)))
+{
+ int en= socket_errno;
+ return (en == SOCKET_EAGAIN || en == SOCKET_EINTR ||
+ en == SOCKET_EWOULDBLOCK || en == SOCKET_ETIMEDOUT);
+}
+
+
int vio_close(Vio * vio)
{
int r=0;
diff --git a/vio/viossl.c b/vio/viossl.c
index 2f608209a53..a3a2e7190bd 100644
--- a/vio/viossl.c
+++ b/vio/viossl.c
@@ -184,6 +184,15 @@ vio_ssl_should_retry(Vio * vio __attribute__((unused)))
}
+my_bool
+vio_ssl_was_interrupted(Vio *vio __attribute__((unused)))
+{
+ int en= socket_errno;
+ return (en == SOCKET_EAGAIN || en == SOCKET_EINTR ||
+ en == SOCKET_EWOULDBLOCK || en == SOCKET_ETIMEDOUT);
+}
+
+
int vio_ssl_close(Vio * vio)
{
int r;