Merge bk-internal:/home/bk/mysql-4.1
into mysql.com:/home/jimw/my/mysql-4.1-clean
This commit is contained in:
commit
06c2d66e8d
65
README
65
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.
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user