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.protocolPB; 019 020 import java.util.ArrayList; 021 import java.util.Arrays; 022 import java.util.EnumSet; 023 import java.util.List; 024 025 import org.apache.hadoop.fs.ContentSummary; 026 import org.apache.hadoop.fs.CreateFlag; 027 import org.apache.hadoop.fs.FsServerDefaults; 028 import org.apache.hadoop.fs.permission.FsPermission; 029 import org.apache.hadoop.hdfs.server.protocol.StorageReport; 030 import org.apache.hadoop.hdfs.protocol.Block; 031 import org.apache.hadoop.hdfs.protocol.ClientProtocol; 032 import org.apache.hadoop.hdfs.protocol.CorruptFileBlocks; 033 import org.apache.hadoop.hdfs.protocol.DatanodeID; 034 import org.apache.hadoop.hdfs.protocol.DatanodeInfo; 035 import org.apache.hadoop.hdfs.protocol.DatanodeInfo.AdminStates; 036 import org.apache.hadoop.hdfs.protocol.DirectoryListing; 037 import org.apache.hadoop.hdfs.protocol.ExtendedBlock; 038 import org.apache.hadoop.hdfs.protocol.HdfsConstants.DatanodeReportType; 039 import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction; 040 import org.apache.hadoop.hdfs.protocol.HdfsConstants.UpgradeAction; 041 import org.apache.hadoop.hdfs.protocol.HdfsFileStatus; 042 import org.apache.hadoop.hdfs.protocol.HdfsLocatedFileStatus; 043 import org.apache.hadoop.hdfs.protocol.LocatedBlock; 044 import org.apache.hadoop.hdfs.protocol.LocatedBlocks; 045 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos; 046 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CreateFlagProto; 047 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.DatanodeReportTypeProto; 048 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetFsStatsResponseProto; 049 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SafeModeActionProto; 050 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.UpgradeActionProto; 051 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.BalancerBandwidthCommandProto; 052 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.BlockCommandProto; 053 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.BlockRecoveryCommandProto; 054 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.DatanodeCommandProto; 055 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.DatanodeRegistrationProto; 056 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.DatanodeStorageProto; 057 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.DatanodeStorageProto.StorageState; 058 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.FinalizeCommandProto; 059 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.KeyUpdateCommandProto; 060 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.NNHAStatusHeartbeatProto; 061 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.ReceivedDeletedBlockInfoProto; 062 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.RegisterCommandProto; 063 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.StorageReportProto; 064 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.UpgradeCommandProto; 065 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlockKeyProto; 066 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlockProto; 067 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlockTokenIdentifierProto; 068 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlockWithLocationsProto; 069 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlocksWithLocationsProto; 070 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.CheckpointCommandProto; 071 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.CheckpointSignatureProto; 072 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ContentSummaryProto; 073 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.CorruptFileBlocksProto; 074 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeIDProto; 075 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeInfoProto; 076 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeInfoProto.AdminState; 077 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeInfosProto; 078 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DirectoryListingProto; 079 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ExportedBlockKeysProto; 080 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ExtendedBlockProto; 081 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.FsPermissionProto; 082 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.FsServerDefaultsProto; 083 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.HdfsFileStatusProto; 084 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.HdfsFileStatusProto.FileType; 085 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.LocatedBlockProto; 086 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.LocatedBlockProto.Builder; 087 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.LocatedBlocksProto; 088 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.NamenodeCommandProto; 089 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.NamenodeRegistrationProto; 090 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.NamespaceInfoProto; 091 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.RecoveringBlockProto; 092 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.RemoteEditLogManifestProto; 093 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.RemoteEditLogProto; 094 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.NamenodeRegistrationProto.NamenodeRoleProto; 095 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ReplicaStateProto; 096 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.StorageInfoProto; 097 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.UpgradeStatusReportProto; 098 import org.apache.hadoop.hdfs.protocol.proto.JournalProtocolProtos.JournalInfoProto; 099 import org.apache.hadoop.hdfs.security.token.block.BlockKey; 100 import org.apache.hadoop.hdfs.security.token.block.BlockTokenIdentifier; 101 import org.apache.hadoop.hdfs.security.token.block.ExportedBlockKeys; 102 import org.apache.hadoop.hdfs.security.token.delegation.DelegationTokenIdentifier; 103 import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NamenodeRole; 104 import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.ReplicaState; 105 import org.apache.hadoop.hdfs.server.common.StorageInfo; 106 import org.apache.hadoop.hdfs.server.common.UpgradeStatusReport; 107 import org.apache.hadoop.hdfs.server.namenode.CheckpointSignature; 108 import org.apache.hadoop.hdfs.server.protocol.BalancerBandwidthCommand; 109 import org.apache.hadoop.hdfs.server.protocol.BlockCommand; 110 import org.apache.hadoop.hdfs.server.protocol.BlockRecoveryCommand; 111 import org.apache.hadoop.hdfs.server.protocol.BlockRecoveryCommand.RecoveringBlock; 112 import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations; 113 import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations.BlockWithLocations; 114 import org.apache.hadoop.hdfs.server.protocol.CheckpointCommand; 115 import org.apache.hadoop.hdfs.server.protocol.DatanodeCommand; 116 import org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol; 117 import org.apache.hadoop.hdfs.server.protocol.DatanodeRegistration; 118 import org.apache.hadoop.hdfs.server.protocol.DatanodeStorage; 119 import org.apache.hadoop.hdfs.server.protocol.DatanodeStorage.State; 120 import org.apache.hadoop.hdfs.server.protocol.FinalizeCommand; 121 import org.apache.hadoop.hdfs.server.protocol.JournalInfo; 122 import org.apache.hadoop.hdfs.server.protocol.KeyUpdateCommand; 123 import org.apache.hadoop.hdfs.server.protocol.NamenodeCommand; 124 import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration; 125 import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo; 126 import org.apache.hadoop.hdfs.server.protocol.NNHAStatusHeartbeat; 127 import org.apache.hadoop.hdfs.server.protocol.ReceivedDeletedBlockInfo; 128 import org.apache.hadoop.hdfs.server.protocol.ReceivedDeletedBlockInfo.BlockStatus; 129 import org.apache.hadoop.hdfs.server.protocol.RegisterCommand; 130 import org.apache.hadoop.hdfs.server.protocol.RemoteEditLog; 131 import org.apache.hadoop.hdfs.server.protocol.RemoteEditLogManifest; 132 import org.apache.hadoop.hdfs.server.protocol.UpgradeCommand; 133 import org.apache.hadoop.io.EnumSetWritable; 134 import org.apache.hadoop.io.Text; 135 import org.apache.hadoop.security.token.Token; 136 137 import com.google.protobuf.ByteString; 138 139 /** 140 * Utilities for converting protobuf classes to and from implementation classes. 141 * 142 * Note that when converting from an internal type to protobuf type, the 143 * converter never return null for protobuf type. The check for internal type 144 * being null must be done before calling the convert() method. 145 */ 146 public class PBHelper { 147 private static final RegisterCommandProto REG_CMD_PROTO = 148 RegisterCommandProto.newBuilder().build(); 149 private static final RegisterCommand REG_CMD = new RegisterCommand(); 150 151 private PBHelper() { 152 /** Hidden constructor */ 153 } 154 155 public static ByteString getByteString(byte[] bytes) { 156 return ByteString.copyFrom(bytes); 157 } 158 159 public static NamenodeRole convert(NamenodeRoleProto role) { 160 switch (role) { 161 case NAMENODE: 162 return NamenodeRole.NAMENODE; 163 case BACKUP: 164 return NamenodeRole.BACKUP; 165 case CHECKPOINT: 166 return NamenodeRole.CHECKPOINT; 167 } 168 return null; 169 } 170 171 public static NamenodeRoleProto convert(NamenodeRole role) { 172 switch (role) { 173 case NAMENODE: 174 return NamenodeRoleProto.NAMENODE; 175 case BACKUP: 176 return NamenodeRoleProto.BACKUP; 177 case CHECKPOINT: 178 return NamenodeRoleProto.CHECKPOINT; 179 } 180 return null; 181 } 182 183 public static StorageInfoProto convert(StorageInfo info) { 184 return StorageInfoProto.newBuilder().setClusterID(info.getClusterID()) 185 .setCTime(info.getCTime()).setLayoutVersion(info.getLayoutVersion()) 186 .setNamespceID(info.getNamespaceID()).build(); 187 } 188 189 public static StorageInfo convert(StorageInfoProto info) { 190 return new StorageInfo(info.getLayoutVersion(), info.getNamespceID(), 191 info.getClusterID(), info.getCTime()); 192 } 193 194 public static NamenodeRegistrationProto convert(NamenodeRegistration reg) { 195 return NamenodeRegistrationProto.newBuilder() 196 .setHttpAddress(reg.getHttpAddress()).setRole(convert(reg.getRole())) 197 .setRpcAddress(reg.getAddress()) 198 .setStorageInfo(convert((StorageInfo) reg)).build(); 199 } 200 201 public static NamenodeRegistration convert(NamenodeRegistrationProto reg) { 202 return new NamenodeRegistration(reg.getRpcAddress(), reg.getHttpAddress(), 203 convert(reg.getStorageInfo()), convert(reg.getRole())); 204 } 205 206 // DatanodeId 207 public static DatanodeID convert(DatanodeIDProto dn) { 208 return new DatanodeID(dn.getIpAddr(), dn.getHostName(), dn.getStorageID(), 209 dn.getXferPort(), dn.getInfoPort(), dn.getIpcPort()); 210 } 211 212 public static DatanodeIDProto convert(DatanodeID dn) { 213 return DatanodeIDProto.newBuilder() 214 .setIpAddr(dn.getIpAddr()) 215 .setHostName(dn.getHostName()) 216 .setStorageID(dn.getStorageID()) 217 .setXferPort(dn.getXferPort()) 218 .setInfoPort(dn.getInfoPort()) 219 .setIpcPort(dn.getIpcPort()).build(); 220 } 221 222 // Arrays of DatanodeId 223 public static DatanodeIDProto[] convert(DatanodeID[] did) { 224 if (did == null) return null; 225 final int len = did.length; 226 DatanodeIDProto[] result = new DatanodeIDProto[len]; 227 for (int i = 0; i < len; ++i) { 228 result[i] = convert(did[i]); 229 } 230 return result; 231 } 232 233 public static DatanodeID[] convert(DatanodeIDProto[] did) { 234 if (did == null) return null; 235 final int len = did.length; 236 DatanodeID[] result = new DatanodeID[len]; 237 for (int i = 0; i < len; ++i) { 238 result[i] = convert(did[i]); 239 } 240 return result; 241 } 242 243 // Block 244 public static BlockProto convert(Block b) { 245 return BlockProto.newBuilder().setBlockId(b.getBlockId()) 246 .setGenStamp(b.getGenerationStamp()).setNumBytes(b.getNumBytes()) 247 .build(); 248 } 249 250 public static Block convert(BlockProto b) { 251 return new Block(b.getBlockId(), b.getNumBytes(), b.getGenStamp()); 252 } 253 254 public static BlockWithLocationsProto convert(BlockWithLocations blk) { 255 return BlockWithLocationsProto.newBuilder() 256 .setBlock(convert(blk.getBlock())) 257 .addAllStorageIDs(Arrays.asList(blk.getStorageIDs())).build(); 258 } 259 260 public static BlockWithLocations convert(BlockWithLocationsProto b) { 261 return new BlockWithLocations(convert(b.getBlock()), b.getStorageIDsList() 262 .toArray(new String[0])); 263 } 264 265 public static BlocksWithLocationsProto convert(BlocksWithLocations blks) { 266 BlocksWithLocationsProto.Builder builder = BlocksWithLocationsProto 267 .newBuilder(); 268 for (BlockWithLocations b : blks.getBlocks()) { 269 builder.addBlocks(convert(b)); 270 } 271 return builder.build(); 272 } 273 274 public static BlocksWithLocations convert(BlocksWithLocationsProto blocks) { 275 List<BlockWithLocationsProto> b = blocks.getBlocksList(); 276 BlockWithLocations[] ret = new BlockWithLocations[b.size()]; 277 int i = 0; 278 for (BlockWithLocationsProto entry : b) { 279 ret[i++] = convert(entry); 280 } 281 return new BlocksWithLocations(ret); 282 } 283 284 public static BlockKeyProto convert(BlockKey key) { 285 byte[] encodedKey = key.getEncodedKey(); 286 ByteString keyBytes = ByteString.copyFrom(encodedKey == null ? new byte[0] 287 : encodedKey); 288 return BlockKeyProto.newBuilder().setKeyId(key.getKeyId()) 289 .setKeyBytes(keyBytes).setExpiryDate(key.getExpiryDate()).build(); 290 } 291 292 public static BlockKey convert(BlockKeyProto k) { 293 return new BlockKey(k.getKeyId(), k.getExpiryDate(), k.getKeyBytes() 294 .toByteArray()); 295 } 296 297 public static ExportedBlockKeysProto convert(ExportedBlockKeys keys) { 298 ExportedBlockKeysProto.Builder builder = ExportedBlockKeysProto 299 .newBuilder(); 300 builder.setIsBlockTokenEnabled(keys.isBlockTokenEnabled()) 301 .setKeyUpdateInterval(keys.getKeyUpdateInterval()) 302 .setTokenLifeTime(keys.getTokenLifetime()) 303 .setCurrentKey(convert(keys.getCurrentKey())); 304 for (BlockKey k : keys.getAllKeys()) { 305 builder.addAllKeys(convert(k)); 306 } 307 return builder.build(); 308 } 309 310 public static ExportedBlockKeys convert(ExportedBlockKeysProto keys) { 311 return new ExportedBlockKeys(keys.getIsBlockTokenEnabled(), 312 keys.getKeyUpdateInterval(), keys.getTokenLifeTime(), 313 convert(keys.getCurrentKey()), convertBlockKeys(keys.getAllKeysList())); 314 } 315 316 public static CheckpointSignatureProto convert(CheckpointSignature s) { 317 return CheckpointSignatureProto.newBuilder() 318 .setBlockPoolId(s.getBlockpoolID()) 319 .setCurSegmentTxId(s.getCurSegmentTxId()) 320 .setMostRecentCheckpointTxId(s.getMostRecentCheckpointTxId()) 321 .setStorageInfo(PBHelper.convert((StorageInfo) s)).build(); 322 } 323 324 public static CheckpointSignature convert(CheckpointSignatureProto s) { 325 return new CheckpointSignature(PBHelper.convert(s.getStorageInfo()), 326 s.getBlockPoolId(), s.getMostRecentCheckpointTxId(), 327 s.getCurSegmentTxId()); 328 } 329 330 public static RemoteEditLogProto convert(RemoteEditLog log) { 331 return RemoteEditLogProto.newBuilder().setEndTxId(log.getEndTxId()) 332 .setStartTxId(log.getStartTxId()).build(); 333 } 334 335 public static RemoteEditLog convert(RemoteEditLogProto l) { 336 return new RemoteEditLog(l.getStartTxId(), l.getEndTxId()); 337 } 338 339 public static RemoteEditLogManifestProto convert( 340 RemoteEditLogManifest manifest) { 341 RemoteEditLogManifestProto.Builder builder = RemoteEditLogManifestProto 342 .newBuilder(); 343 for (RemoteEditLog log : manifest.getLogs()) { 344 builder.addLogs(convert(log)); 345 } 346 return builder.build(); 347 } 348 349 public static RemoteEditLogManifest convert( 350 RemoteEditLogManifestProto manifest) { 351 List<RemoteEditLog> logs = new ArrayList<RemoteEditLog>(manifest 352 .getLogsList().size()); 353 for (RemoteEditLogProto l : manifest.getLogsList()) { 354 logs.add(convert(l)); 355 } 356 return new RemoteEditLogManifest(logs); 357 } 358 359 public static CheckpointCommandProto convert(CheckpointCommand cmd) { 360 return CheckpointCommandProto.newBuilder() 361 .setSignature(convert(cmd.getSignature())) 362 .setNeedToReturnImage(cmd.needToReturnImage()).build(); 363 } 364 365 public static NamenodeCommandProto convert(NamenodeCommand cmd) { 366 if (cmd instanceof CheckpointCommand) { 367 return NamenodeCommandProto.newBuilder().setAction(cmd.getAction()) 368 .setType(NamenodeCommandProto.Type.CheckPointCommand) 369 .setCheckpointCmd(convert((CheckpointCommand) cmd)).build(); 370 } 371 return NamenodeCommandProto.newBuilder() 372 .setType(NamenodeCommandProto.Type.NamenodeCommand) 373 .setAction(cmd.getAction()).build(); 374 } 375 376 public static BlockKey[] convertBlockKeys(List<BlockKeyProto> list) { 377 BlockKey[] ret = new BlockKey[list.size()]; 378 int i = 0; 379 for (BlockKeyProto k : list) { 380 ret[i++] = convert(k); 381 } 382 return ret; 383 } 384 385 public static NamespaceInfo convert(NamespaceInfoProto info) { 386 StorageInfoProto storage = info.getStorageInfo(); 387 return new NamespaceInfo(storage.getNamespceID(), storage.getClusterID(), 388 info.getBlockPoolID(), storage.getCTime(), info.getDistUpgradeVersion(), 389 info.getBuildVersion(), info.getSoftwareVersion()); 390 } 391 392 public static NamenodeCommand convert(NamenodeCommandProto cmd) { 393 if (cmd == null) return null; 394 switch (cmd.getType()) { 395 case CheckPointCommand: 396 CheckpointCommandProto chkPt = cmd.getCheckpointCmd(); 397 return new CheckpointCommand(PBHelper.convert(chkPt.getSignature()), 398 chkPt.getNeedToReturnImage()); 399 default: 400 return new NamenodeCommand(cmd.getAction()); 401 } 402 } 403 404 public static ExtendedBlock convert(ExtendedBlockProto eb) { 405 if (eb == null) return null; 406 return new ExtendedBlock( eb.getPoolId(), eb.getBlockId(), eb.getNumBytes(), 407 eb.getGenerationStamp()); 408 } 409 410 public static ExtendedBlockProto convert(final ExtendedBlock b) { 411 if (b == null) return null; 412 return ExtendedBlockProto.newBuilder(). 413 setPoolId(b.getBlockPoolId()). 414 setBlockId(b.getBlockId()). 415 setNumBytes(b.getNumBytes()). 416 setGenerationStamp(b.getGenerationStamp()). 417 build(); 418 } 419 420 public static RecoveringBlockProto convert(RecoveringBlock b) { 421 if (b == null) { 422 return null; 423 } 424 LocatedBlockProto lb = PBHelper.convert((LocatedBlock)b); 425 return RecoveringBlockProto.newBuilder().setBlock(lb) 426 .setNewGenStamp(b.getNewGenerationStamp()).build(); 427 } 428 429 public static RecoveringBlock convert(RecoveringBlockProto b) { 430 ExtendedBlock block = convert(b.getBlock().getB()); 431 DatanodeInfo[] locs = convert(b.getBlock().getLocsList()); 432 return new RecoveringBlock(block, locs, b.getNewGenStamp()); 433 } 434 435 public static DatanodeInfoProto.AdminState convert( 436 final DatanodeInfo.AdminStates inAs) { 437 switch (inAs) { 438 case NORMAL: return DatanodeInfoProto.AdminState.NORMAL; 439 case DECOMMISSION_INPROGRESS: 440 return DatanodeInfoProto.AdminState.DECOMMISSION_INPROGRESS; 441 case DECOMMISSIONED: return DatanodeInfoProto.AdminState.DECOMMISSIONED; 442 default: return DatanodeInfoProto.AdminState.NORMAL; 443 } 444 } 445 446 static public DatanodeInfo convert(DatanodeInfoProto di) { 447 if (di == null) return null; 448 return new DatanodeInfo( 449 PBHelper.convert(di.getId()), 450 di.hasLocation() ? di.getLocation() : null , 451 di.getCapacity(), di.getDfsUsed(), di.getRemaining(), 452 di.getBlockPoolUsed() , di.getLastUpdate() , di.getXceiverCount() , 453 PBHelper.convert(di.getAdminState())); 454 } 455 456 static public DatanodeInfoProto convertDatanodeInfo(DatanodeInfo di) { 457 if (di == null) return null; 458 DatanodeInfoProto.Builder builder = DatanodeInfoProto.newBuilder(); 459 if (di.getNetworkLocation() != null) { 460 builder.setLocation(di.getNetworkLocation()); 461 } 462 463 return builder. 464 setId(PBHelper.convert((DatanodeID) di)). 465 setCapacity(di.getCapacity()). 466 setDfsUsed(di.getDfsUsed()). 467 setRemaining(di.getRemaining()). 468 setBlockPoolUsed(di.getBlockPoolUsed()). 469 setLastUpdate(di.getLastUpdate()). 470 setXceiverCount(di.getXceiverCount()). 471 setAdminState(PBHelper.convert(di.getAdminState())). 472 build(); 473 } 474 475 476 static public DatanodeInfo[] convert(DatanodeInfoProto di[]) { 477 if (di == null) return null; 478 DatanodeInfo[] result = new DatanodeInfo[di.length]; 479 for (int i = 0; i < di.length; i++) { 480 result[i] = convert(di[i]); 481 } 482 return result; 483 } 484 485 static public DatanodeInfoProto[] convert(DatanodeInfo[] di) { 486 if (di == null) return null; 487 DatanodeInfoProto[] result = new DatanodeInfoProto[di.length]; 488 for (int i = 0; i < di.length; i++) { 489 result[i] = PBHelper.convertDatanodeInfo(di[i]); 490 } 491 return result; 492 } 493 494 public static DatanodeInfo[] convert(List<DatanodeInfoProto> list) { 495 DatanodeInfo[] info = new DatanodeInfo[list.size()]; 496 for (int i = 0; i < info.length; i++) { 497 info[i] = convert(list.get(i)); 498 } 499 return info; 500 } 501 502 public static DatanodeInfoProto convert(DatanodeInfo info) { 503 DatanodeInfoProto.Builder builder = DatanodeInfoProto.newBuilder(); 504 builder.setBlockPoolUsed(info.getBlockPoolUsed()); 505 builder.setAdminState(PBHelper.convert(info.getAdminState())); 506 builder.setCapacity(info.getCapacity()) 507 .setDfsUsed(info.getDfsUsed()) 508 .setId(PBHelper.convert((DatanodeID)info)) 509 .setLastUpdate(info.getLastUpdate()) 510 .setLocation(info.getNetworkLocation()) 511 .setRemaining(info.getRemaining()) 512 .setXceiverCount(info.getXceiverCount()) 513 .build(); 514 return builder.build(); 515 } 516 517 public static AdminStates convert(AdminState adminState) { 518 switch(adminState) { 519 case DECOMMISSION_INPROGRESS: 520 return AdminStates.DECOMMISSION_INPROGRESS; 521 case DECOMMISSIONED: 522 return AdminStates.DECOMMISSIONED; 523 case NORMAL: 524 default: 525 return AdminStates.NORMAL; 526 } 527 } 528 529 public static LocatedBlockProto convert(LocatedBlock b) { 530 if (b == null) return null; 531 Builder builder = LocatedBlockProto.newBuilder(); 532 DatanodeInfo[] locs = b.getLocations(); 533 for (int i = 0; i < locs.length; i++) { 534 builder.addLocs(i, PBHelper.convert(locs[i])); 535 } 536 return builder.setB(PBHelper.convert(b.getBlock())) 537 .setBlockToken(PBHelper.convert(b.getBlockToken())) 538 .setCorrupt(b.isCorrupt()).setOffset(b.getStartOffset()).build(); 539 } 540 541 public static LocatedBlock convert(LocatedBlockProto proto) { 542 if (proto == null) return null; 543 List<DatanodeInfoProto> locs = proto.getLocsList(); 544 DatanodeInfo[] targets = new DatanodeInfo[locs.size()]; 545 for (int i = 0; i < locs.size(); i++) { 546 targets[i] = PBHelper.convert(locs.get(i)); 547 } 548 LocatedBlock lb = new LocatedBlock(PBHelper.convert(proto.getB()), targets, 549 proto.getOffset(), proto.getCorrupt()); 550 lb.setBlockToken(PBHelper.convert(proto.getBlockToken())); 551 return lb; 552 } 553 554 public static BlockTokenIdentifierProto convert(Token<?> tok) { 555 return BlockTokenIdentifierProto.newBuilder(). 556 setIdentifier(ByteString.copyFrom(tok.getIdentifier())). 557 setPassword(ByteString.copyFrom(tok.getPassword())). 558 setKind(tok.getKind().toString()). 559 setService(tok.getService().toString()).build(); 560 } 561 562 public static Token<BlockTokenIdentifier> convert( 563 BlockTokenIdentifierProto blockToken) { 564 return new Token<BlockTokenIdentifier>(blockToken.getIdentifier() 565 .toByteArray(), blockToken.getPassword().toByteArray(), new Text( 566 blockToken.getKind()), new Text(blockToken.getService())); 567 } 568 569 570 public static Token<DelegationTokenIdentifier> convertDelegationToken( 571 BlockTokenIdentifierProto blockToken) { 572 return new Token<DelegationTokenIdentifier>(blockToken.getIdentifier() 573 .toByteArray(), blockToken.getPassword().toByteArray(), new Text( 574 blockToken.getKind()), new Text(blockToken.getService())); 575 } 576 577 public static ReplicaState convert(ReplicaStateProto state) { 578 switch (state) { 579 case RBW: 580 return ReplicaState.RBW; 581 case RUR: 582 return ReplicaState.RUR; 583 case RWR: 584 return ReplicaState.RWR; 585 case TEMPORARY: 586 return ReplicaState.TEMPORARY; 587 case FINALIZED: 588 default: 589 return ReplicaState.FINALIZED; 590 } 591 } 592 593 public static ReplicaStateProto convert(ReplicaState state) { 594 switch (state) { 595 case RBW: 596 return ReplicaStateProto.RBW; 597 case RUR: 598 return ReplicaStateProto.RUR; 599 case RWR: 600 return ReplicaStateProto.RWR; 601 case TEMPORARY: 602 return ReplicaStateProto.TEMPORARY; 603 case FINALIZED: 604 default: 605 return ReplicaStateProto.FINALIZED; 606 } 607 } 608 609 public static DatanodeRegistrationProto convert( 610 DatanodeRegistration registration) { 611 DatanodeRegistrationProto.Builder builder = DatanodeRegistrationProto 612 .newBuilder(); 613 return builder.setDatanodeID(PBHelper.convert((DatanodeID) registration)) 614 .setStorageInfo(PBHelper.convert(registration.getStorageInfo())) 615 .setKeys(PBHelper.convert(registration.getExportedKeys())) 616 .setSoftwareVersion(registration.getSoftwareVersion()).build(); 617 } 618 619 public static DatanodeRegistration convert(DatanodeRegistrationProto proto) { 620 return new DatanodeRegistration(PBHelper.convert(proto.getDatanodeID()), 621 PBHelper.convert(proto.getStorageInfo()), PBHelper.convert(proto 622 .getKeys()), proto.getSoftwareVersion()); 623 } 624 625 public static DatanodeCommand convert(DatanodeCommandProto proto) { 626 switch (proto.getCmdType()) { 627 case BalancerBandwidthCommand: 628 return PBHelper.convert(proto.getBalancerCmd()); 629 case BlockCommand: 630 return PBHelper.convert(proto.getBlkCmd()); 631 case BlockRecoveryCommand: 632 return PBHelper.convert(proto.getRecoveryCmd()); 633 case FinalizeCommand: 634 return PBHelper.convert(proto.getFinalizeCmd()); 635 case KeyUpdateCommand: 636 return PBHelper.convert(proto.getKeyUpdateCmd()); 637 case RegisterCommand: 638 return REG_CMD; 639 case UpgradeCommand: 640 return PBHelper.convert(proto.getUpgradeCmd()); 641 } 642 return null; 643 } 644 645 public static BalancerBandwidthCommandProto convert( 646 BalancerBandwidthCommand bbCmd) { 647 return BalancerBandwidthCommandProto.newBuilder() 648 .setBandwidth(bbCmd.getBalancerBandwidthValue()).build(); 649 } 650 651 public static KeyUpdateCommandProto convert(KeyUpdateCommand cmd) { 652 return KeyUpdateCommandProto.newBuilder() 653 .setKeys(PBHelper.convert(cmd.getExportedKeys())).build(); 654 } 655 656 public static BlockRecoveryCommandProto convert(BlockRecoveryCommand cmd) { 657 BlockRecoveryCommandProto.Builder builder = BlockRecoveryCommandProto 658 .newBuilder(); 659 for (RecoveringBlock b : cmd.getRecoveringBlocks()) { 660 builder.addBlocks(PBHelper.convert(b)); 661 } 662 return builder.build(); 663 } 664 665 public static FinalizeCommandProto convert(FinalizeCommand cmd) { 666 return FinalizeCommandProto.newBuilder() 667 .setBlockPoolId(cmd.getBlockPoolId()).build(); 668 } 669 670 public static BlockCommandProto convert(BlockCommand cmd) { 671 BlockCommandProto.Builder builder = BlockCommandProto.newBuilder() 672 .setBlockPoolId(cmd.getBlockPoolId()); 673 switch (cmd.getAction()) { 674 case DatanodeProtocol.DNA_TRANSFER: 675 builder.setAction(BlockCommandProto.Action.TRANSFER); 676 break; 677 case DatanodeProtocol.DNA_INVALIDATE: 678 builder.setAction(BlockCommandProto.Action.INVALIDATE); 679 break; 680 case DatanodeProtocol.DNA_SHUTDOWN: 681 builder.setAction(BlockCommandProto.Action.SHUTDOWN); 682 break; 683 } 684 Block[] blocks = cmd.getBlocks(); 685 for (int i = 0; i < blocks.length; i++) { 686 builder.addBlocks(PBHelper.convert(blocks[i])); 687 } 688 builder.addAllTargets(PBHelper.convert(cmd.getTargets())); 689 return builder.build(); 690 } 691 692 private static List<DatanodeInfosProto> convert(DatanodeInfo[][] targets) { 693 DatanodeInfosProto[] ret = new DatanodeInfosProto[targets.length]; 694 for (int i = 0; i < targets.length; i++) { 695 ret[i] = DatanodeInfosProto.newBuilder() 696 .addAllDatanodes(Arrays.asList(PBHelper.convert(targets[i]))).build(); 697 } 698 return Arrays.asList(ret); 699 } 700 701 public static DatanodeCommandProto convert(DatanodeCommand datanodeCommand) { 702 DatanodeCommandProto.Builder builder = DatanodeCommandProto.newBuilder(); 703 if (datanodeCommand == null) { 704 return builder.setCmdType(DatanodeCommandProto.Type.NullDatanodeCommand) 705 .build(); 706 } 707 switch (datanodeCommand.getAction()) { 708 case DatanodeProtocol.DNA_BALANCERBANDWIDTHUPDATE: 709 builder.setCmdType(DatanodeCommandProto.Type.BalancerBandwidthCommand) 710 .setBalancerCmd( 711 PBHelper.convert((BalancerBandwidthCommand) datanodeCommand)); 712 break; 713 case DatanodeProtocol.DNA_ACCESSKEYUPDATE: 714 builder 715 .setCmdType(DatanodeCommandProto.Type.KeyUpdateCommand) 716 .setKeyUpdateCmd(PBHelper.convert((KeyUpdateCommand) datanodeCommand)); 717 break; 718 case DatanodeProtocol.DNA_RECOVERBLOCK: 719 builder.setCmdType(DatanodeCommandProto.Type.BlockRecoveryCommand) 720 .setRecoveryCmd( 721 PBHelper.convert((BlockRecoveryCommand) datanodeCommand)); 722 break; 723 case DatanodeProtocol.DNA_FINALIZE: 724 builder.setCmdType(DatanodeCommandProto.Type.FinalizeCommand) 725 .setFinalizeCmd(PBHelper.convert((FinalizeCommand) datanodeCommand)); 726 break; 727 case DatanodeProtocol.DNA_REGISTER: 728 builder.setCmdType(DatanodeCommandProto.Type.RegisterCommand) 729 .setRegisterCmd(REG_CMD_PROTO); 730 break; 731 case DatanodeProtocol.DNA_TRANSFER: 732 case DatanodeProtocol.DNA_INVALIDATE: 733 case DatanodeProtocol.DNA_SHUTDOWN: 734 builder.setCmdType(DatanodeCommandProto.Type.BlockCommand).setBlkCmd( 735 PBHelper.convert((BlockCommand) datanodeCommand)); 736 break; 737 case DatanodeProtocol.DNA_UC_ACTION_REPORT_STATUS: 738 case DatanodeProtocol.DNA_UC_ACTION_START_UPGRADE: 739 builder.setCmdType(DatanodeCommandProto.Type.UpgradeCommand) 740 .setUpgradeCmd(PBHelper.convert((UpgradeCommand) datanodeCommand)); 741 break; 742 case DatanodeProtocol.DNA_UNKNOWN: //Not expected 743 default: 744 builder.setCmdType(DatanodeCommandProto.Type.NullDatanodeCommand); 745 } 746 return builder.build(); 747 } 748 749 public static UpgradeCommand convert(UpgradeCommandProto upgradeCmd) { 750 int action = UpgradeCommand.UC_ACTION_UNKNOWN; 751 switch (upgradeCmd.getAction()) { 752 case REPORT_STATUS: 753 action = UpgradeCommand.UC_ACTION_REPORT_STATUS; 754 break; 755 case START_UPGRADE: 756 action = UpgradeCommand.UC_ACTION_START_UPGRADE; 757 } 758 return new UpgradeCommand(action, upgradeCmd.getVersion(), 759 (short) upgradeCmd.getUpgradeStatus()); 760 } 761 762 public static KeyUpdateCommand convert(KeyUpdateCommandProto keyUpdateCmd) { 763 return new KeyUpdateCommand(PBHelper.convert(keyUpdateCmd.getKeys())); 764 } 765 766 public static FinalizeCommand convert(FinalizeCommandProto finalizeCmd) { 767 return new FinalizeCommand(finalizeCmd.getBlockPoolId()); 768 } 769 770 public static BlockRecoveryCommand convert( 771 BlockRecoveryCommandProto recoveryCmd) { 772 List<RecoveringBlockProto> list = recoveryCmd.getBlocksList(); 773 List<RecoveringBlock> recoveringBlocks = new ArrayList<RecoveringBlock>( 774 list.size()); 775 776 for (RecoveringBlockProto rbp : list) { 777 recoveringBlocks.add(PBHelper.convert(rbp)); 778 } 779 return new BlockRecoveryCommand(recoveringBlocks); 780 } 781 782 public static BlockCommand convert(BlockCommandProto blkCmd) { 783 List<BlockProto> blockProtoList = blkCmd.getBlocksList(); 784 Block[] blocks = new Block[blockProtoList.size()]; 785 for (int i = 0; i < blockProtoList.size(); i++) { 786 blocks[i] = PBHelper.convert(blockProtoList.get(i)); 787 } 788 List<DatanodeInfosProto> targetList = blkCmd.getTargetsList(); 789 DatanodeInfo[][] targets = new DatanodeInfo[targetList.size()][]; 790 for (int i = 0; i < targetList.size(); i++) { 791 targets[i] = PBHelper.convert(targetList.get(i)); 792 } 793 int action = DatanodeProtocol.DNA_UNKNOWN; 794 switch (blkCmd.getAction()) { 795 case TRANSFER: 796 action = DatanodeProtocol.DNA_TRANSFER; 797 break; 798 case INVALIDATE: 799 action = DatanodeProtocol.DNA_INVALIDATE; 800 break; 801 case SHUTDOWN: 802 action = DatanodeProtocol.DNA_SHUTDOWN; 803 break; 804 } 805 return new BlockCommand(action, blkCmd.getBlockPoolId(), blocks, targets); 806 } 807 808 public static DatanodeInfo[] convert(DatanodeInfosProto datanodeInfosProto) { 809 List<DatanodeInfoProto> proto = datanodeInfosProto.getDatanodesList(); 810 DatanodeInfo[] infos = new DatanodeInfo[proto.size()]; 811 for (int i = 0; i < infos.length; i++) { 812 infos[i] = PBHelper.convert(proto.get(i)); 813 } 814 return infos; 815 } 816 817 public static BalancerBandwidthCommand convert( 818 BalancerBandwidthCommandProto balancerCmd) { 819 return new BalancerBandwidthCommand(balancerCmd.getBandwidth()); 820 } 821 822 public static ReceivedDeletedBlockInfoProto convert( 823 ReceivedDeletedBlockInfo receivedDeletedBlockInfo) { 824 ReceivedDeletedBlockInfoProto.Builder builder = 825 ReceivedDeletedBlockInfoProto.newBuilder(); 826 827 ReceivedDeletedBlockInfoProto.BlockStatus status; 828 switch (receivedDeletedBlockInfo.getStatus()) { 829 case RECEIVING_BLOCK: 830 status = ReceivedDeletedBlockInfoProto.BlockStatus.RECEIVING; 831 break; 832 case RECEIVED_BLOCK: 833 status = ReceivedDeletedBlockInfoProto.BlockStatus.RECEIVED; 834 break; 835 case DELETED_BLOCK: 836 status = ReceivedDeletedBlockInfoProto.BlockStatus.DELETED; 837 break; 838 default: 839 throw new IllegalArgumentException("Bad status: " + 840 receivedDeletedBlockInfo.getStatus()); 841 } 842 builder.setStatus(status); 843 844 if (receivedDeletedBlockInfo.getDelHints() != null) { 845 builder.setDeleteHint(receivedDeletedBlockInfo.getDelHints()); 846 } 847 return builder.setBlock(PBHelper.convert(receivedDeletedBlockInfo.getBlock())) 848 .build(); 849 } 850 851 public static UpgradeCommandProto convert(UpgradeCommand comm) { 852 UpgradeCommandProto.Builder builder = UpgradeCommandProto.newBuilder(); 853 if (comm == null) { 854 return builder.setAction(UpgradeCommandProto.Action.UNKNOWN) 855 .setVersion(0).setUpgradeStatus(0).build(); 856 } 857 builder.setVersion(comm.getVersion()).setUpgradeStatus( 858 comm.getCurrentStatus()); 859 switch (comm.getAction()) { 860 case UpgradeCommand.UC_ACTION_REPORT_STATUS: 861 builder.setAction(UpgradeCommandProto.Action.REPORT_STATUS); 862 break; 863 case UpgradeCommand.UC_ACTION_START_UPGRADE: 864 builder.setAction(UpgradeCommandProto.Action.START_UPGRADE); 865 break; 866 default: 867 builder.setAction(UpgradeCommandProto.Action.UNKNOWN); 868 break; 869 } 870 return builder.build(); 871 } 872 873 public static ReceivedDeletedBlockInfo convert( 874 ReceivedDeletedBlockInfoProto proto) { 875 ReceivedDeletedBlockInfo.BlockStatus status = null; 876 switch (proto.getStatus()) { 877 case RECEIVING: 878 status = BlockStatus.RECEIVING_BLOCK; 879 break; 880 case RECEIVED: 881 status = BlockStatus.RECEIVED_BLOCK; 882 break; 883 case DELETED: 884 status = BlockStatus.DELETED_BLOCK; 885 break; 886 } 887 return new ReceivedDeletedBlockInfo( 888 PBHelper.convert(proto.getBlock()), 889 status, 890 proto.hasDeleteHint() ? proto.getDeleteHint() : null); 891 } 892 893 public static NamespaceInfoProto convert(NamespaceInfo info) { 894 return NamespaceInfoProto.newBuilder() 895 .setBlockPoolID(info.getBlockPoolID()) 896 .setBuildVersion(info.getBuildVersion()) 897 .setDistUpgradeVersion(info.getDistributedUpgradeVersion()) 898 .setStorageInfo(PBHelper.convert((StorageInfo)info)) 899 .setSoftwareVersion(info.getSoftwareVersion()).build(); 900 } 901 902 // Located Block Arrays and Lists 903 public static LocatedBlockProto[] convertLocatedBlock(LocatedBlock[] lb) { 904 if (lb == null) return null; 905 final int len = lb.length; 906 LocatedBlockProto[] result = new LocatedBlockProto[len]; 907 for (int i = 0; i < len; ++i) { 908 result[i] = PBHelper.convert(lb[i]); 909 } 910 return result; 911 } 912 913 public static LocatedBlock[] convertLocatedBlock(LocatedBlockProto[] lb) { 914 if (lb == null) return null; 915 final int len = lb.length; 916 LocatedBlock[] result = new LocatedBlock[len]; 917 for (int i = 0; i < len; ++i) { 918 result[i] = new LocatedBlock( 919 PBHelper.convert(lb[i].getB()), 920 PBHelper.convert(lb[i].getLocsList()), 921 lb[i].getOffset(), lb[i].getCorrupt()); 922 } 923 return result; 924 } 925 926 public static List<LocatedBlock> convertLocatedBlock( 927 List<LocatedBlockProto> lb) { 928 if (lb == null) return null; 929 final int len = lb.size(); 930 List<LocatedBlock> result = 931 new ArrayList<LocatedBlock>(len); 932 for (int i = 0; i < len; ++i) { 933 result.add(PBHelper.convert(lb.get(i))); 934 } 935 return result; 936 } 937 938 public static List<LocatedBlockProto> convertLocatedBlock2(List<LocatedBlock> lb) { 939 if (lb == null) return null; 940 final int len = lb.size(); 941 List<LocatedBlockProto> result = new ArrayList<LocatedBlockProto>(len); 942 for (int i = 0; i < len; ++i) { 943 result.add(PBHelper.convert(lb.get(i))); 944 } 945 return result; 946 } 947 948 949 // LocatedBlocks 950 public static LocatedBlocks convert(LocatedBlocksProto lb) { 951 return new LocatedBlocks( 952 lb.getFileLength(), lb.getUnderConstruction(), 953 PBHelper.convertLocatedBlock(lb.getBlocksList()), 954 lb.hasLastBlock() ? PBHelper.convert(lb.getLastBlock()) : null, 955 lb.getIsLastBlockComplete()); 956 } 957 958 public static LocatedBlocksProto convert(LocatedBlocks lb) { 959 if (lb == null) { 960 return null; 961 } 962 LocatedBlocksProto.Builder builder = 963 LocatedBlocksProto.newBuilder(); 964 if (lb.getLastLocatedBlock() != null) { 965 builder.setLastBlock(PBHelper.convert(lb.getLastLocatedBlock())); 966 } 967 return builder.setFileLength(lb.getFileLength()) 968 .setUnderConstruction(lb.isUnderConstruction()) 969 .addAllBlocks(PBHelper.convertLocatedBlock2(lb.getLocatedBlocks())) 970 .setIsLastBlockComplete(lb.isLastBlockComplete()).build(); 971 } 972 973 public static FsServerDefaults convert(FsServerDefaultsProto fs) { 974 if (fs == null) return null; 975 return new FsServerDefaults( 976 fs.getBlockSize(), fs.getBytesPerChecksum(), 977 fs.getWritePacketSize(), (short) fs.getReplication(), 978 fs.getFileBufferSize()); 979 } 980 981 public static FsServerDefaultsProto convert(FsServerDefaults fs) { 982 if (fs == null) return null; 983 return FsServerDefaultsProto.newBuilder(). 984 setBlockSize(fs.getBlockSize()). 985 setBytesPerChecksum(fs.getBytesPerChecksum()). 986 setWritePacketSize(fs.getWritePacketSize()).setReplication(fs.getReplication()).setFileBufferSize(fs.getFileBufferSize()).build(); 987 } 988 989 public static FsPermissionProto convert(FsPermission p) { 990 if (p == null) return null; 991 return FsPermissionProto.newBuilder().setPerm(p.toShort()).build(); 992 } 993 994 public static FsPermission convert(FsPermissionProto p) { 995 if (p == null) return null; 996 return new FsPermission((short)p.getPerm()); 997 } 998 999 1000 // The creatFlag field in PB is a bitmask whose values are the same a the 1001 // emum values of CreateFlag 1002 public static int convertCreateFlag(EnumSetWritable<CreateFlag> flag) { 1003 int value = 0; 1004 if (flag.contains(CreateFlag.APPEND)) { 1005 value |= CreateFlagProto.APPEND.getNumber(); 1006 } 1007 if (flag.contains(CreateFlag.CREATE)) { 1008 value |= CreateFlagProto.CREATE.getNumber(); 1009 } 1010 if (flag.contains(CreateFlag.OVERWRITE)) { 1011 value |= CreateFlagProto.OVERWRITE.getNumber(); 1012 } 1013 return value; 1014 } 1015 1016 public static EnumSetWritable<CreateFlag> convert(int flag) { 1017 EnumSet<CreateFlag> result = 1018 EnumSet.noneOf(CreateFlag.class); 1019 if ((flag & CreateFlagProto.APPEND_VALUE) == CreateFlagProto.APPEND_VALUE) { 1020 result.add(CreateFlag.APPEND); 1021 } 1022 if ((flag & CreateFlagProto.CREATE_VALUE) == CreateFlagProto.CREATE_VALUE) { 1023 result.add(CreateFlag.CREATE); 1024 } 1025 if ((flag & CreateFlagProto.OVERWRITE_VALUE) 1026 == CreateFlagProto.OVERWRITE_VALUE) { 1027 result.add(CreateFlag.OVERWRITE); 1028 } 1029 return new EnumSetWritable<CreateFlag>(result); 1030 } 1031 1032 1033 public static HdfsFileStatus convert(HdfsFileStatusProto fs) { 1034 if (fs == null) 1035 return null; 1036 return new HdfsLocatedFileStatus( 1037 fs.getLength(), fs.getFileType().equals(FileType.IS_DIR), 1038 fs.getBlockReplication(), fs.getBlocksize(), 1039 fs.getModificationTime(), fs.getAccessTime(), 1040 PBHelper.convert(fs.getPermission()), fs.getOwner(), fs.getGroup(), 1041 fs.getFileType().equals(FileType.IS_SYMLINK) ? 1042 fs.getSymlink().toByteArray() : null, 1043 fs.getPath().toByteArray(), 1044 fs.hasLocations() ? PBHelper.convert(fs.getLocations()) : null); 1045 } 1046 1047 public static HdfsFileStatusProto convert(HdfsFileStatus fs) { 1048 if (fs == null) 1049 return null; 1050 FileType fType = FileType.IS_FILE; 1051 if (fs.isDir()) { 1052 fType = FileType.IS_DIR; 1053 } else if (fs.isSymlink()) { 1054 fType = FileType.IS_SYMLINK; 1055 } 1056 1057 HdfsFileStatusProto.Builder builder = 1058 HdfsFileStatusProto.newBuilder(). 1059 setLength(fs.getLen()). 1060 setFileType(fType). 1061 setBlockReplication(fs.getReplication()). 1062 setBlocksize(fs.getBlockSize()). 1063 setModificationTime(fs.getModificationTime()). 1064 setAccessTime(fs.getAccessTime()). 1065 setPermission(PBHelper.convert(fs.getPermission())). 1066 setOwner(fs.getOwner()). 1067 setGroup(fs.getGroup()). 1068 setPath(ByteString.copyFrom(fs.getLocalNameInBytes())); 1069 if (fs.isSymlink()) { 1070 builder.setSymlink(ByteString.copyFrom(fs.getSymlinkInBytes())); 1071 } 1072 if (fs instanceof HdfsLocatedFileStatus) { 1073 LocatedBlocks locations = ((HdfsLocatedFileStatus)fs).getBlockLocations(); 1074 if (locations != null) { 1075 builder.setLocations(PBHelper.convert(locations)); 1076 } 1077 } 1078 return builder.build(); 1079 } 1080 1081 public static HdfsFileStatusProto[] convert(HdfsFileStatus[] fs) { 1082 if (fs == null) return null; 1083 final int len = fs.length; 1084 HdfsFileStatusProto[] result = new HdfsFileStatusProto[len]; 1085 for (int i = 0; i < len; ++i) { 1086 result[i] = PBHelper.convert(fs[i]); 1087 } 1088 return result; 1089 } 1090 1091 public static HdfsFileStatus[] convert(HdfsFileStatusProto[] fs) { 1092 if (fs == null) return null; 1093 final int len = fs.length; 1094 HdfsFileStatus[] result = new HdfsFileStatus[len]; 1095 for (int i = 0; i < len; ++i) { 1096 result[i] = PBHelper.convert(fs[i]); 1097 } 1098 return result; 1099 } 1100 1101 public static DirectoryListing convert(DirectoryListingProto dl) { 1102 if (dl == null) 1103 return null; 1104 List<HdfsFileStatusProto> partList = dl.getPartialListingList(); 1105 return new DirectoryListing( 1106 partList.isEmpty() ? new HdfsLocatedFileStatus[0] 1107 : PBHelper.convert( 1108 partList.toArray(new HdfsFileStatusProto[partList.size()])), 1109 dl.getRemainingEntries()); 1110 } 1111 1112 public static DirectoryListingProto convert(DirectoryListing d) { 1113 if (d == null) 1114 return null; 1115 return DirectoryListingProto.newBuilder(). 1116 addAllPartialListing(Arrays.asList( 1117 PBHelper.convert(d.getPartialListing()))). 1118 setRemainingEntries(d.getRemainingEntries()). 1119 build(); 1120 } 1121 1122 public static long[] convert(GetFsStatsResponseProto res) { 1123 long[] result = new long[6]; 1124 result[ClientProtocol.GET_STATS_CAPACITY_IDX] = res.getCapacity(); 1125 result[ClientProtocol.GET_STATS_USED_IDX] = res.getUsed(); 1126 result[ClientProtocol.GET_STATS_REMAINING_IDX] = res.getRemaining(); 1127 result[ClientProtocol.GET_STATS_UNDER_REPLICATED_IDX] = res.getUnderReplicated(); 1128 result[ClientProtocol.GET_STATS_CORRUPT_BLOCKS_IDX] = res.getCorruptBlocks(); 1129 result[ClientProtocol.GET_STATS_MISSING_BLOCKS_IDX] = res.getMissingBlocks(); 1130 return result; 1131 } 1132 1133 public static GetFsStatsResponseProto convert(long[] fsStats) { 1134 GetFsStatsResponseProto.Builder result = GetFsStatsResponseProto 1135 .newBuilder(); 1136 if (fsStats.length >= ClientProtocol.GET_STATS_CAPACITY_IDX + 1) 1137 result.setCapacity(fsStats[ClientProtocol.GET_STATS_CAPACITY_IDX]); 1138 if (fsStats.length >= ClientProtocol.GET_STATS_USED_IDX + 1) 1139 result.setUsed(fsStats[ClientProtocol.GET_STATS_USED_IDX]); 1140 if (fsStats.length >= ClientProtocol.GET_STATS_REMAINING_IDX + 1) 1141 result.setRemaining(fsStats[ClientProtocol.GET_STATS_REMAINING_IDX]); 1142 if (fsStats.length >= ClientProtocol.GET_STATS_UNDER_REPLICATED_IDX + 1) 1143 result.setUnderReplicated( 1144 fsStats[ClientProtocol.GET_STATS_UNDER_REPLICATED_IDX]); 1145 if (fsStats.length >= ClientProtocol.GET_STATS_CORRUPT_BLOCKS_IDX + 1) 1146 result.setCorruptBlocks( 1147 fsStats[ClientProtocol.GET_STATS_CORRUPT_BLOCKS_IDX]); 1148 if (fsStats.length >= ClientProtocol.GET_STATS_MISSING_BLOCKS_IDX + 1) 1149 result.setMissingBlocks( 1150 fsStats[ClientProtocol.GET_STATS_MISSING_BLOCKS_IDX]); 1151 return result.build(); 1152 } 1153 1154 public static DatanodeReportTypeProto 1155 convert(DatanodeReportType t) { 1156 switch (t) { 1157 case ALL: return DatanodeReportTypeProto.ALL; 1158 case LIVE: return DatanodeReportTypeProto.LIVE; 1159 case DEAD: return DatanodeReportTypeProto.DEAD; 1160 default: 1161 throw new IllegalArgumentException("Unexpected data type report:" + t); 1162 } 1163 } 1164 1165 public static DatanodeReportType 1166 convert(DatanodeReportTypeProto t) { 1167 switch (t) { 1168 case ALL: return DatanodeReportType.ALL; 1169 case LIVE: return DatanodeReportType.LIVE; 1170 case DEAD: return DatanodeReportType.DEAD; 1171 default: 1172 throw new IllegalArgumentException("Unexpected data type report:" + t); 1173 } 1174 } 1175 1176 public static SafeModeActionProto convert( 1177 SafeModeAction a) { 1178 switch (a) { 1179 case SAFEMODE_LEAVE: 1180 return SafeModeActionProto.SAFEMODE_LEAVE; 1181 case SAFEMODE_ENTER: 1182 return SafeModeActionProto.SAFEMODE_ENTER; 1183 case SAFEMODE_GET: 1184 return SafeModeActionProto.SAFEMODE_GET; 1185 default: 1186 throw new IllegalArgumentException("Unexpected SafeModeAction :" + a); 1187 } 1188 } 1189 1190 public static SafeModeAction convert( 1191 ClientNamenodeProtocolProtos.SafeModeActionProto a) { 1192 switch (a) { 1193 case SAFEMODE_LEAVE: 1194 return SafeModeAction.SAFEMODE_LEAVE; 1195 case SAFEMODE_ENTER: 1196 return SafeModeAction.SAFEMODE_ENTER; 1197 case SAFEMODE_GET: 1198 return SafeModeAction.SAFEMODE_GET; 1199 default: 1200 throw new IllegalArgumentException("Unexpected SafeModeAction :" + a); 1201 } 1202 } 1203 1204 public static UpgradeActionProto convert( 1205 UpgradeAction a) { 1206 switch (a) { 1207 case GET_STATUS: 1208 return UpgradeActionProto.GET_STATUS; 1209 case DETAILED_STATUS: 1210 return UpgradeActionProto.DETAILED_STATUS; 1211 case FORCE_PROCEED: 1212 return UpgradeActionProto.FORCE_PROCEED; 1213 default: 1214 throw new IllegalArgumentException("Unexpected UpgradeAction :" + a); 1215 } 1216 } 1217 1218 1219 public static UpgradeAction convert( 1220 UpgradeActionProto a) { 1221 switch (a) { 1222 case GET_STATUS: 1223 return UpgradeAction.GET_STATUS; 1224 case DETAILED_STATUS: 1225 return UpgradeAction.DETAILED_STATUS; 1226 case FORCE_PROCEED: 1227 return UpgradeAction.FORCE_PROCEED; 1228 default: 1229 throw new IllegalArgumentException("Unexpected UpgradeAction :" + a); 1230 } 1231 } 1232 1233 public static UpgradeStatusReportProto convert(UpgradeStatusReport r) { 1234 if (r == null) 1235 return null; 1236 return UpgradeStatusReportProto.newBuilder() 1237 .setVersion(r.getVersion()) 1238 .setUpgradeStatus(r.getUpgradeStatus()) 1239 .setFinalized(r.isFinalized()) 1240 .build(); 1241 } 1242 1243 public static UpgradeStatusReport convert(UpgradeStatusReportProto r) { 1244 if (r == null) return null; 1245 return new UpgradeStatusReport(r.getVersion(), 1246 (short) r.getUpgradeStatus(), r.getFinalized()); 1247 } 1248 1249 public static CorruptFileBlocks convert(CorruptFileBlocksProto c) { 1250 if (c == null) 1251 return null; 1252 List<String> fileList = c.getFilesList(); 1253 return new CorruptFileBlocks(fileList.toArray(new String[fileList.size()]), 1254 c.getCookie()); 1255 } 1256 1257 public static CorruptFileBlocksProto convert(CorruptFileBlocks c) { 1258 if (c == null) 1259 return null; 1260 return CorruptFileBlocksProto.newBuilder(). 1261 addAllFiles(Arrays.asList(c.getFiles())). 1262 setCookie(c.getCookie()). 1263 build(); 1264 } 1265 1266 public static ContentSummary convert(ContentSummaryProto cs) { 1267 if (cs == null) return null; 1268 return new ContentSummary( 1269 cs.getLength(), cs.getFileCount(), cs.getDirectoryCount(), cs.getQuota(), 1270 cs.getSpaceConsumed(), cs.getSpaceQuota()); 1271 } 1272 1273 public static ContentSummaryProto convert(ContentSummary cs) { 1274 if (cs == null) return null; 1275 return ContentSummaryProto.newBuilder(). 1276 setLength(cs.getLength()). 1277 setFileCount(cs.getFileCount()). 1278 setDirectoryCount(cs.getDirectoryCount()). 1279 setQuota(cs.getQuota()). 1280 setSpaceConsumed(cs.getSpaceConsumed()). 1281 setSpaceQuota(cs.getSpaceQuota()). 1282 build(); 1283 } 1284 1285 public static NNHAStatusHeartbeat convert(NNHAStatusHeartbeatProto s) { 1286 if (s == null) return null; 1287 switch (s.getState()) { 1288 case ACTIVE: 1289 return new NNHAStatusHeartbeat(NNHAStatusHeartbeat.State.ACTIVE, s.getTxid()); 1290 case STANDBY: 1291 return new NNHAStatusHeartbeat(NNHAStatusHeartbeat.State.STANDBY, s.getTxid()); 1292 default: 1293 throw new IllegalArgumentException("Unexpected NNHAStatusHeartbeat.State:" + s.getState()); 1294 } 1295 } 1296 1297 public static NNHAStatusHeartbeatProto convert(NNHAStatusHeartbeat hb) { 1298 if (hb == null) return null; 1299 NNHAStatusHeartbeatProto.Builder builder = 1300 NNHAStatusHeartbeatProto.newBuilder(); 1301 switch (hb.getState()) { 1302 case ACTIVE: 1303 builder.setState(NNHAStatusHeartbeatProto.State.ACTIVE); 1304 break; 1305 case STANDBY: 1306 builder.setState(NNHAStatusHeartbeatProto.State.STANDBY); 1307 break; 1308 default: 1309 throw new IllegalArgumentException("Unexpected NNHAStatusHeartbeat.State:" + 1310 hb.getState()); 1311 } 1312 builder.setTxid(hb.getTxId()); 1313 return builder.build(); 1314 } 1315 1316 public static DatanodeStorageProto convert(DatanodeStorage s) { 1317 return DatanodeStorageProto.newBuilder() 1318 .setState(PBHelper.convert(s.getState())) 1319 .setStorageID(s.getStorageID()).build(); 1320 } 1321 1322 private static StorageState convert(State state) { 1323 switch(state) { 1324 case READ_ONLY: 1325 return StorageState.READ_ONLY; 1326 case NORMAL: 1327 default: 1328 return StorageState.NORMAL; 1329 } 1330 } 1331 1332 public static DatanodeStorage convert(DatanodeStorageProto s) { 1333 return new DatanodeStorage(s.getStorageID(), PBHelper.convert(s.getState())); 1334 } 1335 1336 private static State convert(StorageState state) { 1337 switch(state) { 1338 case READ_ONLY: 1339 return DatanodeStorage.State.READ_ONLY; 1340 case NORMAL: 1341 default: 1342 return DatanodeStorage.State.NORMAL; 1343 } 1344 } 1345 1346 public static StorageReportProto convert(StorageReport r) { 1347 return StorageReportProto.newBuilder() 1348 .setBlockPoolUsed(r.getBlockPoolUsed()).setCapacity(r.getCapacity()) 1349 .setDfsUsed(r.getDfsUsed()).setRemaining(r.getRemaining()) 1350 .setStorageID(r.getStorageID()).build(); 1351 } 1352 1353 public static JournalInfo convert(JournalInfoProto info) { 1354 int lv = info.hasLayoutVersion() ? info.getLayoutVersion() : 0; 1355 int nsID = info.hasNamespaceID() ? info.getNamespaceID() : 0; 1356 return new JournalInfo(lv, info.getClusterID(), nsID); 1357 } 1358 1359 /** 1360 * Method used for converting {@link JournalInfoProto} sent from Namenode 1361 * to Journal receivers to {@link NamenodeRegistration}. 1362 */ 1363 public static JournalInfoProto convert(JournalInfo j) { 1364 return JournalInfoProto.newBuilder().setClusterID(j.getClusterId()) 1365 .setLayoutVersion(j.getLayoutVersion()) 1366 .setNamespaceID(j.getNamespaceId()).build(); 1367 } 1368 }