is_freeze(): fopen() failed / Stale NFS file handle

  • ページ: BugTrack2
  • 投稿者: teanan
  • 優先順位: 低
  • 状態: 却下
  • カテゴリー: その他
  • 投稿日: 2008-03-09 (日) 03:53:24
  • バージョン: 1.4.7

メッセージ

ページを削除した直後に差分の削除やバックアップの削除を行うと、稀に下記のような表示が出ます。

is_freeze(): fopen() failed: ページ名

ちなみに発生するのは、このdevとdemoサイトのみで、officialでは発生しないようです
→ officialでも発生することを確認しました。

該当部分のコード

本来ならば、is_page() でFALSEが返ってきてfopenに行かないはずなのですが、そうではないようです。

lib/func.php(v1.73): 78行目付近
	if (! $function_freeze || ! is_page($page)) {
		$is_freeze[$page] = FALSE;
		return FALSE;
	} else {
		$fp = fopen(get_filename($page), 'rb') or
			die('is_freeze(): fopen() failed: ' . htmlspecialchars($page));

is_page()では file_exists()しているだけなので、ファイルキャッシュ系のトラブルのようです。


  • lib/file.php のfile_write() で、次のようにしてるのにですか?
    	// ----
    	// Delete?
    
    	if ($dir == DATA_DIR && $str === '') {
    		// Page deletion
    		if (! $file_exists) return; // Ignore null posting for DATA_DIR
    
    		// Update RecentDeleted (Add the $page)
    		add_recent($page, $whatsdeleted, '', $maxshow_deleted);
    
    		// Remove the page
    		unlink($file);
    
    		// Update RecentDeleted, and remove the page from RecentChanges
    		lastmodified_add($whatsdeleted, $page);
    
    		// Clear is_page() cache
    		is_page($page, TRUE);
    
    		return;
    
    	} else if ($dir == DIFF_DIR && $str === " \n") {
    is_page($page, TRUE); としてclearstatcache() を呼んでいるのに・・・って、clearstatcache の説明 では、
    もし存在しないファイルに対して file_exists() をコールする場合、ファイルを作成するまで この関数は FALSE を返します。
    もしファイルを作成した場合、 たとえファイルを削除したとしても TRUE を返します。
    しかし、unlink() はキャッシュを自動的にクリアします。
    とありますね。 -- 2008-03-09 (日) 10:28:33
    • official が1.4.6 ベースで、dev がCVS ベースなので、その差分をcvs:lib/file.php?r1=1.40&r2=1.93cvs:lib/func.php?r1=1.46&r2=1.93 で見てみると、is_page() は変わっていないが、file_write() は変わっている・・・。こんなので、ヒントになるのかな?*1 -- 2008-03-09 (日) 10:28:33
  • 自分も気になってました。
    たぶんfailed to open stream: Stale NFS file handle が発生しています。phpのキャッシュではなく、サーバーのディスク側の話です。officialでも発生しそうな気がするのですが、本当に発生しないんですかね?
    fopenでNFSエラーだったら一定時間待って一度だけリトライっていう処理を入れたいな、とか考えてましたがまだためしてません。
    本来ファイルシステム側でエラーじゃなくてNFS更新終わってから続きの処理、みたいにしてくれるべき気はするのですが....。 -- ぃぉぃぉ 2008-03-09 (日) 11:51:10
    • やっぱりofficialでも発生します。ページ削除->すぐに差分表示、とすると再現しやすいです。 -- ぃぉぃぉ 2008-03-10 (月) 12:20:38
    • おっとそうでしたか。失礼致しました (^^; -- teanan 2008-03-10 (月) 19:39:25
    • いえいえ。officialサイトは試し辛いですからね^^;*2
      ちなみに、自分が関わっているプロジェクトでのpukiwikiで、error_reportingをE_ALLにしてNFSエラーのメッセージを確認しました。 -- ぃぉぃぉ 2008-03-10 (月) 20:23:58
  • 最近になって起こり始めたのなら、何が原因でしょうね。雑談 に話が挙がっている、sourceforge.jp プロジェクトWebサーバ: PHPアップグレードとテストのお願い の影響が、この話題に関してあったりするんだろうか? -- 2008-03-10 (月) 18:12:46
    • まだアップデートされていないようです。予定は来週の3/17ですね。ちなみに本件は、最近になってからの事象ではなく、結構前からでていました (^^; -- teanan 2008-03-10 (月) 20:41:32
    • テスト開始に伴う設定変更が理由ではなかったんですね。でも、結構前から~ だと、原因の特定が難しそうですね。 -- 2008-03-10 (月) 21:06:56
  • [ #12353] "Stale NFS file handle" エラーの発生 に、SFにおける状況の説明と対処が掲載されています。PukiWikiの問題ではないという結論の様ですので、このBugTrackのステータスは却下にしておきます。同様の現象が再現し続ける様であれば教えてください。-- henoheno 2008-05-10 (土) 04:08:15
    > リロードでエラーが起きたり起きなかったりするのは、複数ある
    > バックエンド web サーバのどれに繋がるかが切り替わる為です。
    >
    > それはさておき、Stable NFS file handle のエラーが出て
    > しまうのは、おそらく現在使っているプロジェクトwebサーバの
    > カーネルの問題ですので、入れ替えて対処致します。
    
    > プロジェクトwebサーバ群のカーネル入れ替えを行いました 
  • お疲れ様です、了解しました*3。 -- teanan 2008-05-10 (土) 10:11:23

*1 実際には、official やdev 用の改造を施してあるはずですし
*2 無駄ページが作られるのを待って、それを削除するときに再現確認しましたw
*3 悩んで損した~

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-05-19 (月) 21:31:26
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.479 sec.

OSDN