001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 package org.apache.hadoop.hdfs.server.common; 019 020 import java.io.DataInput; 021 import java.io.DataOutput; 022 import java.io.IOException; 023 024 import org.apache.hadoop.classification.InterfaceAudience; 025 026 /************************************ 027 * Some handy internal HDFS constants 028 * 029 ************************************/ 030 031 @InterfaceAudience.Private 032 public final class HdfsServerConstants { 033 /* Hidden constructor */ 034 private HdfsServerConstants() { } 035 036 /** 037 * Type of the node 038 */ 039 static public enum NodeType { 040 NAME_NODE, 041 DATA_NODE; 042 } 043 044 /** Startup options */ 045 static public enum StartupOption{ 046 FORMAT ("-format"), 047 CLUSTERID ("-clusterid"), 048 GENCLUSTERID ("-genclusterid"), 049 REGULAR ("-regular"), 050 BACKUP ("-backup"), 051 CHECKPOINT("-checkpoint"), 052 UPGRADE ("-upgrade"), 053 ROLLBACK("-rollback"), 054 FINALIZE("-finalize"), 055 IMPORT ("-importCheckpoint"); 056 057 private String name = null; 058 059 // Used only with format and upgrade options 060 private String clusterId = null; 061 062 private StartupOption(String arg) {this.name = arg;} 063 public String getName() {return name;} 064 public NamenodeRole toNodeRole() { 065 switch(this) { 066 case BACKUP: 067 return NamenodeRole.BACKUP; 068 case CHECKPOINT: 069 return NamenodeRole.CHECKPOINT; 070 default: 071 return NamenodeRole.NAMENODE; 072 } 073 } 074 075 public void setClusterId(String cid) { 076 clusterId = cid; 077 } 078 079 public String getClusterId() { 080 return clusterId; 081 } 082 } 083 084 // Timeouts for communicating with DataNode for streaming writes/reads 085 public static int READ_TIMEOUT = 60 * 1000; 086 public static int READ_TIMEOUT_EXTENSION = 5 * 1000; 087 public static int WRITE_TIMEOUT = 8 * 60 * 1000; 088 public static int WRITE_TIMEOUT_EXTENSION = 5 * 1000; //for write pipeline 089 090 /** 091 * Defines the NameNode role. 092 */ 093 static public enum NamenodeRole { 094 NAMENODE ("NameNode"), 095 BACKUP ("Backup Node"), 096 CHECKPOINT("Checkpoint Node"); 097 098 private String description = null; 099 private NamenodeRole(String arg) {this.description = arg;} 100 101 public String toString() { 102 return description; 103 } 104 } 105 106 /** 107 * Block replica states, which it can go through while being constructed. 108 */ 109 static public enum ReplicaState { 110 /** Replica is finalized. The state when replica is not modified. */ 111 FINALIZED(0), 112 /** Replica is being written to. */ 113 RBW(1), 114 /** Replica is waiting to be recovered. */ 115 RWR(2), 116 /** Replica is under recovery. */ 117 RUR(3), 118 /** Temporary replica: created for replication and relocation only. */ 119 TEMPORARY(4); 120 121 private int value; 122 123 private ReplicaState(int v) { 124 value = v; 125 } 126 127 public int getValue() { 128 return value; 129 } 130 131 public static ReplicaState getState(int v) { 132 return ReplicaState.values()[v]; 133 } 134 135 /** Read from in */ 136 public static ReplicaState read(DataInput in) throws IOException { 137 return values()[in.readByte()]; 138 } 139 140 /** Write to out */ 141 public void write(DataOutput out) throws IOException { 142 out.writeByte(ordinal()); 143 } 144 } 145 146 /** 147 * States, which a block can go through while it is under construction. 148 */ 149 static public enum BlockUCState { 150 /** 151 * Block construction completed.<br> 152 * The block has at least one {@link ReplicaState#FINALIZED} replica, 153 * and is not going to be modified. 154 */ 155 COMPLETE, 156 /** 157 * The block is under construction.<br> 158 * It has been recently allocated for write or append. 159 */ 160 UNDER_CONSTRUCTION, 161 /** 162 * The block is under recovery.<br> 163 * When a file lease expires its last block may not be {@link #COMPLETE} 164 * and needs to go through a recovery procedure, 165 * which synchronizes the existing replicas contents. 166 */ 167 UNDER_RECOVERY, 168 /** 169 * The block is committed.<br> 170 * The client reported that all bytes are written to data-nodes 171 * with the given generation stamp and block length, but no 172 * {@link ReplicaState#FINALIZED} 173 * replicas has yet been reported by data-nodes themselves. 174 */ 175 COMMITTED; 176 } 177 178 public static final String NAMENODE_LEASE_HOLDER = "HDFS_NameNode"; 179 public static final long NAMENODE_LEASE_RECHECK_INTERVAL = 2000; 180 } 181