master

laravel/framework

Last updated at: 29/12/2023 09:20

DynamoDbLock.php

TLDR

The DynamoDbLock class is a subclass of the Lock class in the Illuminate\Cache namespace. It represents a lock that is stored in a DynamoDB table.

Methods

__construct(DynamoDbStore $dynamo, $name, $seconds, $owner = null)

This method is the constructor of the DynamoDbLock class. It initializes the DynamoDbLock instance with the specified DynamoDbStore instance, lock name, lock duration in seconds, and owner.

acquire()

This method attempts to acquire the lock. It returns true if the lock is successfully acquired, and false otherwise.

release()

This method releases the lock. It returns true if the lock is successfully released, and false otherwise.

forceRelease()

This method forcefully releases the lock, regardless of ownership.

getCurrentOwner()

This method returns the owner value written into the driver for this lock.

<?php

namespace Illuminate\Cache;

class DynamoDbLock extends Lock
{
    /**
     * The DynamoDB client instance.
     *
     * @var \Illuminate\Cache\DynamoDbStore
     */
    protected $dynamo;

    /**
     * Create a new lock instance.
     *
     * @param  \Illuminate\Cache\DynamoDbStore  $dynamo
     * @param  string  $name
     * @param  int  $seconds
     * @param  string|null  $owner
     * @return void
     */
    public function __construct(DynamoDbStore $dynamo, $name, $seconds, $owner = null)
    {
        parent::__construct($name, $seconds, $owner);

        $this->dynamo = $dynamo;
    }

    /**
     * Attempt to acquire the lock.
     *
     * @return bool
     */
    public function acquire()
    {
        if ($this->seconds > 0) {
            return $this->dynamo->add($this->name, $this->owner, $this->seconds);
        }

        return $this->dynamo->add($this->name, $this->owner, 86400);
    }

    /**
     * Release the lock.
     *
     * @return bool
     */
    public function release()
    {
        if ($this->isOwnedByCurrentProcess()) {
            return $this->dynamo->forget($this->name);
        }

        return false;
    }

    /**
     * Release this lock in disregard of ownership.
     *
     * @return void
     */
    public function forceRelease()
    {
        $this->dynamo->forget($this->name);
    }

    /**
     * Returns the owner value written into the driver for this lock.
     *
     * @return mixed
     */
    protected function getCurrentOwner()
    {
        return $this->dynamo->get($this->name);
    }
}