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

网格计算

开发平台:

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.mapred;
  19. import java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. import java.text.NumberFormat;
  23. class JVMId extends ID {
  24.   boolean isMap;
  25.   JobID jobId;
  26.   private static final String JVM = "jvm";
  27.   private static NumberFormat idFormat = NumberFormat.getInstance();
  28.   static {
  29.     idFormat.setGroupingUsed(false);
  30.     idFormat.setMinimumIntegerDigits(6);
  31.   }
  32.   
  33.   public JVMId(JobID jobId, boolean isMap, int id) {
  34.     super(id);
  35.     this.isMap = isMap;
  36.     this.jobId = jobId;
  37.   }
  38.   
  39.   public JVMId (String jtIdentifier, int jobId, boolean isMap, int id) {
  40.     this(new JobID(jtIdentifier, jobId), isMap, id);
  41.   }
  42.     
  43.   public JVMId() { 
  44.     jobId = new JobID();
  45.   }
  46.   
  47.   public boolean isMapJVM() {
  48.     return isMap;
  49.   }
  50.   public JobID getJobId() {
  51.     return jobId;
  52.   }
  53.   public boolean equals(Object o) {
  54.     if(o == null)
  55.       return false;
  56.     if(o.getClass().equals(JVMId.class)) {
  57.       JVMId that = (JVMId)o;
  58.       return this.id==that.id
  59.         && this.isMap == that.isMap
  60.         && this.jobId.equals(that.jobId);
  61.     }
  62.     else return false;
  63.   }
  64.   /**Compare TaskInProgressIds by first jobIds, then by tip numbers. Reduces are 
  65.    * defined as greater then maps.*/
  66.   @Override
  67.   public int compareTo(org.apache.hadoop.mapreduce.ID o) {
  68.     JVMId that = (JVMId)o;
  69.     int jobComp = this.jobId.compareTo(that.jobId);
  70.     if(jobComp == 0) {
  71.       if(this.isMap == that.isMap) {
  72.         return this.id - that.id;
  73.       } else {
  74.         return this.isMap ? -1 : 1;
  75.       }
  76.     } else {
  77.       return jobComp;
  78.     }
  79.   }
  80.   
  81.   @Override
  82.   public String toString() { 
  83.     return appendTo(new StringBuilder(JVM)).toString();
  84.   }
  85.   /**
  86.    * Add the unique id to the given StringBuilder.
  87.    * @param builder the builder to append to
  88.    * @return the passed in builder.
  89.    */
  90.   protected StringBuilder appendTo(StringBuilder builder) {
  91.     return jobId.appendTo(builder).
  92.                  append(SEPARATOR).
  93.                  append(isMap ? 'm' : 'r').
  94.                  append(SEPARATOR).
  95.                  append(idFormat.format(id));
  96.   }
  97.   
  98.   @Override
  99.   public int hashCode() {
  100.     return jobId.hashCode() * 11 + id;
  101.   }
  102.   
  103.   @Override
  104.   public void readFields(DataInput in) throws IOException {
  105.     super.readFields(in);
  106.     this.jobId.readFields(in);
  107.     this.isMap = in.readBoolean();
  108.   }
  109.   @Override
  110.   public void write(DataOutput out) throws IOException {
  111.     super.write(out);
  112.     jobId.write(out);
  113.     out.writeBoolean(isMap);
  114.   }
  115.   
  116.   /** Construct a JVMId object from given string 
  117.    * @return constructed JVMId object or null if the given String is null
  118.    * @throws IllegalArgumentException if the given string is malformed
  119.    */
  120.   public static JVMId forName(String str) 
  121.     throws IllegalArgumentException {
  122.     if(str == null)
  123.       return null;
  124.     try {
  125.       String[] parts = str.split("_");
  126.       if(parts.length == 5) {
  127.         if(parts[0].equals(JVM)) {
  128.           boolean isMap = false;
  129.           if(parts[3].equals("m")) isMap = true;
  130.           else if(parts[3].equals("r")) isMap = false;
  131.           else throw new Exception();
  132.           return new JVMId(parts[1], Integer.parseInt(parts[2]),
  133.               isMap, Integer.parseInt(parts[4]));
  134.         }
  135.       }
  136.     }catch (Exception ex) {//fall below
  137.     }
  138.     throw new IllegalArgumentException("TaskId string : " + str 
  139.         + " is not properly formed");
  140.   }
  141. }