const MAX_ALLOWED_LAG = 3; // abort if more than this much DB lag is present
const LAG_CHECK_PERIOD = 1.0; // check replica DB lag this many seconds
const ERROR_BACKOFF_TTL = 1; // seconds to back off a queue due to errors
+ const READONLY_BACKOFF_TTL = 30; // seconds to back off a queue due to read-only errors
/**
* @param callable $debug Optional debug output handler
// Back off of certain jobs for a while (for throttling and for errors)
if ( $info['status'] === false && mt_rand( 0, 49 ) == 0 ) {
- $ttw = max( $ttw, self::ERROR_BACKOFF_TTL ); // too many errors
+ $ttw = max( $ttw, $this->getErrorBackoffTTL( $info['error'] ) );
$backoffDeltas[$jType] = isset( $backoffDeltas[$jType] )
? $backoffDeltas[$jType] + $ttw
: $ttw;
return $response;
}
+ /**
+ * @param string $error
+ * @return int TTL in seconds
+ */
+ private function getErrorBackoffTTL( $error ) {
+ return strpos( $error, 'DBReadOnlyError' ) !== false
+ ? self::READONLY_BACKOFF_TTL
+ : self::ERROR_BACKOFF_TTL;
+ }
+
/**
* @param Job $job
* @param LBFactory $lbFactory