[Linux-ha-jp] リソースの起動・停止順序について

Zurück zum Archiv-Index

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
> 





Linux-ha-japan メーリングリストの案内
Zurück zum Archiv-Index