• R/O
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

PHPのフレームワークです。オートローディング、ルーティング、ORマッパ、フォームバリデータ、その他ユーティリティがセットになっています。


Commit MetaInfo

Revision172 (tree)
Time2022-05-27 13:27:07
Authortantancode

Log Message

LockInfoのメソッド名変更

Change Summary

Incremental Difference

--- lib/filters/PostValidationFilter.php (revision 171)
+++ lib/filters/PostValidationFilter.php (revision 172)
@@ -49,7 +49,7 @@
4949
5050 // 取得できた場合のみ同時実行を阻止する。
5151 if( isset($userId) )
52- class_exists('LockInfo') && LockInfo::enterExclusiveFlow($userId, 'user');
52+ class_exists('LockInfo') && LockInfo::lockFor($userId, 'user');
5353 }
5454 }
5555 }
--- lib/tables/LockInfo.php (revision 171)
+++ lib/tables/LockInfo.php (revision 172)
@@ -24,8 +24,11 @@
2424 * param ロック対象の種別。lock_info.particle_type の値。
2525 * param 内部的に使っているので指定する必要はない。ロックに使用する接続。
2626 */
27- public static function enterExclusiveFlow($id, $type='system', $pdo = null) {
27+ public static function lockFor($id, $type='system', $pdo = null) {
2828
29+ if( !isset($id) )
30+ throw new ErrorException('ロック対象のIDにnullを指定することは出来ません。');
31+
2932 // パスポート用のレコードはロック用途には使えない。パスポート用のレコードを排他制御でロックしたままパスポートを更新しようとしたら
3033 // デッドロックになってしまう。
3134 if($type == 'pass')
@@ -57,7 +60,7 @@
5760 if($lock === false) {
5861 $pdo->commit(); // レコードがない場合、粒度の大きなロックになるので速やかに解放する。
5962 static::insertSolid(array('particle_type'=>$type, 'particle_id'=>$id));
60- static::enterExclusiveFlow($id, $type, $pdo);
63+ static::lockFor($id, $type, $pdo);
6164 return;
6265 }
6366
@@ -73,7 +76,7 @@
7376 * param ロック対象のID。lock_info.particle_id の値。
7477 * param ロック対象の種別。lock_info.particle_type の値。
7578 */
76- public static function leaveExclusiveFlow($id, $type='system') {
79+ public static function unlockFor($id, $type='system') {
7780
7881 // 指定の排他制御が開始されていないなら何もしない。
7982 if( !isset(self::$wedges[$type][$id]) )
@@ -153,7 +156,7 @@
153156 protected static $primaryColumn = array('particle_type', 'particle_id');
154157
155158 // insertRecord() 時、主キー重複エラーを無視するようにする。
156- // これがないと、初めてenterExclusiveFlow()で排他制御に入ろうとする処理が同時に走ったとき、INSERT重複でエラーになる可能性がある。
159+ // これがないと、初めてlockFor()で排他制御に入ろうとする処理が同時に走ったとき、INSERT重複でエラーになる可能性がある。
157160 protected static $insertOption = 'ignore';
158161
159162
@@ -165,8 +168,8 @@
165168 }
166169
167170 // 実装メモ
168-// leaveExclusiveFlow() を「すべての排他制御を終了させる」という割り切ったものにすれば、接続も一つで済むし、particle_type:pass も user に
171+// unlockFor() を「すべての排他制御を終了させる」という割り切ったものにすれば、接続も一つで済むし、particle_type:pass も user に
169172 // 統合できるのでは?と思ったけど…
170173 // よく考えると、排他制御に入ってパスポートを更新すると、PHP終了時の自動ロールバックでパスポート更新が巻き戻るんだよね…
171174 // それを考えるとやっぱり別接続にせざるを得ないわけで…そうなると排他制御レコードとパスポートレコード分けとかないと排他制御中にパスポート更新できなく
172-// なるわけで…そこまでやるなら、今の「leaveExclusiveFlow() は個別解放が可能」っていう実装はそんなに難しくないよね、となる。
175+// なるわけで…そこまでやるなら、今の「unlockFor() は個別解放が可能」っていう実装はそんなに難しくないよね、となる。
--- sites/command/cron/IndexAction.php (revision 171)
+++ sites/command/cron/IndexAction.php (revision 172)
@@ -195,7 +195,7 @@
195195 $beat = substr($beat, 2);
196196
197197 // 以降の同時実行を防止する。
198- LockInfo::enterExclusiveFlow(LockInfo::CRON);
198+ LockInfo::lockFor(LockInfo::CRON);
199199
200200 // 最後にこのタスクを実行したときのスタンプを取得。
201201 $prop = new UserProperty(0, 'cron_executed');
@@ -211,7 +211,7 @@
211211 $prop->save();
212212
213213 // 同時実行防止はここまで。後続処理はジョブの実行なのでたぶん長い。ここで手動解放する必要がある。
214- LockInfo::leaveExclusiveFlow(LockInfo::CRON);
214+ LockInfo::unlockFor(LockInfo::CRON);
215215
216216 return true;
217217 }