org.apache.hadoop.hdfs.server.namenode.startupprogress.Step.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.hadoop.hdfs.server.namenode.startupprogress.Step.java

Source

/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with this
 * work for additional information regarding copyright ownership. The ASF
 * licenses this file to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.apache.hadoop.hdfs.server.namenode.startupprogress;

import java.util.concurrent.atomic.AtomicInteger;

import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.hadoop.classification.InterfaceAudience;

/**
 * A step performed by the namenode during a {@link Phase} of startup.
 */
@InterfaceAudience.Private
public class Step implements Comparable<Step> {
    private static final AtomicInteger SEQUENCE = new AtomicInteger();

    private final String file;
    private final int sequenceNumber;
    private final long size;
    private final StepType type;

    /**
     * Creates a new Step.
     * 
     * @param type StepType type of step
     */
    public Step(StepType type) {
        this(type, null, Long.MIN_VALUE);
    }

    /**
     * Creates a new Step.
     * 
     * @param file String file
     */
    public Step(String file) {
        this(null, file, Long.MIN_VALUE);
    }

    /**
     * Creates a new Step.
     * 
     * @param file String file
     * @param size long size in bytes
     */
    public Step(String file, long size) {
        this(null, file, size);
    }

    /**
     * Creates a new Step.
     * 
     * @param type StepType type of step
     * @param file String file
     */
    public Step(StepType type, String file) {
        this(type, file, Long.MIN_VALUE);
    }

    /**
     * Creates a new Step.
     * 
     * @param type StepType type of step
     * @param file String file
     * @param size long size in bytes
     */
    public Step(StepType type, String file, long size) {
        this.file = file;
        this.sequenceNumber = SEQUENCE.incrementAndGet();
        this.size = size;
        this.type = type;
    }

    @Override
    public int compareTo(Step other) {
        // Sort steps by file and then sequentially within the file to achieve the
        // desired order.  There is no concurrent map structure in the JDK that
        // maintains insertion order, so instead we attach a sequence number to each
        // step and sort on read.
        return new CompareToBuilder().append(file, other.file).append(sequenceNumber, other.sequenceNumber)
                .toComparison();
    }

    @Override
    public boolean equals(Object otherObj) {
        if (otherObj == null || otherObj.getClass() != getClass()) {
            return false;
        }
        Step other = (Step) otherObj;
        return new EqualsBuilder().append(this.file, other.file).append(this.size, other.size)
                .append(this.type, other.type).isEquals();
    }

    /**
     * Returns the optional file name, possibly null.
     * 
     * @return String optional file name, possibly null
     */
    public String getFile() {
        return file;
    }

    /**
     * Returns the optional size in bytes, possibly Long.MIN_VALUE if undefined.
     * 
     * @return long optional size in bytes, possibly Long.MIN_VALUE
     */
    public long getSize() {
        return size;
    }

    /**
     * Returns the optional step type, possibly null.
     * 
     * @return StepType optional step type, possibly null
     */
    public StepType getType() {
        return type;
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append(file).append(size).append(type).toHashCode();
    }
}