renay****@ybb*****
renay****@ybb*****
2011年 6月 28日 (火) 15:08:57 JST
藤井さん お疲れ様です。山内です。 念の為、以下に該当処理部分のソースも提示しておきます。 ●crm/pengine/group.c void group_internal_constraints(resource_t *rsc, pe_working_set_t *data_set) { const char *value = NULL; gboolean stateful = FALSE; resource_t *last_rsc = NULL; group_variant_data_t *group_data = NULL; get_group_variant_data(group_data, rsc); native_internal_constraints(rsc, data_set); value = g_hash_table_lookup(rsc->parameters, crm_meta_name("stateful")); stateful = crm_is_true(value); custom_action_order( rsc, stopped_key(rsc), NULL, rsc, start_key(rsc), NULL, pe_order_optional, data_set); custom_action_order( rsc, stop_key(rsc), NULL, rsc, stopped_key(rsc), NULL, pe_order_runnable_left|pe_order_implies_right|pe_order_implies_left, data_set); custom_action_order( rsc, start_key(rsc), NULL, rsc, started_key(rsc), NULL, pe_order_runnable_left, data_set); slist_iter( child_rsc, resource_t, rsc->children, lpc, int stop = pe_order_shutdown|pe_order_implies_right; int stopped = pe_order_implies_right_printed; int start = pe_order_implies_right|pe_order_runnable_left; int started = pe_order_runnable_left|pe_order_implies_right|pe_order_implies_right_printed; child_rsc->cmds->internal_constraints(child_rsc, data_set); if(last_rsc == NULL) { stop |= pe_order_implies_left; stopped = pe_order_implies_right; } else if(group_data->colocated) { rsc_colocation_new( "group:internal_colocation", NULL, INFINITY, child_rsc, last_rsc, NULL, NULL, data_set); } if(stateful) { custom_action_order(rsc, demote_key(rsc), NULL, child_rsc, demote_key(child_rsc), NULL, stop|pe_order_implies_left_printed, data_set); custom_action_order(child_rsc, demote_key(child_rsc), NULL, rsc, demoted_key(rsc), NULL, stopped, data_set); custom_action_order(child_rsc, promote_key(child_rsc), NULL, rsc, promoted_key(rsc), NULL, started, data_set); custom_action_order(rsc, promote_key(rsc), NULL, child_rsc, promote_key(child_rsc), NULL, pe_order_implies_left_printed, data_set); } order_start_start(rsc, child_rsc, pe_order_implies_left_printed); order_stop_stop(rsc, child_rsc, stop|pe_order_implies_left_printed); custom_action_order(child_rsc, stop_key(child_rsc), NULL, rsc, stopped_key(rsc), NULL, stopped, data_set); custom_action_order(child_rsc, start_key(child_rsc), NULL, rsc, started_key(rsc), NULL, started, data_set); if(group_data->ordered == FALSE) { order_start_start(rsc, child_rsc, start|pe_order_implies_left_printed); if(stateful) { custom_action_order(rsc, promote_key(rsc), NULL, child_rsc, promote_key(child_rsc), NULL, start|pe_order_implies_left_printed, data_set); } } else if(last_rsc != NULL) { child_rsc->restart_type = pe_restart_restart; order_start_start(last_rsc, child_rsc, start); order_stop_stop(child_rsc, last_rsc, pe_order_implies_left); if(stateful) { custom_action_order(last_rsc, promote_key(last_rsc), NULL, child_rsc, promote_key(child_rsc), NULL, start, data_set); custom_action_order(child_rsc, demote_key(child_rsc), NULL, last_rsc, demote_key(last_rsc), NULL, pe_order_implies_left, data_set); } } else { /* If anyone in the group is starting, then * pe_order_implies_right will cause _everyone_ in the group * to be sent a start action * But this is safe since starting something that is already * started is required to be "safe" */ int flags = pe_order_implies_left|pe_order_implies_right|pe_order_runnable_right|pe_order_runnable_left; order_start_start(rsc, child_rsc, flags); if(stateful) { custom_action_order(rsc, promote_key(rsc), NULL, child_rsc, promote_key(child_rsc), NULL, flags, data_set); } } last_rsc = child_rsc; ); if(group_data->ordered && last_rsc != NULL) { int stop_stop_flags = pe_order_implies_right; int stop_stopped_flags = pe_order_implies_left; order_stop_stop(rsc, last_rsc, stop_stop_flags); custom_action_order(last_rsc, stop_key(last_rsc), NULL, rsc, stopped_key(rsc), NULL, stop_stopped_flags, data_set); if(stateful) { custom_action_order(rsc, demote_key(rsc), NULL, last_rsc, demote_key(last_rsc), NULL, stop_stop_flags, data_set); custom_action_order(last_rsc, demote_key(last_rsc), NULL, rsc, demoted_key(rsc), NULL, stop_stopped_flags, data_set); } } } --- On Tue, 2011/6/28, renay****@ybb***** <renay****@ybb*****> wrote: > 藤井さん > > こんにちは、メイトリックスの山内です。 > > 2.1.4においても、group内のリソースについては、基本的には、起動・停止順が > cib.xmlのグループ内の順序に従って、内部で自動的に生成されます。 > > よって、上記の起動・停止順で良いのであれば、orderを記述する必要はありません。 > > 以上、よろしく御願いいたします。 > > --- On Tue, 2011/6/28, kfujii <ysk00****@partn*****> wrote: > > > 藤井と申します。お世話になっております。 > > > > Heartbeat2でのリソースの起動・停止順序についてご質問です。 > > > > heartbeat-gui-2.1.4-1 > > heartbeat-2.1.4-1 > > > > Resource Group: group_1 > > Filesystem_1 (ocf::heartbeat:Filesystem): Started hb01 > > vsftpd_2 (ocf::heartbeat:vsftpd): Started hb01 > > jboss_3 (ocf::heartbeat:jboss): Started mpbbae01 > > JobChange_4 (ocf::heartbeat:JobChangeSTAR): Started hb01 > > Zuiji_5 (ocf::heartbeat:Zuiji): Started hb01 > > IPaddr2_6 (ocf::heartbeat:IPaddr2): Started hb01 > > Resource Group: group_11 > > Filesystem_11 (ocf::heartbeat:Filesystem): Started hb02 > > jboss_12 (ocf::heartbeat:jboss): Started hb02 > > JobChange_14 (ocf::heartbeat:JobChangeBEST): Started hb02 > > vsftpd_13 (ocf::heartbeat:vsftpd): Started hb02 > > IPaddr2_15 (ocf::heartbeat:IPaddr2): Started hb02 > > > > 上記のような構成で、 > > > > orderの設定を行っていない場合、 > > 起動は上のリソース(group_1だとFilesystem_1) > > 停止は下のリソース(group_1だとIPaddr2_6) > > から行われる認識で宜しいでしょうか? > > それとも、いっぺんに起動しようとするのでしょうか? > > > > もし作成した順番で起動が行われるのであれば、 > > orderの指定はしなくても大丈夫でしょうか? > > それとも、明示的にorderの指定を行うのがベターでしょうか? > > > > 以上、ご教示のほど宜しくお願い致します。 > > > > _______________________________________________ > > Linux-ha-japan mailing list > > Linux****@lists***** > > http://lists.sourceforge.jp/mailman/listinfo/linux-ha-japan > > > > _______________________________________________ > Linux-ha-japan mailing list > Linux****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/linux-ha-japan >