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

  1. Catch the exception, disconnect(), and reconnect+retry the operation — the stream may be out of sync after a timeout.
  2. Check beanstalkd health and load (stats command, CPU, ready-set size) and restart it if wedged.
  3. Verify network stability/latency between the app host and the queue host.
  4. 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

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


AI-assisted analysis of phalcon/cphalcon@b7419de9cd (2026-08-21). Data as JSON: /api/errors/2e31ba9ac3117932. Report an issue: GitHub.