D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
psa
/
admin
/
plib
/
modules
/
wp-toolkit
/
vendor
/
cakephp
/
database
/
Retry
/
Filename :
ErrorCodeWaitStrategy.php
back
Copy
<?php declare (strict_types=1); /** * CakePHP(tm) : Rapid Development Framework (https://cakephp.org) * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) * * Licensed under The MIT License * For full copyright and license information, please see the LICENSE.txt * Redistributions of files must retain the above copyright notice. * * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) * @link https://cakephp.org CakePHP(tm) Project * @since 4.2.0 * @license https://opensource.org/licenses/mit-license.php MIT License */ namespace WPToolkitDependenciesIsolationPrefix\Cake\Database\Retry; use WPToolkitDependenciesIsolationPrefix\Cake\Core\Retry\RetryStrategyInterface; use Exception; use PDOException; /** * Implements retry strategy based on db error codes and wait interval. * * @internal */ class ErrorCodeWaitStrategy implements RetryStrategyInterface { /** * @var array<int> */ protected $errorCodes; /** * @var int */ protected $retryInterval; /** * @param array<int> $errorCodes DB-specific error codes that allow retrying * @param int $retryInterval Seconds to wait before allowing next retry, 0 for no wait. */ public function __construct(array $errorCodes, int $retryInterval) { $this->errorCodes = $errorCodes; $this->retryInterval = $retryInterval; } /** * @inheritDoc */ public function shouldRetry(Exception $exception, int $retryCount) : bool { if ($exception instanceof PDOException && $exception->errorInfo && \in_array($exception->errorInfo[1], $this->errorCodes)) { if ($this->retryInterval > 0) { \sleep($this->retryInterval); } return \true; } return \false; } }