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.IOException; 21 22 import org.apache.hadoop.hdfs.protocol.DatanodeInfo; 23 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.VersionRequestProto; 24 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.VersionResponseProto; 25 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos; 26 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.EndCheckpointRequestProto; 27 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.EndCheckpointResponseProto; 28 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.ErrorReportRequestProto; 29 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.ErrorReportResponseProto; 30 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlockKeysRequestProto; 31 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlockKeysResponseProto; 32 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlocksRequestProto; 33 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlocksResponseProto; 34 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetEditLogManifestRequestProto; 35 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetEditLogManifestResponseProto; 36 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetMostRecentCheckpointTxIdRequestProto; 37 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetMostRecentCheckpointTxIdResponseProto; 38 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetTransactionIdRequestProto; 39 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetTransactionIdResponseProto; 40 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.IsUpgradeFinalizedRequestProto; 41 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.IsUpgradeFinalizedResponseProto; 42 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RegisterRequestProto; 43 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RegisterResponseProto; 44 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RollEditLogRequestProto; 45 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RollEditLogResponseProto; 46 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.StartCheckpointRequestProto; 47 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.StartCheckpointResponseProto; 48 import org.apache.hadoop.hdfs.security.token.block.ExportedBlockKeys; 49 import org.apache.hadoop.hdfs.server.namenode.CheckpointSignature; 50 import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations; 51 import org.apache.hadoop.hdfs.server.protocol.NamenodeCommand; 52 import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol; 53 import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration; 54 import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo; 55 import org.apache.hadoop.hdfs.server.protocol.RemoteEditLogManifest; 56 57 import com.google.protobuf.RpcController; 58 import com.google.protobuf.ServiceException; 59 60 /** 61 * Implementation for protobuf service that forwards requests 62 * received on {@link NamenodeProtocolPB} to the 63 * {@link NamenodeProtocol} server implementation. 64 */ 65 public class NamenodeProtocolServerSideTranslatorPB implements 66 NamenodeProtocolPB { 67 private final NamenodeProtocol impl; 68 69 private final static ErrorReportResponseProto VOID_ERROR_REPORT_RESPONSE = 70 ErrorReportResponseProto.newBuilder().build(); 71 72 private final static EndCheckpointResponseProto VOID_END_CHECKPOINT_RESPONSE = 73 EndCheckpointResponseProto.newBuilder().build(); 74 NamenodeProtocolServerSideTranslatorPB(NamenodeProtocol impl)75 public NamenodeProtocolServerSideTranslatorPB(NamenodeProtocol impl) { 76 this.impl = impl; 77 } 78 79 @Override getBlocks(RpcController unused, GetBlocksRequestProto request)80 public GetBlocksResponseProto getBlocks(RpcController unused, 81 GetBlocksRequestProto request) throws ServiceException { 82 DatanodeInfo dnInfo = new DatanodeInfo(PBHelper.convert(request 83 .getDatanode())); 84 BlocksWithLocations blocks; 85 try { 86 blocks = impl.getBlocks(dnInfo, request.getSize()); 87 } catch (IOException e) { 88 throw new ServiceException(e); 89 } 90 return GetBlocksResponseProto.newBuilder() 91 .setBlocks(PBHelper.convert(blocks)).build(); 92 } 93 94 @Override getBlockKeys(RpcController unused, GetBlockKeysRequestProto request)95 public GetBlockKeysResponseProto getBlockKeys(RpcController unused, 96 GetBlockKeysRequestProto request) throws ServiceException { 97 ExportedBlockKeys keys; 98 try { 99 keys = impl.getBlockKeys(); 100 } catch (IOException e) { 101 throw new ServiceException(e); 102 } 103 GetBlockKeysResponseProto.Builder builder = 104 GetBlockKeysResponseProto.newBuilder(); 105 if (keys != null) { 106 builder.setKeys(PBHelper.convert(keys)); 107 } 108 return builder.build(); 109 } 110 111 @Override getTransactionId(RpcController unused, GetTransactionIdRequestProto request)112 public GetTransactionIdResponseProto getTransactionId(RpcController unused, 113 GetTransactionIdRequestProto request) throws ServiceException { 114 long txid; 115 try { 116 txid = impl.getTransactionID(); 117 } catch (IOException e) { 118 throw new ServiceException(e); 119 } 120 return GetTransactionIdResponseProto.newBuilder().setTxId(txid).build(); 121 } 122 123 @Override getMostRecentCheckpointTxId( RpcController unused, GetMostRecentCheckpointTxIdRequestProto request)124 public GetMostRecentCheckpointTxIdResponseProto getMostRecentCheckpointTxId( 125 RpcController unused, GetMostRecentCheckpointTxIdRequestProto request) 126 throws ServiceException { 127 long txid; 128 try { 129 txid = impl.getMostRecentCheckpointTxId(); 130 } catch (IOException e) { 131 throw new ServiceException(e); 132 } 133 return GetMostRecentCheckpointTxIdResponseProto.newBuilder().setTxId(txid).build(); 134 } 135 136 137 @Override rollEditLog(RpcController unused, RollEditLogRequestProto request)138 public RollEditLogResponseProto rollEditLog(RpcController unused, 139 RollEditLogRequestProto request) throws ServiceException { 140 CheckpointSignature signature; 141 try { 142 signature = impl.rollEditLog(); 143 } catch (IOException e) { 144 throw new ServiceException(e); 145 } 146 return RollEditLogResponseProto.newBuilder() 147 .setSignature(PBHelper.convert(signature)).build(); 148 } 149 150 @Override errorReport(RpcController unused, ErrorReportRequestProto request)151 public ErrorReportResponseProto errorReport(RpcController unused, 152 ErrorReportRequestProto request) throws ServiceException { 153 try { 154 impl.errorReport(PBHelper.convert(request.getRegistration()), 155 request.getErrorCode(), request.getMsg()); 156 } catch (IOException e) { 157 throw new ServiceException(e); 158 } 159 return VOID_ERROR_REPORT_RESPONSE; 160 } 161 162 @Override registerSubordinateNamenode( RpcController unused, RegisterRequestProto request)163 public RegisterResponseProto registerSubordinateNamenode( 164 RpcController unused, RegisterRequestProto request) 165 throws ServiceException { 166 NamenodeRegistration reg; 167 try { 168 reg = impl.registerSubordinateNamenode( 169 PBHelper.convert(request.getRegistration())); 170 } catch (IOException e) { 171 throw new ServiceException(e); 172 } 173 return RegisterResponseProto.newBuilder() 174 .setRegistration(PBHelper.convert(reg)).build(); 175 } 176 177 @Override startCheckpoint(RpcController unused, StartCheckpointRequestProto request)178 public StartCheckpointResponseProto startCheckpoint(RpcController unused, 179 StartCheckpointRequestProto request) throws ServiceException { 180 NamenodeCommand cmd; 181 try { 182 cmd = impl.startCheckpoint(PBHelper.convert(request.getRegistration())); 183 } catch (IOException e) { 184 throw new ServiceException(e); 185 } 186 return StartCheckpointResponseProto.newBuilder() 187 .setCommand(PBHelper.convert(cmd)).build(); 188 } 189 190 @Override endCheckpoint(RpcController unused, EndCheckpointRequestProto request)191 public EndCheckpointResponseProto endCheckpoint(RpcController unused, 192 EndCheckpointRequestProto request) throws ServiceException { 193 try { 194 impl.endCheckpoint(PBHelper.convert(request.getRegistration()), 195 PBHelper.convert(request.getSignature())); 196 } catch (IOException e) { 197 throw new ServiceException(e); 198 } 199 return VOID_END_CHECKPOINT_RESPONSE; 200 } 201 202 @Override getEditLogManifest( RpcController unused, GetEditLogManifestRequestProto request)203 public GetEditLogManifestResponseProto getEditLogManifest( 204 RpcController unused, GetEditLogManifestRequestProto request) 205 throws ServiceException { 206 RemoteEditLogManifest manifest; 207 try { 208 manifest = impl.getEditLogManifest(request.getSinceTxId()); 209 } catch (IOException e) { 210 throw new ServiceException(e); 211 } 212 return GetEditLogManifestResponseProto.newBuilder() 213 .setManifest(PBHelper.convert(manifest)).build(); 214 } 215 216 @Override versionRequest(RpcController controller, VersionRequestProto request)217 public VersionResponseProto versionRequest(RpcController controller, 218 VersionRequestProto request) throws ServiceException { 219 NamespaceInfo info; 220 try { 221 info = impl.versionRequest(); 222 } catch (IOException e) { 223 throw new ServiceException(e); 224 } 225 return VersionResponseProto.newBuilder() 226 .setInfo(PBHelper.convert(info)).build(); 227 } 228 229 @Override isUpgradeFinalized( RpcController controller, IsUpgradeFinalizedRequestProto request)230 public IsUpgradeFinalizedResponseProto isUpgradeFinalized( 231 RpcController controller, IsUpgradeFinalizedRequestProto request) 232 throws ServiceException { 233 boolean isUpgradeFinalized; 234 try { 235 isUpgradeFinalized = impl.isUpgradeFinalized(); 236 } catch (IOException e) { 237 throw new ServiceException(e); 238 } 239 return IsUpgradeFinalizedResponseProto.newBuilder() 240 .setIsUpgradeFinalized(isUpgradeFinalized).build(); 241 } 242 } 243