X



bbs.cgi再開発プロジェクト7

■ このスレッドは過去ログ倉庫に格納されています
1root▲ ★
垢版 |
NGNG
bbs.cgiの開発作業をすすめていくためのスレッドです。

FOXさんの努力によりSpeedyCGIへの対応が行われ、
パフォーマンスの向上が図られたbbs.cgi。

・雪だるま作戦への対応
・さらなるカスタマイズ
・パフォーマンスの向上
・微妙な虫取り
・長いメインルーチンをより短くコンパクトに

あたりがターゲットか。

前スレ:
bbs.cgi再開発プロジェクト6
http://qb5.2ch.net/test/read.cgi/operate/1113117347/
264root▲ ★
垢版 |
NGNG
Put1Line と PutLines を使って、
index.html を作るサブルーチン(MakeIndex4PC)を書き換えました。

それに伴い、ひとつ小さな虫取り(不要な</form>の削除)を行いました。

また、HTMLタグを基本的に小文字にしました。
ただ、まだ直していない部分(htm/の下を作るところとか)があるので、
従来通り(w、大文字と小文字のタグが混在しています。

bbs.cgiの動作そのものは変わっていないはずですが、
もし問題を発見した場合、ここでお知らせくださいです。

これで、MakeIndex4PCは神の領域ではなくなったと思う。
今日は、ここまで。
265root▲ ★
垢版 |
NGNG
ええと、前にあった(今dat落ちかな)、
bbs.cgiが吐くindex.html をコンパクトにするというか、よくする話し合いをしてたスレッドって、
どれでしたっけか。

すぐやるかどうかはわからないけど、教えていただけるといいかもしんないです。

index.html作成部分の保守性がよくなったので(実際潜んでいた虫も見つけた)、
反映できるものもあるかも、かも。
2005/11/22(火) 10:43:04ID:JzWOnNm+0
【bbs.cgi】index.html軽量化作戦スレ
http://qb5.2ch.net/operate/kako/1117/11177/1117726508.html

これかー
267root▲ ★
垢版 |
NGNG
>>266
どもです。それです、それです。

MakeIndex4PC, MakeIndex4Keitai, UpdateSubback あたりのクリーンナップ後に、
ぼちぼちってかんじで。

あと、SunOSさんが雪だるま版index.htmlにこのスレのどのへんを採用したかの
情報があると、うれしいかも、かも。
268root▲ ★
垢版 |
NGNG
とりあえず今20秒ぐらい読んで、>>266 のは >>140 から読めばよいのかなと書いておこうと。
269root▲ ★
垢版 |
NGNG
>>264 の作業により、クッキーを食べるところと
BEのプロフィールを表示するところ(具体的にはJavaScriptのところ)が、
うまく動いていませんでした。

今、対応したものを配りました。
すみませんでした。

# <-- の後と // --> の前には \n が必要。
2005/11/22(火) 14:03:13ID:l5OCF7ES0
この際PHPだ!
271root▲ ★
垢版 |
NGNG
310 名前: ◆MUMUMUhnYI :2005/11/22(火) 14:08:29 ID:cuANVpjV0 ?###
# 051122a UpdateSubject, UpdateSubback, MakeIndex4Keitai, MakeWorkFileを
# Put1Line, PutLinesに対応
# これで、ファイル作る系の第一次対応はできたはず by む

以上配布済み。
ひととおり予定の作業はおわたです。
ということで、作業可能です。>>305

これでこのへんのサブルーチンは、神の領域ではなくなったと思います。

>>270
以前からある話なわけですが、、、。
PHPって暴走すると、httpdが暴走しちゃうから。
272root▲ ★
垢版 |
NGNG
あと、神の領域なのは、newbbs と foxIkinari ぐらいだと思う。

…人間のものになったんだろうか。
2005/11/22(火) 14:58:35ID:mkoqPojk0
関数名を誰が見ても分かるようにするとか、説明を書いておくとか
274root▲ ★
垢版 |
NGNG
>>273
とりあえずあまり進んでいませんが、こんなことをはじめているです。

########################################################################
# キャップがあるかどうか調べ、あったらそのキャップ名を返す
# 引数: キャップパス、板名、フラグ1、フラグ2
# フラグ1が真の場合、板別キャップの処理を行う
# フラグ2が真の場合、キャップあぶりだしの処理を行う
# 戻り値: キャップハンドル名 または ""(該当なしの場合)
########################################################################
sub FindCap
{
my ($pass, $board, $bflag, $tflag) = @_;
(以下略)
2005/11/22(火) 17:24:13ID:JzWOnNm+0
index.html(html/*html)が壊れる壊れる
2chの動作報告はここで。 パート18
http://qb5.2ch.net/test/read.cgi/operate/1131005961/355-
2005/11/22(火) 17:34:54ID:mkoqPojk0
rootm9(^Д^)プギャー
277root▲ ★
垢版 |
NGNG
うーむ。問題あるとしたら、MakeIndex4PCだなぁ。
neet4vip以外でも、起きているですか?

364 名前:root▲ ★[sage] 投稿日:2005/11/22(火) 18:08:55 ID:???0 ?###
>>362
ニー速だけ?

365 名前:root▲ ★[sage] 投稿日:2005/11/22(火) 18:09:55 ID:???0 ?###
私が入れた虫くさいわけで。

しかし、他では出てないんだろうか。

366 名前:root▲ ★[sage] 投稿日:2005/11/22(火) 18:16:44 ID:???0 ?###
ちなみに、subject.txt が破損すると、起こると思います。
index.html は、subject.txt を見て作っているので。
278root▲ ★
垢版 |
NGNG
あるいは、MakeWorkFile (html/ の下を作っている)か。
ううむ。
279root▲ ★
垢版 |
NGNG
確認しました。

ううむ、同じのが複数ある。

あとで、みてみるです。
280root▲ ★
垢版 |
NGNG
neet4vip 復帰します。
281root▲ ★
垢版 |
NGNG
368 名前:root▲ ★[sage] 投稿日:2005/11/22(火) 18:54:55 ID:???0 ?###
ありがとうです。
MakeWorkFileか。

369 名前:root▲ ★[sage] 投稿日:2005/11/22(火) 18:56:53 ID:???0 ?###
違うキーのも、同じファイルになってる、ってことですかね。

370 名前:root▲ ★[sage] 投稿日:2005/11/22(火) 18:59:45 ID:???0 ?###
>>369 ですね。
ううむ、なぜだ。

371 名前:root▲ ★[sage] 投稿日:2005/11/22(火) 19:02:21 ID:???0 ?###
わかった気がする。ううむ、、、。

やはり、神の領域は深いらしい。

372 名前:動け動けウゴウゴ2ちゃんねる[sage] 投稿日:2005/11/22(火) 19:03:59 ID:JzWOnNm+0
見た感じ、新スレの*.htmlが、直近(同時刻?)に投稿のあったスレの
*.htmlと同じになってしまっているのかな。

373 名前:root▲ ★[sage] 投稿日:2005/11/22(火) 19:08:08 ID:???0 ?###
# 注意: $key と $GB->{FORM}->{'key'} は一致しているとは限らない!!!!

のですね。

また、滑落か。
なおすです。
282root▲ ★
垢版 |
NGNG
てなわけで、世の中甘くないすね。

なんで、MakeWorkFileに$GBじゃなくて、$GB, $key っていうふうに
引数が2つあるか、っちゅーことですね。

まさか、そんなことしてるとは、思いもよらんかったですよ。
283root▲ ★
垢版 |
NGNG
Perl でファイルの行数を if 文で、チェックできるんだっけか。
284root▲ ★
垢版 |
NGNG
できないっぽいすね。ううむ。
2005/11/22(火) 19:31:54ID:???0
>>274
あ、キャップの判定のことでお願いしたいことが・・・。
あとでメールさせていただきます。
286root▲ ★
垢版 |
NGNG
>>285
了解です。

で、neet4vip問題は、対応できたはず。
287root▲ ★
垢版 |
NGNG
お題は「おせっかいなbbs.cgi」にしよう。

説明は、のちほど。
2005/11/22(火) 20:56:48ID:WZb4VPiX0
my $fp;
open($fp, '>', 'hoge.txt') or die;
foo($fp);
close($fo);

sub foo($)
{
my $fp = shift;
while (<$fp>) {
# hogehoge
}
}

これって駄目なのかな
289root▲ ★
垢版 |
NGNG
>>288
基本は、そうゆうことなんですよ。

今回の問題は、

「subject.txt にはそのスレが既に載っているけど、対応する html/html が製作途中、
あるいはまだ存在してない」

時に、動きが変になったんです。

くわしい説明は、帰宅してめしくってふろはいってからで。
290root▲ ★
垢版 |
NGNG
そうゆうこと => そうゆうことじゃない >>289
291288
垢版 |
2005/11/22(火) 21:24:35ID:WZb4VPiX0
おっと、>>245-248辺りを見て反射的に書いちゃいました。
深い意味はないです。
2005/11/22(火) 22:00:06ID:jzGvkBEMO
>>283
if $. == 65536
こういうやつのこと?
293root▲ ★
垢版 |
NGNG
>>292
そですね。そうゆうっぽいの。

Perlから明示的に open() しなくてもチェックできる手は、ないのかなと。
2005/11/22(火) 23:12:47ID:7B8fTBqD0
>>293
つsystem()

…そういう話じゃ無かったらごめんなさい。
NGNG
ファイルシステムが「行」を管理してくれたら可能かもしれませんね(苦笑)

# (Count, ERROR message) = TotalLineNumberinFile(filename)
# Count = TotalLineNumberinFile(filename)
# filename は行数を調べたいファイル名
# Count は行数。-1の時はエラー。リストコンテキストで評価した場合、第2返り値にエラーメッセージが入ります。
# 正常に取得出来たときは'OK'が返ります。
sub TotalLineNumberinFile{
my $filename = shift;
my $count;
open my $filehandle $filename or return wantarray ? (-1,$!) : -1;
$count++ while <$filehandle>;
close $filehandle;
return wantarray ? ($count,'OK') : $count;
}
2005/11/22(火) 23:37:31ID:JzWOnNm+0
wcでも使うか
2005/11/23(水) 03:53:20ID:3uL3GDNB0
index.html作成時に必要なhtmlが無ければ作るというのは変じゃないような気がする。
ほとんどの場合、必要なhtmlが無い=スレ立て直後 だろうけど。
2005/11/23(水) 10:19:18ID:SnvvLR240
たまに大掃除もするので
その場合も、
2005/11/23(水) 12:23:06ID:h05bzQxj0
そですね。作ること自体は間違いじゃないと。

今夜あたりにでもちと。
300root▲ ★
垢版 |
2005/11/23(水) 16:52:24ID:???0
対応したです。

347 名前: ◆MUMUMUhnYI [sage] 投稿日:2005/11/23(水) 16:47:32 ID:93wvGgv70
# 051123 htmlファイルが存在しなくて、かつしばらくたっても作られない場合にのみ、
# MakeIndex4PCからMakeWorkFileを呼ぶようにする by む

operate2 でテストしました。
html/ の下をからっぽにしてからレスして、必要な html が作られなおすことを確認済み。
301root▲ ★
垢版 |
2005/11/23(水) 17:02:15ID:???0
ちょっと、ex13でテストしてみるかな。

html/html 全消しします。< ex13
問題が出なければ成功。
302root▲ ★
垢版 |
2005/11/23(水) 17:02:39ID:???0
× ex13
○ neet4vip
303root▲ ★
垢版 |
2005/11/23(水) 17:04:07ID:???0
大丈夫そうですね。

様子を観察中。
2005/11/23(水) 19:11:10ID:???0
>>285の件、先ほどメールしました。
よろしくお願いいたします。
305root▲ ★
垢版 |
2005/11/23(水) 19:20:36ID:???0
>>304
メールざっと見ました。

主旨は、帽子の強度というか取り扱い方面に関するご相談、ということですか。
で、bbs.cgi での取り扱いにからむので、ここできいたと。

直感的に、仕様変更というか仕様追加を伴いそうな話な気がするので、
内容をよく読んでから、お返事するです。
場合によっては、別途いろんな方にご相談させていただく可能性も。

ということで。
2005/11/23(水) 23:53:37ID:5fdaspcI0
外部にトラックバック打つ時にshift_jisのまま打つのはどうかと
307桶屋
垢版 |
2005/11/24(木) 01:53:13ID:tdesbJrh0
>>265-268
どこまでやろうと考えているかはわかりませんが、
それを実際にやるときには、管理人に確認を取った方がいいと思います。
見映えやデザインが変わる恐れもありますので……。

まあ、「あいあい」だけで終わるような気もしますけど。


>>216
レスしていませんでした。興味深い話をどうもですー。
308桶屋
垢版 |
2005/11/24(木) 01:55:17ID:tdesbJrh0
ここよりもむしろ雪だるまの話になるかもですが、
indexから見たhtml/ の下のファイルは、iframeにして埋めてしまうのはどうかと考えたことがあります。

つまり、index.htmlでは以下のようにしてしまい、スレッド順位が変わるときには"./01.html"の部分だけ書き換え。

<iframe src="./01.html" align="center" width="95%" height="90%" scrolling="auto" frameborder="0" marginwidth="0" marginheight="0">
(説明文)このページではインラインフレームを使用しています。
</iframe>
 ・
 ・
 ・
10スレッド分ほど繰り返す


メリットは、
 ・index.htmlが一気にコンパクトになって生成コストが下がる(cssにするだけより断然効果あり)
 ・前段にキャッシュを使う場合、html/ の下がヒットして稼げるかも

デメリットは、
 ・スクロールが二重に (;^ ^
 ・Netscape 4.7 など古いブラウザは、やっぱりiframeは使えない(cssの時と同じ互換性の問題)
309桶屋
垢版 |
2005/11/24(木) 01:56:49ID:tdesbJrh0
それで、SETTING.TXTに、例えばINDEX_MODEといった新しいフラグを作っておいて、

INDEX_MODE=0 :デフォルト html/*.htmlファイルを作る。index.htmlも全部作る
INDEX_MODE=1 :html/*.htmlファイルを作る。index.htmはiframeで埋め込む
INDEX_MODE=2 :html/*.htmlファイルを作る。index.htmはサボる。今の実況板仕様
INDEX_MODE=3 :html/*.htmlファイルを作らない。index.htmはローカルルールとスレッド一覧と広告だけ


こういうのはどうですかね?(;^ ^ >SunOSさん他
310root▲ ★
垢版 |
NGNG
>>307
> どこまでやろうと考えているかはわかりませんが、
> それを実際にやるときには、管理人に確認を取った方がいいと思います。

そうすね。

で、html/html を作るところは、まだカスタマイズの余地がありそうな肝。
例えば下の方のスレにsageでレスした時は、更新しないとか。
(今はレスしたものについては必ず作っている)
2005/11/24(木) 03:04:04ID:PVimEjmL0
iframeは操作感が非常に悪くなると思います。
2005/11/24(木) 03:56:35ID:7i6JpL430
じゃー、今流行のajaxで
2005/11/24(木) 09:19:19ID:uDXz6nAD0
やりとりを見てると改善できる所は
まだまだありそうですね
314root▲ ★
垢版 |
2005/11/24(木) 13:38:26ID:???0
<チラシの裏>
http://www-06.ibm.com/jp/developerworks/linux/041119/j_l-optperl.html
</チラシの裏>
2005/11/24(木) 15:50:46ID:zK+0kexT0
SSIで挿入で
NGNG
>>314
どっかで叩かれていたような気も。。。
ひとまず、x 演算子のオペランドが逆です(哀)

#5.003時代のものだったかな?@最新のは5.008(5.8.x)
2005/11/24(木) 21:08:18ID:g6I3uHOe0
>>267 実際に bbsd が吐く index.html を直接見るのが一番手っ取り早いかも知れません.
ただ,index.html 以外に index.css というファイルも生成するようになってまして,
これは SETTING.TXT の更新を検出するとそれに合わせて更新するようになってます.

>>308 そういう <iframe> (or <object>) の使用というのも考えたことも
あるにはあるんですが,やはりスクロール等の操作性の問題などもあると思います.
まぁ,bbsd での index.html 生成は bbs.cgi のよりは軽くなってるかと思うので,
とりあえず大筋では従来のやり方を踏襲する形でもいいかなという感じでやってます.
318root▲ ★
垢版 |
NGNG
厨な質問をば。

if ($errmsgが10桁の数字だったら)

というのは、Perlでどう書いたらいいのかしら。
NGNG
>>318
$errmsg =~ /\d{10}/
かなぁ。。。

$errmsg + 1 < 10000000001
なんてのも有りかな?(文字列に対してもインクリメント出来るから)
320root▲ ★
垢版 |
NGNG
>>319
どもです。
上のほうで組み込んでみるです。
2005/11/26(土) 16:33:09ID:0o7g/RPa0
$errmsg =~ /^\d{10}$/
じゃないと、「aa1234567890」も真になっちゃわない?
322root▲ ★
垢版 |
NGNG
>>321
なるほど、対応するです。
2005/11/26(土) 20:26:40ID:7t446eNO0
lengeh($_) == 10 || int($_) eq $_
2005/11/26(土) 20:27:38ID:7t446eNO0
あーリロードしてないしlengthだし
325動け動けウゴウゴ2ちゃんねる
垢版 |
2005/11/26(土) 22:43:57ID:zBsPZFmx0
なんかエラー出たんで貼っときますね
ERROR:不明なエラーが発生しました。
(board:livejupiter key:1133001202 errmsg:No such file or directory)
このメッセージをコピペして、運用情報板で報告していただけるとありがたいです。

誘導されてきました
2005/11/27(日) 16:51:15ID:wSLpr1G40
http://live22x.2ch.net/livejupiter/index.html

1000オーバーのスレッドの1001はindex.htmlには表示されない模様?
2005/11/27(日) 20:05:08ID:Q5XEP8aN0
>>326 それは意図的に1000までにさせてますが,1001以降も表示させた方がいいんでしょうかね?
書き込みフォームをなくすことで終了してるスレということを示すようにはしてますが......
2005/11/27(日) 20:18:34ID:u0humMch0
今までどおりのほうがいいような
2005/11/27(日) 20:23:12ID:xD14ZgWG0
なぜ書き込めないのか、という理由の表示として、
あった方がわかりやすいかもしれない。
状況を理解してもらうためのメッセージだし。
2005/11/27(日) 20:30:09ID:Q5XEP8aN0
>>328-329 じゃあ1001以降も表示する形にしましょう......対応完.
331root▲ ★
垢版 |
NGNG
>>330
更新しました。 @ live22
332325
垢版 |
2005/11/28(月) 00:34:23ID:N5H/ccvWO
>>325って何だったんですか?
なんとなくしかわからいんで教えてください。(´・ω・)
333桶屋
垢版 |
2005/11/28(月) 00:48:22ID:0iPr7fvn0
どうぞ。

【雪だるま】bbsd⇔各cgi間のI/F仕様について考え・詰めていくスレッド
http://qb5.2ch.net/test/read.cgi/operate/1130482779/236-
2005/11/28(月) 14:25:03ID:/GNK4Si70
>>326
もともと1000以降は表示されない仕様だったような、、
335root▲ ★
垢版 |
2005/11/28(月) 14:35:38ID:???0
>>334
それは確か、read.cgi だったような。

index.html は、bbs.cgiのソースを見る限りそうは見えないです。
常にdatのお尻のBBS_CONTENTS_NUMBER行を表示していたと思う。
2005/11/28(月) 14:50:40ID:/GNK4Si70
ありゃ、ほんとだ、、いろいろ見てみましたけど
NHK教育実況板見たら100表示されてますね、、
だけど表示されてないように見えたのは気のせいか、、
すいません、
2005/11/28(月) 21:00:32ID:qciCODWD0
ここ扱いか知らんけど
スレッドの並べ替えってやっぱローカルで処理させたほうがいいんじゃないの?
338root▲ ★
垢版 |
NGNG
>>337
ん、何の話かしら。
2005/11/29(火) 10:40:56ID:zjVVPpoJ0
なんかよく判らんけどバグかな?
http://ex11.2ch.net/test/read.cgi/morningcoffee/1132910311/
俺が持ってる最後のレス
  990 名前:名無し募集中。。。 投稿日:2005/11/29(火) 01:01:04 0
  誰もいないな

がたぶん1000いってdat落ちするはずだったけど
スレタイもdatも無くなってリスタートしてる模様
340root▲ ★
垢版 |
2005/11/29(火) 12:09:33ID:???0
>>339
F22で落ちた瞬間に書き込みがなされると、こうなるですね。

対策してみるか。
レスの時は、そのdatがなかったら書かない。
341root▲ ★
垢版 |
NGNG
しかしこれは、リスクをぎりぎりまで減らすことはできても、
「ローカル雪だるま」をしない限り、なしにはできないですね。

従来のbbs.cgiでも、入り口のところでdatの存在は見ているです。
入り口ではあったのに、書くところで圧縮が入ってなくなったということで。

今の様子を見ていると、サーバ資源がどきどきしているlive系ではこの部分スルー(従来通り)で、
他ではこれ入れて、安全性を高めることにしよう。
2005/11/29(火) 13:36:30ID:ATVnho5w0
10億回に一回以下の出来事になにかしてもしょうがないと思うです
ほっとけ ほっとけ
343root▲ ★
垢版 |
2005/11/29(火) 14:09:55ID:???0
>>342
10億回すか。
まぁ、10億かどうかはともかく、レアケースであると。

# というか、想定通りの回答で。
344root▲ ★
垢版 |
2005/11/29(火) 14:11:12ID:???0
これまで、mnewsplusとかnews4vipとかmorningcoffeeとかで、出ているですね。
所詮、特殊な板か。
2005/11/29(火) 14:43:16ID:j5QwZ4jc0
AFOX
2005/11/29(火) 15:45:02ID:OFgfa+aY0
いっそdatをSQL化して、.datは.htmlとかと同じように生成さぼる対象にしてはどうか。
で、read.cgiと同じパラメータ方法でdatの該当行だけとれるようにする。
そうしたらSQLのレベルで1000ロックとか排他とかできるようになりませんかね。
347root▲ ★
垢版 |
2005/11/29(火) 16:00:52ID:???0
>>346
VIPのプロジェクトってやつですね。

あれ、どのくらい進んだのかな。
2005/11/29(火) 16:01:32ID:F6/xCrikO
2ちゃんねるブラウザが使えなくなる
2005/11/29(火) 16:22:16ID:OFgfa+aY0
>>347
あれ?それ初耳です。数人であれこれ考えていて出てきただけなので。
もしよろしければ参考URL教えていただけませんか?

>>348
>>346の範囲だと使えなくなるのではなくて、
現行のAPI使った専ブラでは読み込みの追従が遅れるだけ。
2005/11/29(火) 16:28:16ID:GdnIox6j0
C レベルでの open() 関数呼び出し段階で

スレ立て時: O_WRONLY|O_CREAT|O_EXCL (同一名ファイルが存在すれば EEXIST)
レス追記時: O_WRONLY|O_APPEND (ファイルが存在しなければ ENOENT)

というフラグ付きで呼ばれるようにできればファイルの存在確認とオープンが
アトミックに行えるんですよね(bbsd ではそうしてます).
となると,Perl では sysopen() を使えばいいのかな......
NGNG
>>349
http://nanacahaha.com/news4vip/
NGNG
>>350
定数を利用するのには use Fcntl がいるですね♪
353root▲ ★
垢版 |
NGNG
>>348
レガシなdatとsubject.txtは、作るようですよ。< VIPのやつ

>>350
なるほど、なるほど。
で、戻り値でエラーハンドリングもすると。

ちなみに subject.txt 生成部分とかは、ワークのファイルで作って、rename() しているですね。
で、rename() でしくると、どうも500エラーになっているらしいと。

このへんも、何かうまいわざがあるように思っていたり。
flock() じゃなくて。
354root▲ ★
垢版 |
NGNG
こうかしら。

・スレ立て時
use Fcntl;
sysopen(FH, $path, O_WRONLY|O_CREAT|O_EXCL, 0666) or &DispError2(スレ立て失敗処理);

・レス追記時
use Fcntl;
sysopen(FH, $path, O_WRONLY|O_APPEND) or &DispError2(レスができない処理);

で、index.html とか subject.txt / subback.html とかを
安全にかつうまくこなすには、どういうアイディアが考えられるのかと。
355root▲ ★
垢版 |
NGNG
>>354
2番目のにも、0666 が必要すね。
356root▲ ★
垢版 |
NGNG
これで、うまくいったようです。

これで、datの存在チェックうんぬんのところと、
追記してクローズした後でdatをchmod 666しているところをとばせました。

Over1000処理してchmod 555datをあとから追いついて
chmod 666することがなくなったので、
より、安全にもなったはず。

# 新スレの場合、datがあったらエラー
if($GB->{NEWTHREAD})
{
sysopen(OUT, $filename, O_WRONLY|O_CREAT|O_EXCL, 0666)
or &DispError2($GB,"ERROR!","ERROR:板飛びそうなので、またの機会にどうぞ。。。");
}
# レスの場合、datに追記できなかったらエラー
else
{
sysopen(OUT, $filename, O_WRONLY|O_APPEND, 0666)
or &DispError2($GB,"ERROR!","ERROR:レスしようとしたらdatに書けませんでした。今dat落ちしちゃったかもです。");
}
357root▲ ★
垢版 |
NGNG
chmod 555datを => chmod 555したdatをあとから
358root▲ ★
垢版 |
NGNG
481 名前: ◆MUMUMUhnYI [sage] 投稿日:2005/11/30(水) 03:23:06 ID:vRY99gsD0 ?###
# 051130 WriteDatFile改良、sysopenを使用しより安全確実な処理に by む
359root▲ ★
垢版 |
NGNG
When opening a file, a lock with flock(2) semantics can be obtained by
setting O_SHLOCK for a shared lock, or O_EXLOCK for an exclusive lock.
If creating a file with O_CREAT, the request for the lock will never fail
(provided that the underlying file system supports locking).

ふむ、、、。

しかし、どうなんだろう。
360root▲ ★
垢版 |
NGNG
これは、index.html / subject.txt / subback.html i/index.html(qb5とbbspinkのみ)
といったファイルの話です。

今は、
index.html subject.txt … 一時ファイル(*1)を作ってそっちで作り、それをrename
subback.html i/index.html … ロックなしでいきなり本ファイル作成(カミカゼ状態)

に、なっているです。

で、animeサーバやmorningcoffee、news4vipなど、たくさんの書き込みがあるところで、
かつlive系と違ってスレ数が多くてファイル生成にコストがかかるところを中心に、
上記の一時ファイルがだんだんと溜まっていき、
例えばanimeサーバではメモリディスクを圧迫していき、何回か破綻状態になりました。

で、このへんをなんとかできると、こういったことも減るんじゃないかなと。

上のほうでもおじさんが書いていたような気がしますが、
まずはopenやsysopenのエラーチェックをまじめにやるべきなのかもですね。
361root▲ ★
垢版 |
NGNG
あとは、renameでやる手法でやる時の、最後のrenameのところをどうするかか。
今は、こんな処理をしているですね。

my $resuc = 0;
until($resuc)
{
$resuc = rename($subtemp, $subject);
}

これだと、何らかの形でrenameが失敗し続けると、ブロックしてしまうような。

…といったところで、今日はここまでか。

http://qb5.2ch.net/test/read.cgi/operate/1130482779/248
は、またあとで。
NGNG
my $rename_status = eval {
 for (1..10){
  rename($subtemp, $subject) and return 0;
 }
 return $!;
}
if (defined $rename_status) {
 &DispError2($GB,"ERROR!","ERROR:subject.txtは変更出来ませんでした。($rename_status)")
}

こんなかんじかな?
2005/11/30(水) 08:23:38ID:0+e07y/o0
>>355 乙です.
>2番目のにも、0666 が必要すね。

mode (0666) が反映されるのはファイル作成時だけなので,
単に追記するだけなら不要です(指定しても実害はないでしょうが).


で subject.txt 等の更新処理ですが,ロックなしだと例えば

bbs.cgi-1: subject.txt 読み込み
bbs.cgi-2: subject.txt 読み込み
bbs.cgi-1: 1111111111.dat レス数インクリメント
bbs.cgi-2: 1111111112.dat レス数インクリメント
bbs.cgi-1: subject.txt.1 に書き出し
bbs.cgi-2: subject.txt.2 に書き出し
bbs.cgi-1: subject.txt.1 -> subject.txt にリネーム
bbs.cgi-2: subject.txt.2 -> subject.txt にリネーム

のようになると「1111111111.dat レス数インクリメント」は反映されなく
なってしまいますね.これならいっそのこと,一時ファイル名は固定にして
O_EXCL 付きで sysopen() して,失敗したら subject.txt の更新処理自体
スキップするようにしてしまってもいいかも知れません.

きっちりやるとしたら,やはりロックせざるを得ないでしょう.
ちなみに,bbsd ではファイルロックより軽い mutex で排他制御してます.
# もっとも,この前の負荷試験では mutex の保護下でやってるのに
# 1000 越え発生という奇妙な現象も起こってしまったので,
# その点は要観察なわけですが......
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況