一、HealthMonitor是什么
HealthMonitor是一个周期性工作的后台线程,它在一个循环中周期性的同HA服务进行心跳,负责跟踪NameNode服务的健康状况,并在健康状况变化时调用failover控制器的回调方法。
二、HealthMonitor是如何实现的
1、成员变量
HealthMonitor内部有如下主要成员变量:
1)后台工作线程:真正卖力干活的
private Daemon daemon;// 后台工作线程
2)一些时间间隔、rpc超时参数等配置信息,见注释
// 重连、周期性检查、失连后的睡眠时间等时间间隔
private long connectRetryInterval;
private long checkIntervalMillis;
private long sleepAfterDisconnectMillis;
// rpc超时时间
private int rpcTimeout;
// 配置信息
private final Configuration conf;
3)连接代理相关
/** The connected proxy */
// 连接代理
private HAServiceProtocol proxy;
/** The HA service to monitor */
// HA服务到监视器的对象,通过它来获取连接代理proxy,代表一个客户端HA管理命令的目标。
private final HAServiceTarget targetToMonitor;
4)监视器s,状态发生变化时需要周知监视器s,故它们都实现了相同的接口
/**
* Listeners for state changes
* 状态变更监视器列表,里面的元素是实现Callback的对象
*/
private List<Callback> callbacks = Collections.synchronizedList(
new LinkedList<Callback>());
/**
* 服务状态监视器列表,里面的元素是实现ServiceStateCallback的对象
*/
private List<ServiceStateCallback> serviceStateCallbacks = Collections
.synchronizedList(new LinkedList<ServiceStateCallback>());
5)状态
// 服务状态,默认为正在初始化
private State state = State.INITIALIZING;
/**
* 最后一次服务状态,默认为正在初始化
*/
private HAServiceStatus lastServiceState = new HAServiceStatus(
HAServiceState.INITIALIZING);
2、状态&接口
2.1、状态
HealthMonitor定义