phalcon/cphalcon · error · Phalcon\Acl\Exceptions\ElementNotFound
{elementName} '{element}' does not exist in the {suffix}
Error message
{elementName} '{element}' does not exist in the {suffix} What it means
During a length-prefixed read on the beanstalk socket, BeanstalkConnection checks stream_get_meta_data(connection)['timed_out']; if the socket read timed out, it throws Exception('Connection timed out'). The TCP connection is alive but beanstalkd did not deliver the expected bytes in time — a hung server, network stall, or an idle reserve-style wait exceeding the socket timeout.
Source
Thrown at phalcon/Acl/Adapter/Memory.zep:950
return false;
}
/**
* @param array $collection
* @param string $element
* @param string $elementName
* @param string $suffix
*
* @throws ElementNotFound
*/
private function checkExists(
array collection,
string element,
string elementName,
string suffix = "ACL"
) -> void {
if (true !== isset(collection[element])) {
throw new ElementNotFound(
elementName . " '" . element .
"' does not exist in the " . suffix
);
}
}
/**
* Invokes a callable rule, binding the role/component/user objects to the
* closure parameters by type and enforcing its arity.
*/
private function invokeRule(
var funcAccess,
int haveAccess,
var parameters,
var roleObject,
var componentObject,
string roleName,
string componentName,View on GitHub (pinned to b7419de9cd)
Solutions
- Catch the exception, disconnect(), and reconnect+retry the operation — the stream may be out of sync after a timeout.
- Check beanstalkd health and load (stats command, CPU, ready-set size) and restart it if wedged.
- Verify network stability/latency between the app host and the queue host.
- Never share one connection across forked processes; give each worker its own connection.
Example fix
// before
$status = $connection->reserveJob(10); // may throw 'Connection timed out'
// after
try {
$job = $connection->reserveJob(10);
} catch (\Phalcon\Queue\Exceptions\Exception $e) {
if ($e->getMessage() === 'Connection timed out') {
$connection->disconnect();
$connection->connect();
$job = $connection->reserveJob(10); // one guarded retry
} else {
throw $e;
}
} Defensive patterns
Strategy: retry
Try / catch
try {
$job = $connection->reserveJob($timeout);
} catch (\Phalcon\Queue\Exceptions\Exception $e) {
if ($e->getMessage() === 'Connection timed out') {
$connection->disconnect(); // stream may be desynced
$connection->connect(); // reconnect...
$job = $connection->reserveJob($timeout); // ...and retry once
} else {
throw $e;
}
} Prevention
- Always reconnect after a socket timeout — never continue reading the same stream.
- Give each forked worker its own connection; never share socket resources across processes.
- Monitor beanstalkd load and network latency between app and queue hosts.
When it happens
Trigger: Reading a job body or status line when beanstalkd stalls mid-response; long reserve-with-timeout waits on a lagging or overloaded server; mobile/unstable networks between app and queue host; the socket being shared after a fork.
Common situations: Beanstalkd under heavy load or wedged; network packet loss between app and queue; workers that fork children reusing the same connection resource; timeouts surfaced during deploy/network maintenance.
Related errors
- Access '{access}' does not exist in component '{componentNam
- Your passed parameter does not have the same class as the pa
- You did not provide all necessary parameters for the defined
- Object passed as componentName must implement Phalcon\Acl\Co
- Object passed as roleName must implement Phalcon\Acl\RoleAwa
AI-assisted analysis of phalcon/cphalcon@b7419de9cd (2026-08-21).
Data as JSON: /api/errors/2e31ba9ac3117932.
Report an issue: GitHub.