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 */ 018package org.apache.hadoop.hdfs.protocolPB; 019 020import java.io.IOException; 021 022import org.apache.hadoop.hdfs.protocol.DatanodeInfo; 023import org.apache.hadoop.hdfs.protocol.proto.HdfsServerProtos.VersionRequestProto; 024import org.apache.hadoop.hdfs.protocol.proto.HdfsServerProtos.VersionResponseProto; 025import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.EndCheckpointRequestProto; 026import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.EndCheckpointResponseProto; 027import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.ErrorReportRequestProto; 028import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.ErrorReportResponseProto; 029import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlockKeysRequestProto; 030import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlockKeysResponseProto; 031import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlocksRequestProto; 032import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlocksResponseProto; 033import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetEditLogManifestRequestProto; 034import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetEditLogManifestResponseProto; 035import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetMostRecentCheckpointTxIdRequestProto; 036import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetMostRecentCheckpointTxIdResponseProto; 037import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetTransactionIdRequestProto; 038import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetTransactionIdResponseProto; 039import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.IsUpgradeFinalizedRequestProto; 040import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.IsUpgradeFinalizedResponseProto; 041import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RegisterRequestProto; 042import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RegisterResponseProto; 043import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RollEditLogRequestProto; 044import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RollEditLogResponseProto; 045import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.StartCheckpointRequestProto; 046import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.StartCheckpointResponseProto; 047import org.apache.hadoop.hdfs.security.token.block.ExportedBlockKeys; 048import org.apache.hadoop.hdfs.server.namenode.CheckpointSignature; 049import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations; 050import org.apache.hadoop.hdfs.server.protocol.NamenodeCommand; 051import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol; 052import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration; 053import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo; 054import org.apache.hadoop.hdfs.server.protocol.RemoteEditLogManifest; 055 056import com.google.protobuf.RpcController; 057import com.google.protobuf.ServiceException; 058 059/** 060 * Implementation for protobuf service that forwards requests 061 * received on {@link NamenodeProtocolPB} to the 062 * {@link NamenodeProtocol} server implementation. 063 */ 064public class NamenodeProtocolServerSideTranslatorPB implements 065 NamenodeProtocolPB { 066 private final NamenodeProtocol impl; 067 068 private final static ErrorReportResponseProto VOID_ERROR_REPORT_RESPONSE = 069 ErrorReportResponseProto.newBuilder().build(); 070 071 private final static EndCheckpointResponseProto VOID_END_CHECKPOINT_RESPONSE = 072 EndCheckpointResponseProto.newBuilder().build(); 073 074 public NamenodeProtocolServerSideTranslatorPB(NamenodeProtocol impl) { 075 this.impl = impl; 076 } 077 078 @Override 079 public GetBlocksResponseProto getBlocks(RpcController unused, 080 GetBlocksRequestProto request) throws ServiceException { 081 DatanodeInfo dnInfo = new DatanodeInfo(PBHelperClient.convert(request 082 .getDatanode())); 083 BlocksWithLocations blocks; 084 try { 085 blocks = impl.getBlocks(dnInfo, request.getSize()); 086 } catch (IOException e) { 087 throw new ServiceException(e); 088 } 089 return GetBlocksResponseProto.newBuilder() 090 .setBlocks(PBHelper.convert(blocks)).build(); 091 } 092 093 @Override 094 public GetBlockKeysResponseProto getBlockKeys(RpcController unused, 095 GetBlockKeysRequestProto request) throws ServiceException { 096 ExportedBlockKeys keys; 097 try { 098 keys = impl.getBlockKeys(); 099 } catch (IOException e) { 100 throw new ServiceException(e); 101 } 102 GetBlockKeysResponseProto.Builder builder = 103 GetBlockKeysResponseProto.newBuilder(); 104 if (keys != null) { 105 builder.setKeys(PBHelper.convert(keys)); 106 } 107 return builder.build(); 108 } 109 110 @Override 111 public GetTransactionIdResponseProto getTransactionId(RpcController unused, 112 GetTransactionIdRequestProto request) throws ServiceException { 113 long txid; 114 try { 115 txid = impl.getTransactionID(); 116 } catch (IOException e) { 117 throw new ServiceException(e); 118 } 119 return GetTransactionIdResponseProto.newBuilder().setTxId(txid).build(); 120 } 121 122 @Override 123 public GetMostRecentCheckpointTxIdResponseProto getMostRecentCheckpointTxId( 124 RpcController unused, GetMostRecentCheckpointTxIdRequestProto request) 125 throws ServiceException { 126 long txid; 127 try { 128 txid = impl.getMostRecentCheckpointTxId(); 129 } catch (IOException e) { 130 throw new ServiceException(e); 131 } 132 return GetMostRecentCheckpointTxIdResponseProto.newBuilder().setTxId(txid).build(); 133 } 134 135 136 @Override 137 public RollEditLogResponseProto rollEditLog(RpcController unused, 138 RollEditLogRequestProto request) throws ServiceException { 139 CheckpointSignature signature; 140 try { 141 signature = impl.rollEditLog(); 142 } catch (IOException e) { 143 throw new ServiceException(e); 144 } 145 return RollEditLogResponseProto.newBuilder() 146 .setSignature(PBHelper.convert(signature)).build(); 147 } 148 149 @Override 150 public ErrorReportResponseProto errorReport(RpcController unused, 151 ErrorReportRequestProto request) throws ServiceException { 152 try { 153 impl.errorReport(PBHelper.convert(request.getRegistration()), 154 request.getErrorCode(), request.getMsg()); 155 } catch (IOException e) { 156 throw new ServiceException(e); 157 } 158 return VOID_ERROR_REPORT_RESPONSE; 159 } 160 161 @Override 162 public RegisterResponseProto registerSubordinateNamenode( 163 RpcController unused, RegisterRequestProto request) 164 throws ServiceException { 165 NamenodeRegistration reg; 166 try { 167 reg = impl.registerSubordinateNamenode( 168 PBHelper.convert(request.getRegistration())); 169 } catch (IOException e) { 170 throw new ServiceException(e); 171 } 172 return RegisterResponseProto.newBuilder() 173 .setRegistration(PBHelper.convert(reg)).build(); 174 } 175 176 @Override 177 public StartCheckpointResponseProto startCheckpoint(RpcController unused, 178 StartCheckpointRequestProto request) throws ServiceException { 179 NamenodeCommand cmd; 180 try { 181 cmd = impl.startCheckpoint(PBHelper.convert(request.getRegistration())); 182 } catch (IOException e) { 183 throw new ServiceException(e); 184 } 185 return StartCheckpointResponseProto.newBuilder() 186 .setCommand(PBHelper.convert(cmd)).build(); 187 } 188 189 @Override 190 public EndCheckpointResponseProto endCheckpoint(RpcController unused, 191 EndCheckpointRequestProto request) throws ServiceException { 192 try { 193 impl.endCheckpoint(PBHelper.convert(request.getRegistration()), 194 PBHelper.convert(request.getSignature())); 195 } catch (IOException e) { 196 throw new ServiceException(e); 197 } 198 return VOID_END_CHECKPOINT_RESPONSE; 199 } 200 201 @Override 202 public GetEditLogManifestResponseProto getEditLogManifest( 203 RpcController unused, GetEditLogManifestRequestProto request) 204 throws ServiceException { 205 RemoteEditLogManifest manifest; 206 try { 207 manifest = impl.getEditLogManifest(request.getSinceTxId()); 208 } catch (IOException e) { 209 throw new ServiceException(e); 210 } 211 return GetEditLogManifestResponseProto.newBuilder() 212 .setManifest(PBHelper.convert(manifest)).build(); 213 } 214 215 @Override 216 public VersionResponseProto versionRequest(RpcController controller, 217 VersionRequestProto request) throws ServiceException { 218 NamespaceInfo info; 219 try { 220 info = impl.versionRequest(); 221 } catch (IOException e) { 222 throw new ServiceException(e); 223 } 224 return VersionResponseProto.newBuilder() 225 .setInfo(PBHelper.convert(info)).build(); 226 } 227 228 @Override 229 public IsUpgradeFinalizedResponseProto isUpgradeFinalized( 230 RpcController controller, IsUpgradeFinalizedRequestProto request) 231 throws ServiceException { 232 boolean isUpgradeFinalized; 233 try { 234 isUpgradeFinalized = impl.isUpgradeFinalized(); 235 } catch (IOException e) { 236 throw new ServiceException(e); 237 } 238 return IsUpgradeFinalizedResponseProto.newBuilder() 239 .setIsUpgradeFinalized(isUpgradeFinalized).build(); 240 } 241}