We're using the php beanstalk client:
https://sourceforge.net/projects/beanstalk/
and have run into cases where the script will get stuck in an infinite
loop trying to read data from beanstalkd. beanstalkd appears healthy
and requires no restart/interaction but the infinite loop causes all
communication w/beanstalk to cease. In the logs we see the following:
Mar 27 07:25:18 172.16.4.18 BeanStalkWrapper.class.php[26403]: PHP
Warning: stream_set_blocking(): supplied argument is not a valid
stream resource in /var/www/virtuals/shared/lib/BeanStalk.class.php on
line 1076
Mar 27 07:25:18 172.16.4.18 BeanStalkWrapper.class.php[26403]: PHP
Warning: fread(): supplied argument is not a valid stream resource
in /var/www/virtuals/shared/lib/BeanStalk.class.php on line 1087
Mar 27 07:25:18 172.16.4.18 BeanStalkWrapper.class.php[26403]: PHP
Warning: stream_set_blocking(): supplied argument is not a valid
stream resource in /var/www/virtuals/shared/lib/BeanStalk.class.php on
line 1076
Mar 27 07:25:18 172.16.4.18 BeanStalkWrapper.class.php[26403]: PHP
Warning: fread(): supplied argument is not a valid stream resource
in /var/www/virtuals/shared/lib/BeanStalk.class.php on line 1087
The function that's raising the warnings is:
private function read_message($in_buf_size=256,
$in_operation_timeout=-1) {
stream_set_blocking($this->socket, 0);
$in_buf_size += strlen(self::MSG_DELIM);
$no_packet = true; // Start off trying to hit up the
buffer
$to = microtime(true) + $in_operation_timeout;
do {
if ($this->rbuflen < self::MAX_READ_BUF || $no_packet) {
// read new data if we are under the read buffer size
or
// if we couldnt find a complete message in the buffer
last
// time
$no_packet = false;
$data = fread($this->socket,$in_buf_size);
if ($data === false)
return self::READ_ERROR;
if ($tbuflen = strlen($data)) // Got something.
Put it in the buffer.
{
$this->rbuf .= $data;
$this->rbuflen += $tbuflen;
}
}
if ($this->rbuflen && ($pos = strpos($this->rbuf,
self::MSG_DELIM, 0)) !== false) {
// Found a packet
$wanted_packet = substr($this->rbuf,0,$pos);
$seek = $pos+strlen(self::MSG_DELIM);
$this->rbuf = substr($this->rbuf,$seek);
if (strlen($wanted_packet)) {
$this->rbuflen -= $seek;
if (BeanStalk::DEBUG)
echo __METHOD__."({$wanted_packet})\n";
return $wanted_packet;
}
}
$no_packet = true;
} while ($tbuflen);
return self::READ_ERROR;
}
Any help would be greatly appreciated.
--
You received this message because you are subscribed to the Google Groups
"beanstalk-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/beanstalk-talk?hl=en.