From hibari.michiro @ lab.ntt.co.jp Fri Mar 22 09:46:25 2013 From: hibari.michiro @ lab.ntt.co.jp (Hibari Michiro) Date: Fri, 22 Mar 2013 09:46:25 +0900 Subject: [Ultramonkey-l7-develop 903] Re: =?iso-2022-jp?b?ZGViaWFuIHRlc3RpbmcbJEIkRyROJTMlcyVRJSQbKEI=?= =?iso-2022-jp?b?GyRCJWslKCVpITwbKEI=?= In-Reply-To: <5147C87D.4080802@nttcom.co.jp> References: <511126D8.60807@iwao.net> <5146D35D.5020704@nttcom.co.jp> <5146D8DE.80409@lab.ntt.co.jp> <5147C87D.4080802@nttcom.co.jp> Message-ID: <514BA9E1.30004@lab.ntt.co.jp> 雲雀です。 > 自分は添付ファイル、というかmultipartメール自体が嫌いです^^; > multipartってMUAによって扱えたり扱えなかったりするので、個人宛メールなら > いいんですが、MLみたいな不特定多数への同報メールに使うのは推奨できないって > 思ってたり。 そのままpatchとして取り込める情報が欲しいという意図で、 添付ファイルをリクエストしておりました。 #メールで貼り付けたdiffの中に、所どころメモが記載されてため、 #そのままpatchとして使えないのが気になりました。 #patchとしてはプレーンなdiffが望ましいかと。 とはいえ、diffの内容について議論するにあたり、メモ書き込まないと やりにくい・・・となるので、メールとは別に竹林さんがおっしゃっていた > 単純にソースを見せたいだけなら,pastebin や chop とかが良いかもしれません. > > http://pastebin.com/ > http://chopapp.com > > diff を見せたいなら,sourceforge の個人作業部屋で > レポジトリを作って云々とか. ↑とかを併用するのがいいかもしれませんね。 > 自宅のLinuxは全部Debian系・・・というか、debian testingしかないですw > 4.7入るのかな?誰かやってw fedora18環境が手元にあるので、時間を見つけて試してみます。 #いま手いっぱいなので、なかなかすぐにというわけには行きませんがorz (2013/03/19 11:07), 中野 宏朗 wrote: > 中野@幕張です。 > > (2013/03/18 18:05), Hibari Michiro wrote: >> 中野様 >> >> 雲雀です。お世話になっております。 >> >> チケットの発行お願いします。 > 了解です。 > >> diff(patch)ですが、添付ファイルとしても乗っけて >> 頂けると、手元の環境に取り込んだりするのが楽なので、 >> 助かります。 >> (メーラによってはスペースを勝手に省略してしまったりして、 >> コピペだけだとそのままpatchとして使えなかったりするので。) > 自分は添付ファイル、というかmultipartメール自体が嫌いです^^; > multipartってMUAによって扱えたり扱えなかったりするので、個人宛メールなら > いいんですが、MLみたいな不特定多数への同報メールに使うのは推奨できないって > 思ってたり。 > > ・・・って、これはUnix/Linuxで育った人とWindowsで育った人との差かなぁ。 > netnewsとかだと、multipartなんて使ったらボコボコに怒られたしw > > 今ではボコボコに言われることはほとんど無いけどw、英語系のOSS開発MLだと > 添付ファイルメールはいい顔されないんで気をつけたほうがいいですよ。 > あとWebでのMLログとかでも、添付はうまく扱えないところとかあるし。 > >> Fedora18がRHEL7のベースになると言われているので、 >> ターゲットとしてはFedora18に同梱されているgcc4.7で >> コンパイルが通ることがゴールにすると良いかと。 > 自宅のLinuxは全部Debian系・・・というか、debian testingしかないですw > 4.7入るのかな?誰かやってw > >> (2013/03/18 17:42), 中野 宏朗 wrote: >>> 中野@幕張です。 >>> >>> そういえばこれはまだチケット発行してなかったですね。 >>> v3.1.0には間に合わないかな? >>> >>> wheezyのgccは4.6になります。あ、でもバージョンアップ >>> してるから4.7とかになってたりして。 >>> >>> fedoraだとfedora 16が4.6、17だと4.7系ですね。 >>> v3.1.xの早いうちに対応したほうが良さそうです。 >>> チケット発行しておきます。 >>> >>> 修正方針メモを投稿しておきます。 >>> こんな感じでOK? >>> >>> ===================== >>> diff --git a/l7vsd/module/protocol/protocol_module_ip.cpp b/l7vsd/module/protocol/protocol_module_ip.cpp >>> index 2d3ec46..8c028d6 100644 >>> --- a/l7vsd/module/protocol/protocol_module_ip.cpp >>> +++ b/l7vsd/module/protocol/protocol_module_ip.cpp >>> @@ -324,7 +324,7 @@ protocol_module_base::check_message_result protocol_module_ip::check_parameter(c >>> bool timeout_flag = false; >>> bool reschedule_flag = false; >>> bool no_reschedule_flag = false; >>> - bool forward_checked = false; >>> + //bool forward_checked = false; >>> bool sorryuri_checked = false; >>> bool stats_checked = false; >>> >>> @@ -450,7 +450,7 @@ protocol_module_base::check_message_result protocol_module_ip::check_parameter(c >>> //option string = "-F" >>> else if (*it == "-F" || *it == "--forwarded-for") { >>> //set forward flag ON >>> - forward_checked = true; >>> + //forward_checked = true; >>> } >>> //option string = "-S" >>> else if (*it == "-S" || *it == "--sorry-uri") { >>> check_parameterでのforwadedフラグチェックは意味無いからなくしていい。 >>> >>> @@ -5657,11 +5657,6 @@ bool protocol_module_ip::put_data_into_sendbuffer( >>> buffer_element.first += sendbuffer_rest_size; >>> buffer_element.second -= sendbuffer_rest_size; >>> sendbuffer_rest_size = 0; >>> - >>> - //add remain item >>> - data_ptr->buffer_sequence.push_back(buffer_element); >>> - //delete the item >>> - data_ptr->buffer_sequence.pop_front(); >>> break; >>> } >>> } >>> これは不明 >>> >>> diff --git a/l7vsd/module/protocol/protocol_module_ip.h b/l7vsd/module/protocol/protocol_module_ip.h >>> index 50d064b..54af5f7 100644 >>> --- a/l7vsd/module/protocol/protocol_module_ip.h >>> +++ b/l7vsd/module/protocol/protocol_module_ip.h >>> @@ -93,8 +93,8 @@ protected: >>> hash = cl_endpoint.address().to_v4().to_ulong() * GOLDEN_RATIO_PRIME; >>> } else { >>> boost::asio::ip::address_v6::bytes_type v6_bytes = cl_endpoint.address().to_v6().to_bytes(); >>> - boost::asio::ip::address_v4::bytes_type v4_bytes = {{v6_bytes[12], v6_bytes[13], v6_bytes[14], >>> v6_bytes[15]}}; >>> - boost::asio::ip::address_v4::address_v4 v4_address = >>> boost::asio::ip::address_v4::address_v4(v4_bytes); >>> + const boost::asio::ip::address_v4::bytes_type v4_bytes = {{v6_bytes[12], v6_bytes[13], >>> v6_bytes[14], v6_bytes[15]}}; >>> + boost::asio::ip::address_v4 v4_address(v4_bytes); >>> hash = v4_address.to_ulong() * GOLDEN_RATIO_PRIME; >>> 将来的には治したほうがいい。 >>> >>> } >>> diff --git a/l7vsd/module/protocol/protocol_module_sessionless.cpp b/l7vsd/module/protocol/protocol_module_sessionless.cpp >>> index d042afb..f655cec 100644 >>> --- a/l7vsd/module/protocol/protocol_module_sessionless.cpp >>> +++ b/l7vsd/module/protocol/protocol_module_sessionless.cpp >>> @@ -356,7 +356,7 @@ protocol_module_base::check_message_result protocol_module_sessionless::check_pa >>> //set check result true >>> check_message_result check_result; >>> check_result.flag = true; >>> - bool forward_checked = false; >>> + //bool forward_checked = false; >>> bool sorryuri_checked = false; >>> bool stats_checked = false; >>> >>> @@ -408,7 +408,7 @@ protocol_module_base::check_message_result protocol_module_sessionless::check_pa >>> //option string = "-F" >>> if (*it == "-F" || *it == "--forwarded-for") { >>> //set forward flag ON >>> - forward_checked = true; >>> + //forward_checked = true; >>> } >>> //option string = "-S" >>> else if (*it == "-S" || *it == "--sorry-uri") { >>> いらん。 >>> >>> diff --git a/l7vsd/src/l7vsadm.cpp b/l7vsd/src/l7vsadm.cpp >>> index b63d573..951db90 100644 >>> --- a/l7vsd/src/l7vsadm.cpp >>> +++ b/l7vsd/src/l7vsadm.cpp >>> @@ -2957,9 +2957,10 @@ bool l7vs::l7vsadm::execute(int argc, char *argv[]) >>> >>> // Get l7vsadm execute file path from /proc/(pid)/exe (symbolic link) >>> char l7vsadm_file_path[256]; >>> - ssize_t retsize; >>> + //ssize_t retsize; >>> memset(l7vsadm_file_path, 0, sizeof(l7vsadm_file_path)); >>> - retsize = readlink("/proc/self/exe", l7vsadm_file_path, sizeof(l7vsadm_file_path)); >>> + //retsize = readlink("/proc/self/exe", l7vsadm_file_path, sizeof(l7vsadm_file_path)); >>> + readlink("/proc/self/exe", l7vsadm_file_path, sizeof(l7vsadm_file_path)); >>> >>> // L7vsadm command conflict check. (Try l7vsadm execute file lock) >>> file_lock lock(l7vsadm_file_path, l7vsadm_err); >>> この直後、ファイルパスでロックをかけようとして、ロックかけられなかったら >>> エラー終了してるからここではエラーチェックしなくていいかも。 >>> してもいいけど。 >>> >>> diff --git a/l7vsd/src/logger_impl.cpp b/l7vsd/src/logger_impl.cpp >>> index 0ab72b1..9401d8f 100644 >>> --- a/l7vsd/src/logger_impl.cpp >>> +++ b/l7vsd/src/logger_impl.cpp >>> @@ -343,9 +343,9 @@ bool l7vs::LoggerImpl::init() >>> } >>> >>> // get hostname >>> - int ret = 0; >>> + //int ret = 0; >>> char buff[HOST_NAME_MAX]; >>> - ret = gethostname(buff, HOST_NAME_MAX); >>> + gethostname(buff, HOST_NAME_MAX); >>> hostname = buff; >>> >>> initialized = true; >>> ここは一応hostnameが取れたかどうか判定してもいいんで無いか? >>> 取れていなかった場合どうする?エラー終了? >>> それともログ用ホスト名なし程度、無視する? >>> >>> diff --git a/l7vsd/src/session_thread_control.cpp b/l7vsd/src/session_thread_control.cpp >>> index df0c938..2bd5e24 100644 >>> --- a/l7vsd/src/session_thread_control.cpp >>> +++ b/l7vsd/src/session_thread_control.cpp >>> @@ -36,15 +36,17 @@ namespace l7vs >>> void session_thread_control::start_thread() >>> { >>> >>> - int int_val; >>> + //int int_val; >>> >>> upthread.reset(new boost::thread(&session_thread_control::upstream_run, this)); //! upstream thread create >>> downthread.reset(new boost::thread(&session_thread_control::downstream_run, this)); //! downstream thread create >>> >>> //pthread_setschedparam >>> - int retval, sched_policy; >>> + //int retval, sched_policy; >>> + int sched_policy; >>> sched_param scheduler_param; >>> - int_val = pthread_getschedparam(upthread->native_handle(), &sched_policy, &scheduler_param); >>> + //int_val = pthread_getschedparam(upthread->native_handle(), &sched_policy, &scheduler_param); >>> + pthread_getschedparam(upthread->native_handle(), &sched_policy, &scheduler_param); >>> if (SCHED_FIFO == sched_algorithm) { >>> scheduler_param.__sched_priority = sched_priority; >>> sched_policy = SCHED_FIFO; >>> @@ -55,8 +57,10 @@ void session_thread_control::start_thread() >>> sched_policy = SCHED_BATCH; >>> } >>> if (0 <= sched_algorithm) { >>> - retval = pthread_setschedparam(upthread->native_handle(), sched_algorithm, &scheduler_param); >>> - retval = pthread_setschedparam(downthread->native_handle(), sched_algorithm, &scheduler_param); >>> + //retval = pthread_setschedparam(upthread->native_handle(), sched_algorithm, &scheduler_param); >>> + //retval = pthread_setschedparam(downthread->native_handle(), sched_algorithm, &scheduler_param); >>> + pthread_setschedparam(upthread->native_handle(), sched_algorithm, &scheduler_param); >>> + pthread_setschedparam(downthread->native_handle(), sched_algorithm, &scheduler_param); >>> } >>> >>> } >>> pthread_getschedparamで返されるエラーはESRCHとEFAULTの二つ。EFAULTはSEGV。ESRCHはスレッドが無効または終了している。 >>> これはエラー処理書いてもいいかもしれない。 >>> setはEINVAL, EPERM, ESRCH, EFAULT。EINVALはパラメータ指定違い。EPERMはスーパーユーザ権限チェック。 >>> これもESRCHはログだしてもいいかな。 >>> >>> diff --git a/l7vsd/src/virtualservice_base.cpp b/l7vsd/src/virtualservice_base.cpp >>> index 94ab8a2..994c634 100644 >>> --- a/l7vsd/src/virtualservice_base.cpp >>> +++ b/l7vsd/src/virtualservice_base.cpp >>> @@ -481,7 +481,7 @@ cpu_set_t l7vs::virtualservice_base::get_cpu_mask(std::string nic_name) >>> map< size_t, string > cpu_nic_map; >>> string buff; >>> ifstream ifs("/proc/interrupts"); >>> - unsigned int target_interrupt; >>> + //unsigned int target_interrupt; >>> size_t target_cpuid = 0; >>> cpu_set_t mask; >>> sched_getaffinity(0, sizeof(cpu_set_t), &mask); >>> @@ -503,7 +503,8 @@ cpu_set_t l7vs::virtualservice_base::get_cpu_mask(std::string nic_name) >>> algorithm::split(split_vec, buff, algorithm::is_any_of(":")); >>> if (!split_vec.size()) return mask; // cannot split interrupt >>> algorithm::trim(split_vec[0]); >>> - target_interrupt = lexical_cast(split_vec[0]); >>> + //target_interrupt = lexical_cast(split_vec[0]); >>> + lexical_cast(split_vec[0]); >>> for (size_t i = 0; i < cpu_nic_map.size(); ++i) { >>> size_t start_position = 4 + (i * 11); >>> size_t end_position = 11; >>> これはsched afinity用の使われていないメソッド。 >>> 呼び元のvirtualservice_tcpでifdefしてる。 >>> そもそも、このメソッド自体が未完成。いまは手動でネットワークのキューにピンさしたら >>> スケジューラ任せでよしなにしてくれる。 >>> >>> ===================== >>> >>> (2013/02/06 0:35), Hiroaki Nakano wrote: >>>> たるすぴ@幕張です。 >>>> >>>> ultramonkey-l7-v3のmasterブランチをdebian testingで >>>> コンパイルしてみたら、いくつかエラーが出ました。 >>>> >>>> どうやら、新しいg++では値を代入しても参照されない >>>> 変数はエラーになるようです。 >>>> あと、protocol_module_ip.hにへんなクラス宣言?がありました。 >>>> >>>> ----------- >>>> protocol_module_ip.cpp: In member function 'virtual >>>> l7vs::protocol_module_base::check_message_result >>>> l7vs::protocol_module_ip::check_parameter(const >>>> std::vector >&)': >>>> protocol_module_ip.cpp:327:14: error: variable 'forward_checked' set but >>>> not used [-Werror=unused-but-set-variable] >>>> cc1plus: all warnings being treated as errors >>>> make[4]: *** [protocol_module_ip.lo] エラー 1 >>>> >>>> libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -g -O2 >>>> -fno-strict-aliasing -Wall -Werror -fPIC -pthread -I../../include >>>> -I../../logger -I../../parameter -DMAX_BUFFER_SIZE=4096 -g -O2 -MT >>>> protocol_module_ip.lo -MD -MP -MF .deps/protocol_module_ip.Tpo -c >>>> protocol_module_ip.cpp -fPIC -DPIC -o .libs/protocol_module_ip.o >>>> protocol_module_sessionless.cpp: In member function 'virtual >>>> l7vs::protocol_module_base::check_message_result >>>> l7vs::protocol_module_sessionless::check_parameter(const >>>> std::vector >&)': >>>> protocol_module_sessionless.cpp:359:14: error: variable >>>> 'forward_checked' set but not used [-Werror=unused-but-set-variable] >>>> In file included from protocol_module_ip.cpp:33:0: >>>> protocol_module_ip.h: In member function 'unsigned int >>>> l7vs::protocol_module_ip::l7vs_ip_service_calc_hash(const endpoint&)': >>>> protocol_module_ip.h:97:25: error: >>>> 'boost::asio::ip::address_v4::address_v4' names the constructor, not the >>>> type >>>> protocol_module_ip.h:97:65: error: expected ';' before 'v4_address' >>>> protocol_module_ip.h:97:127: error: statement cannot resolve address of >>>> overloaded function >>>> protocol_module_ip.h:98:32: error: 'v4_address' was not declared in this >>>> scope >>>> In file included from protocol_module_ip.cpp:33:0: >>>> protocol_module_ip.h:96:65: error: unused variable 'v4_bytes' >>>> [-Werror=unused-variable] >>>> cc1plus: all warnings being treated as errors >>>> make[4]: *** [protocol_module_sessionless.lo] エラー 1 >>>> make[4]: *** 未完了のジョブを待っています.... >>>> cc1plus: all warnings being treated as errors >>>> make[4]: *** [protocol_module_ip.lo] エラー 1 >>>> >>>> >>>> l7vsadm.cpp: In member function ‘bool l7vs::l7vsadm::execute(int, char**)’: >>>> l7vsadm.cpp:2960:17: error: variable ‘retsize’ set but not used >>>> [-Werror=unused-but-set-variable] >>>> cc1plus: all warnings being treated as errors >>>> make[3]: *** [l7vsadm-l7vsadm.o] エラー 1 >>>> >>>> g++ -DHAVE_CONFIG_H -I. -I../.. -O2 -fno-strict-aliasing -g -Wall >>>> -Werror -pthread -I../include -I../include >>>> -DL7VS_MODULE_PATH="\"/usr/lib64/l7vs\"" -DMAX_BUFFER_SIZE=4096 >>>> -DPARAMETER_FILE="\"/etc/l7vs/l7vs.cf\"" >>>> -DL7VS_CONFIG_SOCK_PATH="\"/var/run/l7vs\"" -DLOGGER_PROCESS_VSD >>>> -DNETSNMP_NO_INLINE -DVERSION=\"3.0.4\" -g -O2 -MT >>>> l7vsd-protocol_module_control.o -MD -MP -MF >>>> .deps/l7vsd-protocol_module_control.Tpo -c -o >>>> l7vsd-protocol_module_control.o `test -f 'protocol_module_control.cpp' >>>> || echo './'`protocol_module_control.cpp >>>> session_thread_control.cpp: In member function ‘void >>>> l7vs::session_thread_control::start_thread()’: >>>> session_thread_control.cpp:39:24: error: variable ‘int_val’ set but not >>>> used [-Werror=unused-but-set-variable] >>>> session_thread_control.cpp:45:16: error: variable ‘retval’ set but not >>>> used [-Werror=unused-but-set-variable] >>>> cc1plus: all warnings being treated as errors >>>> make[3]: *** [l7vsd-session_thread_control.o] エラー 1 >>>> make[3]: *** 未完了のジョブを待っています.... >>>> >>>> >>>> g++ -DHAVE_CONFIG_H -I. -I../.. -O2 -fno-strict-aliasing -g -Wall >>>> -Werror -pthread -I../include -I../include >>>> -DL7VS_MODULE_PATH="\"/usr/lib64/l7vs\"" -DMAX_BUFFER_SIZE=4096 >>>> -DPARAMETER_FILE="\"/etc/l7vs/l7vs.cf\"" >>>> -DL7VS_CONFIG_SOCK_PATH="\"/var/run/l7vs\"" -DLOGGER_PROCESS_VSD >>>> -DNETSNMP_NO_INLINE -DVERSION=\"3.0.4\" -g -O2 -MT >>>> l7vsd-virtualservice_udp.o -MD -MP -MF >>>> .deps/l7vsd-virtualservice_udp.Tpo -c -o l7vsd-virtualservice_udp.o >>>> `test -f 'virtualservice_udp.cpp' || echo './'`virtualservice_udp.cpp >>>> virtualservice_base.cpp: In member function ‘cpu_set_t >>>> l7vs::virtualservice_base::get_cpu_mask(std::string)’: >>>> virtualservice_base.cpp:484:33: error: variable ‘target_interrupt’ set >>>> but not used [-Werror=unused-but-set-variable] >>>> cc1plus: all warnings being treated as errors >>>> make[3]: *** [l7vsd-virtualservice_base.o] エラー 1 >>>> make[3]: *** 未完了のジョブを待っています.... >>>> >>>> >>>> logger_a-logger_impl.o -MD -MP -MF >>>> .deps/libl7vsd_logger_a-logger_impl.Tpo -c -o >>>> libl7vsd_logger_a-logger_impl.o `test -f 'logger_impl.cpp' || echo >>>> './'`logger_impl.cpp >>>> logger_impl.cpp: In member function ‘virtual bool l7vs::LoggerImpl::init()’: >>>> logger_impl.cpp:346:20: error: variable ‘ret’ set but not used >>>> [-Werror=unused-but-set-variable] >>>> cc1plus: all warnings being treated as errors >>>> make[3]: *** [libl7vsd_logger_a-logger_impl.o] エラー 1 >>>> make[3]: *** 未完了のジョブを待っています.... >>>> ---------------------------------------------------- >>>> >>>> 使っていない変数はコメントにしたり消したりして、 >>>> 変な宣言のところを直したパッチを作ったので添付しておきます。 >>>> # 必要な変数だったのなら、処理が漏れていることになるね。 >>>> >>>> >>>> >>>> >>>> _______________________________________________ >>>> Ultramonkey-l7-develop mailing list >>>> Ultramonkey-l7-develop @ lists.sourceforge.jp >>>> http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-develop >>>> >> -- 雲雀 路朗 (Michiro Hibari) MAIL: hibari.michiro @ lab.ntt.co.jp 所属: NTT OSSセンタ 基盤技術ユニット 高信頼担当 TEL : 03-5860-5135 / FAX: 03-5463-5490