134 lines
5.3 KiB
YAML
134 lines
5.3 KiB
YAML
|
name: PdoStore
|
||
|
class_comment: "# * PdoStore is a PersistingStoreInterface implementation using a\
|
||
|
\ PDO connection.\n# *\n# * Lock metadata are stored in a table. You can use createTable()\
|
||
|
\ to initialize\n# * a correctly defined table.\n# *\n# * CAUTION: This store relies\
|
||
|
\ on all client and server nodes to have\n# * synchronized clocks for lock expiry\
|
||
|
\ to occur at the correct time.\n# * To ensure locks don't expire prematurely; the\
|
||
|
\ TTLs should be set with enough\n# * extra time to account for any clock drift\
|
||
|
\ between nodes.\n# *\n# * @author J\xE9r\xE9my Deruss\xE9 <jeremy@derusse.com>"
|
||
|
dependencies:
|
||
|
- name: InvalidArgumentException
|
||
|
type: class
|
||
|
source: Symfony\Component\Lock\Exception\InvalidArgumentException
|
||
|
- name: InvalidTtlException
|
||
|
type: class
|
||
|
source: Symfony\Component\Lock\Exception\InvalidTtlException
|
||
|
- name: LockConflictedException
|
||
|
type: class
|
||
|
source: Symfony\Component\Lock\Exception\LockConflictedException
|
||
|
- name: Key
|
||
|
type: class
|
||
|
source: Symfony\Component\Lock\Key
|
||
|
- name: PersistingStoreInterface
|
||
|
type: class
|
||
|
source: Symfony\Component\Lock\PersistingStoreInterface
|
||
|
- name: DatabaseTableTrait
|
||
|
type: class
|
||
|
source: DatabaseTableTrait
|
||
|
- name: ExpiringStoreTrait
|
||
|
type: class
|
||
|
source: ExpiringStoreTrait
|
||
|
properties: []
|
||
|
methods:
|
||
|
- name: __construct
|
||
|
visibility: public
|
||
|
parameters:
|
||
|
- name: connOrDsn
|
||
|
- name: options
|
||
|
default: '[]'
|
||
|
- name: gcProbability
|
||
|
default: '0.01'
|
||
|
- name: initialTtl
|
||
|
default: '300'
|
||
|
comment: "# * PdoStore is a PersistingStoreInterface implementation using a PDO\
|
||
|
\ connection.\n# *\n# * Lock metadata are stored in a table. You can use createTable()\
|
||
|
\ to initialize\n# * a correctly defined table.\n# *\n# * CAUTION: This store\
|
||
|
\ relies on all client and server nodes to have\n# * synchronized clocks for lock\
|
||
|
\ expiry to occur at the correct time.\n# * To ensure locks don't expire prematurely;\
|
||
|
\ the TTLs should be set with enough\n# * extra time to account for any clock\
|
||
|
\ drift between nodes.\n# *\n# * @author J\xE9r\xE9my Deruss\xE9 <jeremy@derusse.com>\n\
|
||
|
# */\n# class PdoStore implements PersistingStoreInterface\n# {\n# use DatabaseTableTrait;\n\
|
||
|
# use ExpiringStoreTrait;\n# \n# private \\PDO $conn;\n# private string $dsn;\n\
|
||
|
# private string $driver;\n# private ?string $username = null;\n# private ?string\
|
||
|
\ $password = null;\n# private array $connectionOptions = [];\n# \n# /**\n# *\
|
||
|
\ You can either pass an existing database connection as PDO instance\n# * or\
|
||
|
\ a DSN string that will be used to lazy-connect to the database\n# * when the\
|
||
|
\ lock is actually used.\n# *\n# * List of available options:\n# * * db_table:\
|
||
|
\ The name of the table [default: lock_keys]\n# * * db_id_col: The column where\
|
||
|
\ to store the lock key [default: key_id]\n# * * db_token_col: The column where\
|
||
|
\ to store the lock token [default: key_token]\n# * * db_expiration_col: The\
|
||
|
\ column where to store the expiration [default: key_expiration]\n# * * db_username:\
|
||
|
\ The username when lazy-connect [default: '']\n# * * db_password: The password\
|
||
|
\ when lazy-connect [default: '']\n# * * db_connection_options: An array of driver-specific\
|
||
|
\ connection options [default: []]\n# *\n# * @param array $options An associative\
|
||
|
\ array of options\n# * @param float $gcProbability Probability expressed as floating\
|
||
|
\ number between 0 and 1 to clean old locks\n# * @param int $initialTtl The\
|
||
|
\ expiration delay of locks in seconds\n# *\n# * @throws InvalidArgumentException\
|
||
|
\ When first argument is not PDO nor Connection nor string\n# * @throws InvalidArgumentException\
|
||
|
\ When PDO error mode is not PDO::ERRMODE_EXCEPTION\n# * @throws InvalidArgumentException\
|
||
|
\ When the initial ttl is not valid"
|
||
|
- name: save
|
||
|
visibility: public
|
||
|
parameters:
|
||
|
- name: key
|
||
|
comment: null
|
||
|
- name: putOffExpiration
|
||
|
visibility: public
|
||
|
parameters:
|
||
|
- name: key
|
||
|
- name: ttl
|
||
|
comment: null
|
||
|
- name: delete
|
||
|
visibility: public
|
||
|
parameters:
|
||
|
- name: key
|
||
|
comment: null
|
||
|
- name: exists
|
||
|
visibility: public
|
||
|
parameters:
|
||
|
- name: key
|
||
|
comment: null
|
||
|
- name: getConnection
|
||
|
visibility: private
|
||
|
parameters: []
|
||
|
comment: null
|
||
|
- name: createTable
|
||
|
visibility: public
|
||
|
parameters: []
|
||
|
comment: '# * Creates the table to store lock keys which can be called once for
|
||
|
setup.
|
||
|
|
||
|
# *
|
||
|
|
||
|
# * @throws \PDOException When the table already exists
|
||
|
|
||
|
# * @throws \DomainException When an unsupported PDO driver is used'
|
||
|
- name: prune
|
||
|
visibility: private
|
||
|
parameters: []
|
||
|
comment: '# * Cleans up the table by removing all expired locks.'
|
||
|
- name: getDriver
|
||
|
visibility: private
|
||
|
parameters: []
|
||
|
comment: null
|
||
|
- name: getCurrentTimestampStatement
|
||
|
visibility: private
|
||
|
parameters: []
|
||
|
comment: '# * Provides an SQL function to get the current timestamp regarding the
|
||
|
current connection''s driver.'
|
||
|
- name: isTableMissing
|
||
|
visibility: private
|
||
|
parameters:
|
||
|
- name: exception
|
||
|
comment: null
|
||
|
traits:
|
||
|
- Symfony\Component\Lock\Exception\InvalidArgumentException
|
||
|
- Symfony\Component\Lock\Exception\InvalidTtlException
|
||
|
- Symfony\Component\Lock\Exception\LockConflictedException
|
||
|
- Symfony\Component\Lock\Key
|
||
|
- Symfony\Component\Lock\PersistingStoreInterface
|
||
|
- DatabaseTableTrait
|
||
|
- ExpiringStoreTrait
|
||
|
interfaces:
|
||
|
- PersistingStoreInterface
|