Same name and namespace in other branches
  1. 10 core/lib/Drupal/Core/Queue/Memory.php \Drupal\Core\Queue\Memory
  2. 8.9.x core/lib/Drupal/Core/Queue/Memory.php \Drupal\Core\Queue\Memory

Static queue implementation.

This allows "undelayed" variants of processes relying on the Queue interface. The queue data resides in memory. It should only be used for items that will be queued and dequeued within a given page request.

Hierarchy

Expanded class hierarchy of Memory

Related topics

3 files declare their use of Memory
CronQueueTest.php in core/modules/system/tests/src/Kernel/System/CronQueueTest.php
CronTest.php in core/tests/Drupal/Tests/Core/CronTest.php
QueueTest.php in core/tests/Drupal/KernelTests/Core/Queue/QueueTest.php

File

core/lib/Drupal/Core/Queue/Memory.php, line 14

Namespace

Drupal\Core\Queue
View source
class Memory implements QueueInterface {

  /**
   * The queue data.
   *
   * @var array
   */
  protected $queue;

  /**
   * Counter for item ids.
   *
   * @var int
   */
  protected $idSequence;

  /**
   * Constructs a Memory object.
   *
   * @param string $name
   *   An arbitrary string. The name of the queue to work with.
   */
  public function __construct($name) {
    $this->queue = [];
    $this->idSequence = 0;
  }

  /**
   * {@inheritdoc}
   */
  public function createItem($data) {
    $item = new \stdClass();
    $item->item_id = $this->idSequence++;
    $item->data = $data;
    $item->created = \Drupal::time()
      ->getCurrentTime();
    $item->expire = 0;
    $this->queue[$item->item_id] = $item;
    return $item->item_id;
  }

  /**
   * {@inheritdoc}
   */
  public function numberOfItems() {
    return count($this->queue);
  }

  /**
   * {@inheritdoc}
   */
  public function claimItem($lease_time = 30) {
    foreach ($this->queue as $key => $item) {
      if ($item->expire == 0) {
        $item->expire = \Drupal::time()
          ->getCurrentTime() + $lease_time;
        $this->queue[$key] = $item;
        return $item;
      }
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function deleteItem($item) {
    unset($this->queue[$item->item_id]);
  }

  /**
   * {@inheritdoc}
   */
  public function releaseItem($item) {
    if (isset($this->queue[$item->item_id]) && $this->queue[$item->item_id]->expire != 0) {
      $this->queue[$item->item_id]->expire = 0;
      return TRUE;
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function createQueue() {

    // Nothing needed here.
  }

  /**
   * {@inheritdoc}
   */
  public function deleteQueue() {
    $this->queue = [];
    $this->idSequence = 0;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Memory::$idSequence protected property Counter for item ids.
Memory::$queue protected property The queue data.
Memory::claimItem public function Claims an item in the queue for processing. Overrides QueueInterface::claimItem 1
Memory::createItem public function Adds a queue item and store it directly to the queue. Overrides QueueInterface::createItem
Memory::createQueue public function Creates a queue. Overrides QueueInterface::createQueue
Memory::deleteItem public function Deletes a finished item from the queue. Overrides QueueInterface::deleteItem
Memory::deleteQueue public function Deletes a queue and every item in the queue. Overrides QueueInterface::deleteQueue
Memory::numberOfItems public function Retrieves the number of items in the queue. Overrides QueueInterface::numberOfItems
Memory::releaseItem public function Releases an item that the worker could not process. Overrides QueueInterface::releaseItem
Memory::__construct public function Constructs a Memory object.