ID:               49511
 Updated by:       u...@php.net
 Reported By:      casper at procurios dot nl
 Status:           Assigned
 Bug Type:         MySQL related
 Operating System: *
 PHP Version:      5.3, 6 (2009-09-09)
 Assigned To:      mysql
 New Comment:

Any bug reports on libmysql crashes we could work on?


Previous Comments:
------------------------------------------------------------------------

[2009-09-16 12:04:47] paj...@php.net

I'm not blaming anyone, I'm only saying that we can forget libmysql on
windows, no matter which compiler we use as the crashes occur too with
the other versions.

Now, it seems that you insist that we should use libmysql. Does it mean
that mysqlnd is not usable or will not be usable in a production
environment in a reasonable time frame (aka 5.3.1)? No irony meant here,
but if it is the case then we have a serious problem to solve.

------------------------------------------------------------------------

[2009-09-16 11:46:38] u...@php.net

Pierre, 

I already stated that MySQL does no longer support VC6. MySQL does not
support VC6 because Microsoft itself does not support it. 

Who to blame? It depends on how you feel about VC6 being EOL'd. If you
think it should not have been EOL'd, you need to blame both Microsoft
and users of Microsoft products, such as MySQL. 

If you consider the EOL of VC6 as reasonable, the root cause of the VC6
trouble is neither Microsoft nor MySQL. The trouble is caused by those
who still use VC6 for their binaries and/or do not make their source
compile with recent versions of Visual Studio and therefore cause
incompatibilities.

Not supporting VC6 is not a bug, it is a feature decision. Not
supporting compilers which are out of maintenance, is a pretty sane
policy in my eyes considering lack of vendor support, lack of bug fixes,
lack of support for modern hardware. VC6 is from the same generation as
GCC 2.8.0. I wonder how many of us bother about GCC 2.8.0 ...

For every reasonable current (no GCC 2.8 no VC6!) environment the
availability of a binary (here: libmysql) is unrelated to the question
if a software can be used. I am sure that there are Linux systems which
use a glibc (stdc++, etc. ) that is not compatible with the glibc used
to build a certain software. This does not necessarily mean that you
cannot use the software altogether. As a last resort you can always try
to compile it yourself on the target platform.

I am aware how inconvenient it is for php.net to build tons of
libraries from source. Any request for a pre-compiled binary that uses
CRT x.y is as valid as a request for glibc x.y. It is good and correct
to precisely repeat any build request - preferably at bugs.mysql.com.
This is the best place to make MySQL do anything for you.

Anyway, I still cannot believe that it is *impossible* to the the MySQL
Client Library together with ext/mysqli, ext/mysql or PDO_MYSQL. 

If you have any problems compiling the MySQL Client Library from source
using a recent version of Visual Studio, please report it as a bug on
bugs.mysql.com. If any of those self-compiled libraries cannot be used
because of faulty coding leading to stinky run-time dependencies, please
report it as a bug on bugs.mysql.com. If you think the code of the
extensions needs to be tweaked to be compatible with any such binary,
please report it as a bug on bugs.php.net or bugs.mysql.com.

------------------------------------------------------------------------

[2009-09-16 07:30:33] casper at procurios dot nl

Hi Ulf,

Your solution seems spot on.

Also, I don't understand what you are saying here:
"To get the same behaviour in mysql as with libmysql, we would need to
set the streams timeout to 1 year upon connect and 
wait. We may wait longer than max_execution_time. However, it seems
that by default default_socket_timeout >  
max_execution_time and thus it may be irrelevant to take care of it."

In the manual on set_time_limit() it says:
"Note: The set_time_limit() function and the configuration directive
max_execution_time only affect the execution time of 
the script itself. Any time spent on activity that happens outside the
execution of the script such as system calls using 
system(), stream operations, database queries, etc. is not included
when determining the maximum time that the script has 
been running. This is not true on Windows where the measured time is
real." (http://www.php.net/manual/en/function.set-time-
limit.php)

Regarding default_socket_timeout = -1 -> endless:
It could be that it's just overflowing an int, resulting in 2^64-1 or
2^32-1 seconds.

------------------------------------------------------------------------

[2009-09-15 20:59:16] paj...@php.net

Sorry, I was not clear. Bugs have been reported and nothing has been
done so far. It is not a PHP bug and no, the libmysql libraries (5.0 or
5.1) does not build with VC6 either. As I said, we rather have to fix
mysqlnd instead of forking libmysql for our usages (as we will have to
do to support VC6).

I really don't want to do that for the next 3-4 years (expected
lifetime for 5.3) :)

And yes, your comment about this bug is right, Ulf agrees too afaics :)

------------------------------------------------------------------------

[2009-09-15 17:23:06] u...@php.net

On the bug itself:

The MySQL Client Library (libmysql) sets a limit of 365 * 24 * 3600
seconds as a default timeout for select() etc. One will hardly ever get
into that timeout but see a TCP/IP timeout happening before (e.g. after
10 minutes). 

mysqlnd does currently set no PHP streams timeout and therefore the
default PHP setting applies. 

To get the same behaviour in mysql as with libmysql, we would need to
set the streams timeout to 1 year upon connect and wait. We may wait
longer than max_execution_time. However, it seems that by default
default_socket_timeout > max_execution_time and thus it may be
irrelevant to take care of it.

Only ext/mysqli is more or less prepared to allow users to set the
timeout via an API call - one would need to introduce
MYSQLI_READ_TIMEOUT. While it may be easy to add that option also to
PDO_MYSQL there is easy way to make the read timeout configurable via
API in ext/mysql.

My current thinking is to introduce mysqlnd.read_timeout with a default
value equal to libmysql (= huuuuuugggggeeee) and make it SYSTEM_INI
only: no API changes required and admins can set it to
max_execution_time if they want.

Regarding default_socket_timeout = -1 -> endless:
I could not find it in the documentation either. It may need
documentation.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/49511

-- 
Edit this bug report at http://bugs.php.net/?id=49511&edit=1

Reply via email to