platform/api/symfony/Component/Lock/Store/ZookeeperStore.yaml
2024-09-02 10:44:11 -07:00

85 lines
4.1 KiB
YAML

name: ZookeeperStore
class_comment: '# * ZookeeperStore is a PersistingStoreInterface implementation using
Zookeeper as store engine.
# *
# * @author Ganesh Chandrasekaran <gchandrasekaran@wayfair.com>'
dependencies:
- name: InvalidArgumentException
type: class
source: Symfony\Component\Lock\Exception\InvalidArgumentException
- name: LockAcquiringException
type: class
source: Symfony\Component\Lock\Exception\LockAcquiringException
- name: LockConflictedException
type: class
source: Symfony\Component\Lock\Exception\LockConflictedException
- name: LockReleasingException
type: class
source: Symfony\Component\Lock\Exception\LockReleasingException
- name: Key
type: class
source: Symfony\Component\Lock\Key
- name: PersistingStoreInterface
type: class
source: Symfony\Component\Lock\PersistingStoreInterface
- name: ExpiringStoreTrait
type: class
source: ExpiringStoreTrait
properties: []
methods:
- name: createNewLock
visibility: private
parameters:
- name: node
- name: value
comment: "# * ZookeeperStore is a PersistingStoreInterface implementation using\
\ Zookeeper as store engine.\n# *\n# * @author Ganesh Chandrasekaran <gchandrasekaran@wayfair.com>\n\
# */\n# class ZookeeperStore implements PersistingStoreInterface\n# {\n# use ExpiringStoreTrait;\n\
# \n# public function __construct(\n# private \\Zookeeper $zookeeper,\n# ) {\n\
# }\n# \n# public static function createConnection(#[\\SensitiveParameter] string\
\ $dsn): \\Zookeeper\n# {\n# if (!str_starts_with($dsn, 'zookeeper:')) {\n# throw\
\ new InvalidArgumentException('Unsupported DSN for Zookeeper.');\n# }\n# \n#\
\ if (false === $params = parse_url($dsn)) {\n# throw new InvalidArgumentException('Invalid\
\ Zookeeper DSN.');\n# }\n# \n# $host = $params['host'] ?? '';\n# $hosts = explode(',',\
\ $host);\n# \n# foreach ($hosts as $index => $host) {\n# if (isset($params['port']))\
\ {\n# $hosts[$index] = $host.':'.$params['port'];\n# }\n# }\n# \n# return new\
\ \\Zookeeper(implode(',', $hosts));\n# }\n# \n# public function save(Key $key):\
\ void\n# {\n# if ($this->exists($key)) {\n# return;\n# }\n# \n# $resource = $this->getKeyResource($key);\n\
# $token = $this->getUniqueToken($key);\n# \n# $this->createNewLock($resource,\
\ $token);\n# $key->markUnserializable();\n# \n# $this->checkNotExpired($key);\n\
# }\n# \n# public function delete(Key $key): void\n# {\n# if (!$this->exists($key))\
\ {\n# return;\n# }\n# $resource = $this->getKeyResource($key);\n# try {\n# $this->zookeeper->delete($resource);\n\
# } catch (\\ZookeeperException $exception) {\n# // For Zookeeper Ephemeral Nodes,\
\ the node will be deleted upon session death. But, if we want to unlock\n# //\
\ the lock before proceeding further in the session, the client should be aware\
\ of this\n# throw new LockReleasingException($exception);\n# }\n# }\n# \n# public\
\ function exists(Key $key): bool\n# {\n# $resource = $this->getKeyResource($key);\n\
# try {\n# return $this->zookeeper->get($resource) === $this->getUniqueToken($key);\n\
# } catch (\\ZookeeperException) {\n# return false;\n# }\n# }\n# \n# public function\
\ putOffExpiration(Key $key, float $ttl): void\n# {\n# // do nothing, zookeeper\
\ locks forever.\n# }\n# \n# /**\n# * Creates a zookeeper node.\n# *\n# * @param\
\ string $node The node which needs to be created\n# * @param string $value The\
\ value to be assigned to a zookeeper node\n# *\n# * @throws LockConflictedException\n\
# * @throws LockAcquiringException"
- name: getKeyResource
visibility: private
parameters:
- name: key
comment: null
- name: getUniqueToken
visibility: private
parameters:
- name: key
comment: null
traits:
- Symfony\Component\Lock\Exception\InvalidArgumentException
- Symfony\Component\Lock\Exception\LockAcquiringException
- Symfony\Component\Lock\Exception\LockConflictedException
- Symfony\Component\Lock\Exception\LockReleasingException
- Symfony\Component\Lock\Key
- Symfony\Component\Lock\PersistingStoreInterface
- ExpiringStoreTrait
interfaces:
- PersistingStoreInterface