Hadoop 0.23 状态机框架

Hadoop 0.23中使用了基于事件驱动机制的异步编程模型。每个对象都是一个有限状态机,有相应的事件处理器(EventHandler),处理器处理对应的事件类型。事件处理后,对象将从一个状态变化到另一个状态。

以Application对象为例,相关类分别为:

状态类:ApplicationState

处理器类:Application

事件类型类:ApplicationEventType

事件类:ApplicationEvent及子类

其状态机如下图:

状态机框架

框架中的泛型

OPERAND

表示状态机的操作对象,如Application对象。

STATE

表示对象的状态,如ApplicationState代表的相关状态。

EVENTTYPE

表示需要处理的事件类型,如ApplicationEventType代表的相关类型。

EVENT

表示具体事件对象,如ApplicationEvent对象。

StateMachine

StateMachine<STATE extends Enum<STATE>,EVENTTYPEextends Enum<EVENTTYPE>, EVENT>

主要方法:

public STATEgetCurrentState();

获取当前状态

public STATEdoTransition(EVENTTYPE eventType, EVENT event)

根据事件类型和事件对象进行状态迁移。

StateMachineFactory

StateMachineFactory <OPERAND,STATE extends Enum<STATE>, EVENTTYPEextends Enum<EVENTTYPE>, EVENT>

状态机框架的实现基本集中在这个类里面。

 

主要成员
private finalTransitionsListNode transitionsListNode;

所有迁移列表。

private Map<STATE,Map<EVENTTYPE, Transition<OPERAND, STATE, EVENTTYPE, EVENT>>>stateMachineTable;

储存状态机中每个状态和该状态相应迁移的信息。注意,这个table中储存了多个状态机,因为每个状态机的状态都是不相同的。

 

private STATE defaultInitialState;

创建状态机时默认的初始化状态。

主要方法
public StateMachineFactory<OPERAND, STATE, EVENTTYPE,EVENT> addTransition(STATE preState, STATE postState, EVENTTYPE eventType,SingleArcTransition<OPERAND, EVENT>hook)

l public StateMachineFactory<OPERAND, STATE, EVENTTYPE,EVENT> addTransition(STATE preState,Set<STATE> postStates, EVENTTYPE eventType,MultipleArcTransition<OPERAND, EVENT, STATE> hook)

将一个单箭头/多箭头迁移加入StateMachineFactory的迁移列表中。

public StateMachine<STATE, EVENTTYPE, EVENT> make(OPERAND operand, STATE initialState)

创建一个状态机。

相关类
Transition
Transition<OPERAND, STATE extends Enum<STATE>,EVENTTYPEextends Enum<EVENTTYPE>, EVENT>

代表了状态机状态的一次变化。

主要方法:

STATEdoTransition(OPERAND operand, STATE oldState,  EVENT event,EVENTTYPE eventType);

根据事件类型和事件将状态机操作对象从旧状态迁移到新状态(返回值)。

迁移的钩子函数接口
迁移的具体处理是由钩子函数完成的。

SingleArcTransition<OPERAND, EVENT>
Hookfor Transition. This lead to state machine to move to the post state asregistered in the state machine.

只有单箭头的迁移,即状态机图中当前状态的后继状态只有一个。

主要方法:

public void transition(OPERAND operand, EVENT event);

MultipleArcTransition
MultipleArcTransition <OPERAND, EVENT,STATE extends Enum<STATE>>

Hookfor Transition. Post state is decided by Transition hook. Post state must beone of the valid post states registered in StateMachine.

多箭头的迁移,状态机图中当前状态的后续状态有多个,由事件类型来决定迁移的后续状态。

主要方法:

public STATE transition(OPERAND operand, EVENT event);

返回值为迁移相应事件的后续状态。

迁移的实现类
SingleInternalArc
单箭头的迁移,迁移的后续状态在创建时指定。

MultipleInternalArc
多箭头的迁移,迁移的可能后续状态在创建时指定,完成迁移后的后续状态由MultipleArcTransition. transition方法给出。

ApplicableTransition
实现类ApplicableSingleOrMultipleTransition,代表一个可以加入stateMachineTable的迁移,创建时需要迁移的前置状态、事件类型和迁移本身。

TransitionsListNode
保存一个ApplicableTransition和下一个TransitionsListNode的指针,可以通过这个类遍历StateMachineFactory中所有的迁移。

InternalStateMachine
实现StateMachine,只保存一个状态机的操作对象和状态机当前的状态。 doTransition方法调用的是StateMachineFactory.doTransition方法,从stateMachineTable中 找到相应迁移,再调用Transition的doTransition。

posted @ 2013-01-18 12:22  zaleilynn  阅读(648)  评论(0编辑  收藏  举报