连续同步失败后触发重试时间点
This commit is contained in:
@@ -24,6 +24,12 @@ class SplitSyncConfigService
|
||||
return $value !== '' ? rtrim($value, '/') : self::DEFAULT_NODE_HOST;
|
||||
}
|
||||
|
||||
/** 失败重试时间点最多配置条数 */
|
||||
private const FAIL_RETRY_SCHEDULE_MAX = 10;
|
||||
|
||||
/** 单条重试时间点上限(分钟) */
|
||||
private const FAIL_RETRY_MINUTE_MAX = 1440;
|
||||
|
||||
/**
|
||||
* 连续同步失败多少次后自动暂停工单(0 表示不因失败暂停)
|
||||
*/
|
||||
@@ -36,6 +42,50 @@ class SplitSyncConfigService
|
||||
return max(0, (int) $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 达失败暂停阈值后的重试时间点(分钟,相对锚点的绝对偏移,升序去重)
|
||||
*
|
||||
* @return list<int>
|
||||
*/
|
||||
public static function getFailRetryMinutes(): array
|
||||
{
|
||||
$raw = trim(self::getConfigValue('split_sync_fail_retry_minutes'));
|
||||
if ($raw === '') {
|
||||
return [];
|
||||
}
|
||||
|
||||
$parts = preg_split('/[,,\s]+/', $raw) ?: [];
|
||||
$minutes = [];
|
||||
foreach ($parts as $part) {
|
||||
$part = trim((string) $part);
|
||||
if ($part === '' || !ctype_digit($part)) {
|
||||
continue;
|
||||
}
|
||||
$minute = (int) $part;
|
||||
if ($minute < 1 || $minute > self::FAIL_RETRY_MINUTE_MAX) {
|
||||
continue;
|
||||
}
|
||||
$minutes[$minute] = $minute;
|
||||
}
|
||||
|
||||
if ($minutes === []) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$list = array_values($minutes);
|
||||
sort($list, SORT_NUMERIC);
|
||||
|
||||
return array_slice($list, 0, self::FAIL_RETRY_SCHEDULE_MAX);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否配置了失败分阶段重试时间点
|
||||
*/
|
||||
public static function hasFailRetrySchedule(): bool
|
||||
{
|
||||
return self::getFailRetryMinutes() !== [];
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定工单类型的自动同步周期(分钟),0 表示不自动同步
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user