指定主机策略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; }
十分简单,不再赘述!
时间: 2024-12-23 21:37:36