指定主机策略SpecificHostPolicy是一种总是返回一个指定主机名的worker的定位策略。如果在那个主机名对应机器上没有活跃worker的话则返回null。在SpecificHostPolicy内部,封装了一个成员变量,如下:
// 主机名
private final String mHostname; 这个mHostname就是SpecificHostPolicy策略实现所依赖的主机名,在SpecificHostPolicy构造方法中,就会根据外部传入的主机名初始化成员变量mHostname,代码如下:
/**
* 构造方法,需要根据外部传入的主机名初始化成员变量mHostname
* Constructs the policy with the hostname.
*
* @param hostname the name of the host
*/
public SpecificHostPolicy(String hostname) {
mHostname = Preconditions.checkNotNull(hostname);
} 而核心方法getWorkerForNextBlock()实现也很简单,遍历BlockWorkerInfo列表workerInfoList,判断BlockWorkerInfo的主机名是否与mHostname相等,相等则返回,否则继续遍历下一个BlockWorkerInfo,最终没有找到符合要求的worker的话,就返回null,代码如下: @Override
public WorkerNetAddress getWorkerForNextBlock(List<BlockWorkerInfo> workerInfoList,
long blockSizeBytes) {
// find the first worker matching the host name
// 遍历BlockWorkerInfo列表workerInfoList,判断BlockWorkerInfo的主机名是否与mHostname相等,
// 相等则返回,否则继续遍历下一个BlockWorkerInfo
for (BlockWorkerInfo info : workerInfoList) {
if (info.getNetAddress().getHost().equals(mHostname)) {
return info.getNetAddress();
}
}
// 最终没有找到符合要求的worker的话,就返回null
return null;
} 十分简单,不再赘述!
本文介绍了SpecificHostPolicy定位策略,该策略用于返回指定主机名的worker。构造方法接收主机名参数并初始化成员变量mHostname。核心方法getWorkerForNextBlock()遍历BlockWorkerInfo列表,寻找与mHostname匹配的worker并返回其地址。


被折叠的 条评论
为什么被折叠?



