Joe
Joe

Reputation: 1772

php - try/catch gearman not catching timeout warning

I'm using the php gearman client and I'm trying to catch/ignore any errors in the event the gearman server is offline:

    try {
        $gearman = new GearmanClient();
        $gearman->addServer('apps-1');
        $gearman->setTimeout(4000);
        $result = $gearman->doNormal("function", "params");
    } catch (Exception $e) {}

However, this is still outputting the following error message:

Warning: GearmanClient::doNormal(): _client_do(GEARMAN_TIMEOUT) occured during gearman_client_run_tasks() -> libgearman/client.cc:154

I know the error message is just a warning not a fatal error but I was hoping the try/catch would suppress it. Anyone know of a way around this? Putting an @ symbol just before $gearman->doNormal() does suppress the error however I don't know if thats the politically correct way of doing it.

Can someone help me out?

Upvotes: 0

Views: 1112

Answers (1)

nihunde
nihunde

Reputation: 76

That is due to implementation. In PHP errors do not raise exceptions. If you want your program to be notified when a timeout occurs you have to manually inject into the errorhandler using set_error_handler.

    $errorHandler = set_error_handler(
         function($errorNumer, $errorString) { 
         //possibly handle error here
         }
    ); 
    $gearman = new GearmanClient();
    $gearman->addServer('apps-1');
    $gearman->setTimeout(4000);
    $result = $gearman->doNormal("function", "params");
    if (isset($errorHandler)) {
        set_error_handle($errorHandler);
    }

Upvotes: 2

Related Questions