1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 package org.apache.hadoop.hdfs.protocolPB; 19 20 import java.io.Closeable; 21 import java.io.FileNotFoundException; 22 import java.io.IOException; 23 import java.util.Arrays; 24 import java.util.EnumSet; 25 import java.util.List; 26 27 import com.google.common.collect.Lists; 28 29 import org.apache.hadoop.classification.InterfaceAudience; 30 import org.apache.hadoop.classification.InterfaceStability; 31 import org.apache.hadoop.crypto.CryptoProtocolVersion; 32 import org.apache.hadoop.fs.BatchedRemoteIterator.BatchedEntries; 33 import org.apache.hadoop.fs.CacheFlag; 34 import org.apache.hadoop.fs.ContentSummary; 35 import org.apache.hadoop.fs.CreateFlag; 36 import org.apache.hadoop.fs.FileAlreadyExistsException; 37 import org.apache.hadoop.fs.FsServerDefaults; 38 import org.apache.hadoop.fs.Options.Rename; 39 import org.apache.hadoop.fs.ParentNotDirectoryException; 40 import org.apache.hadoop.fs.StorageType; 41 import org.apache.hadoop.fs.UnresolvedLinkException; 42 import org.apache.hadoop.fs.XAttr; 43 import org.apache.hadoop.fs.XAttrSetFlag; 44 import org.apache.hadoop.fs.permission.AclEntry; 45 import org.apache.hadoop.fs.permission.AclStatus; 46 import org.apache.hadoop.fs.permission.FsAction; 47 import org.apache.hadoop.fs.permission.FsPermission; 48 import org.apache.hadoop.hdfs.inotify.EventBatchList; 49 import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException; 50 import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy; 51 import org.apache.hadoop.hdfs.protocol.CacheDirectiveEntry; 52 import org.apache.hadoop.hdfs.protocol.CacheDirectiveInfo; 53 import org.apache.hadoop.hdfs.protocol.CachePoolEntry; 54 import org.apache.hadoop.hdfs.protocol.CachePoolInfo; 55 import org.apache.hadoop.hdfs.protocol.ClientProtocol; 56 import org.apache.hadoop.hdfs.protocol.CorruptFileBlocks; 57 import org.apache.hadoop.hdfs.protocol.DSQuotaExceededException; 58 import org.apache.hadoop.hdfs.protocol.DatanodeID; 59 import org.apache.hadoop.hdfs.protocol.DatanodeInfo; 60 import org.apache.hadoop.hdfs.protocol.DirectoryListing; 61 import org.apache.hadoop.hdfs.protocol.EncryptionZone; 62 import org.apache.hadoop.hdfs.protocol.ExtendedBlock; 63 import org.apache.hadoop.hdfs.protocol.HdfsConstants.DatanodeReportType; 64 import org.apache.hadoop.hdfs.protocol.HdfsConstants.RollingUpgradeAction; 65 import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction; 66 import org.apache.hadoop.hdfs.protocol.HdfsFileStatus; 67 import org.apache.hadoop.hdfs.protocol.LastBlockWithStatus; 68 import org.apache.hadoop.hdfs.protocol.LocatedBlock; 69 import org.apache.hadoop.hdfs.protocol.LocatedBlocks; 70 import org.apache.hadoop.hdfs.protocol.NSQuotaExceededException; 71 import org.apache.hadoop.hdfs.protocol.RollingUpgradeInfo; 72 import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport; 73 import org.apache.hadoop.hdfs.protocol.SnapshottableDirectoryStatus; 74 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.GetAclStatusRequestProto; 75 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.ModifyAclEntriesRequestProto; 76 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.RemoveAclEntriesRequestProto; 77 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.RemoveAclRequestProto; 78 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.RemoveDefaultAclRequestProto; 79 import org.apache.hadoop.hdfs.protocol.proto.AclProtos.SetAclRequestProto; 80 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.AbandonBlockRequestProto; 81 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.AddBlockRequestProto; 82 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.AddCacheDirectiveRequestProto; 83 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.AddCachePoolRequestProto; 84 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.AllowSnapshotRequestProto; 85 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.AppendRequestProto; 86 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.AppendResponseProto; 87 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CachePoolEntryProto; 88 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CheckAccessRequestProto; 89 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CompleteRequestProto; 90 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ConcatRequestProto; 91 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CreateRequestProto; 92 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CreateResponseProto; 93 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CreateSnapshotRequestProto; 94 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.CreateSymlinkRequestProto; 95 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.DeleteRequestProto; 96 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.DeleteSnapshotRequestProto; 97 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.DisallowSnapshotRequestProto; 98 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.FinalizeUpgradeRequestProto; 99 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.FsyncRequestProto; 100 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetAdditionalDatanodeRequestProto; 101 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetBlockLocationsRequestProto; 102 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetBlockLocationsResponseProto; 103 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetContentSummaryRequestProto; 104 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetCurrentEditLogTxidRequestProto; 105 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetDataEncryptionKeyRequestProto; 106 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetDataEncryptionKeyResponseProto; 107 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetDatanodeReportRequestProto; 108 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetDatanodeStorageReportRequestProto; 109 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetEditsFromTxidRequestProto; 110 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetFileInfoRequestProto; 111 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetFileInfoResponseProto; 112 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetFileLinkInfoRequestProto; 113 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetFileLinkInfoResponseProto; 114 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetFsStatusRequestProto; 115 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetLinkTargetRequestProto; 116 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetLinkTargetResponseProto; 117 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetListingRequestProto; 118 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetListingResponseProto; 119 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetPreferredBlockSizeRequestProto; 120 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetServerDefaultsRequestProto; 121 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetSnapshotDiffReportRequestProto; 122 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetSnapshotDiffReportResponseProto; 123 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetSnapshottableDirListingRequestProto; 124 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetSnapshottableDirListingResponseProto; 125 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetStoragePoliciesRequestProto; 126 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetStoragePoliciesResponseProto; 127 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.IsFileClosedRequestProto; 128 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCacheDirectivesRequestProto; 129 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCacheDirectivesResponseProto; 130 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCachePoolsRequestProto; 131 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCachePoolsResponseProto; 132 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCorruptFileBlocksRequestProto; 133 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.MetaSaveRequestProto; 134 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.MkdirsRequestProto; 135 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ModifyCacheDirectiveRequestProto; 136 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ModifyCachePoolRequestProto; 137 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RecoverLeaseRequestProto; 138 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RefreshNodesRequestProto; 139 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemoveCacheDirectiveRequestProto; 140 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemoveCachePoolRequestProto; 141 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.Rename2RequestProto; 142 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RenameRequestProto; 143 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RenameSnapshotRequestProto; 144 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RenewLeaseRequestProto; 145 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ReportBadBlocksRequestProto; 146 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RestoreFailedStorageRequestProto; 147 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RollEditsRequestProto; 148 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RollEditsResponseProto; 149 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RollingUpgradeRequestProto; 150 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RollingUpgradeResponseProto; 151 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SaveNamespaceRequestProto; 152 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SetBalancerBandwidthRequestProto; 153 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SetOwnerRequestProto; 154 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SetPermissionRequestProto; 155 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SetQuotaRequestProto; 156 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SetReplicationRequestProto; 157 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SetSafeModeRequestProto; 158 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SetTimesRequestProto; 159 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.TruncateRequestProto; 160 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.UpdateBlockForPipelineRequestProto; 161 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.UpdatePipelineRequestProto; 162 import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.SetStoragePolicyRequestProto; 163 import org.apache.hadoop.hdfs.protocol.proto.EncryptionZonesProtos; 164 import org.apache.hadoop.hdfs.protocol.proto.EncryptionZonesProtos.CreateEncryptionZoneRequestProto; 165 import org.apache.hadoop.hdfs.protocol.proto.EncryptionZonesProtos.GetEZForPathRequestProto; 166 import org.apache.hadoop.hdfs.protocol.proto.EncryptionZonesProtos.ListEncryptionZonesRequestProto; 167 import org.apache.hadoop.hdfs.protocol.proto.XAttrProtos.GetXAttrsRequestProto; 168 import org.apache.hadoop.hdfs.protocol.proto.XAttrProtos.ListXAttrsRequestProto; 169 import org.apache.hadoop.hdfs.protocol.proto.XAttrProtos.RemoveXAttrRequestProto; 170 import org.apache.hadoop.hdfs.protocol.proto.XAttrProtos.SetXAttrRequestProto; 171 import org.apache.hadoop.hdfs.security.token.block.DataEncryptionKey; 172 import org.apache.hadoop.hdfs.security.token.delegation.DelegationTokenIdentifier; 173 import org.apache.hadoop.hdfs.server.namenode.NotReplicatedYetException; 174 import org.apache.hadoop.hdfs.server.namenode.SafeModeException; 175 import org.apache.hadoop.hdfs.server.protocol.DatanodeStorageReport; 176 import org.apache.hadoop.io.EnumSetWritable; 177 import org.apache.hadoop.io.Text; 178 import org.apache.hadoop.ipc.ProtobufHelper; 179 import org.apache.hadoop.ipc.ProtocolMetaInterface; 180 import org.apache.hadoop.ipc.ProtocolTranslator; 181 import org.apache.hadoop.ipc.RPC; 182 import org.apache.hadoop.ipc.RpcClientUtil; 183 import org.apache.hadoop.security.AccessControlException; 184 import org.apache.hadoop.security.proto.SecurityProtos.CancelDelegationTokenRequestProto; 185 import org.apache.hadoop.security.proto.SecurityProtos.GetDelegationTokenRequestProto; 186 import org.apache.hadoop.security.proto.SecurityProtos.GetDelegationTokenResponseProto; 187 import org.apache.hadoop.security.proto.SecurityProtos.RenewDelegationTokenRequestProto; 188 import org.apache.hadoop.security.token.Token; 189 190 import com.google.protobuf.ByteString; 191 import com.google.protobuf.ServiceException; 192 193 import static org.apache.hadoop.fs.BatchedRemoteIterator.BatchedListEntries; 194 import static org.apache.hadoop.hdfs.protocol.proto.EncryptionZonesProtos 195 .EncryptionZoneProto; 196 197 /** 198 * This class forwards NN's ClientProtocol calls as RPC calls to the NN server 199 * while translating from the parameter types used in ClientProtocol to the 200 * new PB types. 201 */ 202 @InterfaceAudience.Private 203 @InterfaceStability.Stable 204 public class ClientNamenodeProtocolTranslatorPB implements 205 ProtocolMetaInterface, ClientProtocol, Closeable, ProtocolTranslator { 206 final private ClientNamenodeProtocolPB rpcProxy; 207 208 static final GetServerDefaultsRequestProto VOID_GET_SERVER_DEFAULT_REQUEST = 209 GetServerDefaultsRequestProto.newBuilder().build(); 210 211 private final static GetFsStatusRequestProto VOID_GET_FSSTATUS_REQUEST = 212 GetFsStatusRequestProto.newBuilder().build(); 213 214 private final static SaveNamespaceRequestProto VOID_SAVE_NAMESPACE_REQUEST = 215 SaveNamespaceRequestProto.newBuilder().build(); 216 217 private final static RollEditsRequestProto VOID_ROLLEDITS_REQUEST = 218 RollEditsRequestProto.getDefaultInstance(); 219 220 private final static RefreshNodesRequestProto VOID_REFRESH_NODES_REQUEST = 221 RefreshNodesRequestProto.newBuilder().build(); 222 223 private final static FinalizeUpgradeRequestProto 224 VOID_FINALIZE_UPGRADE_REQUEST = 225 FinalizeUpgradeRequestProto.newBuilder().build(); 226 227 private final static GetDataEncryptionKeyRequestProto 228 VOID_GET_DATA_ENCRYPTIONKEY_REQUEST = 229 GetDataEncryptionKeyRequestProto.newBuilder().build(); 230 231 private final static GetStoragePoliciesRequestProto 232 VOID_GET_STORAGE_POLICIES_REQUEST = 233 GetStoragePoliciesRequestProto.newBuilder().build(); 234 ClientNamenodeProtocolTranslatorPB(ClientNamenodeProtocolPB proxy)235 public ClientNamenodeProtocolTranslatorPB(ClientNamenodeProtocolPB proxy) { 236 rpcProxy = proxy; 237 } 238 239 @Override close()240 public void close() { 241 RPC.stopProxy(rpcProxy); 242 } 243 244 @Override getBlockLocations(String src, long offset, long length)245 public LocatedBlocks getBlockLocations(String src, long offset, long length) 246 throws AccessControlException, FileNotFoundException, 247 UnresolvedLinkException, IOException { 248 GetBlockLocationsRequestProto req = GetBlockLocationsRequestProto 249 .newBuilder() 250 .setSrc(src) 251 .setOffset(offset) 252 .setLength(length) 253 .build(); 254 try { 255 GetBlockLocationsResponseProto resp = rpcProxy.getBlockLocations(null, 256 req); 257 return resp.hasLocations() ? 258 PBHelper.convert(resp.getLocations()) : null; 259 } catch (ServiceException e) { 260 throw ProtobufHelper.getRemoteException(e); 261 } 262 } 263 264 @Override getServerDefaults()265 public FsServerDefaults getServerDefaults() throws IOException { 266 GetServerDefaultsRequestProto req = VOID_GET_SERVER_DEFAULT_REQUEST; 267 try { 268 return PBHelper 269 .convert(rpcProxy.getServerDefaults(null, req).getServerDefaults()); 270 } catch (ServiceException e) { 271 throw ProtobufHelper.getRemoteException(e); 272 } 273 } 274 275 @Override create(String src, FsPermission masked, String clientName, EnumSetWritable<CreateFlag> flag, boolean createParent, short replication, long blockSize, CryptoProtocolVersion[] supportedVersions)276 public HdfsFileStatus create(String src, FsPermission masked, 277 String clientName, EnumSetWritable<CreateFlag> flag, 278 boolean createParent, short replication, long blockSize, 279 CryptoProtocolVersion[] supportedVersions) 280 throws AccessControlException, AlreadyBeingCreatedException, 281 DSQuotaExceededException, FileAlreadyExistsException, 282 FileNotFoundException, NSQuotaExceededException, 283 ParentNotDirectoryException, SafeModeException, UnresolvedLinkException, 284 IOException { 285 CreateRequestProto.Builder builder = CreateRequestProto.newBuilder() 286 .setSrc(src) 287 .setMasked(PBHelper.convert(masked)) 288 .setClientName(clientName) 289 .setCreateFlag(PBHelper.convertCreateFlag(flag)) 290 .setCreateParent(createParent) 291 .setReplication(replication) 292 .setBlockSize(blockSize); 293 builder.addAllCryptoProtocolVersion(PBHelper.convert(supportedVersions)); 294 CreateRequestProto req = builder.build(); 295 try { 296 CreateResponseProto res = rpcProxy.create(null, req); 297 return res.hasFs() ? PBHelper.convert(res.getFs()) : null; 298 } catch (ServiceException e) { 299 throw ProtobufHelper.getRemoteException(e); 300 } 301 302 } 303 304 @Override truncate(String src, long newLength, String clientName)305 public boolean truncate(String src, long newLength, String clientName) 306 throws IOException, UnresolvedLinkException { 307 TruncateRequestProto req = TruncateRequestProto.newBuilder() 308 .setSrc(src) 309 .setNewLength(newLength) 310 .setClientName(clientName) 311 .build(); 312 try { 313 return rpcProxy.truncate(null, req).getResult(); 314 } catch (ServiceException e) { 315 throw ProtobufHelper.getRemoteException(e); 316 } 317 } 318 319 @Override append(String src, String clientName, EnumSetWritable<CreateFlag> flag)320 public LastBlockWithStatus append(String src, String clientName, 321 EnumSetWritable<CreateFlag> flag) throws AccessControlException, 322 DSQuotaExceededException, FileNotFoundException, SafeModeException, 323 UnresolvedLinkException, IOException { 324 AppendRequestProto req = AppendRequestProto.newBuilder().setSrc(src) 325 .setClientName(clientName).setFlag(PBHelper.convertCreateFlag(flag)) 326 .build(); 327 try { 328 AppendResponseProto res = rpcProxy.append(null, req); 329 LocatedBlock lastBlock = res.hasBlock() ? PBHelper 330 .convert(res.getBlock()) : null; 331 HdfsFileStatus stat = (res.hasStat()) ? PBHelper.convert(res.getStat()) 332 : null; 333 return new LastBlockWithStatus(lastBlock, stat); 334 } catch (ServiceException e) { 335 throw ProtobufHelper.getRemoteException(e); 336 } 337 } 338 339 @Override setReplication(String src, short replication)340 public boolean setReplication(String src, short replication) 341 throws AccessControlException, DSQuotaExceededException, 342 FileNotFoundException, SafeModeException, UnresolvedLinkException, 343 IOException { 344 SetReplicationRequestProto req = SetReplicationRequestProto.newBuilder() 345 .setSrc(src) 346 .setReplication(replication) 347 .build(); 348 try { 349 return rpcProxy.setReplication(null, req).getResult(); 350 } catch (ServiceException e) { 351 throw ProtobufHelper.getRemoteException(e); 352 } 353 } 354 355 @Override setPermission(String src, FsPermission permission)356 public void setPermission(String src, FsPermission permission) 357 throws AccessControlException, FileNotFoundException, SafeModeException, 358 UnresolvedLinkException, IOException { 359 SetPermissionRequestProto req = SetPermissionRequestProto.newBuilder() 360 .setSrc(src) 361 .setPermission(PBHelper.convert(permission)) 362 .build(); 363 try { 364 rpcProxy.setPermission(null, req); 365 } catch (ServiceException e) { 366 throw ProtobufHelper.getRemoteException(e); 367 } 368 } 369 370 @Override setOwner(String src, String username, String groupname)371 public void setOwner(String src, String username, String groupname) 372 throws AccessControlException, FileNotFoundException, SafeModeException, 373 UnresolvedLinkException, IOException { 374 SetOwnerRequestProto.Builder req = SetOwnerRequestProto.newBuilder() 375 .setSrc(src); 376 if (username != null) 377 req.setUsername(username); 378 if (groupname != null) 379 req.setGroupname(groupname); 380 try { 381 rpcProxy.setOwner(null, req.build()); 382 } catch (ServiceException e) { 383 throw ProtobufHelper.getRemoteException(e); 384 } 385 } 386 387 @Override abandonBlock(ExtendedBlock b, long fileId, String src, String holder)388 public void abandonBlock(ExtendedBlock b, long fileId, String src, 389 String holder) throws AccessControlException, FileNotFoundException, 390 UnresolvedLinkException, IOException { 391 AbandonBlockRequestProto req = AbandonBlockRequestProto.newBuilder() 392 .setB(PBHelper.convert(b)).setSrc(src).setHolder(holder) 393 .setFileId(fileId).build(); 394 try { 395 rpcProxy.abandonBlock(null, req); 396 } catch (ServiceException e) { 397 throw ProtobufHelper.getRemoteException(e); 398 } 399 } 400 401 @Override addBlock(String src, String clientName, ExtendedBlock previous, DatanodeInfo[] excludeNodes, long fileId, String[] favoredNodes)402 public LocatedBlock addBlock(String src, String clientName, 403 ExtendedBlock previous, DatanodeInfo[] excludeNodes, long fileId, 404 String[] favoredNodes) 405 throws AccessControlException, FileNotFoundException, 406 NotReplicatedYetException, SafeModeException, UnresolvedLinkException, 407 IOException { 408 AddBlockRequestProto.Builder req = AddBlockRequestProto.newBuilder() 409 .setSrc(src).setClientName(clientName).setFileId(fileId); 410 if (previous != null) 411 req.setPrevious(PBHelper.convert(previous)); 412 if (excludeNodes != null) 413 req.addAllExcludeNodes(PBHelper.convert(excludeNodes)); 414 if (favoredNodes != null) { 415 req.addAllFavoredNodes(Arrays.asList(favoredNodes)); 416 } 417 try { 418 return PBHelper.convert(rpcProxy.addBlock(null, req.build()).getBlock()); 419 } catch (ServiceException e) { 420 throw ProtobufHelper.getRemoteException(e); 421 } 422 } 423 424 @Override getAdditionalDatanode(String src, long fileId, ExtendedBlock blk, DatanodeInfo[] existings, String[] existingStorageIDs, DatanodeInfo[] excludes, int numAdditionalNodes, String clientName)425 public LocatedBlock getAdditionalDatanode(String src, long fileId, 426 ExtendedBlock blk, DatanodeInfo[] existings, String[] existingStorageIDs, 427 DatanodeInfo[] excludes, 428 int numAdditionalNodes, String clientName) throws AccessControlException, 429 FileNotFoundException, SafeModeException, UnresolvedLinkException, 430 IOException { 431 GetAdditionalDatanodeRequestProto req = GetAdditionalDatanodeRequestProto 432 .newBuilder() 433 .setSrc(src) 434 .setFileId(fileId) 435 .setBlk(PBHelper.convert(blk)) 436 .addAllExistings(PBHelper.convert(existings)) 437 .addAllExistingStorageUuids(Arrays.asList(existingStorageIDs)) 438 .addAllExcludes(PBHelper.convert(excludes)) 439 .setNumAdditionalNodes(numAdditionalNodes) 440 .setClientName(clientName) 441 .build(); 442 try { 443 return PBHelper.convert(rpcProxy.getAdditionalDatanode(null, req) 444 .getBlock()); 445 } catch (ServiceException e) { 446 throw ProtobufHelper.getRemoteException(e); 447 } 448 } 449 450 @Override complete(String src, String clientName, ExtendedBlock last, long fileId)451 public boolean complete(String src, String clientName, 452 ExtendedBlock last, long fileId) 453 throws AccessControlException, FileNotFoundException, SafeModeException, 454 UnresolvedLinkException, IOException { 455 CompleteRequestProto.Builder req = CompleteRequestProto.newBuilder() 456 .setSrc(src) 457 .setClientName(clientName) 458 .setFileId(fileId); 459 if (last != null) 460 req.setLast(PBHelper.convert(last)); 461 try { 462 return rpcProxy.complete(null, req.build()).getResult(); 463 } catch (ServiceException e) { 464 throw ProtobufHelper.getRemoteException(e); 465 } 466 } 467 468 @Override reportBadBlocks(LocatedBlock[] blocks)469 public void reportBadBlocks(LocatedBlock[] blocks) throws IOException { 470 ReportBadBlocksRequestProto req = ReportBadBlocksRequestProto.newBuilder() 471 .addAllBlocks(Arrays.asList(PBHelper.convertLocatedBlock(blocks))) 472 .build(); 473 try { 474 rpcProxy.reportBadBlocks(null, req); 475 } catch (ServiceException e) { 476 throw ProtobufHelper.getRemoteException(e); 477 } 478 } 479 480 @Override rename(String src, String dst)481 public boolean rename(String src, String dst) throws UnresolvedLinkException, 482 IOException { 483 RenameRequestProto req = RenameRequestProto.newBuilder() 484 .setSrc(src) 485 .setDst(dst).build(); 486 try { 487 return rpcProxy.rename(null, req).getResult(); 488 } catch (ServiceException e) { 489 throw ProtobufHelper.getRemoteException(e); 490 } 491 } 492 493 494 @Override rename2(String src, String dst, Rename... options)495 public void rename2(String src, String dst, Rename... options) 496 throws AccessControlException, DSQuotaExceededException, 497 FileAlreadyExistsException, FileNotFoundException, 498 NSQuotaExceededException, ParentNotDirectoryException, SafeModeException, 499 UnresolvedLinkException, IOException { 500 boolean overwrite = false; 501 if (options != null) { 502 for (Rename option : options) { 503 if (option == Rename.OVERWRITE) { 504 overwrite = true; 505 } 506 } 507 } 508 Rename2RequestProto req = Rename2RequestProto.newBuilder(). 509 setSrc(src). 510 setDst(dst).setOverwriteDest(overwrite). 511 build(); 512 try { 513 rpcProxy.rename2(null, req); 514 } catch (ServiceException e) { 515 throw ProtobufHelper.getRemoteException(e); 516 } 517 518 } 519 520 @Override concat(String trg, String[] srcs)521 public void concat(String trg, String[] srcs) throws IOException, 522 UnresolvedLinkException { 523 ConcatRequestProto req = ConcatRequestProto.newBuilder(). 524 setTrg(trg). 525 addAllSrcs(Arrays.asList(srcs)).build(); 526 try { 527 rpcProxy.concat(null, req); 528 } catch (ServiceException e) { 529 throw ProtobufHelper.getRemoteException(e); 530 } 531 } 532 533 534 @Override delete(String src, boolean recursive)535 public boolean delete(String src, boolean recursive) 536 throws AccessControlException, FileNotFoundException, SafeModeException, 537 UnresolvedLinkException, IOException { 538 DeleteRequestProto req = DeleteRequestProto.newBuilder().setSrc(src).setRecursive(recursive).build(); 539 try { 540 return rpcProxy.delete(null, req).getResult(); 541 } catch (ServiceException e) { 542 throw ProtobufHelper.getRemoteException(e); 543 } 544 } 545 546 @Override mkdirs(String src, FsPermission masked, boolean createParent)547 public boolean mkdirs(String src, FsPermission masked, boolean createParent) 548 throws AccessControlException, FileAlreadyExistsException, 549 FileNotFoundException, NSQuotaExceededException, 550 ParentNotDirectoryException, SafeModeException, UnresolvedLinkException, 551 IOException { 552 MkdirsRequestProto req = MkdirsRequestProto.newBuilder() 553 .setSrc(src) 554 .setMasked(PBHelper.convert(masked)) 555 .setCreateParent(createParent).build(); 556 557 try { 558 return rpcProxy.mkdirs(null, req).getResult(); 559 } catch (ServiceException e) { 560 throw ProtobufHelper.getRemoteException(e); 561 } 562 } 563 564 @Override getListing(String src, byte[] startAfter, boolean needLocation)565 public DirectoryListing getListing(String src, byte[] startAfter, 566 boolean needLocation) throws AccessControlException, 567 FileNotFoundException, UnresolvedLinkException, IOException { 568 GetListingRequestProto req = GetListingRequestProto.newBuilder() 569 .setSrc(src) 570 .setStartAfter(ByteString.copyFrom(startAfter)) 571 .setNeedLocation(needLocation).build(); 572 try { 573 GetListingResponseProto result = rpcProxy.getListing(null, req); 574 575 if (result.hasDirList()) { 576 return PBHelper.convert(result.getDirList()); 577 } 578 return null; 579 } catch (ServiceException e) { 580 throw ProtobufHelper.getRemoteException(e); 581 } 582 } 583 584 @Override renewLease(String clientName)585 public void renewLease(String clientName) throws AccessControlException, 586 IOException { 587 RenewLeaseRequestProto req = RenewLeaseRequestProto.newBuilder() 588 .setClientName(clientName).build(); 589 try { 590 rpcProxy.renewLease(null, req); 591 } catch (ServiceException e) { 592 throw ProtobufHelper.getRemoteException(e); 593 } 594 } 595 596 @Override recoverLease(String src, String clientName)597 public boolean recoverLease(String src, String clientName) 598 throws IOException { 599 RecoverLeaseRequestProto req = RecoverLeaseRequestProto.newBuilder() 600 .setSrc(src) 601 .setClientName(clientName).build(); 602 try { 603 return rpcProxy.recoverLease(null, req).getResult(); 604 } catch (ServiceException e) { 605 throw ProtobufHelper.getRemoteException(e); 606 } 607 } 608 609 @Override getStats()610 public long[] getStats() throws IOException { 611 try { 612 return PBHelper.convert(rpcProxy.getFsStats(null, 613 VOID_GET_FSSTATUS_REQUEST)); 614 } catch (ServiceException e) { 615 throw ProtobufHelper.getRemoteException(e); 616 } 617 } 618 619 @Override getDatanodeReport(DatanodeReportType type)620 public DatanodeInfo[] getDatanodeReport(DatanodeReportType type) 621 throws IOException { 622 GetDatanodeReportRequestProto req = GetDatanodeReportRequestProto 623 .newBuilder() 624 .setType(PBHelper.convert(type)).build(); 625 try { 626 return PBHelper.convert( 627 rpcProxy.getDatanodeReport(null, req).getDiList()); 628 } catch (ServiceException e) { 629 throw ProtobufHelper.getRemoteException(e); 630 } 631 } 632 633 @Override getDatanodeStorageReport(DatanodeReportType type)634 public DatanodeStorageReport[] getDatanodeStorageReport(DatanodeReportType type) 635 throws IOException { 636 final GetDatanodeStorageReportRequestProto req 637 = GetDatanodeStorageReportRequestProto.newBuilder() 638 .setType(PBHelper.convert(type)).build(); 639 try { 640 return PBHelper.convertDatanodeStorageReports( 641 rpcProxy.getDatanodeStorageReport(null, req).getDatanodeStorageReportsList()); 642 } catch (ServiceException e) { 643 throw ProtobufHelper.getRemoteException(e); 644 } 645 } 646 647 @Override getPreferredBlockSize(String filename)648 public long getPreferredBlockSize(String filename) throws IOException, 649 UnresolvedLinkException { 650 GetPreferredBlockSizeRequestProto req = GetPreferredBlockSizeRequestProto 651 .newBuilder() 652 .setFilename(filename) 653 .build(); 654 try { 655 return rpcProxy.getPreferredBlockSize(null, req).getBsize(); 656 } catch (ServiceException e) { 657 throw ProtobufHelper.getRemoteException(e); 658 } 659 } 660 661 @Override setSafeMode(SafeModeAction action, boolean isChecked)662 public boolean setSafeMode(SafeModeAction action, boolean isChecked) throws IOException { 663 SetSafeModeRequestProto req = SetSafeModeRequestProto.newBuilder() 664 .setAction(PBHelper.convert(action)).setChecked(isChecked).build(); 665 try { 666 return rpcProxy.setSafeMode(null, req).getResult(); 667 } catch (ServiceException e) { 668 throw ProtobufHelper.getRemoteException(e); 669 } 670 } 671 672 @Override saveNamespace()673 public void saveNamespace() throws AccessControlException, IOException { 674 try { 675 rpcProxy.saveNamespace(null, VOID_SAVE_NAMESPACE_REQUEST); 676 } catch (ServiceException e) { 677 throw ProtobufHelper.getRemoteException(e); 678 } 679 } 680 681 @Override rollEdits()682 public long rollEdits() throws AccessControlException, IOException { 683 try { 684 RollEditsResponseProto resp = rpcProxy.rollEdits(null, 685 VOID_ROLLEDITS_REQUEST); 686 return resp.getNewSegmentTxId(); 687 } catch (ServiceException se) { 688 throw ProtobufHelper.getRemoteException(se); 689 } 690 } 691 692 @Override restoreFailedStorage(String arg)693 public boolean restoreFailedStorage(String arg) 694 throws AccessControlException, IOException{ 695 RestoreFailedStorageRequestProto req = RestoreFailedStorageRequestProto 696 .newBuilder() 697 .setArg(arg).build(); 698 try { 699 return rpcProxy.restoreFailedStorage(null, req).getResult(); 700 } catch (ServiceException e) { 701 throw ProtobufHelper.getRemoteException(e); 702 } 703 } 704 705 @Override refreshNodes()706 public void refreshNodes() throws IOException { 707 try { 708 rpcProxy.refreshNodes(null, VOID_REFRESH_NODES_REQUEST); 709 } catch (ServiceException e) { 710 throw ProtobufHelper.getRemoteException(e); 711 } 712 } 713 714 @Override finalizeUpgrade()715 public void finalizeUpgrade() throws IOException { 716 try { 717 rpcProxy.finalizeUpgrade(null, VOID_FINALIZE_UPGRADE_REQUEST); 718 } catch (ServiceException e) { 719 throw ProtobufHelper.getRemoteException(e); 720 } 721 } 722 723 @Override rollingUpgrade(RollingUpgradeAction action)724 public RollingUpgradeInfo rollingUpgrade(RollingUpgradeAction action) throws IOException { 725 final RollingUpgradeRequestProto r = RollingUpgradeRequestProto.newBuilder() 726 .setAction(PBHelper.convert(action)).build(); 727 try { 728 final RollingUpgradeResponseProto proto = rpcProxy.rollingUpgrade(null, r); 729 if (proto.hasRollingUpgradeInfo()) { 730 return PBHelper.convert(proto.getRollingUpgradeInfo()); 731 } 732 return null; 733 } catch (ServiceException e) { 734 throw ProtobufHelper.getRemoteException(e); 735 } 736 } 737 738 @Override listCorruptFileBlocks(String path, String cookie)739 public CorruptFileBlocks listCorruptFileBlocks(String path, String cookie) 740 throws IOException { 741 ListCorruptFileBlocksRequestProto.Builder req = 742 ListCorruptFileBlocksRequestProto.newBuilder().setPath(path); 743 if (cookie != null) 744 req.setCookie(cookie); 745 try { 746 return PBHelper.convert( 747 rpcProxy.listCorruptFileBlocks(null, req.build()).getCorrupt()); 748 } catch (ServiceException e) { 749 throw ProtobufHelper.getRemoteException(e); 750 } 751 } 752 753 @Override metaSave(String filename)754 public void metaSave(String filename) throws IOException { 755 MetaSaveRequestProto req = MetaSaveRequestProto.newBuilder() 756 .setFilename(filename).build(); 757 try { 758 rpcProxy.metaSave(null, req); 759 } catch (ServiceException e) { 760 throw ProtobufHelper.getRemoteException(e); 761 } 762 763 } 764 765 @Override getFileInfo(String src)766 public HdfsFileStatus getFileInfo(String src) throws AccessControlException, 767 FileNotFoundException, UnresolvedLinkException, IOException { 768 GetFileInfoRequestProto req = GetFileInfoRequestProto.newBuilder() 769 .setSrc(src).build(); 770 try { 771 GetFileInfoResponseProto res = rpcProxy.getFileInfo(null, req); 772 return res.hasFs() ? PBHelper.convert(res.getFs()) : null; 773 } catch (ServiceException e) { 774 throw ProtobufHelper.getRemoteException(e); 775 } 776 } 777 778 @Override getFileLinkInfo(String src)779 public HdfsFileStatus getFileLinkInfo(String src) 780 throws AccessControlException, UnresolvedLinkException, IOException { 781 GetFileLinkInfoRequestProto req = GetFileLinkInfoRequestProto.newBuilder() 782 .setSrc(src).build(); 783 try { 784 GetFileLinkInfoResponseProto result = rpcProxy.getFileLinkInfo(null, req); 785 return result.hasFs() ? 786 PBHelper.convert(rpcProxy.getFileLinkInfo(null, req).getFs()) : null; 787 } catch (ServiceException e) { 788 throw ProtobufHelper.getRemoteException(e); 789 } 790 } 791 792 @Override getContentSummary(String path)793 public ContentSummary getContentSummary(String path) 794 throws AccessControlException, FileNotFoundException, 795 UnresolvedLinkException, IOException { 796 GetContentSummaryRequestProto req = GetContentSummaryRequestProto 797 .newBuilder() 798 .setPath(path) 799 .build(); 800 try { 801 return PBHelper.convert(rpcProxy.getContentSummary(null, req) 802 .getSummary()); 803 } catch (ServiceException e) { 804 throw ProtobufHelper.getRemoteException(e); 805 } 806 } 807 808 @Override setQuota(String path, long namespaceQuota, long storagespaceQuota, StorageType type)809 public void setQuota(String path, long namespaceQuota, long storagespaceQuota, 810 StorageType type) 811 throws AccessControlException, FileNotFoundException, 812 UnresolvedLinkException, IOException { 813 final SetQuotaRequestProto.Builder builder 814 = SetQuotaRequestProto.newBuilder() 815 .setPath(path) 816 .setNamespaceQuota(namespaceQuota) 817 .setStoragespaceQuota(storagespaceQuota); 818 if (type != null) { 819 builder.setStorageType(PBHelper.convertStorageType(type)); 820 } 821 final SetQuotaRequestProto req = builder.build(); 822 try { 823 rpcProxy.setQuota(null, req); 824 } catch (ServiceException e) { 825 throw ProtobufHelper.getRemoteException(e); 826 } 827 } 828 829 @Override fsync(String src, long fileId, String client, long lastBlockLength)830 public void fsync(String src, long fileId, String client, 831 long lastBlockLength) 832 throws AccessControlException, FileNotFoundException, 833 UnresolvedLinkException, IOException { 834 FsyncRequestProto req = FsyncRequestProto.newBuilder().setSrc(src) 835 .setClient(client).setLastBlockLength(lastBlockLength) 836 .setFileId(fileId).build(); 837 try { 838 rpcProxy.fsync(null, req); 839 } catch (ServiceException e) { 840 throw ProtobufHelper.getRemoteException(e); 841 } 842 } 843 844 @Override setTimes(String src, long mtime, long atime)845 public void setTimes(String src, long mtime, long atime) 846 throws AccessControlException, FileNotFoundException, 847 UnresolvedLinkException, IOException { 848 SetTimesRequestProto req = SetTimesRequestProto.newBuilder() 849 .setSrc(src) 850 .setMtime(mtime) 851 .setAtime(atime) 852 .build(); 853 try { 854 rpcProxy.setTimes(null, req); 855 } catch (ServiceException e) { 856 throw ProtobufHelper.getRemoteException(e); 857 } 858 } 859 860 @Override createSymlink(String target, String link, FsPermission dirPerm, boolean createParent)861 public void createSymlink(String target, String link, FsPermission dirPerm, 862 boolean createParent) throws AccessControlException, 863 FileAlreadyExistsException, FileNotFoundException, 864 ParentNotDirectoryException, SafeModeException, UnresolvedLinkException, 865 IOException { 866 CreateSymlinkRequestProto req = CreateSymlinkRequestProto.newBuilder() 867 .setTarget(target) 868 .setLink(link) 869 .setDirPerm(PBHelper.convert(dirPerm)) 870 .setCreateParent(createParent) 871 .build(); 872 try { 873 rpcProxy.createSymlink(null, req); 874 } catch (ServiceException e) { 875 throw ProtobufHelper.getRemoteException(e); 876 } 877 } 878 879 @Override getLinkTarget(String path)880 public String getLinkTarget(String path) throws AccessControlException, 881 FileNotFoundException, IOException { 882 GetLinkTargetRequestProto req = GetLinkTargetRequestProto.newBuilder() 883 .setPath(path).build(); 884 try { 885 GetLinkTargetResponseProto rsp = rpcProxy.getLinkTarget(null, req); 886 return rsp.hasTargetPath() ? rsp.getTargetPath() : null; 887 } catch (ServiceException e) { 888 throw ProtobufHelper.getRemoteException(e); 889 } 890 } 891 892 @Override updateBlockForPipeline(ExtendedBlock block, String clientName)893 public LocatedBlock updateBlockForPipeline(ExtendedBlock block, 894 String clientName) throws IOException { 895 UpdateBlockForPipelineRequestProto req = UpdateBlockForPipelineRequestProto 896 .newBuilder() 897 .setBlock(PBHelper.convert(block)) 898 .setClientName(clientName) 899 .build(); 900 try { 901 return PBHelper.convert( 902 rpcProxy.updateBlockForPipeline(null, req).getBlock()); 903 } catch (ServiceException e) { 904 throw ProtobufHelper.getRemoteException(e); 905 } 906 } 907 908 @Override updatePipeline(String clientName, ExtendedBlock oldBlock, ExtendedBlock newBlock, DatanodeID[] newNodes, String[] storageIDs)909 public void updatePipeline(String clientName, ExtendedBlock oldBlock, 910 ExtendedBlock newBlock, DatanodeID[] newNodes, String[] storageIDs) throws IOException { 911 UpdatePipelineRequestProto req = UpdatePipelineRequestProto.newBuilder() 912 .setClientName(clientName) 913 .setOldBlock(PBHelper.convert(oldBlock)) 914 .setNewBlock(PBHelper.convert(newBlock)) 915 .addAllNewNodes(Arrays.asList(PBHelper.convert(newNodes))) 916 .addAllStorageIDs(storageIDs == null ? null : Arrays.asList(storageIDs)) 917 .build(); 918 try { 919 rpcProxy.updatePipeline(null, req); 920 } catch (ServiceException e) { 921 throw ProtobufHelper.getRemoteException(e); 922 } 923 } 924 925 @Override getDelegationToken(Text renewer)926 public Token<DelegationTokenIdentifier> getDelegationToken(Text renewer) 927 throws IOException { 928 GetDelegationTokenRequestProto req = GetDelegationTokenRequestProto 929 .newBuilder() 930 .setRenewer(renewer.toString()) 931 .build(); 932 try { 933 GetDelegationTokenResponseProto resp = rpcProxy.getDelegationToken(null, req); 934 return resp.hasToken() ? PBHelper.convertDelegationToken(resp.getToken()) 935 : null; 936 } catch (ServiceException e) { 937 throw ProtobufHelper.getRemoteException(e); 938 } 939 } 940 941 @Override renewDelegationToken(Token<DelegationTokenIdentifier> token)942 public long renewDelegationToken(Token<DelegationTokenIdentifier> token) 943 throws IOException { 944 RenewDelegationTokenRequestProto req = RenewDelegationTokenRequestProto.newBuilder(). 945 setToken(PBHelper.convert(token)). 946 build(); 947 try { 948 return rpcProxy.renewDelegationToken(null, req).getNewExpiryTime(); 949 } catch (ServiceException e) { 950 throw ProtobufHelper.getRemoteException(e); 951 } 952 } 953 954 @Override cancelDelegationToken(Token<DelegationTokenIdentifier> token)955 public void cancelDelegationToken(Token<DelegationTokenIdentifier> token) 956 throws IOException { 957 CancelDelegationTokenRequestProto req = CancelDelegationTokenRequestProto 958 .newBuilder() 959 .setToken(PBHelper.convert(token)) 960 .build(); 961 try { 962 rpcProxy.cancelDelegationToken(null, req); 963 } catch (ServiceException e) { 964 throw ProtobufHelper.getRemoteException(e); 965 } 966 } 967 968 @Override setBalancerBandwidth(long bandwidth)969 public void setBalancerBandwidth(long bandwidth) throws IOException { 970 SetBalancerBandwidthRequestProto req = SetBalancerBandwidthRequestProto.newBuilder() 971 .setBandwidth(bandwidth) 972 .build(); 973 try { 974 rpcProxy.setBalancerBandwidth(null, req); 975 } catch (ServiceException e) { 976 throw ProtobufHelper.getRemoteException(e); 977 } 978 } 979 980 @Override isMethodSupported(String methodName)981 public boolean isMethodSupported(String methodName) throws IOException { 982 return RpcClientUtil.isMethodSupported(rpcProxy, 983 ClientNamenodeProtocolPB.class, RPC.RpcKind.RPC_PROTOCOL_BUFFER, 984 RPC.getProtocolVersion(ClientNamenodeProtocolPB.class), methodName); 985 } 986 987 @Override getDataEncryptionKey()988 public DataEncryptionKey getDataEncryptionKey() throws IOException { 989 try { 990 GetDataEncryptionKeyResponseProto rsp = rpcProxy.getDataEncryptionKey( 991 null, VOID_GET_DATA_ENCRYPTIONKEY_REQUEST); 992 return rsp.hasDataEncryptionKey() ? 993 PBHelper.convert(rsp.getDataEncryptionKey()) : null; 994 } catch (ServiceException e) { 995 throw ProtobufHelper.getRemoteException(e); 996 } 997 } 998 999 1000 @Override isFileClosed(String src)1001 public boolean isFileClosed(String src) throws AccessControlException, 1002 FileNotFoundException, UnresolvedLinkException, IOException { 1003 IsFileClosedRequestProto req = IsFileClosedRequestProto.newBuilder() 1004 .setSrc(src).build(); 1005 try { 1006 return rpcProxy.isFileClosed(null, req).getResult(); 1007 } catch (ServiceException e) { 1008 throw ProtobufHelper.getRemoteException(e); 1009 } 1010 } 1011 1012 @Override getUnderlyingProxyObject()1013 public Object getUnderlyingProxyObject() { 1014 return rpcProxy; 1015 } 1016 1017 @Override createSnapshot(String snapshotRoot, String snapshotName)1018 public String createSnapshot(String snapshotRoot, String snapshotName) 1019 throws IOException { 1020 final CreateSnapshotRequestProto.Builder builder 1021 = CreateSnapshotRequestProto.newBuilder().setSnapshotRoot(snapshotRoot); 1022 if (snapshotName != null) { 1023 builder.setSnapshotName(snapshotName); 1024 } 1025 final CreateSnapshotRequestProto req = builder.build(); 1026 try { 1027 return rpcProxy.createSnapshot(null, req).getSnapshotPath(); 1028 } catch (ServiceException e) { 1029 throw ProtobufHelper.getRemoteException(e); 1030 } 1031 } 1032 1033 @Override deleteSnapshot(String snapshotRoot, String snapshotName)1034 public void deleteSnapshot(String snapshotRoot, String snapshotName) 1035 throws IOException { 1036 DeleteSnapshotRequestProto req = DeleteSnapshotRequestProto.newBuilder() 1037 .setSnapshotRoot(snapshotRoot).setSnapshotName(snapshotName).build(); 1038 try { 1039 rpcProxy.deleteSnapshot(null, req); 1040 } catch (ServiceException e) { 1041 throw ProtobufHelper.getRemoteException(e); 1042 } 1043 } 1044 1045 @Override allowSnapshot(String snapshotRoot)1046 public void allowSnapshot(String snapshotRoot) throws IOException { 1047 AllowSnapshotRequestProto req = AllowSnapshotRequestProto.newBuilder() 1048 .setSnapshotRoot(snapshotRoot).build(); 1049 try { 1050 rpcProxy.allowSnapshot(null, req); 1051 } catch (ServiceException e) { 1052 throw ProtobufHelper.getRemoteException(e); 1053 } 1054 } 1055 1056 @Override disallowSnapshot(String snapshotRoot)1057 public void disallowSnapshot(String snapshotRoot) throws IOException { 1058 DisallowSnapshotRequestProto req = DisallowSnapshotRequestProto 1059 .newBuilder().setSnapshotRoot(snapshotRoot).build(); 1060 try { 1061 rpcProxy.disallowSnapshot(null, req); 1062 } catch (ServiceException e) { 1063 throw ProtobufHelper.getRemoteException(e); 1064 } 1065 } 1066 1067 @Override renameSnapshot(String snapshotRoot, String snapshotOldName, String snapshotNewName)1068 public void renameSnapshot(String snapshotRoot, String snapshotOldName, 1069 String snapshotNewName) throws IOException { 1070 RenameSnapshotRequestProto req = RenameSnapshotRequestProto.newBuilder() 1071 .setSnapshotRoot(snapshotRoot).setSnapshotOldName(snapshotOldName) 1072 .setSnapshotNewName(snapshotNewName).build(); 1073 try { 1074 rpcProxy.renameSnapshot(null, req); 1075 } catch (ServiceException e) { 1076 throw ProtobufHelper.getRemoteException(e); 1077 } 1078 } 1079 1080 @Override getSnapshottableDirListing()1081 public SnapshottableDirectoryStatus[] getSnapshottableDirListing() 1082 throws IOException { 1083 GetSnapshottableDirListingRequestProto req = 1084 GetSnapshottableDirListingRequestProto.newBuilder().build(); 1085 try { 1086 GetSnapshottableDirListingResponseProto result = rpcProxy 1087 .getSnapshottableDirListing(null, req); 1088 1089 if (result.hasSnapshottableDirList()) { 1090 return PBHelper.convert(result.getSnapshottableDirList()); 1091 } 1092 return null; 1093 } catch (ServiceException e) { 1094 throw ProtobufHelper.getRemoteException(e); 1095 } 1096 } 1097 1098 @Override getSnapshotDiffReport(String snapshotRoot, String fromSnapshot, String toSnapshot)1099 public SnapshotDiffReport getSnapshotDiffReport(String snapshotRoot, 1100 String fromSnapshot, String toSnapshot) throws IOException { 1101 GetSnapshotDiffReportRequestProto req = GetSnapshotDiffReportRequestProto 1102 .newBuilder().setSnapshotRoot(snapshotRoot) 1103 .setFromSnapshot(fromSnapshot).setToSnapshot(toSnapshot).build(); 1104 try { 1105 GetSnapshotDiffReportResponseProto result = 1106 rpcProxy.getSnapshotDiffReport(null, req); 1107 1108 return PBHelper.convert(result.getDiffReport()); 1109 } catch (ServiceException e) { 1110 throw ProtobufHelper.getRemoteException(e); 1111 } 1112 } 1113 1114 @Override addCacheDirective(CacheDirectiveInfo directive, EnumSet<CacheFlag> flags)1115 public long addCacheDirective(CacheDirectiveInfo directive, 1116 EnumSet<CacheFlag> flags) throws IOException { 1117 try { 1118 AddCacheDirectiveRequestProto.Builder builder = 1119 AddCacheDirectiveRequestProto.newBuilder(). 1120 setInfo(PBHelper.convert(directive)); 1121 if (!flags.isEmpty()) { 1122 builder.setCacheFlags(PBHelper.convertCacheFlags(flags)); 1123 } 1124 return rpcProxy.addCacheDirective(null, builder.build()).getId(); 1125 } catch (ServiceException e) { 1126 throw ProtobufHelper.getRemoteException(e); 1127 } 1128 } 1129 1130 @Override modifyCacheDirective(CacheDirectiveInfo directive, EnumSet<CacheFlag> flags)1131 public void modifyCacheDirective(CacheDirectiveInfo directive, 1132 EnumSet<CacheFlag> flags) throws IOException { 1133 try { 1134 ModifyCacheDirectiveRequestProto.Builder builder = 1135 ModifyCacheDirectiveRequestProto.newBuilder(). 1136 setInfo(PBHelper.convert(directive)); 1137 if (!flags.isEmpty()) { 1138 builder.setCacheFlags(PBHelper.convertCacheFlags(flags)); 1139 } 1140 rpcProxy.modifyCacheDirective(null, builder.build()); 1141 } catch (ServiceException e) { 1142 throw ProtobufHelper.getRemoteException(e); 1143 } 1144 } 1145 1146 @Override removeCacheDirective(long id)1147 public void removeCacheDirective(long id) 1148 throws IOException { 1149 try { 1150 rpcProxy.removeCacheDirective(null, 1151 RemoveCacheDirectiveRequestProto.newBuilder(). 1152 setId(id).build()); 1153 } catch (ServiceException e) { 1154 throw ProtobufHelper.getRemoteException(e); 1155 } 1156 } 1157 1158 private static class BatchedCacheEntries 1159 implements BatchedEntries<CacheDirectiveEntry> { 1160 private final ListCacheDirectivesResponseProto response; 1161 BatchedCacheEntries( ListCacheDirectivesResponseProto response)1162 BatchedCacheEntries( 1163 ListCacheDirectivesResponseProto response) { 1164 this.response = response; 1165 } 1166 1167 @Override get(int i)1168 public CacheDirectiveEntry get(int i) { 1169 return PBHelper.convert(response.getElements(i)); 1170 } 1171 1172 @Override size()1173 public int size() { 1174 return response.getElementsCount(); 1175 } 1176 1177 @Override hasMore()1178 public boolean hasMore() { 1179 return response.getHasMore(); 1180 } 1181 } 1182 1183 @Override 1184 public BatchedEntries<CacheDirectiveEntry> listCacheDirectives(long prevId, CacheDirectiveInfo filter)1185 listCacheDirectives(long prevId, 1186 CacheDirectiveInfo filter) throws IOException { 1187 if (filter == null) { 1188 filter = new CacheDirectiveInfo.Builder().build(); 1189 } 1190 try { 1191 return new BatchedCacheEntries( 1192 rpcProxy.listCacheDirectives(null, 1193 ListCacheDirectivesRequestProto.newBuilder(). 1194 setPrevId(prevId). 1195 setFilter(PBHelper.convert(filter)). 1196 build())); 1197 } catch (ServiceException e) { 1198 throw ProtobufHelper.getRemoteException(e); 1199 } 1200 } 1201 1202 @Override addCachePool(CachePoolInfo info)1203 public void addCachePool(CachePoolInfo info) throws IOException { 1204 AddCachePoolRequestProto.Builder builder = 1205 AddCachePoolRequestProto.newBuilder(); 1206 builder.setInfo(PBHelper.convert(info)); 1207 try { 1208 rpcProxy.addCachePool(null, builder.build()); 1209 } catch (ServiceException e) { 1210 throw ProtobufHelper.getRemoteException(e); 1211 } 1212 } 1213 1214 @Override modifyCachePool(CachePoolInfo req)1215 public void modifyCachePool(CachePoolInfo req) throws IOException { 1216 ModifyCachePoolRequestProto.Builder builder = 1217 ModifyCachePoolRequestProto.newBuilder(); 1218 builder.setInfo(PBHelper.convert(req)); 1219 try { 1220 rpcProxy.modifyCachePool(null, builder.build()); 1221 } catch (ServiceException e) { 1222 throw ProtobufHelper.getRemoteException(e); 1223 } 1224 } 1225 1226 @Override removeCachePool(String cachePoolName)1227 public void removeCachePool(String cachePoolName) throws IOException { 1228 try { 1229 rpcProxy.removeCachePool(null, 1230 RemoveCachePoolRequestProto.newBuilder(). 1231 setPoolName(cachePoolName).build()); 1232 } catch (ServiceException e) { 1233 throw ProtobufHelper.getRemoteException(e); 1234 } 1235 } 1236 1237 private static class BatchedCachePoolEntries 1238 implements BatchedEntries<CachePoolEntry> { 1239 private final ListCachePoolsResponseProto proto; 1240 BatchedCachePoolEntries(ListCachePoolsResponseProto proto)1241 public BatchedCachePoolEntries(ListCachePoolsResponseProto proto) { 1242 this.proto = proto; 1243 } 1244 1245 @Override get(int i)1246 public CachePoolEntry get(int i) { 1247 CachePoolEntryProto elem = proto.getEntries(i); 1248 return PBHelper.convert(elem); 1249 } 1250 1251 @Override size()1252 public int size() { 1253 return proto.getEntriesCount(); 1254 } 1255 1256 @Override hasMore()1257 public boolean hasMore() { 1258 return proto.getHasMore(); 1259 } 1260 } 1261 1262 @Override listCachePools(String prevKey)1263 public BatchedEntries<CachePoolEntry> listCachePools(String prevKey) 1264 throws IOException { 1265 try { 1266 return new BatchedCachePoolEntries( 1267 rpcProxy.listCachePools(null, 1268 ListCachePoolsRequestProto.newBuilder(). 1269 setPrevPoolName(prevKey).build())); 1270 } catch (ServiceException e) { 1271 throw ProtobufHelper.getRemoteException(e); 1272 } 1273 } 1274 1275 @Override modifyAclEntries(String src, List<AclEntry> aclSpec)1276 public void modifyAclEntries(String src, List<AclEntry> aclSpec) 1277 throws IOException { 1278 ModifyAclEntriesRequestProto req = ModifyAclEntriesRequestProto 1279 .newBuilder().setSrc(src) 1280 .addAllAclSpec(PBHelper.convertAclEntryProto(aclSpec)).build(); 1281 try { 1282 rpcProxy.modifyAclEntries(null, req); 1283 } catch (ServiceException e) { 1284 throw ProtobufHelper.getRemoteException(e); 1285 } 1286 } 1287 1288 @Override removeAclEntries(String src, List<AclEntry> aclSpec)1289 public void removeAclEntries(String src, List<AclEntry> aclSpec) 1290 throws IOException { 1291 RemoveAclEntriesRequestProto req = RemoveAclEntriesRequestProto 1292 .newBuilder().setSrc(src) 1293 .addAllAclSpec(PBHelper.convertAclEntryProto(aclSpec)).build(); 1294 try { 1295 rpcProxy.removeAclEntries(null, req); 1296 } catch (ServiceException e) { 1297 throw ProtobufHelper.getRemoteException(e); 1298 } 1299 } 1300 1301 @Override removeDefaultAcl(String src)1302 public void removeDefaultAcl(String src) throws IOException { 1303 RemoveDefaultAclRequestProto req = RemoveDefaultAclRequestProto 1304 .newBuilder().setSrc(src).build(); 1305 try { 1306 rpcProxy.removeDefaultAcl(null, req); 1307 } catch (ServiceException e) { 1308 throw ProtobufHelper.getRemoteException(e); 1309 } 1310 } 1311 1312 @Override removeAcl(String src)1313 public void removeAcl(String src) throws IOException { 1314 RemoveAclRequestProto req = RemoveAclRequestProto.newBuilder() 1315 .setSrc(src).build(); 1316 try { 1317 rpcProxy.removeAcl(null, req); 1318 } catch (ServiceException e) { 1319 throw ProtobufHelper.getRemoteException(e); 1320 } 1321 } 1322 1323 @Override setAcl(String src, List<AclEntry> aclSpec)1324 public void setAcl(String src, List<AclEntry> aclSpec) throws IOException { 1325 SetAclRequestProto req = SetAclRequestProto.newBuilder() 1326 .setSrc(src) 1327 .addAllAclSpec(PBHelper.convertAclEntryProto(aclSpec)) 1328 .build(); 1329 try { 1330 rpcProxy.setAcl(null, req); 1331 } catch (ServiceException e) { 1332 throw ProtobufHelper.getRemoteException(e); 1333 } 1334 } 1335 1336 @Override getAclStatus(String src)1337 public AclStatus getAclStatus(String src) throws IOException { 1338 GetAclStatusRequestProto req = GetAclStatusRequestProto.newBuilder() 1339 .setSrc(src).build(); 1340 try { 1341 return PBHelper.convert(rpcProxy.getAclStatus(null, req)); 1342 } catch (ServiceException e) { 1343 throw ProtobufHelper.getRemoteException(e); 1344 } 1345 } 1346 1347 @Override createEncryptionZone(String src, String keyName)1348 public void createEncryptionZone(String src, String keyName) 1349 throws IOException { 1350 final CreateEncryptionZoneRequestProto.Builder builder = 1351 CreateEncryptionZoneRequestProto.newBuilder(); 1352 builder.setSrc(src); 1353 if (keyName != null && !keyName.isEmpty()) { 1354 builder.setKeyName(keyName); 1355 } 1356 CreateEncryptionZoneRequestProto req = builder.build(); 1357 try { 1358 rpcProxy.createEncryptionZone(null, req); 1359 } catch (ServiceException e) { 1360 throw ProtobufHelper.getRemoteException(e); 1361 } 1362 } 1363 1364 @Override getEZForPath(String src)1365 public EncryptionZone getEZForPath(String src) 1366 throws IOException { 1367 final GetEZForPathRequestProto.Builder builder = 1368 GetEZForPathRequestProto.newBuilder(); 1369 builder.setSrc(src); 1370 final GetEZForPathRequestProto req = builder.build(); 1371 try { 1372 final EncryptionZonesProtos.GetEZForPathResponseProto response = 1373 rpcProxy.getEZForPath(null, req); 1374 if (response.hasZone()) { 1375 return PBHelper.convert(response.getZone()); 1376 } else { 1377 return null; 1378 } 1379 } catch (ServiceException e) { 1380 throw ProtobufHelper.getRemoteException(e); 1381 } 1382 } 1383 1384 @Override listEncryptionZones(long id)1385 public BatchedEntries<EncryptionZone> listEncryptionZones(long id) 1386 throws IOException { 1387 final ListEncryptionZonesRequestProto req = 1388 ListEncryptionZonesRequestProto.newBuilder() 1389 .setId(id) 1390 .build(); 1391 try { 1392 EncryptionZonesProtos.ListEncryptionZonesResponseProto response = 1393 rpcProxy.listEncryptionZones(null, req); 1394 List<EncryptionZone> elements = 1395 Lists.newArrayListWithCapacity(response.getZonesCount()); 1396 for (EncryptionZoneProto p : response.getZonesList()) { 1397 elements.add(PBHelper.convert(p)); 1398 } 1399 return new BatchedListEntries<EncryptionZone>(elements, 1400 response.getHasMore()); 1401 } catch (ServiceException e) { 1402 throw ProtobufHelper.getRemoteException(e); 1403 } 1404 } 1405 1406 @Override setXAttr(String src, XAttr xAttr, EnumSet<XAttrSetFlag> flag)1407 public void setXAttr(String src, XAttr xAttr, EnumSet<XAttrSetFlag> flag) 1408 throws IOException { 1409 SetXAttrRequestProto req = SetXAttrRequestProto.newBuilder() 1410 .setSrc(src) 1411 .setXAttr(PBHelper.convertXAttrProto(xAttr)) 1412 .setFlag(PBHelper.convert(flag)) 1413 .build(); 1414 try { 1415 rpcProxy.setXAttr(null, req); 1416 } catch (ServiceException e) { 1417 throw ProtobufHelper.getRemoteException(e); 1418 } 1419 } 1420 1421 @Override getXAttrs(String src, List<XAttr> xAttrs)1422 public List<XAttr> getXAttrs(String src, List<XAttr> xAttrs) 1423 throws IOException { 1424 GetXAttrsRequestProto.Builder builder = GetXAttrsRequestProto.newBuilder(); 1425 builder.setSrc(src); 1426 if (xAttrs != null) { 1427 builder.addAllXAttrs(PBHelper.convertXAttrProto(xAttrs)); 1428 } 1429 GetXAttrsRequestProto req = builder.build(); 1430 try { 1431 return PBHelper.convert(rpcProxy.getXAttrs(null, req)); 1432 } catch (ServiceException e) { 1433 throw ProtobufHelper.getRemoteException(e); 1434 } 1435 } 1436 1437 @Override listXAttrs(String src)1438 public List<XAttr> listXAttrs(String src) 1439 throws IOException { 1440 ListXAttrsRequestProto.Builder builder = ListXAttrsRequestProto.newBuilder(); 1441 builder.setSrc(src); 1442 ListXAttrsRequestProto req = builder.build(); 1443 try { 1444 return PBHelper.convert(rpcProxy.listXAttrs(null, req)); 1445 } catch (ServiceException e) { 1446 throw ProtobufHelper.getRemoteException(e); 1447 } 1448 } 1449 1450 @Override removeXAttr(String src, XAttr xAttr)1451 public void removeXAttr(String src, XAttr xAttr) throws IOException { 1452 RemoveXAttrRequestProto req = RemoveXAttrRequestProto 1453 .newBuilder().setSrc(src) 1454 .setXAttr(PBHelper.convertXAttrProto(xAttr)).build(); 1455 try { 1456 rpcProxy.removeXAttr(null, req); 1457 } catch (ServiceException e) { 1458 throw ProtobufHelper.getRemoteException(e); 1459 } 1460 } 1461 1462 @Override checkAccess(String path, FsAction mode)1463 public void checkAccess(String path, FsAction mode) throws IOException { 1464 CheckAccessRequestProto req = CheckAccessRequestProto.newBuilder() 1465 .setPath(path).setMode(PBHelper.convert(mode)).build(); 1466 try { 1467 rpcProxy.checkAccess(null, req); 1468 } catch (ServiceException e) { 1469 throw ProtobufHelper.getRemoteException(e); 1470 } 1471 } 1472 1473 @Override setStoragePolicy(String src, String policyName)1474 public void setStoragePolicy(String src, String policyName) 1475 throws IOException { 1476 SetStoragePolicyRequestProto req = SetStoragePolicyRequestProto 1477 .newBuilder().setSrc(src).setPolicyName(policyName).build(); 1478 try { 1479 rpcProxy.setStoragePolicy(null, req); 1480 } catch (ServiceException e) { 1481 throw ProtobufHelper.getRemoteException(e); 1482 } 1483 } 1484 1485 @Override getStoragePolicies()1486 public BlockStoragePolicy[] getStoragePolicies() throws IOException { 1487 try { 1488 GetStoragePoliciesResponseProto response = rpcProxy 1489 .getStoragePolicies(null, VOID_GET_STORAGE_POLICIES_REQUEST); 1490 return PBHelper.convertStoragePolicies(response.getPoliciesList()); 1491 } catch (ServiceException e) { 1492 throw ProtobufHelper.getRemoteException(e); 1493 } 1494 } 1495 getCurrentEditLogTxid()1496 public long getCurrentEditLogTxid() throws IOException { 1497 GetCurrentEditLogTxidRequestProto req = GetCurrentEditLogTxidRequestProto 1498 .getDefaultInstance(); 1499 try { 1500 return rpcProxy.getCurrentEditLogTxid(null, req).getTxid(); 1501 } catch (ServiceException e) { 1502 throw ProtobufHelper.getRemoteException(e); 1503 } 1504 } 1505 1506 @Override getEditsFromTxid(long txid)1507 public EventBatchList getEditsFromTxid(long txid) throws IOException { 1508 GetEditsFromTxidRequestProto req = GetEditsFromTxidRequestProto.newBuilder() 1509 .setTxid(txid).build(); 1510 try { 1511 return PBHelper.convert(rpcProxy.getEditsFromTxid(null, req)); 1512 } catch (ServiceException e) { 1513 throw ProtobufHelper.getRemoteException(e); 1514 } 1515 } 1516 } 1517