PHPのフレームワークです。オートローディング、ルーティング、ORマッパ、フォームバリデータ、その他ユーティリティがセットになっています。
Revision | 172 (tree) |
---|---|
Time | 2022-05-27 13:27:07 |
Author | tantancode |
LockInfoのメソッド名変更
@@ -49,7 +49,7 @@ | ||
49 | 49 | |
50 | 50 | // 取得できた場合のみ同時実行を阻止する。 |
51 | 51 | if( isset($userId) ) |
52 | - class_exists('LockInfo') && LockInfo::enterExclusiveFlow($userId, 'user'); | |
52 | + class_exists('LockInfo') && LockInfo::lockFor($userId, 'user'); | |
53 | 53 | } |
54 | 54 | } |
55 | 55 | } |
@@ -24,8 +24,11 @@ | ||
24 | 24 | * param ロック対象の種別。lock_info.particle_type の値。 |
25 | 25 | * param 内部的に使っているので指定する必要はない。ロックに使用する接続。 |
26 | 26 | */ |
27 | - public static function enterExclusiveFlow($id, $type='system', $pdo = null) { | |
27 | + public static function lockFor($id, $type='system', $pdo = null) { | |
28 | 28 | |
29 | + if( !isset($id) ) | |
30 | + throw new ErrorException('ロック対象のIDにnullを指定することは出来ません。'); | |
31 | + | |
29 | 32 | // パスポート用のレコードはロック用途には使えない。パスポート用のレコードを排他制御でロックしたままパスポートを更新しようとしたら |
30 | 33 | // デッドロックになってしまう。 |
31 | 34 | if($type == 'pass') |
@@ -57,7 +60,7 @@ | ||
57 | 60 | if($lock === false) { |
58 | 61 | $pdo->commit(); // レコードがない場合、粒度の大きなロックになるので速やかに解放する。 |
59 | 62 | static::insertSolid(array('particle_type'=>$type, 'particle_id'=>$id)); |
60 | - static::enterExclusiveFlow($id, $type, $pdo); | |
63 | + static::lockFor($id, $type, $pdo); | |
61 | 64 | return; |
62 | 65 | } |
63 | 66 |
@@ -73,7 +76,7 @@ | ||
73 | 76 | * param ロック対象のID。lock_info.particle_id の値。 |
74 | 77 | * param ロック対象の種別。lock_info.particle_type の値。 |
75 | 78 | */ |
76 | - public static function leaveExclusiveFlow($id, $type='system') { | |
79 | + public static function unlockFor($id, $type='system') { | |
77 | 80 | |
78 | 81 | // 指定の排他制御が開始されていないなら何もしない。 |
79 | 82 | if( !isset(self::$wedges[$type][$id]) ) |
@@ -153,7 +156,7 @@ | ||
153 | 156 | protected static $primaryColumn = array('particle_type', 'particle_id'); |
154 | 157 | |
155 | 158 | // insertRecord() 時、主キー重複エラーを無視するようにする。 |
156 | - // これがないと、初めてenterExclusiveFlow()で排他制御に入ろうとする処理が同時に走ったとき、INSERT重複でエラーになる可能性がある。 | |
159 | + // これがないと、初めてlockFor()で排他制御に入ろうとする処理が同時に走ったとき、INSERT重複でエラーになる可能性がある。 | |
157 | 160 | protected static $insertOption = 'ignore'; |
158 | 161 | |
159 | 162 |
@@ -165,8 +168,8 @@ | ||
165 | 168 | } |
166 | 169 | |
167 | 170 | // 実装メモ |
168 | -// leaveExclusiveFlow() を「すべての排他制御を終了させる」という割り切ったものにすれば、接続も一つで済むし、particle_type:pass も user に | |
171 | +// unlockFor() を「すべての排他制御を終了させる」という割り切ったものにすれば、接続も一つで済むし、particle_type:pass も user に | |
169 | 172 | // 統合できるのでは?と思ったけど… |
170 | 173 | // よく考えると、排他制御に入ってパスポートを更新すると、PHP終了時の自動ロールバックでパスポート更新が巻き戻るんだよね… |
171 | 174 | // それを考えるとやっぱり別接続にせざるを得ないわけで…そうなると排他制御レコードとパスポートレコード分けとかないと排他制御中にパスポート更新できなく |
172 | -// なるわけで…そこまでやるなら、今の「leaveExclusiveFlow() は個別解放が可能」っていう実装はそんなに難しくないよね、となる。 | |
175 | +// なるわけで…そこまでやるなら、今の「unlockFor() は個別解放が可能」っていう実装はそんなに難しくないよね、となる。 |
@@ -195,7 +195,7 @@ | ||
195 | 195 | $beat = substr($beat, 2); |
196 | 196 | |
197 | 197 | // 以降の同時実行を防止する。 |
198 | - LockInfo::enterExclusiveFlow(LockInfo::CRON); | |
198 | + LockInfo::lockFor(LockInfo::CRON); | |
199 | 199 | |
200 | 200 | // 最後にこのタスクを実行したときのスタンプを取得。 |
201 | 201 | $prop = new UserProperty(0, 'cron_executed'); |
@@ -211,7 +211,7 @@ | ||
211 | 211 | $prop->save(); |
212 | 212 | |
213 | 213 | // 同時実行防止はここまで。後続処理はジョブの実行なのでたぶん長い。ここで手動解放する必要がある。 |
214 | - LockInfo::leaveExclusiveFlow(LockInfo::CRON); | |
214 | + LockInfo::unlockFor(LockInfo::CRON); | |
215 | 215 | |
216 | 216 | return true; |
217 | 217 | } |