Jstorm源碼分析--kill、rebanlance、activate、deactivate方法流程
本文關(guān)鍵詞:Storm源碼分析,由筆耕文化傳播整理發(fā)布。
JStorm源碼分析--kill、rebanlance、activate、deactivate方法流程
2015-05-19 瀏覽()
[摘要:那幾個(gè)kill、rebanlance、activate、deactivate方式放正在一路剖析,是由于他們皆依附于nimbus界說的通用的 狀況轉(zhuǎn)移方式: transitionName ********************************************那里只詳細(xì)剖析kill方式]
這幾個(gè)kill、rebanlance、activate、deactivate方法放在一起分析,是因?yàn)樗麄兌家蕾囉趎imbus定義的通用的 狀態(tài)轉(zhuǎn)移方法:
transitionName********************************************這里只具體分析kill方法*********************************一:初始化LocalCluster同拓?fù)涮峤灰粯樱斠姶笊瘢?/p>
二:LocalCluster完成構(gòu)造之后,即可使用killTopology/ killTopologyWithOpts殺死拓?fù)洹?/p>
跟蹤killTopologyWithOpts方法,方法定義如下:
public void killTopologyWithOpts(String topologyName, KillOptions options)可以看到需要兩個(gè)參數(shù),,分別是拓?fù)涞拿Q和kill的操作。 @Override public void killTopologyWithOpts(String topologyName, KillOptions options) throws NotAliveException, TException { try { checkTopologyActive(data, topologyName, true); Integer wait_amt = null; //查看是否設(shè)置了殺死拓?fù)涞牡却龝r(shí)間,如果設(shè)置了就等待 if (options.is_set_wait_secs()) { wait_amt = options.get_wait_secs(); } // NimbusUtils.transitionName(data, topologyName, true, StatusType.kill, wait_amt); } catch (NotAliveException e) { String errMsg = "KillTopology Error, no this topology " + topologyName; LOG.error(errMsg, e); throw new NotAliveException(errMsg); } catch (Exception e) { String errMsg = "Failed to kill topology " + topologyName; LOG.error(errMsg, e); throw new TException(errMsg); } }流程:1,先查看拓?fù)涫欠馎ctive,
public void checkTopologyActive(NimbusData nimbus, String topologyName, boolean bActive) throws Exception { if (isTopologyActive(nimbus.getStormClusterState(), topologyName) != bActive) { if (bActive) { throw new NotAliveException(topologyName + " is not alive"); } else { throw new AlreadyAliveException(topologyName + " is already active"); } } }跟下去 public boolean isTopologyActive(StormClusterState stormClusterState, String topologyName) throws Exception { boolean rtn = false; if (Cluster.get_topology_id(stormClusterState, topologyName) != null) { rtn = true; } return rtn; }
2:查看是否設(shè)置了kill操作是否設(shè)置了等待時(shí)間,如果設(shè)置了就等待后再執(zhí)行
3:transitionName:這是在nimbus定義的通用的 狀態(tài)轉(zhuǎn)移方法,,他們會(huì)根據(jù)傳入的轉(zhuǎn)移事件做相應(yīng)的處理。
public static <T> void transitionName(NimbusData data, String topologyName, boolean errorOnNoTransition, StatusType transition_status, T... args) throws Exception { //獲得nimbus的信息,通過getStormClusterState查找對(duì)應(yīng)的storm-id(實(shí)際上就是將storm-name 轉(zhuǎn)換為storm-id的狀態(tài)),如果找到了,就調(diào)用transition方法。 StormClusterState stormClusterState = data.getStormClusterState(); String topologyId = Cluster.get_topology_id(stormClusterState, topologyName); if (topologyId == null) { throw new NotAliveException(topologyName); } //開始執(zhí)行kill操作,轉(zhuǎn)變拓?fù)錉顟B(tài)。 transition(data, topologyId, errorOnNoTransition, transition_status, args); }本文關(guān)鍵詞:Storm源碼分析,由筆耕文化傳播整理發(fā)布。
本文編號(hào):208466
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/208466.html