From morisita.tooru @ nttcom.co.jp Mon Oct 19 15:12:52 2009 From: morisita.tooru @ nttcom.co.jp (=?ISO-2022-JP?B?GyRCPzkyPEUwGyhC?=) Date: Mon, 19 Oct 2009 15:12:52 +0900 Subject: [Ultramonkey-l7-develop 550] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <20091016.231103.75173118873192452.kt@wheel.jp> References: <20091016.135726.1076064299562621145.tateishi.katsuyuki@oss.ntt.co.jp> <4AD83889.6020907@nttcom.co.jp> <20091016.231103.75173118873192452.kt@wheel.jp> Message-ID: <4ADC0364.3040709@nttcom.co.jp> 立石様 森下です。お疲れ様です。 そうですね。 l7vsadmコマンドを自動発行する処理側で、 リトライ等の処理を行うのであれば、 l7vsadmでの処理は不要になると思います。 自動発行元が複数あるので、どこから発行されても 良いようにこういう実装になったと思います。 l7vsadmコマンドを自動発行する処理があるのは、 /etc/init.d/l7vsdとl7directord... おっと、l7guiもありますね。。。 TATEISHI Katsuyuki さんは書きました: > 立石です。 > 情報ありがとうございます。 > > From: 森下徹 > >> l7vsadmのリトライ処理の経緯ですが、 >> >> これは、たしか起動時にl7vsdが自動起動される場合、 >> l7vsdが上がりきる前に、l7directordがl7vsadmコマンドを >> 発行してしまい、エラーとなる事象が判明し、 >> そのために入れている機能です。 > > なるほど。 > > だとすると、/etc/init.d/l7vsd が start 時に、l7vsadm -l -n が > 正常終了するまで終わらないようになれば不要な機能だと思ってい > いですか? > > 例えば以下のように: > ============================================================ > diff --git a/init.d/l7vsd b/init.d/l7vsd > index ff78711..61cdfb6 100755 > --- a/init.d/l7vsd > +++ b/init.d/l7vsd > @@ -42,6 +42,17 @@ start() { > echo "done." > pidof $PROG > $PIDFILE > touch $LOCKFILE > + con_count=10 > + con_interval=1 > + while [ $con_count -gt 0 ] > + do > + l7vsadm -l -n > /dev/null 2>&1 > + if [ $? -eq 0 ]; then > + break > + fi > + con_count=`expr $con_count - 1` > + sleep $con_interval > + done > fi > > return $RETVAL > ============================================================ > heartbeat 用 RA の L7vsd 内からも /etc/init.d/l7vsd を呼んで > いるので、これで良いかなと思いますが、他に問題の発生しそうな > ところがあれば、教えていただければと思います。 > > -- > TATEISHI Katsuyuki > > _______________________________________________ > Ultramonkey-l7-develop mailing list > Ultramonkey-l7-develop @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-develop > > > From tateishi.katsuyuki @ oss.ntt.co.jp Mon Oct 19 16:14:31 2009 From: tateishi.katsuyuki @ oss.ntt.co.jp (TATEISHI Katsuyuki) Date: Mon, 19 Oct 2009 16:14:31 +0900 (JST) Subject: [Ultramonkey-l7-develop 551] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <4ADC0364.3040709@nttcom.co.jp> References: <4AD83889.6020907@nttcom.co.jp> <20091016.231103.75173118873192452.kt@wheel.jp> <4ADC0364.3040709@nttcom.co.jp> Message-ID: <20091019.161431.373424478426898866.tateishi.katsuyuki@oss.ntt.co.jp> 森下さま、 立石です。お疲れさまです。 From: 森下徹 Subject: [Ultramonkey-l7-develop 550] Re: l7vsadm の無駄なタイムアウト待ち Date: Mon, 19 Oct 2009 15:12:52 +0900 > そうですね。 > l7vsadmコマンドを自動発行する処理側で、 > リトライ等の処理を行うのであれば、 > l7vsadmでの処理は不要になると思います。 > > 自動発行元が複数あるので、どこから発行されても > 良いようにこういう実装になったと思います。 うーむ。 ちょっと認識違いがあるかもしれませんので、念のため補足させて ください。 ・前回送ったパッチのようなリトライ処理を l7vsadm コマンドを自 動発行する処理側すべてに実装するわけではありません。 ・ではどこでリトライするのか? -> それは /etc/init.d/l7vsd startの中です。前回送ったパッチ により、 /etc/init.d/l7vsd start が終了したときに 「l7vsd起動が完了している」または「l7vsd起動に失敗した」 ことが保証されるので、「起動途中」という半端な状態に備え てl7vsadmでリトライする必要がなくなります。 ・その後は l7vsadm をどこから呼ばれようとも「起動が完了(not 失敗)してないため接続にリトライが必要」という事態は起こらな いはずです。 というわけで、リトライが必要なのは /etc/init.d/l7vsd (の start のとき)のみ、あとは不要。というのが前回パッチの主張す るところなんですが、何か見落としてるところとかあれば、ツッコ ミをお願いします。 > l7vsadmコマンドを自動発行する処理があるのは、 > /etc/init.d/l7vsdとl7directord... > おっと、l7guiもありますね。。。 ちと細かいですが、現行の /etc/init.d/l7vsd 内に l7vsadm 発行 箇所はないですよね? -- TATEISHI Katsuyuki From morisita.tooru @ nttcom.co.jp Mon Oct 19 17:18:00 2009 From: morisita.tooru @ nttcom.co.jp (=?ISO-2022-JP?B?GyRCPzkyPEUwGyhC?=) Date: Mon, 19 Oct 2009 17:18:00 +0900 Subject: [Ultramonkey-l7-develop 552] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <20091019.161431.373424478426898866.tateishi.katsuyuki@oss.ntt.co.jp> References: <4AD83889.6020907@nttcom.co.jp> <20091016.231103.75173118873192452.kt@wheel.jp> <4ADC0364.3040709@nttcom.co.jp> <20091019.161431.373424478426898866.tateishi.katsuyuki@oss.ntt.co.jp> Message-ID: <4ADC20B8.2040702@nttcom.co.jp> 立石様 森下です。お疲れさまです。 サーバ起動時にHB2、l7vsd、l7directordが自動起動される 場合の実行関係(実行順など)を私が勘違いしていました。 失礼しました。 HB2が/etc/init.d/l7vsd startを実行。 その/etc/init.d/l7vsd startの中で、リトライを行っておき、 次にHB2から実行される予定の/etc/init.d/l7directord startで、 l7vsadm実行によるエラーを起こさない。 という流れなのですね。 現状、このように l7vsdを起動して、すぐにl7vsadmを実行するような 自動実行を行うのは、サーバ起動時しか無いので 対処はOKかと思います。 #/usr/sbin/l7vsdで直接起動して、l7vsadm実行なんて #反則のシェルを作る人には影響ありますが、、、 > ちと細かいですが、現行の /etc/init.d/l7vsd 内に l7vsadm 発行 > 箇所はないですよね? そのとおりです。 またまた、失礼しました。 TATEISHI Katsuyuki さんは書きました: > 森下さま、 > 立石です。お疲れさまです。 > > From: 森下徹 > Subject: [Ultramonkey-l7-develop 550] Re: l7vsadm の無駄なタイムアウト待ち > Date: Mon, 19 Oct 2009 15:12:52 +0900 > >> そうですね。 >> l7vsadmコマンドを自動発行する処理側で、 >> リトライ等の処理を行うのであれば、 >> l7vsadmでの処理は不要になると思います。 >> >> 自動発行元が複数あるので、どこから発行されても >> 良いようにこういう実装になったと思います。 > > うーむ。 > ちょっと認識違いがあるかもしれませんので、念のため補足させて > ください。 > > ・前回送ったパッチのようなリトライ処理を l7vsadm コマンドを自 > 動発行する処理側すべてに実装するわけではありません。 > > ・ではどこでリトライするのか? > -> それは /etc/init.d/l7vsd startの中です。前回送ったパッチ > により、 /etc/init.d/l7vsd start が終了したときに > 「l7vsd起動が完了している」または「l7vsd起動に失敗した」 > ことが保証されるので、「起動途中」という半端な状態に備え > てl7vsadmでリトライする必要がなくなります。 > > ・その後は l7vsadm をどこから呼ばれようとも「起動が完了(not > 失敗)してないため接続にリトライが必要」という事態は起こらな > いはずです。 > > というわけで、リトライが必要なのは /etc/init.d/l7vsd (の > start のとき)のみ、あとは不要。というのが前回パッチの主張す > るところなんですが、何か見落としてるところとかあれば、ツッコ > ミをお願いします。 > >> l7vsadmコマンドを自動発行する処理があるのは、 >> /etc/init.d/l7vsdとl7directord... >> おっと、l7guiもありますね。。。 > > ちと細かいですが、現行の /etc/init.d/l7vsd 内に l7vsadm 発行 > 箇所はないですよね? > > -- > TATEISHI Katsuyuki > > > From tateishi.katsuyuki @ oss.ntt.co.jp Mon Oct 19 18:46:14 2009 From: tateishi.katsuyuki @ oss.ntt.co.jp (TATEISHI Katsuyuki) Date: Mon, 19 Oct 2009 18:46:14 +0900 (JST) Subject: [Ultramonkey-l7-develop 553] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <4ADC20B8.2040702@nttcom.co.jp> References: <4ADC0364.3040709@nttcom.co.jp> <20091019.161431.373424478426898866.tateishi.katsuyuki@oss.ntt.co.jp> <4ADC20B8.2040702@nttcom.co.jp> Message-ID: <20091019.184614.1098872335252737965.tateishi.katsuyuki@oss.ntt.co.jp> 森下さま、 立石です。お疲れさまです。 From: 森下徹 Subject: Re: [Ultramonkey-l7-develop 550] Re: l7vsadm の無駄なタイムアウト待ち Date: Mon, 19 Oct 2009 17:18:00 +0900 > 現状、このように > l7vsdを起動して、すぐにl7vsadmを実行するような > 自動実行を行うのは、サーバ起動時しか無いので > 対処はOKかと思います。 確認していただき、ありがとうございました。 森下さんと私の認識を合わせられたと思います。 > #/usr/sbin/l7vsdで直接起動して、l7vsadm実行なんて > #反則のシェルを作る人には影響ありますが、、、 起動スクリプトを独自に書こうとすれば、現状の /etc/init.d/l7vsd を参考くらいにはするでしょうから、そこで気 づいてもらえればいいかなと・・・ スクラッチから実装しようとするような猛者であれば l7vsd が起動 していない事くらい気づくか、他の原因で起動できないような気が します。 冗談はさておき、 l7vsd.c の main()の daemon(3) 呼び出し前に一 旦 fork しておいて、一番親のプロセスは l7vsadm がつながるまで exit しないように実装することで、 /usr/sbin/l7vsd 単体でも起 動完了まで呼び出し側に制御を戻さない挙動を実現可能だと思いま すが・・・そっちのほうがいいですか? 私はコスト対効果的に考えて /etc/init.d/l7vsd 内のシェルスクリ プトですませるのがいいと思っています。 -- TATEISHI Katsuyuki From morisita.tooru @ nttcom.co.jp Mon Oct 19 19:06:10 2009 From: morisita.tooru @ nttcom.co.jp (=?ISO-2022-JP?B?GyRCPzkyPEUwGyhC?=) Date: Mon, 19 Oct 2009 19:06:10 +0900 Subject: [Ultramonkey-l7-develop 554] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <20091019.184614.1098872335252737965.tateishi.katsuyuki@oss.ntt.co.jp> References: <4ADC0364.3040709@nttcom.co.jp> <20091019.161431.373424478426898866.tateishi.katsuyuki@oss.ntt.co.jp> <4ADC20B8.2040702@nttcom.co.jp> <20091019.184614.1098872335252737965.tateishi.katsuyuki@oss.ntt.co.jp> Message-ID: <4ADC3A12.1070001@nttcom.co.jp> 立石様 森下です。お疲れ様です。 > 冗談はさておき、 l7vsd.c の main()の daemon(3) 呼び出し前に一 > 旦 fork しておいて、一番親のプロセスは l7vsadm がつながるまで > exit しないように実装することで、 /usr/sbin/l7vsd 単体でも起 > 動完了まで呼び出し側に制御を戻さない挙動を実現可能だと思いま > すが・・・そっちのほうがいいですか? この対処の場合、l7vsdは、l7vsadmがつながってくるまで 起動完了とはならないってことでしょうか? そうであれば、l7vsdを起動してもl7vsadmを必ず実行するとは 限らない場合(ちょっと思いつきませんが試験時などにあるかも?)に よろしくない気がします。 > 私はコスト対効果的に考えて /etc/init.d/l7vsd 内のシェルスクリ > プトですませるのがいいと思っています。 私もスクリプトで良いと思います。 TATEISHI Katsuyuki さんは書きました: > 森下さま、 > 立石です。お疲れさまです。 > > From: 森下徹 > Subject: Re: [Ultramonkey-l7-develop 550] Re: l7vsadm の無駄なタイムアウト待ち > Date: Mon, 19 Oct 2009 17:18:00 +0900 > >> 現状、このように >> l7vsdを起動して、すぐにl7vsadmを実行するような >> 自動実行を行うのは、サーバ起動時しか無いので >> 対処はOKかと思います。 > > 確認していただき、ありがとうございました。 > 森下さんと私の認識を合わせられたと思います。 > >> #/usr/sbin/l7vsdで直接起動して、l7vsadm実行なんて >> #反則のシェルを作る人には影響ありますが、、、 > > 起動スクリプトを独自に書こうとすれば、現状の > /etc/init.d/l7vsd を参考くらいにはするでしょうから、そこで気 > づいてもらえればいいかなと・・・ > スクラッチから実装しようとするような猛者であれば l7vsd が起動 > していない事くらい気づくか、他の原因で起動できないような気が > します。 > > 冗談はさておき、 l7vsd.c の main()の daemon(3) 呼び出し前に一 > 旦 fork しておいて、一番親のプロセスは l7vsadm がつながるまで > exit しないように実装することで、 /usr/sbin/l7vsd 単体でも起 > 動完了まで呼び出し側に制御を戻さない挙動を実現可能だと思いま > すが・・・そっちのほうがいいですか? > > 私はコスト対効果的に考えて /etc/init.d/l7vsd 内のシェルスクリ > プトですませるのがいいと思っています。 > > -- > TATEISHI Katsuyuki > > > From tateishi.katsuyuki @ oss.ntt.co.jp Mon Oct 19 19:37:16 2009 From: tateishi.katsuyuki @ oss.ntt.co.jp (TATEISHI Katsuyuki) Date: Mon, 19 Oct 2009 19:37:16 +0900 (JST) Subject: [Ultramonkey-l7-develop 555] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <4ADC3A12.1070001@nttcom.co.jp> References: <4ADC20B8.2040702@nttcom.co.jp> <20091019.184614.1098872335252737965.tateishi.katsuyuki@oss.ntt.co.jp> <4ADC3A12.1070001@nttcom.co.jp> Message-ID: <20091019.193716.321689434267588422.tateishi.katsuyuki@oss.ntt.co.jp> 立石です。 From: 森下徹 Subject: Re: [Ultramonkey-l7-develop 550] Re: l7vsadm の無駄なタイムアウト待ち Date: Mon, 19 Oct 2009 19:06:10 +0900 >> 冗談はさておき、 l7vsd.c の main()の daemon(3) 呼び出し前に一 >> 旦 fork しておいて、一番親のプロセスは l7vsadm がつながるまで >> exit しないように実装することで、 /usr/sbin/l7vsd 単体でも起 >> 動完了まで呼び出し側に制御を戻さない挙動を実現可能だと思いま >> すが・・・そっちのほうがいいですか? > > この対処の場合、l7vsdは、l7vsadmがつながってくるまで > 起動完了とはならないってことでしょうか? > そうであれば、l7vsdを起動してもl7vsadmを必ず実行するとは > 限らない場合(ちょっと思いつきませんが試験時などにあるかも?)に > よろしくない気がします。 もしかして、「l7vsd の一番親のプロセスが(誰が実行するかわからな い)l7vsadm からの接続を待ち、接続があったら終了する(制御を呼び出 し側に戻す)」と受け取られていますか? そうではなく、「l7vsd の一番親のプロセス自身が l7vsadm を実行し、 それが成功する間では親プロセスが終了しない」という意味です。 現状のコードは、おおざっぱに言って ================================================================================ main() { /* (略) */ daemon(); /* <- この時点で最初の l7vsd は exit するので、 呼び出し側に制御が戻る */ /* その他の処理 (l7vsadmからの接続を受け付けるソケットを開いたり) */ } ================================================================================ となっているはずですが、上記のコメント中に記述したとおり、 daemon()が呼ばれた時点で最初のプロセスは exit するので、 /usr/sbin/ldirectord を呼び出した側に制御が戻ります。(つまりl7vsd が起動完了しないうちに戻ります) ================================================================================ main() { /* (略) */ if (fork() != 0) { /* 親プロセス */ while (/* system() なり fork && exec なりで l7vsadm を実行し、成功するかをチェック*/) { sleep(interval_sec); } exit(0); } daemon(); /* その他の処理 (l7vsadmからの接続を受け付けるソケットを開いたり) */ } ================================================================================ のようにすれば、端末制御を握っている一番最初のプロセスが l7vsadm の正常終了を確認するまで exit しなくなるはずです。 >> 私はコスト対効果的に考えて /etc/init.d/l7vsd 内のシェルスクリ >> プトですませるのがいいと思っています。 > > 私もスクリプトで良いと思います。 了解しました。 -- TATEISHI Katsuyuki From morisita.tooru @ nttcom.co.jp Mon Oct 19 19:52:58 2009 From: morisita.tooru @ nttcom.co.jp (=?ISO-2022-JP?B?GyRCPzkyPEUwGyhC?=) Date: Mon, 19 Oct 2009 19:52:58 +0900 Subject: [Ultramonkey-l7-develop 556] Re: =?iso-2022-jp?b?bDd2c2FkbSAbJEIkTkw1QkwkSiU/JSQlYCUiJSYbKEI=?= =?iso-2022-jp?b?GyRCJUhCVCRBGyhC?= In-Reply-To: <20091019.193716.321689434267588422.tateishi.katsuyuki@oss.ntt.co.jp> References: <4ADC20B8.2040702@nttcom.co.jp> <20091019.184614.1098872335252737965.tateishi.katsuyuki@oss.ntt.co.jp> <4ADC3A12.1070001@nttcom.co.jp> <20091019.193716.321689434267588422.tateishi.katsuyuki@oss.ntt.co.jp> Message-ID: <4ADC450A.2040609@nttcom.co.jp> 立石様 森下です。お疲れ様です。 > もしかして、「l7vsd の一番親のプロセスが(誰が実行するかわからな > い)l7vsadm からの接続を待ち、接続があったら終了する(制御を呼び出 > し側に戻す)」と受け取られていますか? そのとおり受け取ってしまいました。。。 説明ありがとうございます。 自分で発行するのですね。了解です。 TATEISHI Katsuyuki さんは書きました: > 立石です。 > > From: 森下徹 > Subject: Re: [Ultramonkey-l7-develop 550] Re: l7vsadm の無駄なタイムアウト待ち > Date: Mon, 19 Oct 2009 19:06:10 +0900 > >>> 冗談はさておき、 l7vsd.c の main()の daemon(3) 呼び出し前に一 >>> 旦 fork しておいて、一番親のプロセスは l7vsadm がつながるまで >>> exit しないように実装することで、 /usr/sbin/l7vsd 単体でも起 >>> 動完了まで呼び出し側に制御を戻さない挙動を実現可能だと思いま >>> すが・・・そっちのほうがいいですか? >> この対処の場合、l7vsdは、l7vsadmがつながってくるまで >> 起動完了とはならないってことでしょうか? >> そうであれば、l7vsdを起動してもl7vsadmを必ず実行するとは >> 限らない場合(ちょっと思いつきませんが試験時などにあるかも?)に >> よろしくない気がします。 > > もしかして、「l7vsd の一番親のプロセスが(誰が実行するかわからな > い)l7vsadm からの接続を待ち、接続があったら終了する(制御を呼び出 > し側に戻す)」と受け取られていますか? > > そうではなく、「l7vsd の一番親のプロセス自身が l7vsadm を実行し、 > それが成功する間では親プロセスが終了しない」という意味です。 > > 現状のコードは、おおざっぱに言って > > ================================================================================ > main() { > /* (略) */ > > daemon(); /* <- この時点で最初の l7vsd は exit するので、 > 呼び出し側に制御が戻る */ > > /* その他の処理 (l7vsadmからの接続を受け付けるソケットを開いたり) */ > } > ================================================================================ > > となっているはずですが、上記のコメント中に記述したとおり、 > daemon()が呼ばれた時点で最初のプロセスは exit するので、 > /usr/sbin/ldirectord を呼び出した側に制御が戻ります。(つまりl7vsd > が起動完了しないうちに戻ります) > > ================================================================================ > main() { > /* (略) */ > if (fork() != 0) { > /* 親プロセス */ > while (/* system() なり fork && exec なりで l7vsadm を実行し、成功するかをチェック*/) { > sleep(interval_sec); > } > exit(0); > } > > daemon(); > > /* その他の処理 (l7vsadmからの接続を受け付けるソケットを開いたり) */ > } > ================================================================================ > > のようにすれば、端末制御を握っている一番最初のプロセスが l7vsadm > の正常終了を確認するまで exit しなくなるはずです。 > > >>> 私はコスト対効果的に考えて /etc/init.d/l7vsd 内のシェルスクリ >>> プトですませるのがいいと思っています。 >> 私もスクリプトで良いと思います。 > > 了解しました。 > > -- > TATEISHI Katsuyuki > > >