You are here

function drush_services_client_process_queue in Services Client 7.2

Same name and namespace in other branches
  1. 7 services_client.drush.inc \drush_services_client_process_queue()

Process queued sync jobs

File

./services_client.drush.inc, line 44
Services client drush integration

Code

function drush_services_client_process_queue() {

  // How long can command run
  $time = drush_get_option('time', 55);
  $end = time() + $time;
  $sleep = drush_get_option('sleep', 1);

  // Run only one process at time
  if (lock_acquire('services_client_process_queue', (double) $time)) {
    $queue = DrupalQueue::get('services_client_sync');

    // For given period of time try to fetch data form queue and process them.
    while (time() < $end) {
      if ($item = $queue
        ->claimItem()) {
        $retries = drush_get_option('retries', 3);
        $result = services_client_queue_sync($item->data);
        if (is_object($result) && get_class($result) == 'ServicesClientEventResult') {
          while (!$result
            ->success() && $result->error_type != ServicesClientErrorType::LOOP && $retries > 0) {

            // Retry and get new result
            $result = $result
              ->retry();
            $retries--;
          }

          // Send result for further processing by other modules.
          module_invoke_all('services_client_process_events', array(
            $result,
          ));
        }
        $queue
          ->deleteItem($item);
      }
      else {
        sleep($sleep);
      }
    }
    lock_release('services_client_process_queue');
  }
}