StaticMapping.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:2k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.net;
  19. import java.util.*;
  20. import org.apache.hadoop.conf.Configuration;
  21. import org.apache.hadoop.conf.Configured;
  22. /**
  23.  * Implements the {@link DNSToSwitchMapping} via static mappings. Used
  24.  * in testcases that simulate racks.
  25.  *
  26.  */
  27. public class StaticMapping extends Configured implements DNSToSwitchMapping {
  28.   public void setconf(Configuration conf) {
  29.     String[] mappings = conf.getStrings("hadoop.configured.node.mapping");
  30.     if (mappings != null) {
  31.       for (int i = 0; i < mappings.length; i++) {
  32.         String str = mappings[i];
  33.         String host = str.substring(0, str.indexOf('='));
  34.         String rack = str.substring(str.indexOf('=') + 1);
  35.         addNodeToRack(host, rack);
  36.       }
  37.     }
  38.   }
  39.   /* Only one instance per JVM */
  40.   private static Map<String, String> nameToRackMap = new HashMap<String, String>();
  41.   
  42.   static synchronized public void addNodeToRack(String name, String rackId) {
  43.     nameToRackMap.put(name, rackId);
  44.   }
  45.   public List<String> resolve(List<String> names) {
  46.     List<String> m = new ArrayList<String>();
  47.     synchronized (nameToRackMap) {
  48.       for (String name : names) {
  49.         String rackId;
  50.         if ((rackId = nameToRackMap.get(name)) != null) {
  51.           m.add(rackId);
  52.         } else {
  53.           m.add(NetworkTopology.DEFAULT_RACK);
  54.         }
  55.       }
  56.       return m;
  57.     }
  58.   }
  59. }