Commit ba200b96 authored by aron novak's avatar aron novak Committed by Aaron Bauman
Browse files

Issue #3312317 by Aron Novak: Better debuggability of push failures

parent ed5a8c7e
Loading
Loading
Loading
Loading
+9 −0
Changes for modules/salesforce_push/salesforce_push.install: 9 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -62,3 +62,12 @@ function salesforce_push_update_8003() {
  }
  \Drupal::state()->delete('salesforce.global_push_limit');
}

/**
 * Updates schema for push queue.
 */
function salesforce_push_update_8004() {
  $schema_definition = \Drupal::service('queue.salesforce_push')->schemaDefinition();
  // Adds the new fields to the table.
  \Drupal::database()->schema()->addField('salesforce_push_queue', 'last_failure_message', $schema_definition['fields']['last_failure_message']);
}
+12 −3
Changes for modules/salesforce_push/src/PushQueue.php: 12 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -244,6 +244,9 @@ class PushQueue extends DatabaseQueue implements PushQueueInterface {
      'failures' => empty($data['failures'])
      ? 0
      : $data['failures'],
      'last_failure_message' => empty($data['last_failure_message'])
      ? ''
      : $data['last_failure_message'],
      'mapped_object_id' => empty($data['mapped_object_id'])
      ? 0
      : $data['mapped_object_id'],
@@ -364,6 +367,12 @@ class PushQueue extends DatabaseQueue implements PushQueueInterface {
          'default' => 0,
          'description' => 'Number of failed push attempts for this queue item.',
        ],
        'last_failure_message' => [
          'type' => 'text',
          'not null' => FALSE,
          'default' => NULL,
          'description' => 'The last failure message for this queue item, if failed.',
        ],
        'expire' => [
          'type' => 'int',
          'not null' => TRUE,
@@ -525,10 +534,10 @@ class PushQueue extends DatabaseQueue implements PushQueueInterface {

    $message = $e->getMessage();
    if ($item->failures >= $this->maxFails) {
      $message = 'Permanently failed queue item %item failed %fail times. Exception while pushing entity %type %id for salesforce mapping %mapping. ' . $message;
      $item->last_failure_message = 'Permanently failed queue item %item failed %fail times. Exception while pushing entity %type %id for salesforce mapping %mapping. ' . $message;
    }
    else {
      $message = 'Queue item %item failed %fail times. Exception while pushing entity %type %id for salesforce mapping %mapping. ' . $message;
      $item->last_failure_message = 'Queue item %item failed %fail times. Exception while pushing entity %type %id for salesforce mapping %mapping. ' . $message;
    }
    $args = [
      '%type' => $mapping->get('drupal_entity_type'),
@@ -537,7 +546,7 @@ class PushQueue extends DatabaseQueue implements PushQueueInterface {
      '%item' => $item->item_id,
      '%fail' => $item->failures,
    ];
    $this->eventDispatcher->dispatch(new SalesforceErrorEvent(NULL, $message, $args), SalesforceEvents::ERROR);
    $this->eventDispatcher->dispatch(new SalesforceErrorEvent(NULL, $item->last_failure_message, $args), SalesforceEvents::ERROR);

    // Failed items will remain in queue, but not be released. They'll be
    // retried only when the current lease expires.