実装済:
subject.txt, subback.html, dat/*.dat 更新
あぼーん
dat/*.dat から subject.txt, subback.html 再生成
未実装:
index.html, html/*.html 更新
他板へのスレ移動 etc...
とりあえず↑ってところですが
http://sunos.saita.ma/bbsd.c 全部実装すると雪だるま対応仕様になりますが,とりあえず今の段階でも
subject.txt 更新等の重い処理を bbs.cgi から抜き出して軽量化にはなると思います.
使用法: bbsd [-cfh] [-b bindaddr] [-d docroot] [-i subjects_interval] [-I setting_interval] [-n nthreads] [-p port] [-s servername]
-b bindaddr: UDP ソケットを bind するアドレスを指定 [default: 127.0.0.1]
-c: 入力のバイトシーケンスチェックを行う (環境変数 LANG/LC_CTYPE/LC_ALL に依存)
-d docroot: httpd の document root [default: /usr/local/apache2/htdocs]
-f: フォアグラウンドで実行
-h: ヘルプ表示
-i subjects_interval: subject.txt 等の更新間隔(秒) [default: 5]
-I setting_interval: SETTING.TXT のチェック間隔(秒) [default: 60]
-p port: UDP ソケットのポート番号 [default: 2222]
-s servername: httpd のサーバ名 [default: www.example.com]
-DUSE_THREADS 付きでビルドするとマルチスレッド版になり,このオプションが追加.
-n nthreads: worker スレッド数 [default: 4]
んで,例えばこんな感じで起動する,と.
su ch2qb5 -c 'LANG=ja_JP.SJIS bbsd -c -d/home/ch2qb5/htdocs -sqb5.2ch.net'
bbs.cgi からの呼び出し法は
----------------------------------------------------------------------
use Socket;
use constant BBSD_HOST => inet_aton('127.0.0.1');
use constant BBSD_PORT => 2222;
use constant BBSD_TIMEOUT => 1;
sub bbsd {
my ($rfd, $str) = ('', '');
my $sin = sockaddr_in(BBSD_PORT, BBSD_HOST);
socket(SOCK, AF_INET, SOCK_DGRAM, 0) || return "$!";
send(SOCK, join('/', @_), 0, $sin) || return "$!";
vec($rfd, fileno(SOCK), 1) = 1;
if (select($rfd, undef, undef, BBSD_TIMEOUT)) {
recv(SOCK, $str, 256, 0) || return "$!";
}
else {
$str = "書き込みを受理しましたがサーバが混雑しています.書き込みが反映されない場合もあります.";
}
return $str;
}
----------------------------------------------------------------------
で,書き込み処理はこんな感じで.
my $errmsg = bbsd($bbs, $key, $datline);
$bbs は板の指定(operate),$key はスレッドキー(1113117347),
$datline は *.dat への出力と同じ形式の文字列.
name<>email<>date etc.<>message<>[title]
正常に処理されると $errmsg は空文字列で,エラーが発生した場合は
それを示す文字列になります.
この bbsd は subject データをオンメモリで保持するため,
他のプログラムが subject.txt 等を変更しても bbsd によって
上書きされてしまうので,あぼーんや subject 再生成等の機能も
搭載しました.
レスの通常あぼーん:
my $errmsg = bbsd($bbs, "delete:$key", $range);
レスの透明あぼーん:
my $errmsg = bbsd($bbs, "tdelete:$key", $range);
スレッドのゴミ箱逝き:
my $errmsg = bbsd($bbs, "delete:$key", '*');
スレッドのファイル自体削除:
my $errmsg = bbsd($bbs, "tdelete:$key", '*');
$range は例えば "2-19,22,24,26-29" のようなレス番指定.
subject.txt 等の再生成:
my $errmsg = bbsd($bbs, 'repair');
この処理は時間がかかりそうなら BBSD_TIMEOUT はもっと長い方がいいかも知れません.
もっとも,UDP ソケットキューがあふれてリクエストが破棄されているとかでない限り
タイムアウトになっても処理自体は行われますが.
740 :
root▲ ★:2005/07/01(金) 00:03:52 ID:???0 BE:1094843-##
>>740 これはハァハァするべきものですねー
◆cZfSunOs.U さんGJ!
じっけん!じっけん!
ワクワクテカテカ
でぇもん君かぁ。。。
うん。おそらく最終形態かなぁ。。。
おっと
>>738 close() 入れないと......
sub bbsd {
my ($rfd, $str) = ('', '');
my $sin = sockaddr_in(BBSD_PORT, BBSD_HOST);
socket(SOCK, AF_INET, SOCK_DGRAM, 0) || return "$!";
send(SOCK, join('/', @_), 0, $sin) || (close(SOCK), return "$!");
vec($rfd, fileno(SOCK), 1) = 1;
if (select($rfd, undef, undef, BBSD_TIMEOUT)) {
recv(SOCK, $str, 256, 0) || (close(SOCK), return "$!");
}
else {
$str = "書き込みを受理しましたがサーバが混雑しています.書き込みが反映されない場合もあります.";
}
close(SOCK);
return $str;
}
ここまで来たんですね。
もう、凄いとしか。。。
ああ、和菓子職人が仕上げていく様子を、横で(口を緩めて)眺めている感覚。
ID末尾の識別子について
WILLCOMの「端末だけ」を識別することに何の意味があるのでしょう?("ポン厨"とか言われるのですが)
味/京ポンのような接続環境は、ダイアルアップ接続なPDA/モバイルなどもそうでしょう。
そして、コピペに不自由なWILLCOM端末を使うより、PDA/モバイルなどを使う方が悪質な荒らしが可能と思います。
繋ぐたびにIDが変わるISPのくくりで識別するというなら、まだ納得できます。
要はprinならセンターと分ける必要はなくて、同じ識別をしたらということです。dionとかも。
749 :
root▲ ★:2005/07/02(土) 14:29:13 ID:???0 BE:7387799-##
>>748 技術的には bbs.cgi での「特別扱い具合」を示しているですね。
つまり、bbs.cgi 内で他の端末よりも手厚く取り扱っているわけです。
で、私自身も京ぽん使いで、o が出る板(こことか)にちょくちょく書いているですが、
あんまりそうゆうこと言われたことないです。
>>749 あなたは名無しでレスしないから,気にならないのは当たり前です.
ここが匿名掲示板だということをもう少し考慮していただけると嬉しい.
>>750 確かにな
荒らし&言い掛かりを付けたい奴には、どんなしょーもない手掛かりでも
鬼の首を取ったものだからな > 0 O o P の識別
煽る奴は無視すればいいだけ
>システム用件と業務用件を切り分け出来ていない見本で砂
そうですねっ
* 挑発には乗らない。挑発するような人の意見は、たいてい誰も重要視しません。
どうせ識別されるとマズいようなレスばっかりしてるんだろ
755 :
748:2005/07/02(土) 22:09:17 ID:KCuDl3J/o
>>749 あーなるほど・・・、味ポンのブラウザがリファラ吐かないってやつですか。
しかし、京ポンはリファラ吐くにもかかわらず、味ポンルートで処理されるようになってしまったのですね。
なまじリファラ吐くせいで、クラシックから書こうとすると弾かれてましたっけか。
そのためリファラを無視するようにしたんじゃなかったですかね。なんか本末転倒…。
>>750 そうか。
でも、それで著しく不公平になったとは思えないんで
(AIR-EDGE PHONEユーザが日本全体で1000人しかいないとかだったら、
ひょっとすると不公平なのかもかもだけど)、
変える気は今のところないです。すんません。
757 :
root▲ ★:2005/07/03(日) 00:21:50 ID:???0 BE:6567089-##
>>755 で、2ちゃんねるではだいぶ前からリファラの有無のチェックはしているので
(少なくとも味ぽんや京ぽんが出るのよりも前から)、
なので、
> なまじリファラ吐くせいで、クラシックから書こうとすると弾かれてましたっけか。
> そのためリファラを無視するようにしたんじゃなかったですかね。
というのは正確ではなくて、
味ぽんからの書き込みに対応するために、AIR-EDGE PHONEセンターからの
アクセスではリファラを無視するようにした
というのが、たぶん正しいと思われるです。
当時、不動楽さん(= クラシックさん)がそのように対応したはず。
759 :
root▲ ★:2005/07/03(日) 14:11:37 ID:???0 BE:2463539-##
>>758 ふむ。
そのスレの384にこんな書き込みがあるので、確かに当時、何かしているようですね。
384 名前:不動楽 ★[sage] 投稿日:04/09/19 23:07:56 ID:???
>>381 IP帯域及びリファラエラーの調整してみました。
どうでしょ?
今のbbs.cgiでは、
・AIR-EDGE PHONEセンターのIPアドレスレンジからの接続だったら(*1)、
・リファラの扱いは他の携帯電話と同じ扱いにするけど、
・識別情報が来ないので、ID生成やSamba24はPCと同じに扱う
って、なっているです。
ようは、携帯とPCの中間みたいな扱いですね。
AIR-EDGE PHONEも識別情報を送ってきてくれると、楽なんですが。
(*1)
http://www.willcom-inc.com/p_s/products/airh_phone/ip.html
760 :
root▲ ★:2005/07/03(日) 14:15:29 ID:???0 BE:1368735-##
(以下余談)
そういえば、AIR-EDGE PHONEでできるゲームか何かで、
識別情報を送ってこないのを悪用(?)して、
1台の電話機で複数個参加するとかやっている人が横行しているとか、いないとか。
次の京ぽんでは識別情報を送るようになってほしいなぁと、ゆっておこう。
コロプラノコトカ-------Σ(゚д゚)
762 :
名無し募集中。。。:2005/07/06(水) 23:13:29 ID:0YvouOu40
なんでわざわざ何で書き込んでるとかわかるようにするの
prin規制が掛かりました。今回の原因はPC用のprinが原因の様です。
AIR-EDGEセンター接続かどうかが判別できるようなった今、センター接続を規制の対象から外して頂くことはできないものでしょうか?
きっとスレ違い
たぶん板違い
765 :
ちょろ ★:2005/07/12(火) 19:01:24 ID:???0
再確認でーす
IsKoukoku は bbspinkや2ch のbananaサーバで
するーする事は絶対にない
あってますか?
次オンラインになったら、
レスするです。
│_A
│・−・)
>>522-561を見る限り、
↓ ⊂) LAが高かったらIsKoukokuスルーはどの鯖にも入ってそうっすね
768 :
root▲ ★:2005/07/12(火) 20:17:18 ID:???0 BE:2189838-###
○ 現在のbbs.cgiにおける、IsKoukokuを実行するかを決めるアルゴリズム:
1) まずIsKoukokuを実行するかどうかは、
bbs_mainの最初のほうで、mumumuIsIsKoukoku関数を呼んで
その結果をもとに決めている。
2) 1) は1投稿ごとに呼ばれ、チェックされる
3) 2) でいったん「IsKoukokuを実行しない状況」と判断したら、
mumumuIsIsKoukokuの呼び出しそのものをキャンセルし、
その船が自爆するまでの間、ずっと「IsKoukokuを実行しない状況」になる
4) mumumuIsIsKoukokuでは、以下のアルゴリズムにより判断する
a) リストにあるサーバ(特別サーバ)かどうか調べ、もしそうならIsKoukokuは実行しない
現在の特別サーバのリスト:
live16, live20, live21, ex11
b) その瞬間のサーバのLAを調べ、一定の閾値以上だったらIsKoukokuは実行しない
現在の閾値:
cobra 30.0
tiger 20.0
banana 4.0
5) 現在IsKoukokuを実行している状態かそうでない状態かは、
各板のindex.htmlに「+Rock54」と出ているかいないかで判断できる
している状態:
BBS.CGI - 2005/07/05 (SpeedyCGI) +Rock54 +BBQ/BBM +Samba24=10
していない状態(例: news4vip)
BBS.CGI - 2005/07/05 (SpeedyCGI) +BBQ/BBM +Samba24=15
769 :
root▲ ★:2005/07/12(火) 20:25:18 ID:???0 BE:2918584-###
ということで、
>>765 の結論ですが、
2ちゃんねる/PINKちゃんねるのいずれも共通に、
1) 負荷が上がって、サーバが苦しくなってきた場合、
自動的にIsKoukokuをするーするようになる
2) 負荷が下がると、順次船が入れ替わっていくことにより
自動的にIsKoukokuをするーしなくなる
という動作をします。
これにより特にサーバに書き込み集中で負荷がかかった時に
「手でbbs.cgiやread.cgiを止めて冷やさなければいけない」とか、
「bbs.cgiの爆発時にbbs.cgiの処理が転んでしまう」
といったことの回数が、減ったように思います。
animeサーバもこれともうひとつの安全装置を入れてから、
例の「土曜夕方のどーん」にも、耐えられるようになりました。
770 :
root▲ ★:2005/07/12(火) 20:26:45 ID:???0 BE:1641863-###
ということで、以上です。
なお、もうひとつの安全装置は
・LAが閾値を超えたら、index.html / subback.html の更新をある程度さぼる
となっているです。
771 :
ちょろ ★:2005/07/12(火) 20:36:20 ID:???0
広告爆撃が増加してきたんで
ISKoukoku はスキップしないでくださいー
したとしても、live系だけかと、
2ch&bbspink の banana サーバは絶対にスキップしないでください
772 :
root▲ ★:2005/07/12(火) 20:38:31 ID:???0 BE:7387799-###
>>771 了解です。
これから、LAでのIsKoukoku閾値チェックの部分をはずします。 in bbs.cgi
ex11 (news4vip) は、どうしましょうか。
773 :
ちょろ ★:2005/07/12(火) 20:39:08 ID:???0
ex11 はどっちでもいいような、
774 :
root▲ ★:2005/07/12(火) 20:40:01 ID:???0 BE:3830876-###
ただし、animeサーバでのLA=20でのIsKoukokuスキップだけは、
従来どおりとさせていただきます。
これが働くのは、1週間のうちの5分だけのはずです。
775 :
root▲ ★:2005/07/12(火) 20:40:18 ID:???0 BE:5746379-###
776 :
ちょろ ★:2005/07/12(火) 20:43:12 ID:???0
あと 通称形態バーボンの早期投入が望まれています。 from 規制議論板
777 :
ちょろ ★:2005/07/12(火) 20:43:24 ID:???0
携帯だった
778 :
root▲ ★:2005/07/12(火) 20:45:55 ID:???0 BE:729942-###
>>776-777 若者の動向を、どうこうしないといけないのかしら。
# 大学生は、そろそろしけーんのシーズンかも。
779 :
root▲ ★:2005/07/12(火) 20:52:06 ID:???0 BE:1642829-###
BBS.CGI - 2005/07/12
- banana サーバではLAに関係なく、常にIsKoukokuを実行
- ただし「特別サーバ」に指定したらするー
780 :
ちょろ ★:2005/07/12(火) 21:12:30 ID:???0
game10
game9
etc4
life7
hobby7
もスルーして欲しくないです。
781 :
root▲ ★:2005/07/12(火) 21:13:25 ID:???0 BE:5746379-###
携帯Rock54ってのも、ありなのかな。
自動バーボンというか、自動BBMか。
782 :
root▲ ★:2005/07/12(火) 21:18:37 ID:???0 BE:5745997-###
>>780 了解です。
tiger では LA=20 で発動なので運良くこれまで一度も起こっていませんが、
ex/anime/news以外は、bananaと同じ処理にしておきます。
783 :
root▲ ★:2005/07/12(火) 21:19:51 ID:???0 BE:3283766-###
でもetc4は、電車男の時がちょっぴり心配かもね。
ま、いっか。その時はその時ということで。
>>781 ネタ的には暖めているですです。
・自動でBBR→BBM
785 :
ちょろ ★:2005/07/12(火) 21:24:48 ID:???0
うーん
基本的には、、、全部onにして欲しいんだが、
なぜかというと、on/off は私たちには通常わからないので
効いているのか/いないのか
設定したのが あっているのか/あっていないのか
等がわからないのだ、「あぁ スルーしているから仕方ないんだよね」
で話しは終わってしまって、だれもそれ以上は深く考えないで
結局効いていないという風になってしまうのだ、
liveとex11以外は効かせて欲しいです
(anime は shar だかを ex11 に移転すればいいのかな?)
規制情報板まわりのコストがはげしく上昇しています。
>>785 > (anime は shar だかを ex11 に移転すればいいのかな?)
(ノ∀`)アチャー
787 :
root▲ ★:2005/07/12(火) 21:31:25 ID:???0 BE:912252-###
あと、ex10&ex11のBBMが動いてない気がするんですけど…
789 :
root▲ ★:2005/07/12(火) 21:40:31 ID:???0 BE:3830876-###
・bananaサーバでは必ず実行
・他の該当するサーバ(live系とex11)では必ず実行しない
・それ以外は必ず実行
にしました。
>>788 ex10とかex11のように常時投稿数が多いサーバは、
たまに自動的に止まる(安全装置が働く)ようです。
理由は、、、ううむ。
live系ですらこのような状況で止まることはないようなので、
単なる投稿数ではない、何か別の理由を疑い始めています。
790 :
root▲ ★:2005/07/12(火) 21:41:55 ID:???0 BE:5837388-###
・bananaサーバでは必ず実行
・他のサーバ(tiger/cobra)のうち該当するサーバ(live系とex11)では実行しない
・それ以外のサーバは必ず実行
にしました。
IsKoukoku周りでLAで動的に判定する部分のコードは、全てコメントアウトしました。
# いったん、オフライン。
791 :
root▲ ★:2005/07/12(火) 21:42:27 ID:???0 BE:3830876-###
792 :
ちょろ ★:2005/07/12(火) 21:42:37 ID:???0
はーい
今晩 bbs.cgi さわります
samba値を SETTING.TXT で指定
793 :
桶屋:2005/07/12(火) 21:46:04 ID:aFhCYHbJ0
おおっ、ついに!
SETTING.TXTを変更するCGIも忘れずにー
>>794 F22のように、一元管理をすると楽かもね♪
各鯖にそれぞれログオンするよりも、どこかの鯖で全板を管理しちゃうとかとか。
でも700板以上あるのよねぇ(汗)@SETTING.TXTの数
796 :
桶屋:2005/07/12(火) 22:07:50 ID:aFhCYHbJ0
ん?
変更人さんのお仕事を、サーバの管理者に一元して移してしまうということですか?
700以上って・・・恐ろしい数ですね。
で、いくつにするの?
60くらい?
というわけで、携帯バーボンは若者にがんがってもらっちゃうてして、
私は凄腕さんと、Rock54の携帯用拡張、名付けてRock54Mをやることにしよう。
で、Rock54Mからは将来的に、自動的にBBMに突っ込んでしまうようにしよう。
わーい
記念パピコ
802 :
root▲ ★:2005/07/13(水) 00:22:22 ID:???0 BE:912252-###
Rock54Mはbanana238に作ることになるわけだけど(今のRock54に同居)、
その作業は、システムの検査が終わった後で。
基本的には、今まで「無駄弾」を撃っていた
携帯からの広告投入に対応する器を作って、そこに入れ込むってかんじで。
803 :
root▲ ★:2005/07/13(水) 01:33:19 ID:???0 BE:1094562-###
で、banana238のシステムそのものは健康であることが判明したため、
こっちは、たんたんと。
804 :
root▲ ★:2005/07/13(水) 01:34:31 ID:???0 BE:3192757-###
で、ネットワーク的には、
今までBBXに行っていた携帯からの広告投げの弾(無駄弾)を、
BBN(仮称)にとばすようにするだけなので、238の負荷は変化ないです。
あとは、単独スレ立ててそっちでやるかな。
携帯ユーザーとして、詳細キボンヌ
>>805 Rockに登録されてる広告をマルチしてる携帯を自動的に永久アク禁にするシステム。
807 :
root▲ ★:2005/07/13(水) 02:16:40 ID:???0 BE:1642829-###
やば、誤爆。
bbsテーブルには、729板登録されています。
811 :
動け動けウゴウゴ2ちゃんねる:2005/07/17(日) 01:43:54 ID:MavNy2ze0
BBSが止まってますと表示されますが、何が原因でしょうか?
>>811 掲示板システムの意味のBBSじゃないから気にしないで由
813 :
動け動けウゴウゴ2ちゃんねる:2005/07/17(日) 01:46:24 ID:MavNy2ze0
ありがおう
814 :
動け動けウゴウゴ2ちゃんねる:2005/07/18(月) 21:40:37 ID:Cy7spHeg0
ここはレベルが高いインターネッツですね
>>522 糞コードだけど、これはダメ?
use strict;
print "Content-type: text/html\n\n";
chomp (my $uptime = `uptime`);
$uptime =~ /load average: ([0-9\.]+), ([0-9\.]+), ([0-9\.]+)/;
print "1min:$1, 5min:$2, 15min:$3";
816 :
一般民:2005/07/21(木) 15:01:46 ID:Jxz++eR80
お忙しいところすみません、一般民としてなのですが…
Over1000したときに出る『Over 1000 Thread』
に、日付と時刻を入れるのがよいかと思ったのですが。
普通のレスと同じ様な要領でも結構ですし。
1000の日時と大差ない気が
だとread.cgiで1000の日時を表示するようにした方が・・・
ってこれはread.cgiスレ行きだなw
>>815 > `uptime`
このコストがもったいないべ
>>818 そうなのか?
read.cgiはdat表示するだけだからいじるならbbs.cgiかと思ってこっちに誘導したんだけどw
>>802 1001に組み込むならbbs.cgi、
1000も表示するならread.cgiかとw
>>821 そういうことか
read.cgiで1と1000と1001を表示するってことか
ならread.cgiだね
それ以前になぜ弄る必要があるかって話しだな
そのままでも不都合はないのに
同意、1000の日時とほとんど同じだから変える必要ないよ
1001行ったスレは1000の日時が●無しでは分からないと思われ。
>>819 んじゃこれは?
…と思って書こうと思ったスクリプトがCpuLoad.pmとそっくりだった(´・∀・`)
>最終時刻の件
1000未到達スレとの区別をしないといけなくなるし、
1001連続で終わるケースを考えるとさらに複雑に。。。
よって実現させるならbbs.cgiをいじる方がいいと思う
>>815 Linuxだと
# uptime ; cat /proc/loadavg
05:37PM up 321 days, 20:27, 2 users, load average: 0.01, 0.03, 0.05
0.01 0.03 0.05 1/71 25924
とかあるんだがポータビリティ考えると使わない方が良いのかな?
確かに普通だと完走したスレはいつ完走したのかわからんかった
>>815 →print "Content-type: text/html\n\n";
print "Content-type: text/plain\n\n";
ですね♪
open LA, 'uptime |';
$la = <LA>;
close LA;
んーわざわざモジュールを使わなくてもいいような。。
重くていいならね
ていうかたかだか20レスの流れぐらい嫁と
>>832とCpuLoad.pmの中身が実質同じである件
my $fh=new IO::File('/usr/bin/uptime|');
if (defined $fh) {
my $line = <$fh>;
$fh->close();
if ($line =~ /(\d+\.\d+)\s*,\s+(\d+\.\d+)\s*,\s+(\d+\.\d+)\s*$/) {
return ($1, $2, $3);
} # if we can parse the output of /usr/bin/uptime
} # if we could run /usr/bin/uptime
・ FreeBSD / OpenBSD は getloadavg() 実行
・ Linux は /proc/loadavg 読み出し
・ それ以外は /usr/bin/uptime 実行
ってなってますね<Sys::CpuLoad
っていうか Solaris でも getloadavg() あるんで......
--- README Tue Mar 19 08:24:02 2002
+++ README Tue Mar 19 08:24:02 2002
@@ -9,7 +9,7 @@
TO-DO
- - Better getloadavg() support. Currently FreeBSD and OpenBSD
+ - Better getloadavg() support. Currently FreeBSD, OpenBSD and Solaris
are supported. To improve upon this, see the next item below.
- Instead of hard coding preprocessor macros around getloadavg(),
try to compile C code snippets to see if getloadavg() is supported.
--- CpuLoad.pm Tue Mar 19 08:41:39 2002
+++ CpuLoad.pm Tue Mar 19 08:41:39 2002
@@ -54,8 +54,8 @@
sub load {
- # handle bsd getloadavg(). Read the README about why it is freebsd/openbsd.
- if ($cache eq 'getloadavg()' or lc $^O eq 'freebsd' or lc $^O eq 'openbsd' ) {
+ # handle bsd getloadavg(). Read the README about why it is freebsd/openbsd/solaris.
+ if ($cache eq 'getloadavg()' or lc $^O eq 'freebsd' or lc $^O eq 'openbsd' or lc $^O eq 'solaris') {
$cache = 'getloadavg()';
return getbsdload()
}
--- CpuLoad.xs Tue Mar 19 08:16:14 2002
+++ CpuLoad.xs Tue Mar 19 08:16:14 2002
@@ -18,7 +18,7 @@
PREINIT:
double loadavg[3];
PPCODE:
-#if defined(__FreeBSD__) || defined(__OpenBSD__)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || (defined(__sun__) && defined(__svr4__))
getloadavg(loadavg, 3);
#endif
EXTEND(SP, 3);
手元のlinuxでもgetloadavg()ありますな
一応貼り。
830 名前:マァヴ(゚赫゚;) ◆jxAYUMI09s :2005/07/25(月) 00:37:05 ?###
HNに顔文字入れようと思うと、「;」から先がクッキーに残らないのでめんどくさいんだな(^_^;)これが
835 名前:▲ ◆cZfSunOs.U :2005/07/25(月) 00:44:26
>>830 >「;」から先がクッキーに残らない
index.html や read.cgi 出力での JavaScript コードを
http://www2.2ch.net/snow/index.js に入れ替えて,bbs.cgi での NAME, MAIL の Cookie 設定を JavaScript 側に移管すると,
それも解決しますけどね.
839 :
動け動けウゴウゴ2ちゃんねる:2005/08/08(月) 19:30:09 ID:tRVacNbU0
841 :
root▲ ★:2005/08/10(水) 00:55:09 ID:???0 BE:1095326-###
>>840 んと、携帯の顔文字とかSJISの範囲外の文字とかは、どうするのがよいかしら。
あ、bbsdさんがSETTING.TXTのUNICODEのやつを読んで、セットされていたら
はじくのをスキップすればいいのかな。
>>841 弾くのは Shift JIS のバイトシーケンスとして矛盾がある場合なので
(実際上は FreeBSD のロケール / mbstowcs() の実装に依存しますが),
例えば &#xxxx; の形式(実体参照)であれば無問題ですね.
843 :
root▲ ★:2005/08/10(水) 05:11:26 ID:???0 BE:2736656-###
>>842 なるほどです。
んじゃ、丸付き数字とかののたんの口とかはイカンのではないかしら。
( ´D`)<???
>>843 ん〜と......細かい部分は OS のロケール実装に依存するかとは思いますが,
機種依存文字か否かということとバイトシーケンスとして正当か不当かというのは
必ずしも同一ではないですね.機種依存文字というのはベンダ定義文字や
ユーザ定義文字に該当するのでしょうが,その部分は単に opaque に扱うだけで,
個々のコードがどんな文字を表しているかまでは関知しないので.
不正バイトシーケンスというのは例えば Shift JIS の1バイト目で
文字列が途切れているなどの場合ですが,機種依存文字であっても
Shift JIS の1バイト目・2バイト目のペアの並びとして矛盾がなければ,
それは不正バイトシーケンスということにはならないです.
846 :
root▲ ★:2005/08/10(水) 08:22:48 ID:???0 BE:1368735-###
>>845 なるほど、確かにそうですね。
SJISの「ルール」で合格であれば大丈夫という実装も、ありえるです。
帰国後落ち着いたらいろいろと動かし始める皮算用なので、その時にでも。
AIR-EDGE PHONEマーク "o" って意味あるんですか?
全規制が回避できないのなら、やめて欲しいです。
>>847 Q.IDの後ろに付いてるOとかPとかoとか0ってなに?
A.書込み手段を区別する目印です。
携帯が O (大文字のオー)、 公式p2(
http://p2.2ch.net/ )が P、
AIR-EDGE PHONEが o (小文字のオー)、
それ以外が 0 (ゼロ)です。
荒らし対策の一環として、一部の板に便宜上導入されています。
テンプレ貼れないの人はチェック
http://sv2ch.baila6.jp/chk_proxy.cgi 下の方のBBXチェックで
La ROCA es la vida.( ̄ー ̄)ニヤリッ
と出てる人はその書き込みを諦めましょう
諦めず連投しているとアク禁等になります
機種依存文字ってのはこのあたりですかね.
http://www.freebsd.org/cgi/man.cgi?query=mskanji The first ranges ......
0xED - 0xEE (not JIS: NEC-selected IBM extended characters),
0xF0 - 0xF9 (not JIS: user defined), or
0xFA - 0xFC (not JIS: IBM extended characters).
sunos.saita.ma で拝借している tiger 上で確認したところ,
そのあたりのレンジのキャラクタもちゃんとパスするようです.
ただ,FreeBSD の mbstowcs() では,"\x81<" のように < が Shift JIS の
2バイト目として食われてしまうケースを弾けないということもわかったので
(< は Shift JIS の2バイト目としては不正なので弾くべきではあるんですが),
mbrlen() でもうちょっと細かくチェックするように変更しました.
----------------------------------------------------------------------
で,bbsd の方もマターリと改良を加えていました.live22 姉妹再稼働の際には更新をお願いします.
http://sunos.saita.ma/bbsd.c ・ -b オプションで IP アドレスだけでなくホスト名も使用可能に.
(今後雪だるま系鯖が増えた場合,プライベートアドレスも
ホスト名で管理できた方が便利と思われるため)
・ worker スレッド数を可変式に.-n オプションでの指定は
-n [nthr_min-]nthr_max (デフォルト: max = 32, min = ceil(max / 8))
・ ステータス情報を取得可能に.
my $statmsg = bbsd($bbs, 'stat', "$logfilename:$logline"); # Perl スクリプト中
bbs.pl 板名 stat logfilename:logline # コマンドライン
("$logfilename:$logline" として : を含まない文字列を適当に指定すればログ出力せず)
ただ,sub bbsd {} 中で
recv(SOCK, $str, 256, 0) || (close(SOCK), return "$!");
となっている部分を
recv(SOCK, $str, 2048, 0) || (close(SOCK), return "$!");
ぐらいにしておかないと,返ってきた文字列が尻切れになってしまいます.
その部分を修正した bbs.pl, bbs_load.pl:
http://sunos.saita.ma/bbsd/bbs.pl http://sunos.saita.ma/bbsd/bbs_load.pl
>652 >666等を読むと、AIR-EDGE PHONEセンターのID識別子導入は、
荒らし調査のための暫定的な措置のように感じるんですが、外すことはないですか?
その識別子導入の元ネタであろうと思われる、
AIR-EDGE PHONEセンターとその他のPRINの個別規制の方はどうでしょうか?
あと、携帯関連板での荒らしへの予防策として、
携帯キャリア(通信方式やIP接続サービス)別の識別子を携帯関連4板への導入を提案します。
そのときはAIR-EDGE PHONEセンターも区別されるべきですね。
>>850 携帯からの荒らしだと(運営が)分かりやすくするための識別ですよ。
荒らし「予防」のための識別じゃないと思いますがね。
確かキャリア識別はする必要無いと言明していたな。
それが分かった所で規制する側には何もメリットは無いし、抑止効果のための識別じゃないからね。
パソコンのOSを識別するようなもん。
0とPは荒らし対策、oはbbs.cgi内で一寸特殊な処理をしているので
rootさんが参考に入れてるんじゃなかったっけ
>>853 Pも特殊処理(全規制スルー)だったような。
855 :
動け動けウゴウゴ2ちゃんねる:2005/08/31(水) 16:17:34 ID:ERQCF2M70
?
856 :
動け動けウゴウゴ2ちゃんねる:2005/09/06(火) 12:47:53 ID:muLUKym50
AIR-EDGE PHONEユーザーだけど、早くID末尾のoを外して欲しい。
857 :
動け動けウゴウゴ2ちゃんねる:2005/09/06(火) 12:59:34 ID:THbn48S/0
221
BBS.CGI - 2005/09/09
222.13.35.0/24 だったら Client_IP: を調べて、あればログに残す。
これで、Willcomへの通報は可能になったはず。
859 :
ちょろ ★:2005/09/09(金) 01:44:25 ID:???0
Client_IP をログに残すなら
判定しなくてもいいのでは?
>>859 最初はそう思ってたんですが、どうもGoogleしてみると、Client_IP: = HTTP_CLIENT_IP は、
非常に簡単に偽装できるらしいんですよ。
で「ここから来るHTTP_CLIENT_IPだけは信用する」っていうふうにしたと。
判定を増やすコストは、例のCIDRのパッケージを使っているので、
現在のbbs.cgiの合計コストから考えて、十分に小さいと判断したです。
で、以下余談なので帽子脱ごうと。
私が今回対応している理由のひとつは、自分も奥様もAIR-EDGE PHONEというか、
prinユーザだったりするからだったりします。
ppp.prin.ne.jpを永久全規制とかされたら奥様に何て言われるだろうか、、、
と思うと、書けないperlも書けたりするようです。
(´-`;).。oO(苦労してますね。。。)
やっぱり自分に都合のいいことはやるんだね。
グローバルIPをもってない人はもってください、と同じで、全規制されたら違う手段を使ってください、だろうに。
個人サイトですべての利用者が平等な必要があるのかと
865 :
動け動けウゴウゴ2ちゃんねる:2005/09/10(土) 18:05:54 ID:zB9Y0vkN0
Client_IPをログに残すだけなら判定は後回しでもいいんじゃ?と思った
(とりあえず記録しといて問題が起きたときに信用できるか調べる)
オレもAIR-EDGE PHONEユーザーだから応援する。
しかしJRCやめて早く新しい機種でないかなぁ。
>>861 あのーp2経由で2ちゃんに参加するってぇのは駄目なの?
>>867 私の名義の2枚のクレカで1つずつ買って、そのうちのひとつを奥様が占有使用しているです。
(奥様はクレカ作ってないんで)
そのクレカ、名義人本人以外が使って良いの?
本人が別々のクレカで二つ買ったのをひとつ与えてるんだろう。
というかスレ違い。粗探しはよそで。
叩きたいわけじゃないよ
何かあった時保障がないんじゃないかとちょっと心配しただけ
今は本人確認うるさいし
本人が良いならそれでいいんだけど
>本人が良いならそれでいいんだけど
余計なお世話と分かっているのに続けるのは粘着への第一歩かと。
愛があれば大丈夫です。
でも、愛が無くなった時が大変です。
>>875 コラッ!本人を目の前にしてそんなこと言うんじゃありません!
877 :
動け動けウゴウゴ2ちゃんねる:2005/09/17(土) 12:48:38 ID:VBcpY5C10
878 :
動け動けウゴウゴ2ちゃんねる:2005/09/21(水) 22:02:20 ID:fVZ+dGIa0
で?
ど?
881 :
動け動けウゴウゴ2ちゃんねる:2005/09/22(木) 17:38:23 ID:8luWl9mk0
う?
882 :
動け動けウゴウゴ2ちゃんねる:2005/10/09(日) 23:46:12 ID:o192VLCT0
よ?
か?
BBS.CGI - 2005/10/21
live16/20/22 を対象に、緊急時に発動するしかけを投入。
しかけを投入 => しかけの暫定版をとりあえず投入。
>>884
おつです
887 :
動け動けウゴウゴ2ちゃんねる:2005/10/24(月) 14:31:01 ID:b+V7uzLR0
「書きこみ&クッキー確認」の画面で、
[上記全てを承諾して書き込む]を押さずに、ブラウザの「戻る」機能で戻った場合、
次回以降、確認画面が出ずに、いきなり書き込めてしまいます。
このバグを悪用して、
俺は2chに書き込んではいるが、投稿確認に書かれた事項は承諾していない
と主張している困ったさんがいます。
簡単に直せるなら、直してもらえないでしょうか。
(そうすると、その人は書き込まなくなるでしょうから、
その人によるスレの話題の激しい脱線・罵り合いから、
スレが救われます。)
…
>>887 この話は前から出ているですね。
クッキー使っているわけですが、
*技術的に*、どうするのがいいんだべか。
[上記すべてを承諾して書き込む]じゃなくて、
ワンクリみたいに強制的に承諾させちゃえばいいんじゃない?w
>>889 ポチっとな♪する前に食わせちゃっているからかな。
ポチっとな♪したあとに食べさせれば。。。
専ブラ側でも対応が必要になってきますね、この問題。
cookieがセットされていないなら承諾画面を出してformに
「bbs.cgiしか知らないテンポラリキー\0名前欄\0メールアドレス欄\0本文」
のハッシュ(md5かなにか?)をhiddenで入れておく。
でもって、実際の書き込み時にcookieをセットする、という形にならざるをえないのではないかと。
コスト削減のためにID算出と同じ種を使っても良いかも。
あ、リモホを入れていないのは携帯など毎回代わってしまうところを考慮に入れているからです。
対応策として・・・
・クッキーに承諾したフラグを入れる入れないの問題
・カキコボタンにtarget=newを仕込むようにして新しい開くようにしてブラウザでバックできなくする
なんかがおもいつきでかけますが・・・どうでしょう>rootさん
>>894 あっと、これの後者はw3mとかのテキストブラウザの場合には使えませんね・・・
テキストブラウザでどれだけカキコがあるかにもよると思いますが、
かなり多いようであればnewWindow案は棄却だと思います。
>>894 二番目は意味がないです。
このケースではブラウザのバックボタンがつかえるかどうかはさしたる意味を持ちません。
それだけなら元のwindowでもう一度書き込みボタンを押せば突破できてしまいます。
>>897 やっぱそうでしょうねぇ
やはりクッキーで承諾フラグをつけるのが望ましいということですか。
>>889 「この画面を表示させた後の書き込みは、すべて上記内容を承諾したものとみなします。」の
一文でも書き加えればいいと思われ。
で、そうするとボタンのキャプションがくどいから、ボタンは「書き込む」だけに変更。
大人の世界の内容なんだからシステムで解決できないなら
大人らしく承諾させる内容だけで勝負を。
>>899 ゴネ厨がそれで納得するかどうかは難しいと思います。
法的に無効な契約とされかねませんし。
ボタンを押させる事が重要なのか。
それなら表示されるのと同じ内容をどこかにまとめておいて、
初回は強制表示で、2回目以降は表示させなくする判定をread.cgiで読み取って
read.cgiの書き込みボタンのキャプションを「○○を承諾して書き込み」に置き換えて、
承諾させる内容をまとめたページへの○○ってリンクを表示させるとか。
専用ブラウザは使うこと自体承諾したようなものだと思うし。
今
U) bbs.cgiにアクセス
B) クッキーが無い
B) 確認画面&クッキー発行(←表示した段階で発行!)
U)承諾ボタン押して送信 or 承諾ボタン押さず再度投稿
B) クッキーがある&その他問題無し
B) 投稿完了
変更案
U) bbs.cgiにアクセス
B) クッキーが無い
B) 確認画面
U) 承諾ボタンを押す
B) もし($FORM{'submit'} が "承諾云々")なら {クッキー発行};
&他各種投稿の処理
B) 投稿完了 or 何かエラー(←この返事の段階で発行!)
U = ユーザーの操作
B = bbs.cgiの処理
>>902 手元に承諾form同等の機能だけもったform置いたら突破できますよ、それ。
承諾するとは言ったがその利用規約を承諾した覚えは無い。
というのが通用するならね。
投稿規約を承諾するとは言ったが投稿規約を承諾した覚えは無い
の方が良いかな。
荒らし対策じゃないんで、投稿を防ぐ必要は無いんだよね、別に。
承諾さえされれば。
承諾したくない困った人は、これを改良したとしても、
前回は承諾フォームが出て承諾して書き込んだが、
今回は承諾フォームが出なかったので、表示されもしない内容に承諾できるわけがない、承諾していない
と言い出すと思う。
書き込む度に、確認・承諾フォームを表示しないようにするのは、なぜでしょう。
転送量が厳しいから、その節約のためでしょうか。
つまりクッキーを持ってると表示されない・書き込めるということなら、確認画面を表示したことを
クッキーで確認していることとクッキーとともに書き込むデータをそぅしんしてきたら
自動的に確認画面の内容を承諾したとみなすと確認画面に書いてしまえばいいかも。
つーかシステム側で対応しなくても
http://info.2ch.net/guide/ あたりに
2chは以下の条件を承諾した方のみ書き込み可能です。
・投稿者は、投稿に関して発生する責任が全て投稿者に帰すことを承諾します。
・投稿者は、話題と無関係な広告の投稿に関して、相応の費用を支払うことを承諾します
こんな感じの項目を作ればいいんじゃないの?
>>910 「そんなところまで見てないから知らなかった」とか嘘でも言う奴が出るから
いろいろ話し合ってるわけで、
【きちんと】設置された承諾画面を【わざわざ】回避する措置を講じる者は
その時点で、それ相応の責任を負うと言わざるを得ないかと 何というか
一つの方法は、承諾ボタンと同時に、拒否ボタンを作っておくことかな
そして「拒否ボタンを押す以外の否認の方法はありません」とでも書く。
いずれにせよ、言い逃れができない形にしないと、たとえば2ch発の
書籍を作ったりする際にいろいろ問題が発生してしまいそうな気もする。
まあ、建前で表示してるだけだし。
通常の利用ではありえない方法で、規約に同意したかのような
データを送信して、そうであるから規約には同意していないのだ、
というのが通用するかどうかのな。
掲示板での議論ではなく、裁判で。
だから、まあ、建前を通していれば、不利になる事態は
そうは無いかな、とか。
そういった点で、通常の利用方法で、承諾しなくても承諾と
見なされている現状の改善が議題なわけだね。
承諾を回避して「そんな規約シラネ」というなら、拒否ボタンが
有ろうが無かろうが「そんな規約シラネ」なだけじゃん。
承諾メッセージは送信時に明示されるからいいとして、
裁判だと、「不具合があるのを知っていたにも関わらず対策をとらなかった」
式の判断で負けちゃう場合もありますよ。(心配性)
無理でなければ、なんらかの対策をとってほしいです。
承諾が必要な事を知りながら承諾を偽装した
と判断される事を心配しようよ。
荒らし対策と規約承諾を別々のクッキーで扱うのが面倒なら、
>>910をしつつ、投稿ボタンを全て「規約を承諾して書き込む」
にして、
もし ($FORM{'submit'} が "承諾云々" ではない) なら
{DispError("ERROR!","規約を承諾しないと投稿できません!");}
とか
専ブラが全滅だけどね。対応されるまで。
>>919 2ちゃんねる側が原告ならそれはありだけど、
被告側ではその意見はあまり意味がないな。
裁判ネタはこれ以上はスレ違い。
まあ、最近インスパイアのこともあってぴりぴりしてるから
これを機に徹底的に話し合って詰めた方がいいかもね。
>>920 専用ブラウザに対しては、UserAgentを見て従来通りの動作にする、というのはどうでしょう。
それを恒久策にするか、移行が済むまでにするかは、考えないといけないけど。
というか、あんなに防御していたのに、
スレッドが80超えちゃってたのがなぁ。
たぶんほとんど同時に何十本とスレ立て要求が来て、一気に追い込まれたんだと思われ。
何か、工夫が必要ですね。
スレ立て処理を実行中の船は、スレ立て処理をしないようにするとか。
グローバル変数でできるような気がするので、後で、考えてみよう。
うーむ、同じスレッドキーのスレができないようにするところって、
激しくうーむなような。
どうしたの?
安易なロック方式として、スレを立てるところで
どこか(板単位で分離が好ましい?)にunixtime%閾値をファイル名として/dev/nullからでもsymlinkを貼ってみて、
失敗したらスレたて拒否。成功したら建てる。
ガベージコレクトのタイミングで一番新しいヤツ以外を削除するようにすればおっけ。
マルチスレッド/タスクを考慮するならこれが一番コストがかからないと思いますがどうです?
閾値はスレたての最大間隔ね。最小1秒になることもあるけど2スレ連続ならまぁ許容範囲内ではないかと。
ん?
Perlでのまともなlockの方法って、2年ほど前の再開発スレでrootさんが話題にしてましたよね。
そのレベルは脱した上で「うーむ」なことに成っているのだと解釈。
ほぼ同時にスレ立て要求→同時に数十本もスレ立っちゃった→スレッドキーみんな同じだ→しかも今夜が山だ
こんなところ?
今の bbs.cgi は、同じスレッドキーのやつが立たないようにするコードが
ちゃんと入っているです。
ようは、その実装方法がうーむだと。
do {
#サブジェクトがあれば新規スレなのでキーを現在に設定
$GB->{FORM}->{'key'} = $GB->{NOWTIME};
#.datファイルの設定
$DATAFILE = $GB->{DATPATH} . $GB->{FORM}->{'key'} . ".dat";
} while ( -e $DATAFILE ) ;
これって、$DATAFILE が既に存在してたら、無限ループに陥るんではないかしら。
不動楽さんが入れたやつですね
2chの動作報告はここで。 パート15
http://qb5.2ch.net/test/read.cgi/operate/1090485214/676-685 ==========================================
676 削除車 ★[sage] 04/11/01 23:25:56 ID:???
お疲れさまです。ちょっとご相談があります。
最近ニュース速報(VIP)が、非常に板飛び回数が多いです。
少しお話を窺ったところ、同じタイミングでスレが立ったときに合体を起こして、板が飛ぶみたいです。
お手数ですが、ちょっとcgiの方を確認していただけますか?
(それとも一般的なことで、VIPでたまたま多く発生しているだけなんでしょうか)
よろしくお願いします。
★板のスレ一覧復帰&修正依頼21★
http://qb5.2ch.net/test/read.cgi/operate/1096548247/677-682 679 不動楽 ★ [sage] 04/11/02 00:45:12 ID:???
>>676 原因らしき個所は炙り出せたのですが、
その変数にからむ処理を上から眺めていきますので、
少しお時間を頂きたいです。
>(それとも一般的なことで、VIPでたまたま多く発生しているだけなんでしょうか)
ex7だけでなく、全板のbbs.cgiで同じことが起こる可能性があるようです。
684 root▲ ★ [sage] 04/11/02 02:08:27 ID:???
直すときには、安易な flock() は控えてほしいなぁと強くおながいしておきますです。
685 不動楽 ★ [sage] 04/11/02 02:13:12 ID:???
>>684 排他処理をしていないのが原因、というわけではないので大丈夫かと思うです。
==========================================
それについて書こうと思ったら、
>>933 が。
それは、これですね。
上記よりも後、最後ところでやっているです。
if($GB->{FORM}->{'subject'} ne "" && -e $DATAFILE){
&DispError2($GB,"ERROR!","ERROR:板飛びそうなので、またの機会にどうぞ。。。");
}
ということで、それはクラシックさんが入れたところではないと思います。
昔からあったところだと思う。
*以下推測*
たぶん、昔は do 〜 while のところでもtime; していたんでしょう。
それなら、1秒経てば条件が変わります(ループを抜けるかは別)。
コピペみすった。
コメントつきなので、ほぼ間違いないです。
#==================================================
# 板飛び回避策
#==================================================
if($GB->{FORM}->{'subject'} ne "" && -e $DATAFILE){
&DispError2($GB,"ERROR!","ERROR:板飛びそうなので、またの機会にどうぞ。。。");
}
で、ここの制御を変えようと思うわけです。
安易に、
・live系は既にあったらごめんなさい
・他はスレッドキーを+1しながら、最大3回ぐらい試してみる
ってことにしようかなと。
BBS.CGI - 2005/10/26
$GB->{FORM}->{'key'} = &mumumuAllocateThreadKey($GB);
$DATAFILE = $GB->{DATPATH} . $GB->{FORM}->{'key'} . ".dat";
にした。
で、mumumu AllocateThreadKeyの中身は
>>936 にしたつもり。
これで、
・bbs.cgi謎の暴走
・スレ立て混雑時にサーバ劇重
が、少しでも改善されるといいかなと。
スレッドキーは毎秒かわるんでしたっけ、でしたらこんなのはどうですか?
0. ロックの待ち番号を0で初期化
1. ロックの待ち番号をファイル名にして/dev/nullからsymlinkしてみる
成功; → 6へ
2. ロックの待ち番号を1カウントアップ
3. ロックの待ち番号最大値を超えてるかチェック
超えてる: → 建てたい人大杉表示にして諦める
4. 1秒まつ
5. 1へ
6. ロックの待ち番号が0か?
はい: 9へ
7. 0.5秒待つ。
8. ロックの待ち番号-1をsymlinkしてみる
失敗: → 7へ
成功:
ロックの待ち番号をunlink
ロックの待ち番号を-1
6へ
9. スレたて処理
>>938 最初はそういうのを考えていたんですが、
1秒とか0.5秒とか待つのが、いやだったです。
スレッドキーは所詮本当の時間とあっている必要はないので、
・live系はごめんなさい
・通常系は 0 +1 +2 を試して、だめならごめんなさい
ぐらいのいい加減さにして、一刻も早くbbs.cgiに終わっていただくことにしました。
それだと、多台数とかからスレたて攻撃が同時に来たときにやっぱり被害が起こることは避けれないと思いますがどうでしょう。
計算量がO(n * log n)で収まれば収束しないか?
メモリ上に前回のスレキーを持たせたファイルを置いてそれを参照
とかは無理だろうしなぁ…
(素人案だし毎回読み込みとか(ry)
>>940 if ( ! -e datファイル ) {
return それでOKよん;
} elsif ( ! live系 ) {
for ( $i = 0; $i < $maxtries; $i++) {
スレッドキーを一つずつ増やして存在チェックし、なかったやつを
return これ使ってちょ;
}
&error(ごめんなさい);
って、なっています。
というわけでおっしゃるとおり、タイミングにより突破もありえます。
その場合は、
>>935 でひっかかると。
でもそれにしても、ほんとうは完璧じゃないです。
雪だるま作戦では、このへんはバックエンドプロセスに依頼する形になるので、
その時に、きちんと対応することになるかなと。
てなわけで、-e でdatファイルの存在をチェックしていたり、
924の処理のところみたいに utime でdatのタイムスタンプ更新したりすることは
雪だるま環境ではそのままではむりぽなわけで、
そういったAPIを、入れ込んでほしいということなわけです。
一つ海外出張がキャンセルになってちょっと落ち着いたので、
このへんを、ぼちぼちあっちですすめようかなと。> SunOSさん
で、
>>937 により「ごめんなさいリミッター第二弾」が実装されました。
どのくらい、発動しているんだろうか。
ん〜と,現在の bbsd ではスレ立て時の key をインクリメントしながら一定回数(現在は16)
リトライするようになっています.その際,open() を O_CREAT|O_EXCL フラグ付きで
呼び出しているため,ファイルの存在確認と生成はアトミックになっているはずです.
当初はスレ立て時の key としては bbsd 側の現在時刻を用いていましたが,
それだと headline に渡す key とのずれが生じる問題も発生したため,
現在は bbs.cgi 側から渡された key を使用するようになっています.
ただ,上記の key のインクリメントが発生するとやはりずれが生じることに
なるので,そこの調整をする仕組みが必要になりますかね.
単純に,bbsd 側ではリトライせず,key をインクリメントした上でのリトライは
bbs.cgi 側に任せるという形でもいいんですかね.同じ key を持つ dat が
存在した場合,bbsd は EEXIST に相当するエラーメッセージを返すことになるんで.
948 :
root▲ ★:2005/10/26(水) 23:48:08 ID:???0 BE:1459744-###
>>946-947 なるほど、なるほど。
bbsdについては、そのうちoperateにスレ立てるかも。
(いろんな意味でhtml化されてほしいし)
949 :
root▲ ★:2005/10/27(木) 01:36:28 ID:???0 BE:2554447-###
で、スレ立てのAPIの戻りで、実際に立ったスレのキー(だめなら-1)を、
戻すとかすればいいと思うです。
>>946-947
ロックのループにはまった時はスレキーとかに使うUNIX時間なんかを
新たに取り直した方がよくね?
でもスレ立て処理は排他ロックさせずに複数同時進行してそうだし、
ロックのループが1秒待ちでもなさそうだから関係ない話か。
>>949 成功時は key,失敗時はエラーメッセージを返し,戻り値が
数値か文字列かを bbs.cgi 側で判定してもらうというのはどうでしょうか?
スレ立てが失敗する原因は EEXIST 以外にもあり得るので
(といっても実際はまれでしょうが),エラーの内容がわかった方が
異常発見もしやすくなるかと思いますし.
952 :
root▲ ★:2005/10/28(金) 02:41:02 ID:???0 BE:3830876-###
>>951 悪くないと思いますです。
週末あたりから、APIを詰めていくスレをoperateに立てようかと。
ほんじつは、ここまで。
953 :
root▲ ★:2005/10/28(金) 17:10:58 ID:???0 BE:821333-###
てすと