webonaute/doctrine-datalocking-bundle

Lock a list of object of the same entity to be executed by a single processor. When the lock is aquire, the lock ID generated can be use by a processor to execute action on that locked list.

2.0 2022-05-25 20:08 UTC

This package is auto-updated.

Last update: 2024-03-29 04:11:37 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

About

Lock a list of object of the same entity to be executed by a single processor. When the lock is aquire, the lock ID generated can be use by a processor to execute action on that locked list.

Branches

  • Use version 1.0-dev for Symfony 4.0+. build status

Installation

This bundle is available via composer, find it on packagist.

Run : composer require webonaute/doctrine-datalocking-bundle 1.0-dev

Documentation

Configure Entity

Add this snipped code to your entity.

    use Webonaute\DoctrineDataLockingBundle\Entity\ProcessLock;
    
    ... 
    
    /**
     * @var ProcessLock
     *
     * @ORM\Embedded(class=ProcessLock::class)
     */
    private $processLock;
     
    ...
     
    public function __construct()
    {
        ...
        $this->processLock = new ProcessLock();
    }

    /**
     * @return ProcessLock
     */
    public function getProcessLock(): ProcessLock
    {
        return $this->processLock;
    }     

Lock data who are due.

while (null !== $lockId = $dataLockerService->lock(Entity::class, 500, $extraWhere, $lockAt)) {
    $this->queue->push($lockId);
}

Get objects related to one lock ID.

$lockedEntities = $dataLockerService->findLocked(Entity::class, $lockId);

Unlock object after usage.

This will simply unlock the object. To consume the entity object, use deleteLocked method.

$lockedEntities = $dataLockerService->unlock(Entity::class, $lockId);

Consume object after usage with deleteLocked

This method will consume the entity object by deleting it from the database.

$lockedEntities = $dataLockerService->deleteLocked(Entity::class, $lockId);

License

See LICENSE.