Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Lock.php
Go to the documentation of this file.
1 <?php
7 
8 use \Magento\Framework\MessageQueue\Lock\ReaderInterface;
9 use \Magento\Framework\MessageQueue\Lock\WriterInterface;
10 
15 {
19  const QUEUE_LOCK_TABLE = 'queue_lock';
23  private $dateTime;
24 
28  private $lockFactory;
29 
33  private $interval;
34 
44  public function __construct(
45  \Magento\Framework\Model\ResourceModel\Db\Context $context,
46  \Magento\Framework\Stdlib\DateTime\DateTime $dateTime,
47  \Magento\MessageQueue\Model\LockFactory $lockFactory,
48  $connectionName = null,
49  $interval = 86400
50  ) {
51  $this->lockFactory = $lockFactory;
52  $this->interval = $interval;
53  $this->dateTime = $dateTime;
54  parent::__construct($context, $connectionName);
55  }
56 
60  protected function _construct()
61  {
62  $this->_init(self::QUEUE_LOCK_TABLE, 'id');
63  }
64 
68  public function read(\Magento\Framework\MessageQueue\LockInterface $lock, $code)
69  {
70  $object = $this->lockFactory->create();
71  $object->load($code, 'message_code');
72  $lock->setId($object->getId());
73  $lock->setMessageCode($object->getMessageCode() ?: $code);
74  $lock->setCreatedAt($object->getCreatedAt());
75  }
76 
80  public function saveLock(\Magento\Framework\MessageQueue\LockInterface $lock)
81  {
82  $object = $this->lockFactory->create();
83  $object->setMessageCode($lock->getMessageCode());
84  $object->setCreatedAt($this->dateTime->gmtTimestamp());
85  $object->save();
86  }
87 
91  public function releaseOutdatedLocks()
92  {
93  $date = (new \DateTime())->setTimestamp($this->dateTime->gmtTimestamp());
94  $date->add(new \DateInterval('PT' . $this->interval . 'S'));
95  $this->getConnection()->delete($this->getTable(self::QUEUE_LOCK_TABLE), ['created_at <= ?' => $date]);
96  }
97 }
saveLock(\Magento\Framework\MessageQueue\LockInterface $lock)
Definition: Lock.php:80
__construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $dateTime, \Magento\MessageQueue\Model\LockFactory $lockFactory, $connectionName=null, $interval=86400)
Definition: Lock.php:44
read(\Magento\Framework\MessageQueue\LockInterface $lock, $code)
Definition: Lock.php:68
$code
Definition: info.phtml:12
$dateTime