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

网格计算

开发平台:

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.hdfs.server.common;
  19. import java.io.*;
  20. import org.apache.hadoop.io.*;
  21. /****************************************************************
  22.  * A GenerationStamp is a Hadoop FS primitive, identified by a long.
  23.  ****************************************************************/
  24. public class GenerationStamp implements WritableComparable<GenerationStamp> {
  25.   public static final long WILDCARD_STAMP = 1;
  26.   public static final long FIRST_VALID_STAMP = 1000L;
  27.   static {                                      // register a ctor
  28.     WritableFactories.setFactory
  29.       (GenerationStamp.class,
  30.        new WritableFactory() {
  31.          public Writable newInstance() { return new GenerationStamp(0); }
  32.        });
  33.   }
  34.   long genstamp;
  35.   /**
  36.    * Create a new instance, initialized to FIRST_VALID_STAMP.
  37.    */
  38.   public GenerationStamp() {this(GenerationStamp.FIRST_VALID_STAMP);}
  39.   /**
  40.    * Create a new instance, initialized to the specified value.
  41.    */
  42.   GenerationStamp(long stamp) {this.genstamp = stamp;}
  43.   /**
  44.    * Returns the current generation stamp
  45.    */
  46.   public long getStamp() {
  47.     return this.genstamp;
  48.   }
  49.   /**
  50.    * Sets the current generation stamp
  51.    */
  52.   public void setStamp(long stamp) {
  53.     this.genstamp = stamp;
  54.   }
  55.   /**
  56.    * First increments the counter and then returns the stamp 
  57.    */
  58.   public synchronized long nextStamp() {
  59.     this.genstamp++;
  60.     return this.genstamp;
  61.   }
  62.   /////////////////////////////////////
  63.   // Writable
  64.   /////////////////////////////////////
  65.   public void write(DataOutput out) throws IOException {
  66.     out.writeLong(genstamp);
  67.   }
  68.   public void readFields(DataInput in) throws IOException {
  69.     this.genstamp = in.readLong();
  70.     if (this.genstamp < 0) {
  71.       throw new IOException("Bad Generation Stamp: " + this.genstamp);
  72.     }
  73.   }
  74.   /////////////////////////////////////
  75.   // Comparable
  76.   /////////////////////////////////////
  77.   public static int compare(long x, long y) {
  78.     return x < y? -1: x == y? 0: 1;
  79.   }
  80.   /** {@inheritDoc} */
  81.   public int compareTo(GenerationStamp that) {
  82.     return compare(this.genstamp, that.genstamp);
  83.   }
  84.   /** {@inheritDoc} */
  85.   public boolean equals(Object o) {
  86.     if (!(o instanceof GenerationStamp)) {
  87.       return false;
  88.     }
  89.     return genstamp == ((GenerationStamp)o).genstamp;
  90.   }
  91.   public static boolean equalsWithWildcard(long x, long y) {
  92.     return x == y || x == WILDCARD_STAMP || y == WILDCARD_STAMP;  
  93.   }
  94.   /** {@inheritDoc} */
  95.   public int hashCode() {
  96.     return 37 * 17 + (int) (genstamp^(genstamp>>>32));
  97.   }
  98. }