RestoreStatus
in package
バックアップのリストア進行状況を、DB に依存しないローカルファイルで管理する。
リストア中は DB のテーブルが入れ替わり一時的に利用できない状態になるため、
ブートストラップの DB 接続前に「復元中かどうか」を判定できる必要がある。
そのため WordPress の .maintenance ファイルと同様に、状態をローカルファイルへ書き出す。
保存先は他のロック/進捗ファイル(Lock や DB エクスポートの進捗 JSON)と揃えて CACHE_DIR 配下とする。
Table of Contents
Constants
- DEFAULT_TTL = 1800
- `running` 状態をこの秒数を超えて保持していた場合、異常終了とみなして ロックを解除する。復元処理がクラッシュしてもサイトが永久にロックされるのを防ぐ。
- STATE_FAILED = 'failed'
- 復元処理が失敗して終了した
- STATE_NONE = 'none'
- 復元処理が行われていない(または完了済み)
- STATE_RUNNING = 'running'
- 復元処理が進行中
Properties
Methods
- __construct() : mixed
- begin() : void
- 復元開始を記録する。
- defaultPath() : string
- 状態ファイルの既定パス(CACHE_DIR 配下。Web 非公開)。
- fail() : void
- 復元失敗を記録する。開始時のトークン・開始時刻は引き継ぐ。
- finish() : void
- 復元完了として状態ファイルを削除する。
- isActive() : bool
- 復元処理が進行中でサイトをロックすべきかを返す。 `running` かつ TTL 内のときだけ true。失効した running や failed は false。
- read() : array<string, mixed>|null
- 状態ファイルの内容を返す。存在しない・読めない・壊れている場合は null。
- toResponse() : array{state: string, elapsed: int, message: string}
- ステータス API(進捗ページのポーリング)用の配列を返す。
- verifyToken() : bool
- 復元を開始した操作者かどうかを、保存済みトークンと照合して判定する。 復元中は DB が利用できずセッション認証が使えないため、DB 非依存のトークンで識別する。
- write() : void
- 状態ファイルを書き出す。書き込みは安全装置のため、失敗してもリストア処理は継続させる。
Constants
DEFAULT_TTL
`running` 状態をこの秒数を超えて保持していた場合、異常終了とみなして ロックを解除する。復元処理がクラッシュしてもサイトが永久にロックされるのを防ぐ。
public
mixed
DEFAULT_TTL
= 1800
STATE_FAILED
復元処理が失敗して終了した
public
mixed
STATE_FAILED
= 'failed'
STATE_NONE
復元処理が行われていない(または完了済み)
public
mixed
STATE_NONE
= 'none'
STATE_RUNNING
復元処理が進行中
public
mixed
STATE_RUNNING
= 'running'
Properties
$path
状態ファイルのパス
private
string
$path
$ttl
`running` を有効とみなす最大秒数
private
int
$ttl
Methods
__construct()
public
__construct([string|null $path = null ][, int $ttl = self::DEFAULT_TTL ]) : mixed
Parameters
- $path : string|null = null
-
状態ファイルのパス(省略時は既定パス)
- $ttl : int = self::DEFAULT_TTL
-
runningを有効とみなす最大秒数
begin()
復元開始を記録する。
public
begin([int|null $now = null ][, string $token = '' ]) : void
Parameters
- $now : int|null = null
-
現在時刻(テスト用に注入可能)
- $token : string = ''
-
操作者識別用トークン(Cookie と照合する)
defaultPath()
状態ファイルの既定パス(CACHE_DIR 配下。Web 非公開)。
public
static defaultPath() : string
Return values
stringfail()
復元失敗を記録する。開始時のトークン・開始時刻は引き継ぐ。
public
fail([string $message = '' ][, int|null $now = null ]) : void
Parameters
- $message : string = ''
-
利用者へ示すメッセージ
- $now : int|null = null
-
現在時刻(テスト用に注入可能)
finish()
復元完了として状態ファイルを削除する。
public
finish() : void
isActive()
復元処理が進行中でサイトをロックすべきかを返す。 `running` かつ TTL 内のときだけ true。失効した running や failed は false。
public
isActive([int|null $now = null ]) : bool
Parameters
- $now : int|null = null
-
現在時刻(テスト用に注入可能)
Return values
boolread()
状態ファイルの内容を返す。存在しない・読めない・壊れている場合は null。
public
read() : array<string, mixed>|null
Return values
array<string, mixed>|nulltoResponse()
ステータス API(進捗ページのポーリング)用の配列を返す。
public
toResponse([int|null $now = null ]) : array{state: string, elapsed: int, message: string}
Parameters
- $now : int|null = null
-
現在時刻(テスト用に注入可能)
Return values
array{state: string, elapsed: int, message: string}verifyToken()
復元を開始した操作者かどうかを、保存済みトークンと照合して判定する。 復元中は DB が利用できずセッション認証が使えないため、DB 非依存のトークンで識別する。
public
verifyToken(string|null $token) : bool
Parameters
- $token : string|null
-
Cookie 等から受け取ったトークン
Return values
boolwrite()
状態ファイルを書き出す。書き込みは安全装置のため、失敗してもリストア処理は継続させる。
private
write(array<string, mixed> $data) : void
Parameters
- $data : array<string, mixed>