Alluxio源码分析定位策略:指定主机策略SpecificHostPolicy

        指定主机策略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;
  }
        十分简单,不再赘述!


你可能感兴趣的:(Alluxio源码分析定位策略:指定主机策略SpecificHostPolicy)