AssignmentManager.java及其相关代码浅析(1)

分析源代码,一般可以依循项目的功能结构自顶向下或者自底向上进行分析,像HBase我们可以从顶部client发起访问开始,也可以从最小物理存储结构Cell开始分析。或者是由于某种契机,从中间发散开来进行分析,比如由发生异常的类而展开的分析。这里我们选择这样一个契机,即2.0较1.x不同之处的AssignmentManager.java来展开。

AssignmentManager主要用来处理在建表、分裂与合并或者表失效时,region的分配和收回问题。下面介绍一下,AssignmentManager包含的主要属性类和主要功能方法。

 


 

1.实现接口ServerListener类

AssignmentManager 实现了一个ServerListener的接口,接口ServerListener主要用来监听RegionServer,其实现者需要实现三个方法,一是waiting(){}方法,用来等待需要注册的RegionServer;二是serverAdded(finalServerName serverName)方法,即RegionServer加入以后要做的事;三是serverRemoved(finalServerName serverName)即RegionServer退出以后要做的事。

 


 

 

2.私有属性RegionStates类

RegionStates包含了一系列AssignmentManager需要管理的Region相关Map,如系统可用的所有regions,正在transition的regions,下线的所有regions,以及拥有这些regions的所有 servers。

2.1 私有属性STATES_EXPECTED_ON_OPEN

即当server open一个region时,region接下来可能呈现的状态。

2.2 私有属性STATES_EXPECTED_ON_CLOSE

即当server close一个 region时,region接下来可能呈现的状态。

 

Region可能的状态为一个枚举类State,State的所有状态如下:

 2.3内部类RegionStateNode

 该类表示了region本身的一些信息、状态以及所在server的对应关系,只在内存中,不进行持久化。下面介绍一下这个类主要涉及的一些属性和方法。

 2.3.1 私有属性类RegionInfo

Region本身信息,包含region所属的表名tableName,startKey,endKey,是否处于split状态,是否处于offline状态,以及regionId即该region创建的时间戳,replicaId副本id,encodedName即该region名称组合以后的MD5编码字符串。

 2.3.2 私有属性类State

Region本身状态,初始化为Offline。

2.3.3 私有属性类ServerName

一个是lastHost即旧的RegionServer,另一个是regionLocation即新迁移到的RegionServer。

2.3.4 私有属性类RegionTransitionProcedure

Region的变化过程执行类。

2.3.5 和状态设置相关的方法

设置状态相关的方法,如果准备设置的状态在预期状态列表里,则可以    设置成功,不在则根据实际情况进行反馈或抛出异常。

2.3.6 方法isInTransition()

如果该任务的执行类procedure没有被置为null则说明仍然处于transition阶段。

 

下节我们再来学习RegionStates的内部类ServerStateNode

 


 

 

2018/10/14

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值