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 static com.google.common.base.Preconditions.checkNotNull; 021 022 import java.io.EOFException; 023 import java.io.IOException; 024 import java.io.InputStream; 025 import java.util.ArrayList; 026 import java.util.Arrays; 027 import java.util.EnumSet; 028 import java.util.List; 029 030 import com.google.common.base.Preconditions; 031 import org.apache.hadoop.fs.CacheFlag; 032 import org.apache.hadoop.fs.ContentSummary; 033 import org.apache.hadoop.fs.CreateFlag; 034 import org.apache.hadoop.fs.FsServerDefaults; 035 import org.apache.hadoop.fs.Path; 036 import org.apache.hadoop.fs.permission.AclEntry; 037 import org.apache.hadoop.fs.permission.AclEntryScope; 038 import org.apache.hadoop.fs.permission.AclEntryType; 039 import org.apache.hadoop.fs.permission.AclStatus; 040 import org.apache.hadoop.fs.permission.FsAction; 041 import org.apache.hadoop.fs.permission.FsPermission; 042 import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState; 043 import org.apache.hadoop.hdfs.DFSUtil; 044 import org.apache.hadoop.hdfs.ShortCircuitShm.ShmId; 045 import org.apache.hadoop.hdfs.ShortCircuitShm.SlotId; 046 import org.apache.hadoop.hdfs.StorageType; 047 import org.apache.hadoop.hdfs.protocol.Block; 048 import org.apache.hadoop.hdfs.protocol.CacheDirectiveEntry; 049 import org.apache.hadoop.hdfs.protocol.CacheDirectiveInfo; 050 import org.apache.hadoop.hdfs.protocol.CacheDirectiveStats; 051 import org.apache.hadoop.hdfs.protocol.CachePoolEntry; 052 import org.apache.hadoop.hdfs.protocol.CachePoolInfo; 053 import org.apache.hadoop.hdfs.protocol.CachePoolStats; 054 import org.apache.hadoop.hdfs.protocol.ClientProtocol; 055 import org.apache.hadoop.hdfs.protocol.CorruptFileBlocks; 056 import org.apache.hadoop.hdfs.protocol.DatanodeID; 057 import org.apache.hadoop.hdfs.protocol.DatanodeInfo; 058 import org.apache.hadoop.hdfs.protocol.DatanodeInfo.AdminStates; 059 import org.apache.hadoop.hdfs.protocol.DatanodeLocalInfo; 060 import org.apache.hadoop.hdfs.protocol.DirectoryListing; 061 import org.apache.hadoop.hdfs.protocol.ExtendedBlock; 062 import org.apache.hadoop.hdfs.protocol.HdfsConstants.DatanodeReportType; 063 import org.apache.hadoop.hdfs.protocol.HdfsConstants.RollingUpgradeAction; 064 import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction; 065 import org.apache.hadoop.hdfs.protocol.HdfsFileStatus; 066 import org.apache.hadoop.hdfs.protocol.HdfsLocatedFileStatus; 067 import org.apache.hadoop.hdfs.protocol.LocatedBlock; 068 import org.apache.hadoop.hdfs.protocol.LocatedBlocks; 069 import org.apache.hadoop.hdfs.protocol.RollingUpgradeInfo; 070 import org.apache.hadoop.hdfs.protocol.RollingUpgradeStatus; 071 import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport; 072 import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport.DiffReportEntry; 073 import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport.DiffType; 074 import org.apache.hadoop.hdfs.protocol.SnapshottableDirectoryStatus; 075 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.AclEntryProto; 076 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.AclStatusProto; 077 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.AclEntryProto.AclEntryScopeProto; 078 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.AclEntryProto.AclEntryTypeProto; 079 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.AclEntryProto.FsActionProto; 080 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.GetAclStatusResponseProto; 081 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos; 082 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CacheDirectiveEntryProto; 083 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CacheDirectiveInfoExpirationProto; 084 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CacheDirectiveInfoProto; 085 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CacheDirectiveStatsProto; 086 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CacheFlagProto; 087 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CachePoolEntryProto; 088 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CachePoolInfoProto; 089 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CachePoolStatsProto; 090 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CreateFlagProto; 091 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.DatanodeReportTypeProto; 092 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetFsStatsResponseProto; 093 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RollingUpgradeActionProto; 094 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RollingUpgradeInfoProto; 095 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SafeModeActionProto; 096 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CacheDirectiveInfoProto; 097 import org.apache.hadoop.hdfs.protocol.proto.DataTransferProtos.ShortCircuitShmSlotProto; 098 import org.apache.hadoop.hdfs.protocol.proto.DataTransferProtos.ShortCircuitShmIdProto; 099 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.BalancerBandwidthCommandProto; 100 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.BlockCommandProto; 101 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.BlockIdCommandProto; 102 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.BlockRecoveryCommandProto; 103 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.DatanodeCommandProto; 104 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.DatanodeRegistrationProto; 105 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.DatanodeStorageProto; 106 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.DatanodeStorageProto.StorageState; 107 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.FinalizeCommandProto; 108 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.KeyUpdateCommandProto; 109 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.NNHAStatusHeartbeatProto; 110 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.ReceivedDeletedBlockInfoProto; 111 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.RegisterCommandProto; 112 import org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos.StorageReportProto; 113 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos; 114 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlockKeyProto; 115 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlockProto; 116 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlockWithLocationsProto; 117 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.BlocksWithLocationsProto; 118 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.CheckpointCommandProto; 119 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.CheckpointSignatureProto; 120 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ContentSummaryProto; 121 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.CorruptFileBlocksProto; 122 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DataEncryptionKeyProto; 123 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeIDProto; 124 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeInfoProto; 125 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeInfoProto.AdminState; 126 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeInfosProto; 127 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DatanodeLocalInfoProto; 128 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.DirectoryListingProto; 129 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ExportedBlockKeysProto; 130 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ExtendedBlockProto; 131 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.FsPermissionProto; 132 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.FsServerDefaultsProto; 133 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.HdfsFileStatusProto; 134 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.HdfsFileStatusProto.FileType; 135 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.LocatedBlockProto; 136 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.LocatedBlockProto.Builder; 137 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.LocatedBlocksProto; 138 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.NamenodeCommandProto; 139 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.NamenodeRegistrationProto; 140 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.NamenodeRegistrationProto.NamenodeRoleProto; 141 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.NamespaceInfoProto; 142 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.RecoveringBlockProto; 143 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.RemoteEditLogManifestProto; 144 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.RemoteEditLogProto; 145 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ReplicaStateProto; 146 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.RollingUpgradeStatusProto; 147 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.SnapshotDiffReportEntryProto; 148 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.SnapshotDiffReportProto; 149 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.SnapshottableDirectoryListingProto; 150 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.SnapshottableDirectoryStatusProto; 151 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.StorageInfoProto; 152 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.StorageTypeProto; 153 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.StorageUuidsProto; 154 import org.apache.hadoop.hdfs.protocol.proto.JournalProtocolProtos.JournalInfoProto; 155 import org.apache.hadoop.hdfs.security.token.block.BlockKey; 156 import org.apache.hadoop.hdfs.security.token.block.BlockTokenIdentifier; 157 import org.apache.hadoop.hdfs.security.token.block.DataEncryptionKey; 158 import org.apache.hadoop.hdfs.security.token.block.ExportedBlockKeys; 159 import org.apache.hadoop.hdfs.security.token.delegation.DelegationTokenIdentifier; 160 import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NamenodeRole; 161 import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NodeType; 162 import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.ReplicaState; 163 import org.apache.hadoop.hdfs.server.common.StorageInfo; 164 import org.apache.hadoop.hdfs.server.namenode.CheckpointSignature; 165 import org.apache.hadoop.hdfs.server.namenode.INodeId; 166 import org.apache.hadoop.hdfs.server.protocol.BalancerBandwidthCommand; 167 import org.apache.hadoop.hdfs.server.protocol.BlockCommand; 168 import org.apache.hadoop.hdfs.server.protocol.BlockIdCommand; 169 import org.apache.hadoop.hdfs.server.protocol.BlockRecoveryCommand; 170 import org.apache.hadoop.hdfs.server.protocol.BlockRecoveryCommand.RecoveringBlock; 171 import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations; 172 import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations.BlockWithLocations; 173 import org.apache.hadoop.hdfs.server.protocol.CheckpointCommand; 174 import org.apache.hadoop.hdfs.server.protocol.DatanodeCommand; 175 import org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol; 176 import org.apache.hadoop.hdfs.server.protocol.DatanodeRegistration; 177 import org.apache.hadoop.hdfs.server.protocol.DatanodeStorage; 178 import org.apache.hadoop.hdfs.server.protocol.DatanodeStorage.State; 179 import org.apache.hadoop.hdfs.server.protocol.FinalizeCommand; 180 import org.apache.hadoop.hdfs.server.protocol.JournalInfo; 181 import org.apache.hadoop.hdfs.server.protocol.KeyUpdateCommand; 182 import org.apache.hadoop.hdfs.server.protocol.NNHAStatusHeartbeat; 183 import org.apache.hadoop.hdfs.server.protocol.NamenodeCommand; 184 import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration; 185 import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo; 186 import org.apache.hadoop.hdfs.server.protocol.ReceivedDeletedBlockInfo; 187 import org.apache.hadoop.hdfs.server.protocol.ReceivedDeletedBlockInfo.BlockStatus; 188 import org.apache.hadoop.hdfs.server.protocol.RegisterCommand; 189 import org.apache.hadoop.hdfs.server.protocol.RemoteEditLog; 190 import org.apache.hadoop.hdfs.server.protocol.RemoteEditLogManifest; 191 import org.apache.hadoop.hdfs.server.protocol.StorageReport; 192 import org.apache.hadoop.hdfs.util.ExactSizeInputStream; 193 import org.apache.hadoop.io.EnumSetWritable; 194 import org.apache.hadoop.io.Text; 195 import org.apache.hadoop.security.proto.SecurityProtos.TokenProto; 196 import org.apache.hadoop.security.token.Token; 197 import org.apache.hadoop.util.DataChecksum; 198 199 import com.google.common.base.Preconditions; 200 import com.google.common.collect.Lists; 201 import com.google.common.primitives.Shorts; 202 import com.google.protobuf.ByteString; 203 import com.google.protobuf.CodedInputStream; 204 205 /** 206 * Utilities for converting protobuf classes to and from implementation classes 207 * and other helper utilities to help in dealing with protobuf. 208 * 209 * Note that when converting from an internal type to protobuf type, the 210 * converter never return null for protobuf type. The check for internal type 211 * being null must be done before calling the convert() method. 212 */ 213 public class PBHelper { 214 private static final RegisterCommandProto REG_CMD_PROTO = 215 RegisterCommandProto.newBuilder().build(); 216 private static final RegisterCommand REG_CMD = new RegisterCommand(); 217 218 private static final AclEntryScope[] ACL_ENTRY_SCOPE_VALUES = 219 AclEntryScope.values(); 220 private static final AclEntryType[] ACL_ENTRY_TYPE_VALUES = 221 AclEntryType.values(); 222 private static final FsAction[] FSACTION_VALUES = 223 FsAction.values(); 224 225 private PBHelper() { 226 /** Hidden constructor */ 227 } 228 229 public static ByteString getByteString(byte[] bytes) { 230 return ByteString.copyFrom(bytes); 231 } 232 233 private static <T extends Enum<T>, U extends Enum<U>> U castEnum(T from, U[] to) { 234 return to[from.ordinal()]; 235 } 236 237 public static NamenodeRole convert(NamenodeRoleProto role) { 238 switch (role) { 239 case NAMENODE: 240 return NamenodeRole.NAMENODE; 241 case BACKUP: 242 return NamenodeRole.BACKUP; 243 case CHECKPOINT: 244 return NamenodeRole.CHECKPOINT; 245 } 246 return null; 247 } 248 249 public static NamenodeRoleProto convert(NamenodeRole role) { 250 switch (role) { 251 case NAMENODE: 252 return NamenodeRoleProto.NAMENODE; 253 case BACKUP: 254 return NamenodeRoleProto.BACKUP; 255 case CHECKPOINT: 256 return NamenodeRoleProto.CHECKPOINT; 257 } 258 return null; 259 } 260 261 public static StorageInfoProto convert(StorageInfo info) { 262 return StorageInfoProto.newBuilder().setClusterID(info.getClusterID()) 263 .setCTime(info.getCTime()).setLayoutVersion(info.getLayoutVersion()) 264 .setNamespceID(info.getNamespaceID()).build(); 265 } 266 267 public static StorageInfo convert(StorageInfoProto info, NodeType type) { 268 return new StorageInfo(info.getLayoutVersion(), info.getNamespceID(), 269 info.getClusterID(), info.getCTime(), type); 270 } 271 272 public static NamenodeRegistrationProto convert(NamenodeRegistration reg) { 273 return NamenodeRegistrationProto.newBuilder() 274 .setHttpAddress(reg.getHttpAddress()).setRole(convert(reg.getRole())) 275 .setRpcAddress(reg.getAddress()) 276 .setStorageInfo(convert((StorageInfo) reg)).build(); 277 } 278 279 public static NamenodeRegistration convert(NamenodeRegistrationProto reg) { 280 StorageInfo si = convert(reg.getStorageInfo(), NodeType.NAME_NODE); 281 return new NamenodeRegistration(reg.getRpcAddress(), reg.getHttpAddress(), 282 si, convert(reg.getRole())); 283 } 284 285 // DatanodeId 286 public static DatanodeID convert(DatanodeIDProto dn) { 287 return new DatanodeID(dn.getIpAddr(), dn.getHostName(), dn.getDatanodeUuid(), 288 dn.getXferPort(), dn.getInfoPort(), dn.hasInfoSecurePort() ? dn 289 .getInfoSecurePort() : 0, dn.getIpcPort()); 290 } 291 292 public static DatanodeIDProto convert(DatanodeID dn) { 293 // For wire compatibility with older versions we transmit the StorageID 294 // which is the same as the DatanodeUuid. Since StorageID is a required 295 // field we pass the empty string if the DatanodeUuid is not yet known. 296 return DatanodeIDProto.newBuilder() 297 .setIpAddr(dn.getIpAddr()) 298 .setHostName(dn.getHostName()) 299 .setXferPort(dn.getXferPort()) 300 .setDatanodeUuid(dn.getDatanodeUuid() != null ? dn.getDatanodeUuid() : "") 301 .setInfoPort(dn.getInfoPort()) 302 .setInfoSecurePort(dn.getInfoSecurePort()) 303 .setIpcPort(dn.getIpcPort()).build(); 304 } 305 306 // Arrays of DatanodeId 307 public static DatanodeIDProto[] convert(DatanodeID[] did) { 308 if (did == null) 309 return null; 310 final int len = did.length; 311 DatanodeIDProto[] result = new DatanodeIDProto[len]; 312 for (int i = 0; i < len; ++i) { 313 result[i] = convert(did[i]); 314 } 315 return result; 316 } 317 318 public static DatanodeID[] convert(DatanodeIDProto[] did) { 319 if (did == null) return null; 320 final int len = did.length; 321 DatanodeID[] result = new DatanodeID[len]; 322 for (int i = 0; i < len; ++i) { 323 result[i] = convert(did[i]); 324 } 325 return result; 326 } 327 328 // Block 329 public static BlockProto convert(Block b) { 330 return BlockProto.newBuilder().setBlockId(b.getBlockId()) 331 .setGenStamp(b.getGenerationStamp()).setNumBytes(b.getNumBytes()) 332 .build(); 333 } 334 335 public static Block convert(BlockProto b) { 336 return new Block(b.getBlockId(), b.getNumBytes(), b.getGenStamp()); 337 } 338 339 public static BlockWithLocationsProto convert(BlockWithLocations blk) { 340 return BlockWithLocationsProto.newBuilder() 341 .setBlock(convert(blk.getBlock())) 342 .addAllDatanodeUuids(Arrays.asList(blk.getDatanodeUuids())) 343 .addAllStorageUuids(Arrays.asList(blk.getStorageIDs())).build(); 344 } 345 346 public static BlockWithLocations convert(BlockWithLocationsProto b) { 347 final List<String> datanodeUuids = b.getDatanodeUuidsList(); 348 final List<String> storageUuids = b.getStorageUuidsList(); 349 return new BlockWithLocations(convert(b.getBlock()), 350 datanodeUuids.toArray(new String[datanodeUuids.size()]), 351 storageUuids.toArray(new String[storageUuids.size()])); 352 } 353 354 public static BlocksWithLocationsProto convert(BlocksWithLocations blks) { 355 BlocksWithLocationsProto.Builder builder = BlocksWithLocationsProto 356 .newBuilder(); 357 for (BlockWithLocations b : blks.getBlocks()) { 358 builder.addBlocks(convert(b)); 359 } 360 return builder.build(); 361 } 362 363 public static BlocksWithLocations convert(BlocksWithLocationsProto blocks) { 364 List<BlockWithLocationsProto> b = blocks.getBlocksList(); 365 BlockWithLocations[] ret = new BlockWithLocations[b.size()]; 366 int i = 0; 367 for (BlockWithLocationsProto entry : b) { 368 ret[i++] = convert(entry); 369 } 370 return new BlocksWithLocations(ret); 371 } 372 373 public static BlockKeyProto convert(BlockKey key) { 374 byte[] encodedKey = key.getEncodedKey(); 375 ByteString keyBytes = ByteString.copyFrom(encodedKey == null ? 376 DFSUtil.EMPTY_BYTES : encodedKey); 377 return BlockKeyProto.newBuilder().setKeyId(key.getKeyId()) 378 .setKeyBytes(keyBytes).setExpiryDate(key.getExpiryDate()).build(); 379 } 380 381 public static BlockKey convert(BlockKeyProto k) { 382 return new BlockKey(k.getKeyId(), k.getExpiryDate(), k.getKeyBytes() 383 .toByteArray()); 384 } 385 386 public static ExportedBlockKeysProto convert(ExportedBlockKeys keys) { 387 ExportedBlockKeysProto.Builder builder = ExportedBlockKeysProto 388 .newBuilder(); 389 builder.setIsBlockTokenEnabled(keys.isBlockTokenEnabled()) 390 .setKeyUpdateInterval(keys.getKeyUpdateInterval()) 391 .setTokenLifeTime(keys.getTokenLifetime()) 392 .setCurrentKey(convert(keys.getCurrentKey())); 393 for (BlockKey k : keys.getAllKeys()) { 394 builder.addAllKeys(convert(k)); 395 } 396 return builder.build(); 397 } 398 399 public static ExportedBlockKeys convert(ExportedBlockKeysProto keys) { 400 return new ExportedBlockKeys(keys.getIsBlockTokenEnabled(), 401 keys.getKeyUpdateInterval(), keys.getTokenLifeTime(), 402 convert(keys.getCurrentKey()), convertBlockKeys(keys.getAllKeysList())); 403 } 404 405 public static CheckpointSignatureProto convert(CheckpointSignature s) { 406 return CheckpointSignatureProto.newBuilder() 407 .setBlockPoolId(s.getBlockpoolID()) 408 .setCurSegmentTxId(s.getCurSegmentTxId()) 409 .setMostRecentCheckpointTxId(s.getMostRecentCheckpointTxId()) 410 .setStorageInfo(PBHelper.convert((StorageInfo) s)).build(); 411 } 412 413 public static CheckpointSignature convert(CheckpointSignatureProto s) { 414 StorageInfo si = PBHelper.convert(s.getStorageInfo(), NodeType.NAME_NODE); 415 return new CheckpointSignature(si, s.getBlockPoolId(), 416 s.getMostRecentCheckpointTxId(), s.getCurSegmentTxId()); 417 } 418 419 public static RemoteEditLogProto convert(RemoteEditLog log) { 420 return RemoteEditLogProto.newBuilder() 421 .setStartTxId(log.getStartTxId()) 422 .setEndTxId(log.getEndTxId()) 423 .setIsInProgress(log.isInProgress()).build(); 424 } 425 426 public static RemoteEditLog convert(RemoteEditLogProto l) { 427 return new RemoteEditLog(l.getStartTxId(), l.getEndTxId(), 428 l.getIsInProgress()); 429 } 430 431 public static RemoteEditLogManifestProto convert( 432 RemoteEditLogManifest manifest) { 433 RemoteEditLogManifestProto.Builder builder = RemoteEditLogManifestProto 434 .newBuilder(); 435 for (RemoteEditLog log : manifest.getLogs()) { 436 builder.addLogs(convert(log)); 437 } 438 return builder.build(); 439 } 440 441 public static RemoteEditLogManifest convert( 442 RemoteEditLogManifestProto manifest) { 443 List<RemoteEditLog> logs = new ArrayList<RemoteEditLog>(manifest 444 .getLogsList().size()); 445 for (RemoteEditLogProto l : manifest.getLogsList()) { 446 logs.add(convert(l)); 447 } 448 return new RemoteEditLogManifest(logs); 449 } 450 451 public static CheckpointCommandProto convert(CheckpointCommand cmd) { 452 return CheckpointCommandProto.newBuilder() 453 .setSignature(convert(cmd.getSignature())) 454 .setNeedToReturnImage(cmd.needToReturnImage()).build(); 455 } 456 457 public static NamenodeCommandProto convert(NamenodeCommand cmd) { 458 if (cmd instanceof CheckpointCommand) { 459 return NamenodeCommandProto.newBuilder().setAction(cmd.getAction()) 460 .setType(NamenodeCommandProto.Type.CheckPointCommand) 461 .setCheckpointCmd(convert((CheckpointCommand) cmd)).build(); 462 } 463 return NamenodeCommandProto.newBuilder() 464 .setType(NamenodeCommandProto.Type.NamenodeCommand) 465 .setAction(cmd.getAction()).build(); 466 } 467 468 public static BlockKey[] convertBlockKeys(List<BlockKeyProto> list) { 469 BlockKey[] ret = new BlockKey[list.size()]; 470 int i = 0; 471 for (BlockKeyProto k : list) { 472 ret[i++] = convert(k); 473 } 474 return ret; 475 } 476 477 public static NamespaceInfo convert(NamespaceInfoProto info) { 478 StorageInfoProto storage = info.getStorageInfo(); 479 return new NamespaceInfo(storage.getNamespceID(), storage.getClusterID(), 480 info.getBlockPoolID(), storage.getCTime(), info.getBuildVersion(), 481 info.getSoftwareVersion()); 482 } 483 484 public static NamenodeCommand convert(NamenodeCommandProto cmd) { 485 if (cmd == null) return null; 486 switch (cmd.getType()) { 487 case CheckPointCommand: 488 CheckpointCommandProto chkPt = cmd.getCheckpointCmd(); 489 return new CheckpointCommand(PBHelper.convert(chkPt.getSignature()), 490 chkPt.getNeedToReturnImage()); 491 default: 492 return new NamenodeCommand(cmd.getAction()); 493 } 494 } 495 496 public static ExtendedBlock convert(ExtendedBlockProto eb) { 497 if (eb == null) return null; 498 return new ExtendedBlock( eb.getPoolId(), eb.getBlockId(), eb.getNumBytes(), 499 eb.getGenerationStamp()); 500 } 501 502 public static ExtendedBlockProto convert(final ExtendedBlock b) { 503 if (b == null) return null; 504 return ExtendedBlockProto.newBuilder(). 505 setPoolId(b.getBlockPoolId()). 506 setBlockId(b.getBlockId()). 507 setNumBytes(b.getNumBytes()). 508 setGenerationStamp(b.getGenerationStamp()). 509 build(); 510 } 511 512 public static RecoveringBlockProto convert(RecoveringBlock b) { 513 if (b == null) { 514 return null; 515 } 516 LocatedBlockProto lb = PBHelper.convert((LocatedBlock)b); 517 return RecoveringBlockProto.newBuilder().setBlock(lb) 518 .setNewGenStamp(b.getNewGenerationStamp()).build(); 519 } 520 521 public static RecoveringBlock convert(RecoveringBlockProto b) { 522 ExtendedBlock block = convert(b.getBlock().getB()); 523 DatanodeInfo[] locs = convert(b.getBlock().getLocsList()); 524 return new RecoveringBlock(block, locs, b.getNewGenStamp()); 525 } 526 527 public static DatanodeInfoProto.AdminState convert( 528 final DatanodeInfo.AdminStates inAs) { 529 switch (inAs) { 530 case NORMAL: return DatanodeInfoProto.AdminState.NORMAL; 531 case DECOMMISSION_INPROGRESS: 532 return DatanodeInfoProto.AdminState.DECOMMISSION_INPROGRESS; 533 case DECOMMISSIONED: return DatanodeInfoProto.AdminState.DECOMMISSIONED; 534 default: return DatanodeInfoProto.AdminState.NORMAL; 535 } 536 } 537 538 static public DatanodeInfo convert(DatanodeInfoProto di) { 539 if (di == null) return null; 540 return new DatanodeInfo( 541 PBHelper.convert(di.getId()), 542 di.hasLocation() ? di.getLocation() : null , 543 di.getCapacity(), di.getDfsUsed(), di.getRemaining(), 544 di.getBlockPoolUsed(), di.getCacheCapacity(), di.getCacheUsed(), 545 di.getLastUpdate(), di.getXceiverCount(), 546 PBHelper.convert(di.getAdminState())); 547 } 548 549 static public DatanodeInfoProto convertDatanodeInfo(DatanodeInfo di) { 550 if (di == null) return null; 551 return convert(di); 552 } 553 554 555 static public DatanodeInfo[] convert(DatanodeInfoProto di[]) { 556 if (di == null) return null; 557 DatanodeInfo[] result = new DatanodeInfo[di.length]; 558 for (int i = 0; i < di.length; i++) { 559 result[i] = convert(di[i]); 560 } 561 return result; 562 } 563 564 public static List<? extends HdfsProtos.DatanodeInfoProto> convert( 565 DatanodeInfo[] dnInfos) { 566 return convert(dnInfos, 0); 567 } 568 569 /** 570 * Copy from {@code dnInfos} to a target of list of same size starting at 571 * {@code startIdx}. 572 */ 573 public static List<? extends HdfsProtos.DatanodeInfoProto> convert( 574 DatanodeInfo[] dnInfos, int startIdx) { 575 if (dnInfos == null) 576 return null; 577 ArrayList<HdfsProtos.DatanodeInfoProto> protos = Lists 578 .newArrayListWithCapacity(dnInfos.length); 579 for (int i = startIdx; i < dnInfos.length; i++) { 580 protos.add(convert(dnInfos[i])); 581 } 582 return protos; 583 } 584 585 public static DatanodeInfo[] convert(List<DatanodeInfoProto> list) { 586 DatanodeInfo[] info = new DatanodeInfo[list.size()]; 587 for (int i = 0; i < info.length; i++) { 588 info[i] = convert(list.get(i)); 589 } 590 return info; 591 } 592 593 public static DatanodeInfoProto convert(DatanodeInfo info) { 594 DatanodeInfoProto.Builder builder = DatanodeInfoProto.newBuilder(); 595 if (info.getNetworkLocation() != null) { 596 builder.setLocation(info.getNetworkLocation()); 597 } 598 builder 599 .setId(PBHelper.convert((DatanodeID)info)) 600 .setCapacity(info.getCapacity()) 601 .setDfsUsed(info.getDfsUsed()) 602 .setRemaining(info.getRemaining()) 603 .setBlockPoolUsed(info.getBlockPoolUsed()) 604 .setCacheCapacity(info.getCacheCapacity()) 605 .setCacheUsed(info.getCacheUsed()) 606 .setLastUpdate(info.getLastUpdate()) 607 .setXceiverCount(info.getXceiverCount()) 608 .setAdminState(PBHelper.convert(info.getAdminState())) 609 .build(); 610 return builder.build(); 611 } 612 613 public static AdminStates convert(AdminState adminState) { 614 switch(adminState) { 615 case DECOMMISSION_INPROGRESS: 616 return AdminStates.DECOMMISSION_INPROGRESS; 617 case DECOMMISSIONED: 618 return AdminStates.DECOMMISSIONED; 619 case NORMAL: 620 default: 621 return AdminStates.NORMAL; 622 } 623 } 624 625 public static LocatedBlockProto convert(LocatedBlock b) { 626 if (b == null) return null; 627 Builder builder = LocatedBlockProto.newBuilder(); 628 DatanodeInfo[] locs = b.getLocations(); 629 List<DatanodeInfo> cachedLocs = 630 Lists.newLinkedList(Arrays.asList(b.getCachedLocations())); 631 for (int i = 0; i < locs.length; i++) { 632 DatanodeInfo loc = locs[i]; 633 builder.addLocs(i, PBHelper.convert(loc)); 634 boolean locIsCached = cachedLocs.contains(loc); 635 builder.addIsCached(locIsCached); 636 if (locIsCached) { 637 cachedLocs.remove(loc); 638 } 639 } 640 Preconditions.checkArgument(cachedLocs.size() == 0, 641 "Found additional cached replica locations that are not in the set of" 642 + " storage-backed locations!"); 643 644 StorageType[] storageTypes = b.getStorageTypes(); 645 if (storageTypes != null) { 646 for (int i = 0; i < storageTypes.length; ++i) { 647 builder.addStorageTypes(PBHelper.convertStorageType(storageTypes[i])); 648 } 649 } 650 final String[] storageIDs = b.getStorageIDs(); 651 if (storageIDs != null) { 652 builder.addAllStorageIDs(Arrays.asList(storageIDs)); 653 } 654 655 return builder.setB(PBHelper.convert(b.getBlock())) 656 .setBlockToken(PBHelper.convert(b.getBlockToken())) 657 .setCorrupt(b.isCorrupt()).setOffset(b.getStartOffset()).build(); 658 } 659 660 public static LocatedBlock convert(LocatedBlockProto proto) { 661 if (proto == null) return null; 662 List<DatanodeInfoProto> locs = proto.getLocsList(); 663 DatanodeInfo[] targets = new DatanodeInfo[locs.size()]; 664 for (int i = 0; i < locs.size(); i++) { 665 targets[i] = PBHelper.convert(locs.get(i)); 666 } 667 668 final int storageTypesCount = proto.getStorageTypesCount(); 669 final StorageType[] storageTypes; 670 if (storageTypesCount == 0) { 671 storageTypes = null; 672 } else { 673 Preconditions.checkState(storageTypesCount == locs.size()); 674 storageTypes = convertStorageTypeProtos(proto.getStorageTypesList()); 675 } 676 677 final int storageIDsCount = proto.getStorageIDsCount(); 678 final String[] storageIDs; 679 if (storageIDsCount == 0) { 680 storageIDs = null; 681 } else { 682 Preconditions.checkState(storageIDsCount == locs.size()); 683 storageIDs = proto.getStorageIDsList().toArray(new String[storageIDsCount]); 684 } 685 686 // Set values from the isCached list, re-using references from loc 687 List<DatanodeInfo> cachedLocs = new ArrayList<DatanodeInfo>(locs.size()); 688 List<Boolean> isCachedList = proto.getIsCachedList(); 689 for (int i=0; i<isCachedList.size(); i++) { 690 if (isCachedList.get(i)) { 691 cachedLocs.add(targets[i]); 692 } 693 } 694 695 LocatedBlock lb = new LocatedBlock(PBHelper.convert(proto.getB()), targets, 696 storageIDs, storageTypes, proto.getOffset(), proto.getCorrupt(), 697 cachedLocs.toArray(new DatanodeInfo[0])); 698 lb.setBlockToken(PBHelper.convert(proto.getBlockToken())); 699 700 return lb; 701 } 702 703 public static TokenProto convert(Token<?> tok) { 704 return TokenProto.newBuilder(). 705 setIdentifier(ByteString.copyFrom(tok.getIdentifier())). 706 setPassword(ByteString.copyFrom(tok.getPassword())). 707 setKind(tok.getKind().toString()). 708 setService(tok.getService().toString()).build(); 709 } 710 711 public static Token<BlockTokenIdentifier> convert( 712 TokenProto blockToken) { 713 return new Token<BlockTokenIdentifier>(blockToken.getIdentifier() 714 .toByteArray(), blockToken.getPassword().toByteArray(), new Text( 715 blockToken.getKind()), new Text(blockToken.getService())); 716 } 717 718 719 public static Token<DelegationTokenIdentifier> convertDelegationToken( 720 TokenProto blockToken) { 721 return new Token<DelegationTokenIdentifier>(blockToken.getIdentifier() 722 .toByteArray(), blockToken.getPassword().toByteArray(), new Text( 723 blockToken.getKind()), new Text(blockToken.getService())); 724 } 725 726 public static ReplicaState convert(ReplicaStateProto state) { 727 switch (state) { 728 case RBW: 729 return ReplicaState.RBW; 730 case RUR: 731 return ReplicaState.RUR; 732 case RWR: 733 return ReplicaState.RWR; 734 case TEMPORARY: 735 return ReplicaState.TEMPORARY; 736 case FINALIZED: 737 default: 738 return ReplicaState.FINALIZED; 739 } 740 } 741 742 public static ReplicaStateProto convert(ReplicaState state) { 743 switch (state) { 744 case RBW: 745 return ReplicaStateProto.RBW; 746 case RUR: 747 return ReplicaStateProto.RUR; 748 case RWR: 749 return ReplicaStateProto.RWR; 750 case TEMPORARY: 751 return ReplicaStateProto.TEMPORARY; 752 case FINALIZED: 753 default: 754 return ReplicaStateProto.FINALIZED; 755 } 756 } 757 758 public static DatanodeRegistrationProto convert( 759 DatanodeRegistration registration) { 760 DatanodeRegistrationProto.Builder builder = DatanodeRegistrationProto 761 .newBuilder(); 762 return builder.setDatanodeID(PBHelper.convert((DatanodeID) registration)) 763 .setStorageInfo(PBHelper.convert(registration.getStorageInfo())) 764 .setKeys(PBHelper.convert(registration.getExportedKeys())) 765 .setSoftwareVersion(registration.getSoftwareVersion()).build(); 766 } 767 768 public static DatanodeRegistration convert(DatanodeRegistrationProto proto) { 769 StorageInfo si = convert(proto.getStorageInfo(), NodeType.DATA_NODE); 770 return new DatanodeRegistration(PBHelper.convert(proto.getDatanodeID()), 771 si, PBHelper.convert(proto.getKeys()), proto.getSoftwareVersion()); 772 } 773 774 public static DatanodeCommand convert(DatanodeCommandProto proto) { 775 switch (proto.getCmdType()) { 776 case BalancerBandwidthCommand: 777 return PBHelper.convert(proto.getBalancerCmd()); 778 case BlockCommand: 779 return PBHelper.convert(proto.getBlkCmd()); 780 case BlockRecoveryCommand: 781 return PBHelper.convert(proto.getRecoveryCmd()); 782 case FinalizeCommand: 783 return PBHelper.convert(proto.getFinalizeCmd()); 784 case KeyUpdateCommand: 785 return PBHelper.convert(proto.getKeyUpdateCmd()); 786 case RegisterCommand: 787 return REG_CMD; 788 case BlockIdCommand: 789 return PBHelper.convert(proto.getBlkIdCmd()); 790 default: 791 return null; 792 } 793 } 794 795 public static BalancerBandwidthCommandProto convert( 796 BalancerBandwidthCommand bbCmd) { 797 return BalancerBandwidthCommandProto.newBuilder() 798 .setBandwidth(bbCmd.getBalancerBandwidthValue()).build(); 799 } 800 801 public static KeyUpdateCommandProto convert(KeyUpdateCommand cmd) { 802 return KeyUpdateCommandProto.newBuilder() 803 .setKeys(PBHelper.convert(cmd.getExportedKeys())).build(); 804 } 805 806 public static BlockRecoveryCommandProto convert(BlockRecoveryCommand cmd) { 807 BlockRecoveryCommandProto.Builder builder = BlockRecoveryCommandProto 808 .newBuilder(); 809 for (RecoveringBlock b : cmd.getRecoveringBlocks()) { 810 builder.addBlocks(PBHelper.convert(b)); 811 } 812 return builder.build(); 813 } 814 815 public static FinalizeCommandProto convert(FinalizeCommand cmd) { 816 return FinalizeCommandProto.newBuilder() 817 .setBlockPoolId(cmd.getBlockPoolId()).build(); 818 } 819 820 public static BlockCommandProto convert(BlockCommand cmd) { 821 BlockCommandProto.Builder builder = BlockCommandProto.newBuilder() 822 .setBlockPoolId(cmd.getBlockPoolId()); 823 switch (cmd.getAction()) { 824 case DatanodeProtocol.DNA_TRANSFER: 825 builder.setAction(BlockCommandProto.Action.TRANSFER); 826 break; 827 case DatanodeProtocol.DNA_INVALIDATE: 828 builder.setAction(BlockCommandProto.Action.INVALIDATE); 829 break; 830 case DatanodeProtocol.DNA_SHUTDOWN: 831 builder.setAction(BlockCommandProto.Action.SHUTDOWN); 832 break; 833 default: 834 throw new AssertionError("Invalid action"); 835 } 836 Block[] blocks = cmd.getBlocks(); 837 for (int i = 0; i < blocks.length; i++) { 838 builder.addBlocks(PBHelper.convert(blocks[i])); 839 } 840 builder.addAllTargets(convert(cmd.getTargets())) 841 .addAllTargetStorageUuids(convert(cmd.getTargetStorageIDs())); 842 return builder.build(); 843 } 844 845 public static BlockIdCommandProto convert(BlockIdCommand cmd) { 846 BlockIdCommandProto.Builder builder = BlockIdCommandProto.newBuilder() 847 .setBlockPoolId(cmd.getBlockPoolId()); 848 switch (cmd.getAction()) { 849 case DatanodeProtocol.DNA_CACHE: 850 builder.setAction(BlockIdCommandProto.Action.CACHE); 851 break; 852 case DatanodeProtocol.DNA_UNCACHE: 853 builder.setAction(BlockIdCommandProto.Action.UNCACHE); 854 break; 855 default: 856 throw new AssertionError("Invalid action"); 857 } 858 long[] blockIds = cmd.getBlockIds(); 859 for (int i = 0; i < blockIds.length; i++) { 860 builder.addBlockIds(blockIds[i]); 861 } 862 return builder.build(); 863 } 864 865 private static List<DatanodeInfosProto> convert(DatanodeInfo[][] targets) { 866 DatanodeInfosProto[] ret = new DatanodeInfosProto[targets.length]; 867 for (int i = 0; i < targets.length; i++) { 868 ret[i] = DatanodeInfosProto.newBuilder() 869 .addAllDatanodes(PBHelper.convert(targets[i])).build(); 870 } 871 return Arrays.asList(ret); 872 } 873 874 private static List<StorageUuidsProto> convert(String[][] targetStorageUuids) { 875 StorageUuidsProto[] ret = new StorageUuidsProto[targetStorageUuids.length]; 876 for (int i = 0; i < targetStorageUuids.length; i++) { 877 ret[i] = StorageUuidsProto.newBuilder() 878 .addAllStorageUuids(Arrays.asList(targetStorageUuids[i])).build(); 879 } 880 return Arrays.asList(ret); 881 } 882 883 public static DatanodeCommandProto convert(DatanodeCommand datanodeCommand) { 884 DatanodeCommandProto.Builder builder = DatanodeCommandProto.newBuilder(); 885 if (datanodeCommand == null) { 886 return builder.setCmdType(DatanodeCommandProto.Type.NullDatanodeCommand) 887 .build(); 888 } 889 switch (datanodeCommand.getAction()) { 890 case DatanodeProtocol.DNA_BALANCERBANDWIDTHUPDATE: 891 builder.setCmdType(DatanodeCommandProto.Type.BalancerBandwidthCommand) 892 .setBalancerCmd( 893 PBHelper.convert((BalancerBandwidthCommand) datanodeCommand)); 894 break; 895 case DatanodeProtocol.DNA_ACCESSKEYUPDATE: 896 builder 897 .setCmdType(DatanodeCommandProto.Type.KeyUpdateCommand) 898 .setKeyUpdateCmd(PBHelper.convert((KeyUpdateCommand) datanodeCommand)); 899 break; 900 case DatanodeProtocol.DNA_RECOVERBLOCK: 901 builder.setCmdType(DatanodeCommandProto.Type.BlockRecoveryCommand) 902 .setRecoveryCmd( 903 PBHelper.convert((BlockRecoveryCommand) datanodeCommand)); 904 break; 905 case DatanodeProtocol.DNA_FINALIZE: 906 builder.setCmdType(DatanodeCommandProto.Type.FinalizeCommand) 907 .setFinalizeCmd(PBHelper.convert((FinalizeCommand) datanodeCommand)); 908 break; 909 case DatanodeProtocol.DNA_REGISTER: 910 builder.setCmdType(DatanodeCommandProto.Type.RegisterCommand) 911 .setRegisterCmd(REG_CMD_PROTO); 912 break; 913 case DatanodeProtocol.DNA_TRANSFER: 914 case DatanodeProtocol.DNA_INVALIDATE: 915 case DatanodeProtocol.DNA_SHUTDOWN: 916 builder.setCmdType(DatanodeCommandProto.Type.BlockCommand). 917 setBlkCmd(PBHelper.convert((BlockCommand) datanodeCommand)); 918 break; 919 case DatanodeProtocol.DNA_CACHE: 920 case DatanodeProtocol.DNA_UNCACHE: 921 builder.setCmdType(DatanodeCommandProto.Type.BlockIdCommand). 922 setBlkIdCmd(PBHelper.convert((BlockIdCommand) datanodeCommand)); 923 break; 924 case DatanodeProtocol.DNA_UNKNOWN: //Not expected 925 default: 926 builder.setCmdType(DatanodeCommandProto.Type.NullDatanodeCommand); 927 } 928 return builder.build(); 929 } 930 931 public static KeyUpdateCommand convert(KeyUpdateCommandProto keyUpdateCmd) { 932 return new KeyUpdateCommand(PBHelper.convert(keyUpdateCmd.getKeys())); 933 } 934 935 public static FinalizeCommand convert(FinalizeCommandProto finalizeCmd) { 936 return new FinalizeCommand(finalizeCmd.getBlockPoolId()); 937 } 938 939 public static BlockRecoveryCommand convert( 940 BlockRecoveryCommandProto recoveryCmd) { 941 List<RecoveringBlockProto> list = recoveryCmd.getBlocksList(); 942 List<RecoveringBlock> recoveringBlocks = new ArrayList<RecoveringBlock>( 943 list.size()); 944 945 for (RecoveringBlockProto rbp : list) { 946 recoveringBlocks.add(PBHelper.convert(rbp)); 947 } 948 return new BlockRecoveryCommand(recoveringBlocks); 949 } 950 951 public static BlockCommand convert(BlockCommandProto blkCmd) { 952 List<BlockProto> blockProtoList = blkCmd.getBlocksList(); 953 Block[] blocks = new Block[blockProtoList.size()]; 954 for (int i = 0; i < blockProtoList.size(); i++) { 955 blocks[i] = PBHelper.convert(blockProtoList.get(i)); 956 } 957 List<DatanodeInfosProto> targetList = blkCmd.getTargetsList(); 958 DatanodeInfo[][] targets = new DatanodeInfo[targetList.size()][]; 959 for (int i = 0; i < targetList.size(); i++) { 960 targets[i] = PBHelper.convert(targetList.get(i)); 961 } 962 963 List<StorageUuidsProto> targetStorageUuidsList = blkCmd.getTargetStorageUuidsList(); 964 String[][] targetStorageIDs = new String[targetStorageUuidsList.size()][]; 965 for(int i = 0; i < targetStorageIDs.length; i++) { 966 List<String> storageIDs = targetStorageUuidsList.get(i).getStorageUuidsList(); 967 targetStorageIDs[i] = storageIDs.toArray(new String[storageIDs.size()]); 968 } 969 970 int action = DatanodeProtocol.DNA_UNKNOWN; 971 switch (blkCmd.getAction()) { 972 case TRANSFER: 973 action = DatanodeProtocol.DNA_TRANSFER; 974 break; 975 case INVALIDATE: 976 action = DatanodeProtocol.DNA_INVALIDATE; 977 break; 978 case SHUTDOWN: 979 action = DatanodeProtocol.DNA_SHUTDOWN; 980 break; 981 default: 982 throw new AssertionError("Unknown action type: " + blkCmd.getAction()); 983 } 984 return new BlockCommand(action, blkCmd.getBlockPoolId(), blocks, targets, 985 targetStorageIDs); 986 } 987 988 public static BlockIdCommand convert(BlockIdCommandProto blkIdCmd) { 989 int numBlockIds = blkIdCmd.getBlockIdsCount(); 990 long blockIds[] = new long[numBlockIds]; 991 for (int i = 0; i < numBlockIds; i++) { 992 blockIds[i] = blkIdCmd.getBlockIds(i); 993 } 994 int action = DatanodeProtocol.DNA_UNKNOWN; 995 switch (blkIdCmd.getAction()) { 996 case CACHE: 997 action = DatanodeProtocol.DNA_CACHE; 998 break; 999 case UNCACHE: 1000 action = DatanodeProtocol.DNA_UNCACHE; 1001 break; 1002 default: 1003 throw new AssertionError("Unknown action type: " + blkIdCmd.getAction()); 1004 } 1005 return new BlockIdCommand(action, blkIdCmd.getBlockPoolId(), blockIds); 1006 } 1007 1008 public static DatanodeInfo[] convert(DatanodeInfosProto datanodeInfosProto) { 1009 List<DatanodeInfoProto> proto = datanodeInfosProto.getDatanodesList(); 1010 DatanodeInfo[] infos = new DatanodeInfo[proto.size()]; 1011 for (int i = 0; i < infos.length; i++) { 1012 infos[i] = PBHelper.convert(proto.get(i)); 1013 } 1014 return infos; 1015 } 1016 1017 public static BalancerBandwidthCommand convert( 1018 BalancerBandwidthCommandProto balancerCmd) { 1019 return new BalancerBandwidthCommand(balancerCmd.getBandwidth()); 1020 } 1021 1022 public static ReceivedDeletedBlockInfoProto convert( 1023 ReceivedDeletedBlockInfo receivedDeletedBlockInfo) { 1024 ReceivedDeletedBlockInfoProto.Builder builder = 1025 ReceivedDeletedBlockInfoProto.newBuilder(); 1026 1027 ReceivedDeletedBlockInfoProto.BlockStatus status; 1028 switch (receivedDeletedBlockInfo.getStatus()) { 1029 case RECEIVING_BLOCK: 1030 status = ReceivedDeletedBlockInfoProto.BlockStatus.RECEIVING; 1031 break; 1032 case RECEIVED_BLOCK: 1033 status = ReceivedDeletedBlockInfoProto.BlockStatus.RECEIVED; 1034 break; 1035 case DELETED_BLOCK: 1036 status = ReceivedDeletedBlockInfoProto.BlockStatus.DELETED; 1037 break; 1038 default: 1039 throw new IllegalArgumentException("Bad status: " + 1040 receivedDeletedBlockInfo.getStatus()); 1041 } 1042 builder.setStatus(status); 1043 1044 if (receivedDeletedBlockInfo.getDelHints() != null) { 1045 builder.setDeleteHint(receivedDeletedBlockInfo.getDelHints()); 1046 } 1047 return builder.setBlock(PBHelper.convert(receivedDeletedBlockInfo.getBlock())) 1048 .build(); 1049 } 1050 1051 public static ReceivedDeletedBlockInfo convert( 1052 ReceivedDeletedBlockInfoProto proto) { 1053 ReceivedDeletedBlockInfo.BlockStatus status = null; 1054 switch (proto.getStatus()) { 1055 case RECEIVING: 1056 status = BlockStatus.RECEIVING_BLOCK; 1057 break; 1058 case RECEIVED: 1059 status = BlockStatus.RECEIVED_BLOCK; 1060 break; 1061 case DELETED: 1062 status = BlockStatus.DELETED_BLOCK; 1063 break; 1064 } 1065 return new ReceivedDeletedBlockInfo( 1066 PBHelper.convert(proto.getBlock()), 1067 status, 1068 proto.hasDeleteHint() ? proto.getDeleteHint() : null); 1069 } 1070 1071 public static NamespaceInfoProto convert(NamespaceInfo info) { 1072 return NamespaceInfoProto.newBuilder() 1073 .setBlockPoolID(info.getBlockPoolID()) 1074 .setBuildVersion(info.getBuildVersion()) 1075 .setUnused(0) 1076 .setStorageInfo(PBHelper.convert((StorageInfo)info)) 1077 .setSoftwareVersion(info.getSoftwareVersion()).build(); 1078 } 1079 1080 // Located Block Arrays and Lists 1081 public static LocatedBlockProto[] convertLocatedBlock(LocatedBlock[] lb) { 1082 if (lb == null) return null; 1083 return convertLocatedBlock2(Arrays.asList(lb)).toArray( 1084 new LocatedBlockProto[lb.length]); 1085 } 1086 1087 public static LocatedBlock[] convertLocatedBlock(LocatedBlockProto[] lb) { 1088 if (lb == null) return null; 1089 return convertLocatedBlock(Arrays.asList(lb)).toArray( 1090 new LocatedBlock[lb.length]); 1091 } 1092 1093 public static List<LocatedBlock> convertLocatedBlock( 1094 List<LocatedBlockProto> lb) { 1095 if (lb == null) return null; 1096 final int len = lb.size(); 1097 List<LocatedBlock> result = 1098 new ArrayList<LocatedBlock>(len); 1099 for (int i = 0; i < len; ++i) { 1100 result.add(PBHelper.convert(lb.get(i))); 1101 } 1102 return result; 1103 } 1104 1105 public static List<LocatedBlockProto> convertLocatedBlock2(List<LocatedBlock> lb) { 1106 if (lb == null) return null; 1107 final int len = lb.size(); 1108 List<LocatedBlockProto> result = new ArrayList<LocatedBlockProto>(len); 1109 for (int i = 0; i < len; ++i) { 1110 result.add(PBHelper.convert(lb.get(i))); 1111 } 1112 return result; 1113 } 1114 1115 1116 // LocatedBlocks 1117 public static LocatedBlocks convert(LocatedBlocksProto lb) { 1118 return new LocatedBlocks( 1119 lb.getFileLength(), lb.getUnderConstruction(), 1120 PBHelper.convertLocatedBlock(lb.getBlocksList()), 1121 lb.hasLastBlock() ? PBHelper.convert(lb.getLastBlock()) : null, 1122 lb.getIsLastBlockComplete()); 1123 } 1124 1125 public static LocatedBlocksProto convert(LocatedBlocks lb) { 1126 if (lb == null) { 1127 return null; 1128 } 1129 LocatedBlocksProto.Builder builder = 1130 LocatedBlocksProto.newBuilder(); 1131 if (lb.getLastLocatedBlock() != null) { 1132 builder.setLastBlock(PBHelper.convert(lb.getLastLocatedBlock())); 1133 } 1134 return builder.setFileLength(lb.getFileLength()) 1135 .setUnderConstruction(lb.isUnderConstruction()) 1136 .addAllBlocks(PBHelper.convertLocatedBlock2(lb.getLocatedBlocks())) 1137 .setIsLastBlockComplete(lb.isLastBlockComplete()).build(); 1138 } 1139 1140 // DataEncryptionKey 1141 public static DataEncryptionKey convert(DataEncryptionKeyProto bet) { 1142 String encryptionAlgorithm = bet.getEncryptionAlgorithm(); 1143 return new DataEncryptionKey(bet.getKeyId(), 1144 bet.getBlockPoolId(), 1145 bet.getNonce().toByteArray(), 1146 bet.getEncryptionKey().toByteArray(), 1147 bet.getExpiryDate(), 1148 encryptionAlgorithm.isEmpty() ? null : encryptionAlgorithm); 1149 } 1150 1151 public static DataEncryptionKeyProto convert(DataEncryptionKey bet) { 1152 DataEncryptionKeyProto.Builder b = DataEncryptionKeyProto.newBuilder() 1153 .setKeyId(bet.keyId) 1154 .setBlockPoolId(bet.blockPoolId) 1155 .setNonce(ByteString.copyFrom(bet.nonce)) 1156 .setEncryptionKey(ByteString.copyFrom(bet.encryptionKey)) 1157 .setExpiryDate(bet.expiryDate); 1158 if (bet.encryptionAlgorithm != null) { 1159 b.setEncryptionAlgorithm(bet.encryptionAlgorithm); 1160 } 1161 return b.build(); 1162 } 1163 1164 public static FsServerDefaults convert(FsServerDefaultsProto fs) { 1165 if (fs == null) return null; 1166 return new FsServerDefaults( 1167 fs.getBlockSize(), fs.getBytesPerChecksum(), 1168 fs.getWritePacketSize(), (short) fs.getReplication(), 1169 fs.getFileBufferSize(), 1170 fs.getEncryptDataTransfer(), 1171 fs.getTrashInterval(), 1172 PBHelper.convert(fs.getChecksumType())); 1173 } 1174 1175 public static FsServerDefaultsProto convert(FsServerDefaults fs) { 1176 if (fs == null) return null; 1177 return FsServerDefaultsProto.newBuilder(). 1178 setBlockSize(fs.getBlockSize()). 1179 setBytesPerChecksum(fs.getBytesPerChecksum()). 1180 setWritePacketSize(fs.getWritePacketSize()) 1181 .setReplication(fs.getReplication()) 1182 .setFileBufferSize(fs.getFileBufferSize()) 1183 .setEncryptDataTransfer(fs.getEncryptDataTransfer()) 1184 .setTrashInterval(fs.getTrashInterval()) 1185 .setChecksumType(PBHelper.convert(fs.getChecksumType())) 1186 .build(); 1187 } 1188 1189 public static FsPermissionProto convert(FsPermission p) { 1190 if (p == null) return null; 1191 return FsPermissionProto.newBuilder().setPerm(p.toShort()).build(); 1192 } 1193 1194 public static FsPermission convert(FsPermissionProto p) { 1195 if (p == null) return null; 1196 return new FsPermission((short)p.getPerm()); 1197 } 1198 1199 1200 // The creatFlag field in PB is a bitmask whose values are the same a the 1201 // emum values of CreateFlag 1202 public static int convertCreateFlag(EnumSetWritable<CreateFlag> flag) { 1203 int value = 0; 1204 if (flag.contains(CreateFlag.APPEND)) { 1205 value |= CreateFlagProto.APPEND.getNumber(); 1206 } 1207 if (flag.contains(CreateFlag.CREATE)) { 1208 value |= CreateFlagProto.CREATE.getNumber(); 1209 } 1210 if (flag.contains(CreateFlag.OVERWRITE)) { 1211 value |= CreateFlagProto.OVERWRITE.getNumber(); 1212 } 1213 return value; 1214 } 1215 1216 public static EnumSetWritable<CreateFlag> convertCreateFlag(int flag) { 1217 EnumSet<CreateFlag> result = 1218 EnumSet.noneOf(CreateFlag.class); 1219 if ((flag & CreateFlagProto.APPEND_VALUE) == CreateFlagProto.APPEND_VALUE) { 1220 result.add(CreateFlag.APPEND); 1221 } 1222 if ((flag & CreateFlagProto.CREATE_VALUE) == CreateFlagProto.CREATE_VALUE) { 1223 result.add(CreateFlag.CREATE); 1224 } 1225 if ((flag & CreateFlagProto.OVERWRITE_VALUE) 1226 == CreateFlagProto.OVERWRITE_VALUE) { 1227 result.add(CreateFlag.OVERWRITE); 1228 } 1229 return new EnumSetWritable<CreateFlag>(result); 1230 } 1231 1232 public static int convertCacheFlags(EnumSet<CacheFlag> flags) { 1233 int value = 0; 1234 if (flags.contains(CacheFlag.FORCE)) { 1235 value |= CacheFlagProto.FORCE.getNumber(); 1236 } 1237 return value; 1238 } 1239 1240 public static EnumSet<CacheFlag> convertCacheFlags(int flags) { 1241 EnumSet<CacheFlag> result = EnumSet.noneOf(CacheFlag.class); 1242 if ((flags & CacheFlagProto.FORCE_VALUE) == CacheFlagProto.FORCE_VALUE) { 1243 result.add(CacheFlag.FORCE); 1244 } 1245 return result; 1246 } 1247 1248 public static HdfsFileStatus convert(HdfsFileStatusProto fs) { 1249 if (fs == null) 1250 return null; 1251 return new HdfsLocatedFileStatus( 1252 fs.getLength(), fs.getFileType().equals(FileType.IS_DIR), 1253 fs.getBlockReplication(), fs.getBlocksize(), 1254 fs.getModificationTime(), fs.getAccessTime(), 1255 PBHelper.convert(fs.getPermission()), fs.getOwner(), fs.getGroup(), 1256 fs.getFileType().equals(FileType.IS_SYMLINK) ? 1257 fs.getSymlink().toByteArray() : null, 1258 fs.getPath().toByteArray(), 1259 fs.hasFileId()? fs.getFileId(): INodeId.GRANDFATHER_INODE_ID, 1260 fs.hasLocations() ? PBHelper.convert(fs.getLocations()) : null, 1261 fs.hasChildrenNum() ? fs.getChildrenNum() : -1); 1262 } 1263 1264 public static SnapshottableDirectoryStatus convert( 1265 SnapshottableDirectoryStatusProto sdirStatusProto) { 1266 if (sdirStatusProto == null) { 1267 return null; 1268 } 1269 final HdfsFileStatusProto status = sdirStatusProto.getDirStatus(); 1270 return new SnapshottableDirectoryStatus( 1271 status.getModificationTime(), 1272 status.getAccessTime(), 1273 PBHelper.convert(status.getPermission()), 1274 status.getOwner(), 1275 status.getGroup(), 1276 status.getPath().toByteArray(), 1277 status.getFileId(), 1278 status.getChildrenNum(), 1279 sdirStatusProto.getSnapshotNumber(), 1280 sdirStatusProto.getSnapshotQuota(), 1281 sdirStatusProto.getParentFullpath().toByteArray()); 1282 } 1283 1284 public static HdfsFileStatusProto convert(HdfsFileStatus fs) { 1285 if (fs == null) 1286 return null; 1287 FileType fType = FileType.IS_FILE; 1288 if (fs.isDir()) { 1289 fType = FileType.IS_DIR; 1290 } else if (fs.isSymlink()) { 1291 fType = FileType.IS_SYMLINK; 1292 } 1293 1294 HdfsFileStatusProto.Builder builder = 1295 HdfsFileStatusProto.newBuilder(). 1296 setLength(fs.getLen()). 1297 setFileType(fType). 1298 setBlockReplication(fs.getReplication()). 1299 setBlocksize(fs.getBlockSize()). 1300 setModificationTime(fs.getModificationTime()). 1301 setAccessTime(fs.getAccessTime()). 1302 setPermission(PBHelper.convert(fs.getPermission())). 1303 setOwner(fs.getOwner()). 1304 setGroup(fs.getGroup()). 1305 setFileId(fs.getFileId()). 1306 setChildrenNum(fs.getChildrenNum()). 1307 setPath(ByteString.copyFrom(fs.getLocalNameInBytes())); 1308 if (fs.isSymlink()) { 1309 builder.setSymlink(ByteString.copyFrom(fs.getSymlinkInBytes())); 1310 } 1311 if (fs instanceof HdfsLocatedFileStatus) { 1312 LocatedBlocks locations = ((HdfsLocatedFileStatus)fs).getBlockLocations(); 1313 if (locations != null) { 1314 builder.setLocations(PBHelper.convert(locations)); 1315 } 1316 } 1317 return builder.build(); 1318 } 1319 1320 public static SnapshottableDirectoryStatusProto convert( 1321 SnapshottableDirectoryStatus status) { 1322 if (status == null) { 1323 return null; 1324 } 1325 int snapshotNumber = status.getSnapshotNumber(); 1326 int snapshotQuota = status.getSnapshotQuota(); 1327 byte[] parentFullPath = status.getParentFullPath(); 1328 ByteString parentFullPathBytes = ByteString.copyFrom( 1329 parentFullPath == null ? DFSUtil.EMPTY_BYTES : parentFullPath); 1330 HdfsFileStatusProto fs = convert(status.getDirStatus()); 1331 SnapshottableDirectoryStatusProto.Builder builder = 1332 SnapshottableDirectoryStatusProto 1333 .newBuilder().setSnapshotNumber(snapshotNumber) 1334 .setSnapshotQuota(snapshotQuota).setParentFullpath(parentFullPathBytes) 1335 .setDirStatus(fs); 1336 return builder.build(); 1337 } 1338 1339 public static HdfsFileStatusProto[] convert(HdfsFileStatus[] fs) { 1340 if (fs == null) return null; 1341 final int len = fs.length; 1342 HdfsFileStatusProto[] result = new HdfsFileStatusProto[len]; 1343 for (int i = 0; i < len; ++i) { 1344 result[i] = PBHelper.convert(fs[i]); 1345 } 1346 return result; 1347 } 1348 1349 public static HdfsFileStatus[] convert(HdfsFileStatusProto[] fs) { 1350 if (fs == null) return null; 1351 final int len = fs.length; 1352 HdfsFileStatus[] result = new HdfsFileStatus[len]; 1353 for (int i = 0; i < len; ++i) { 1354 result[i] = PBHelper.convert(fs[i]); 1355 } 1356 return result; 1357 } 1358 1359 public static DirectoryListing convert(DirectoryListingProto dl) { 1360 if (dl == null) 1361 return null; 1362 List<HdfsFileStatusProto> partList = dl.getPartialListingList(); 1363 return new DirectoryListing( 1364 partList.isEmpty() ? new HdfsLocatedFileStatus[0] 1365 : PBHelper.convert( 1366 partList.toArray(new HdfsFileStatusProto[partList.size()])), 1367 dl.getRemainingEntries()); 1368 } 1369 1370 public static DirectoryListingProto convert(DirectoryListing d) { 1371 if (d == null) 1372 return null; 1373 return DirectoryListingProto.newBuilder(). 1374 addAllPartialListing(Arrays.asList( 1375 PBHelper.convert(d.getPartialListing()))). 1376 setRemainingEntries(d.getRemainingEntries()). 1377 build(); 1378 } 1379 1380 public static long[] convert(GetFsStatsResponseProto res) { 1381 long[] result = new long[6]; 1382 result[ClientProtocol.GET_STATS_CAPACITY_IDX] = res.getCapacity(); 1383 result[ClientProtocol.GET_STATS_USED_IDX] = res.getUsed(); 1384 result[ClientProtocol.GET_STATS_REMAINING_IDX] = res.getRemaining(); 1385 result[ClientProtocol.GET_STATS_UNDER_REPLICATED_IDX] = res.getUnderReplicated(); 1386 result[ClientProtocol.GET_STATS_CORRUPT_BLOCKS_IDX] = res.getCorruptBlocks(); 1387 result[ClientProtocol.GET_STATS_MISSING_BLOCKS_IDX] = res.getMissingBlocks(); 1388 return result; 1389 } 1390 1391 public static GetFsStatsResponseProto convert(long[] fsStats) { 1392 GetFsStatsResponseProto.Builder result = GetFsStatsResponseProto 1393 .newBuilder(); 1394 if (fsStats.length >= ClientProtocol.GET_STATS_CAPACITY_IDX + 1) 1395 result.setCapacity(fsStats[ClientProtocol.GET_STATS_CAPACITY_IDX]); 1396 if (fsStats.length >= ClientProtocol.GET_STATS_USED_IDX + 1) 1397 result.setUsed(fsStats[ClientProtocol.GET_STATS_USED_IDX]); 1398 if (fsStats.length >= ClientProtocol.GET_STATS_REMAINING_IDX + 1) 1399 result.setRemaining(fsStats[ClientProtocol.GET_STATS_REMAINING_IDX]); 1400 if (fsStats.length >= ClientProtocol.GET_STATS_UNDER_REPLICATED_IDX + 1) 1401 result.setUnderReplicated( 1402 fsStats[ClientProtocol.GET_STATS_UNDER_REPLICATED_IDX]); 1403 if (fsStats.length >= ClientProtocol.GET_STATS_CORRUPT_BLOCKS_IDX + 1) 1404 result.setCorruptBlocks( 1405 fsStats[ClientProtocol.GET_STATS_CORRUPT_BLOCKS_IDX]); 1406 if (fsStats.length >= ClientProtocol.GET_STATS_MISSING_BLOCKS_IDX + 1) 1407 result.setMissingBlocks( 1408 fsStats[ClientProtocol.GET_STATS_MISSING_BLOCKS_IDX]); 1409 return result.build(); 1410 } 1411 1412 public static DatanodeReportTypeProto 1413 convert(DatanodeReportType t) { 1414 switch (t) { 1415 case ALL: return DatanodeReportTypeProto.ALL; 1416 case LIVE: return DatanodeReportTypeProto.LIVE; 1417 case DEAD: return DatanodeReportTypeProto.DEAD; 1418 default: 1419 throw new IllegalArgumentException("Unexpected data type report:" + t); 1420 } 1421 } 1422 1423 public static DatanodeReportType 1424 convert(DatanodeReportTypeProto t) { 1425 switch (t) { 1426 case ALL: return DatanodeReportType.ALL; 1427 case LIVE: return DatanodeReportType.LIVE; 1428 case DEAD: return DatanodeReportType.DEAD; 1429 default: 1430 throw new IllegalArgumentException("Unexpected data type report:" + t); 1431 } 1432 } 1433 1434 public static SafeModeActionProto convert( 1435 SafeModeAction a) { 1436 switch (a) { 1437 case SAFEMODE_LEAVE: 1438 return SafeModeActionProto.SAFEMODE_LEAVE; 1439 case SAFEMODE_ENTER: 1440 return SafeModeActionProto.SAFEMODE_ENTER; 1441 case SAFEMODE_GET: 1442 return SafeModeActionProto.SAFEMODE_GET; 1443 default: 1444 throw new IllegalArgumentException("Unexpected SafeModeAction :" + a); 1445 } 1446 } 1447 1448 public static SafeModeAction convert( 1449 ClientNamenodeProtocolProtos.SafeModeActionProto a) { 1450 switch (a) { 1451 case SAFEMODE_LEAVE: 1452 return SafeModeAction.SAFEMODE_LEAVE; 1453 case SAFEMODE_ENTER: 1454 return SafeModeAction.SAFEMODE_ENTER; 1455 case SAFEMODE_GET: 1456 return SafeModeAction.SAFEMODE_GET; 1457 default: 1458 throw new IllegalArgumentException("Unexpected SafeModeAction :" + a); 1459 } 1460 } 1461 1462 public static RollingUpgradeActionProto convert(RollingUpgradeAction a) { 1463 switch (a) { 1464 case QUERY: 1465 return RollingUpgradeActionProto.QUERY; 1466 case PREPARE: 1467 return RollingUpgradeActionProto.START; 1468 case FINALIZE: 1469 return RollingUpgradeActionProto.FINALIZE; 1470 default: 1471 throw new IllegalArgumentException("Unexpected value: " + a); 1472 } 1473 } 1474 1475 public static RollingUpgradeAction convert(RollingUpgradeActionProto a) { 1476 switch (a) { 1477 case QUERY: 1478 return RollingUpgradeAction.QUERY; 1479 case START: 1480 return RollingUpgradeAction.PREPARE; 1481 case FINALIZE: 1482 return RollingUpgradeAction.FINALIZE; 1483 default: 1484 throw new IllegalArgumentException("Unexpected value: " + a); 1485 } 1486 } 1487 1488 public static RollingUpgradeStatusProto convertRollingUpgradeStatus( 1489 RollingUpgradeStatus status) { 1490 return RollingUpgradeStatusProto.newBuilder() 1491 .setBlockPoolId(status.getBlockPoolId()) 1492 .build(); 1493 } 1494 1495 public static RollingUpgradeStatus convert(RollingUpgradeStatusProto proto) { 1496 return new RollingUpgradeStatus(proto.getBlockPoolId()); 1497 } 1498 1499 public static RollingUpgradeInfoProto convert(RollingUpgradeInfo info) { 1500 return RollingUpgradeInfoProto.newBuilder() 1501 .setStatus(convertRollingUpgradeStatus(info)) 1502 .setCreatedRollbackImages(info.createdRollbackImages()) 1503 .setStartTime(info.getStartTime()) 1504 .setFinalizeTime(info.getFinalizeTime()) 1505 .build(); 1506 } 1507 1508 public static RollingUpgradeInfo convert(RollingUpgradeInfoProto proto) { 1509 RollingUpgradeStatusProto status = proto.getStatus(); 1510 return new RollingUpgradeInfo(status.getBlockPoolId(), 1511 proto.getCreatedRollbackImages(), 1512 proto.getStartTime(), proto.getFinalizeTime()); 1513 } 1514 1515 public static CorruptFileBlocks convert(CorruptFileBlocksProto c) { 1516 if (c == null) 1517 return null; 1518 List<String> fileList = c.getFilesList(); 1519 return new CorruptFileBlocks(fileList.toArray(new String[fileList.size()]), 1520 c.getCookie()); 1521 } 1522 1523 public static CorruptFileBlocksProto convert(CorruptFileBlocks c) { 1524 if (c == null) 1525 return null; 1526 return CorruptFileBlocksProto.newBuilder(). 1527 addAllFiles(Arrays.asList(c.getFiles())). 1528 setCookie(c.getCookie()). 1529 build(); 1530 } 1531 1532 public static ContentSummary convert(ContentSummaryProto cs) { 1533 if (cs == null) return null; 1534 return new ContentSummary( 1535 cs.getLength(), cs.getFileCount(), cs.getDirectoryCount(), cs.getQuota(), 1536 cs.getSpaceConsumed(), cs.getSpaceQuota()); 1537 } 1538 1539 public static ContentSummaryProto convert(ContentSummary cs) { 1540 if (cs == null) return null; 1541 return ContentSummaryProto.newBuilder(). 1542 setLength(cs.getLength()). 1543 setFileCount(cs.getFileCount()). 1544 setDirectoryCount(cs.getDirectoryCount()). 1545 setQuota(cs.getQuota()). 1546 setSpaceConsumed(cs.getSpaceConsumed()). 1547 setSpaceQuota(cs.getSpaceQuota()). 1548 build(); 1549 } 1550 1551 public static NNHAStatusHeartbeat convert(NNHAStatusHeartbeatProto s) { 1552 if (s == null) return null; 1553 switch (s.getState()) { 1554 case ACTIVE: 1555 return new NNHAStatusHeartbeat(HAServiceState.ACTIVE, s.getTxid()); 1556 case STANDBY: 1557 return new NNHAStatusHeartbeat(HAServiceState.STANDBY, s.getTxid()); 1558 default: 1559 throw new IllegalArgumentException("Unexpected NNHAStatusHeartbeat.State:" + s.getState()); 1560 } 1561 } 1562 1563 public static NNHAStatusHeartbeatProto convert(NNHAStatusHeartbeat hb) { 1564 if (hb == null) return null; 1565 NNHAStatusHeartbeatProto.Builder builder = 1566 NNHAStatusHeartbeatProto.newBuilder(); 1567 switch (hb.getState()) { 1568 case ACTIVE: 1569 builder.setState(NNHAStatusHeartbeatProto.State.ACTIVE); 1570 break; 1571 case STANDBY: 1572 builder.setState(NNHAStatusHeartbeatProto.State.STANDBY); 1573 break; 1574 default: 1575 throw new IllegalArgumentException("Unexpected NNHAStatusHeartbeat.State:" + 1576 hb.getState()); 1577 } 1578 builder.setTxid(hb.getTxId()); 1579 return builder.build(); 1580 } 1581 1582 public static DatanodeStorageProto convert(DatanodeStorage s) { 1583 return DatanodeStorageProto.newBuilder() 1584 .setState(PBHelper.convertState(s.getState())) 1585 .setStorageType(PBHelper.convertStorageType(s.getStorageType())) 1586 .setStorageUuid(s.getStorageID()).build(); 1587 } 1588 1589 private static StorageState convertState(State state) { 1590 switch(state) { 1591 case READ_ONLY_SHARED: 1592 return StorageState.READ_ONLY_SHARED; 1593 case NORMAL: 1594 default: 1595 return StorageState.NORMAL; 1596 } 1597 } 1598 1599 private static StorageTypeProto convertStorageType( 1600 StorageType type) { 1601 switch(type) { 1602 case DISK: 1603 return StorageTypeProto.DISK; 1604 case SSD: 1605 return StorageTypeProto.SSD; 1606 default: 1607 throw new IllegalStateException( 1608 "BUG: StorageType not found, type=" + type); 1609 } 1610 } 1611 1612 public static DatanodeStorage convert(DatanodeStorageProto s) { 1613 return new DatanodeStorage(s.getStorageUuid(), 1614 PBHelper.convertState(s.getState()), 1615 PBHelper.convertType(s.getStorageType())); 1616 } 1617 1618 private static State convertState(StorageState state) { 1619 switch(state) { 1620 case READ_ONLY_SHARED: 1621 return DatanodeStorage.State.READ_ONLY_SHARED; 1622 case NORMAL: 1623 default: 1624 return DatanodeStorage.State.NORMAL; 1625 } 1626 } 1627 1628 private static StorageType convertType(StorageTypeProto type) { 1629 switch(type) { 1630 case DISK: 1631 return StorageType.DISK; 1632 case SSD: 1633 return StorageType.SSD; 1634 default: 1635 throw new IllegalStateException( 1636 "BUG: StorageTypeProto not found, type=" + type); 1637 } 1638 } 1639 1640 private static StorageType[] convertStorageTypeProtos( 1641 List<StorageTypeProto> storageTypesList) { 1642 final StorageType[] storageTypes = new StorageType[storageTypesList.size()]; 1643 for (int i = 0; i < storageTypes.length; ++i) { 1644 storageTypes[i] = PBHelper.convertType(storageTypesList.get(i)); 1645 } 1646 return storageTypes; 1647 } 1648 1649 public static StorageReportProto convert(StorageReport r) { 1650 StorageReportProto.Builder builder = StorageReportProto.newBuilder() 1651 .setBlockPoolUsed(r.getBlockPoolUsed()).setCapacity(r.getCapacity()) 1652 .setDfsUsed(r.getDfsUsed()).setRemaining(r.getRemaining()) 1653 .setStorageUuid(r.getStorage().getStorageID()) 1654 .setStorage(convert(r.getStorage())); 1655 return builder.build(); 1656 } 1657 1658 public static StorageReport convert(StorageReportProto p) { 1659 return new StorageReport( 1660 p.hasStorage() ? 1661 convert(p.getStorage()) : 1662 new DatanodeStorage(p.getStorageUuid()), 1663 p.getFailed(), p.getCapacity(), p.getDfsUsed(), p.getRemaining(), 1664 p.getBlockPoolUsed()); 1665 } 1666 1667 public static StorageReport[] convertStorageReports( 1668 List<StorageReportProto> list) { 1669 final StorageReport[] report = new StorageReport[list.size()]; 1670 for (int i = 0; i < report.length; i++) { 1671 report[i] = convert(list.get(i)); 1672 } 1673 return report; 1674 } 1675 1676 public static JournalInfo convert(JournalInfoProto info) { 1677 int lv = info.hasLayoutVersion() ? info.getLayoutVersion() : 0; 1678 int nsID = info.hasNamespaceID() ? info.getNamespaceID() : 0; 1679 return new JournalInfo(lv, info.getClusterID(), nsID); 1680 } 1681 1682 /** 1683 * Method used for converting {@link JournalInfoProto} sent from Namenode 1684 * to Journal receivers to {@link NamenodeRegistration}. 1685 */ 1686 public static JournalInfoProto convert(JournalInfo j) { 1687 return JournalInfoProto.newBuilder().setClusterID(j.getClusterId()) 1688 .setLayoutVersion(j.getLayoutVersion()) 1689 .setNamespaceID(j.getNamespaceId()).build(); 1690 } 1691 1692 public static SnapshottableDirectoryStatus[] convert( 1693 SnapshottableDirectoryListingProto sdlp) { 1694 if (sdlp == null) 1695 return null; 1696 List<SnapshottableDirectoryStatusProto> list = sdlp 1697 .getSnapshottableDirListingList(); 1698 if (list.isEmpty()) { 1699 return new SnapshottableDirectoryStatus[0]; 1700 } else { 1701 SnapshottableDirectoryStatus[] result = 1702 new SnapshottableDirectoryStatus[list.size()]; 1703 for (int i = 0; i < list.size(); i++) { 1704 result[i] = PBHelper.convert(list.get(i)); 1705 } 1706 return result; 1707 } 1708 } 1709 1710 public static SnapshottableDirectoryListingProto convert( 1711 SnapshottableDirectoryStatus[] status) { 1712 if (status == null) 1713 return null; 1714 SnapshottableDirectoryStatusProto[] protos = 1715 new SnapshottableDirectoryStatusProto[status.length]; 1716 for (int i = 0; i < status.length; i++) { 1717 protos[i] = PBHelper.convert(status[i]); 1718 } 1719 List<SnapshottableDirectoryStatusProto> protoList = Arrays.asList(protos); 1720 return SnapshottableDirectoryListingProto.newBuilder() 1721 .addAllSnapshottableDirListing(protoList).build(); 1722 } 1723 1724 public static DiffReportEntry convert(SnapshotDiffReportEntryProto entry) { 1725 if (entry == null) { 1726 return null; 1727 } 1728 DiffType type = DiffType.getTypeFromLabel(entry 1729 .getModificationLabel()); 1730 return type == null ? null : 1731 new DiffReportEntry(type, entry.getFullpath().toByteArray()); 1732 } 1733 1734 public static SnapshotDiffReportEntryProto convert(DiffReportEntry entry) { 1735 if (entry == null) { 1736 return null; 1737 } 1738 byte[] fullPath = entry.getRelativePath(); 1739 ByteString fullPathString = ByteString 1740 .copyFrom(fullPath == null ? DFSUtil.EMPTY_BYTES : fullPath); 1741 1742 String modification = entry.getType().getLabel(); 1743 1744 SnapshotDiffReportEntryProto entryProto = SnapshotDiffReportEntryProto 1745 .newBuilder().setFullpath(fullPathString) 1746 .setModificationLabel(modification).build(); 1747 return entryProto; 1748 } 1749 1750 public static SnapshotDiffReport convert(SnapshotDiffReportProto reportProto) { 1751 if (reportProto == null) { 1752 return null; 1753 } 1754 String snapshotDir = reportProto.getSnapshotRoot(); 1755 String fromSnapshot = reportProto.getFromSnapshot(); 1756 String toSnapshot = reportProto.getToSnapshot(); 1757 List<SnapshotDiffReportEntryProto> list = reportProto 1758 .getDiffReportEntriesList(); 1759 List<DiffReportEntry> entries = new ArrayList<DiffReportEntry>(); 1760 for (SnapshotDiffReportEntryProto entryProto : list) { 1761 DiffReportEntry entry = convert(entryProto); 1762 if (entry != null) 1763 entries.add(entry); 1764 } 1765 return new SnapshotDiffReport(snapshotDir, fromSnapshot, toSnapshot, 1766 entries); 1767 } 1768 1769 public static SnapshotDiffReportProto convert(SnapshotDiffReport report) { 1770 if (report == null) { 1771 return null; 1772 } 1773 List<DiffReportEntry> entries = report.getDiffList(); 1774 List<SnapshotDiffReportEntryProto> entryProtos = 1775 new ArrayList<SnapshotDiffReportEntryProto>(); 1776 for (DiffReportEntry entry : entries) { 1777 SnapshotDiffReportEntryProto entryProto = convert(entry); 1778 if (entryProto != null) 1779 entryProtos.add(entryProto); 1780 } 1781 1782 SnapshotDiffReportProto reportProto = SnapshotDiffReportProto.newBuilder() 1783 .setSnapshotRoot(report.getSnapshotRoot()) 1784 .setFromSnapshot(report.getFromSnapshot()) 1785 .setToSnapshot(report.getLaterSnapshotName()) 1786 .addAllDiffReportEntries(entryProtos).build(); 1787 return reportProto; 1788 } 1789 1790 public static DataChecksum.Type convert(HdfsProtos.ChecksumTypeProto type) { 1791 return DataChecksum.Type.valueOf(type.getNumber()); 1792 } 1793 1794 public static CacheDirectiveInfoProto convert 1795 (CacheDirectiveInfo info) { 1796 CacheDirectiveInfoProto.Builder builder = 1797 CacheDirectiveInfoProto.newBuilder(); 1798 if (info.getId() != null) { 1799 builder.setId(info.getId()); 1800 } 1801 if (info.getPath() != null) { 1802 builder.setPath(info.getPath().toUri().getPath()); 1803 } 1804 if (info.getReplication() != null) { 1805 builder.setReplication(info.getReplication()); 1806 } 1807 if (info.getPool() != null) { 1808 builder.setPool(info.getPool()); 1809 } 1810 if (info.getExpiration() != null) { 1811 builder.setExpiration(convert(info.getExpiration())); 1812 } 1813 return builder.build(); 1814 } 1815 1816 public static CacheDirectiveInfo convert 1817 (CacheDirectiveInfoProto proto) { 1818 CacheDirectiveInfo.Builder builder = 1819 new CacheDirectiveInfo.Builder(); 1820 if (proto.hasId()) { 1821 builder.setId(proto.getId()); 1822 } 1823 if (proto.hasPath()) { 1824 builder.setPath(new Path(proto.getPath())); 1825 } 1826 if (proto.hasReplication()) { 1827 builder.setReplication(Shorts.checkedCast( 1828 proto.getReplication())); 1829 } 1830 if (proto.hasPool()) { 1831 builder.setPool(proto.getPool()); 1832 } 1833 if (proto.hasExpiration()) { 1834 builder.setExpiration(convert(proto.getExpiration())); 1835 } 1836 return builder.build(); 1837 } 1838 1839 public static CacheDirectiveInfoExpirationProto convert( 1840 CacheDirectiveInfo.Expiration expiration) { 1841 return CacheDirectiveInfoExpirationProto.newBuilder() 1842 .setIsRelative(expiration.isRelative()) 1843 .setMillis(expiration.getMillis()) 1844 .build(); 1845 } 1846 1847 public static CacheDirectiveInfo.Expiration convert( 1848 CacheDirectiveInfoExpirationProto proto) { 1849 if (proto.getIsRelative()) { 1850 return CacheDirectiveInfo.Expiration.newRelative(proto.getMillis()); 1851 } 1852 return CacheDirectiveInfo.Expiration.newAbsolute(proto.getMillis()); 1853 } 1854 1855 public static CacheDirectiveStatsProto convert(CacheDirectiveStats stats) { 1856 CacheDirectiveStatsProto.Builder builder = 1857 CacheDirectiveStatsProto.newBuilder(); 1858 builder.setBytesNeeded(stats.getBytesNeeded()); 1859 builder.setBytesCached(stats.getBytesCached()); 1860 builder.setFilesNeeded(stats.getFilesNeeded()); 1861 builder.setFilesCached(stats.getFilesCached()); 1862 builder.setHasExpired(stats.hasExpired()); 1863 return builder.build(); 1864 } 1865 1866 public static CacheDirectiveStats convert(CacheDirectiveStatsProto proto) { 1867 CacheDirectiveStats.Builder builder = new CacheDirectiveStats.Builder(); 1868 builder.setBytesNeeded(proto.getBytesNeeded()); 1869 builder.setBytesCached(proto.getBytesCached()); 1870 builder.setFilesNeeded(proto.getFilesNeeded()); 1871 builder.setFilesCached(proto.getFilesCached()); 1872 builder.setHasExpired(proto.getHasExpired()); 1873 return builder.build(); 1874 } 1875 1876 public static CacheDirectiveEntryProto convert(CacheDirectiveEntry entry) { 1877 CacheDirectiveEntryProto.Builder builder = 1878 CacheDirectiveEntryProto.newBuilder(); 1879 builder.setInfo(PBHelper.convert(entry.getInfo())); 1880 builder.setStats(PBHelper.convert(entry.getStats())); 1881 return builder.build(); 1882 } 1883 1884 public static CacheDirectiveEntry convert(CacheDirectiveEntryProto proto) { 1885 CacheDirectiveInfo info = PBHelper.convert(proto.getInfo()); 1886 CacheDirectiveStats stats = PBHelper.convert(proto.getStats()); 1887 return new CacheDirectiveEntry(info, stats); 1888 } 1889 1890 public static CachePoolInfoProto convert(CachePoolInfo info) { 1891 CachePoolInfoProto.Builder builder = CachePoolInfoProto.newBuilder(); 1892 builder.setPoolName(info.getPoolName()); 1893 if (info.getOwnerName() != null) { 1894 builder.setOwnerName(info.getOwnerName()); 1895 } 1896 if (info.getGroupName() != null) { 1897 builder.setGroupName(info.getGroupName()); 1898 } 1899 if (info.getMode() != null) { 1900 builder.setMode(info.getMode().toShort()); 1901 } 1902 if (info.getLimit() != null) { 1903 builder.setLimit(info.getLimit()); 1904 } 1905 if (info.getMaxRelativeExpiryMs() != null) { 1906 builder.setMaxRelativeExpiry(info.getMaxRelativeExpiryMs()); 1907 } 1908 return builder.build(); 1909 } 1910 1911 public static CachePoolInfo convert (CachePoolInfoProto proto) { 1912 // Pool name is a required field, the rest are optional 1913 String poolName = checkNotNull(proto.getPoolName()); 1914 CachePoolInfo info = new CachePoolInfo(poolName); 1915 if (proto.hasOwnerName()) { 1916 info.setOwnerName(proto.getOwnerName()); 1917 } 1918 if (proto.hasGroupName()) { 1919 info.setGroupName(proto.getGroupName()); 1920 } 1921 if (proto.hasMode()) { 1922 info.setMode(new FsPermission((short)proto.getMode())); 1923 } 1924 if (proto.hasLimit()) { 1925 info.setLimit(proto.getLimit()); 1926 } 1927 if (proto.hasMaxRelativeExpiry()) { 1928 info.setMaxRelativeExpiryMs(proto.getMaxRelativeExpiry()); 1929 } 1930 return info; 1931 } 1932 1933 public static CachePoolStatsProto convert(CachePoolStats stats) { 1934 CachePoolStatsProto.Builder builder = CachePoolStatsProto.newBuilder(); 1935 builder.setBytesNeeded(stats.getBytesNeeded()); 1936 builder.setBytesCached(stats.getBytesCached()); 1937 builder.setBytesOverlimit(stats.getBytesOverlimit()); 1938 builder.setFilesNeeded(stats.getFilesNeeded()); 1939 builder.setFilesCached(stats.getFilesCached()); 1940 return builder.build(); 1941 } 1942 1943 public static CachePoolStats convert (CachePoolStatsProto proto) { 1944 CachePoolStats.Builder builder = new CachePoolStats.Builder(); 1945 builder.setBytesNeeded(proto.getBytesNeeded()); 1946 builder.setBytesCached(proto.getBytesCached()); 1947 builder.setBytesOverlimit(proto.getBytesOverlimit()); 1948 builder.setFilesNeeded(proto.getFilesNeeded()); 1949 builder.setFilesCached(proto.getFilesCached()); 1950 return builder.build(); 1951 } 1952 1953 public static CachePoolEntryProto convert(CachePoolEntry entry) { 1954 CachePoolEntryProto.Builder builder = CachePoolEntryProto.newBuilder(); 1955 builder.setInfo(PBHelper.convert(entry.getInfo())); 1956 builder.setStats(PBHelper.convert(entry.getStats())); 1957 return builder.build(); 1958 } 1959 1960 public static CachePoolEntry convert (CachePoolEntryProto proto) { 1961 CachePoolInfo info = PBHelper.convert(proto.getInfo()); 1962 CachePoolStats stats = PBHelper.convert(proto.getStats()); 1963 return new CachePoolEntry(info, stats); 1964 } 1965 1966 public static HdfsProtos.ChecksumTypeProto convert(DataChecksum.Type type) { 1967 return HdfsProtos.ChecksumTypeProto.valueOf(type.id); 1968 } 1969 1970 public static DatanodeLocalInfoProto convert(DatanodeLocalInfo info) { 1971 DatanodeLocalInfoProto.Builder builder = DatanodeLocalInfoProto.newBuilder(); 1972 builder.setSoftwareVersion(info.getSoftwareVersion()); 1973 builder.setConfigVersion(info.getConfigVersion()); 1974 builder.setUptime(info.getUptime()); 1975 return builder.build(); 1976 } 1977 1978 public static DatanodeLocalInfo convert(DatanodeLocalInfoProto proto) { 1979 return new DatanodeLocalInfo(proto.getSoftwareVersion(), 1980 proto.getConfigVersion(), proto.getUptime()); 1981 } 1982 1983 public static InputStream vintPrefixed(final InputStream input) 1984 throws IOException { 1985 final int firstByte = input.read(); 1986 if (firstByte == -1) { 1987 throw new EOFException("Premature EOF: no length prefix available"); 1988 } 1989 1990 int size = CodedInputStream.readRawVarint32(firstByte, input); 1991 assert size >= 0; 1992 return new ExactSizeInputStream(input, size); 1993 } 1994 1995 private static AclEntryScopeProto convert(AclEntryScope v) { 1996 return AclEntryScopeProto.valueOf(v.ordinal()); 1997 } 1998 1999 private static AclEntryScope convert(AclEntryScopeProto v) { 2000 return castEnum(v, ACL_ENTRY_SCOPE_VALUES); 2001 } 2002 2003 private static AclEntryTypeProto convert(AclEntryType e) { 2004 return AclEntryTypeProto.valueOf(e.ordinal()); 2005 } 2006 2007 private static AclEntryType convert(AclEntryTypeProto v) { 2008 return castEnum(v, ACL_ENTRY_TYPE_VALUES); 2009 } 2010 2011 private static FsActionProto convert(FsAction v) { 2012 return FsActionProto.valueOf(v != null ? v.ordinal() : 0); 2013 } 2014 2015 private static FsAction convert(FsActionProto v) { 2016 return castEnum(v, FSACTION_VALUES); 2017 } 2018 2019 public static List<AclEntryProto> convertAclEntryProto( 2020 List<AclEntry> aclSpec) { 2021 ArrayList<AclEntryProto> r = Lists.newArrayListWithCapacity(aclSpec.size()); 2022 for (AclEntry e : aclSpec) { 2023 AclEntryProto.Builder builder = AclEntryProto.newBuilder(); 2024 builder.setType(convert(e.getType())); 2025 builder.setScope(convert(e.getScope())); 2026 builder.setPermissions(convert(e.getPermission())); 2027 if (e.getName() != null) { 2028 builder.setName(e.getName()); 2029 } 2030 r.add(builder.build()); 2031 } 2032 return r; 2033 } 2034 2035 public static List<AclEntry> convertAclEntry(List<AclEntryProto> aclSpec) { 2036 ArrayList<AclEntry> r = Lists.newArrayListWithCapacity(aclSpec.size()); 2037 for (AclEntryProto e : aclSpec) { 2038 AclEntry.Builder builder = new AclEntry.Builder(); 2039 builder.setType(convert(e.getType())); 2040 builder.setScope(convert(e.getScope())); 2041 builder.setPermission(convert(e.getPermissions())); 2042 if (e.hasName()) { 2043 builder.setName(e.getName()); 2044 } 2045 r.add(builder.build()); 2046 } 2047 return r; 2048 } 2049 2050 public static AclStatus convert(GetAclStatusResponseProto e) { 2051 AclStatusProto r = e.getResult(); 2052 return new AclStatus.Builder().owner(r.getOwner()).group(r.getGroup()) 2053 .stickyBit(r.getSticky()) 2054 .addEntries(convertAclEntry(r.getEntriesList())).build(); 2055 } 2056 2057 public static GetAclStatusResponseProto convert(AclStatus e) { 2058 AclStatusProto r = AclStatusProto.newBuilder().setOwner(e.getOwner()) 2059 .setGroup(e.getGroup()).setSticky(e.isStickyBit()) 2060 .addAllEntries(convertAclEntryProto(e.getEntries())).build(); 2061 return GetAclStatusResponseProto.newBuilder().setResult(r).build(); 2062 } 2063 2064 public static ShortCircuitShmSlotProto convert(SlotId slotId) { 2065 return ShortCircuitShmSlotProto.newBuilder(). 2066 setShmId(convert(slotId.getShmId())). 2067 setSlotIdx(slotId.getSlotIdx()). 2068 build(); 2069 } 2070 2071 public static ShortCircuitShmIdProto convert(ShmId shmId) { 2072 return ShortCircuitShmIdProto.newBuilder(). 2073 setHi(shmId.getHi()). 2074 setLo(shmId.getLo()). 2075 build(); 2076 2077 } 2078 2079 public static SlotId convert(ShortCircuitShmSlotProto slotId) { 2080 return new SlotId(PBHelper.convert(slotId.getShmId()), 2081 slotId.getSlotIdx()); 2082 } 2083 2084 public static ShmId convert(ShortCircuitShmIdProto shmId) { 2085 return new ShmId(shmId.getHi(), shmId.getLo()); 2086 } 2087 } 2088