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.HdfsProtos.VersionRequestProto; 024import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.VersionResponseProto; 025import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos; 026import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.EndCheckpointRequestProto; 027import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.EndCheckpointResponseProto; 028import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.ErrorReportRequestProto; 029import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.ErrorReportResponseProto; 030import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlockKeysRequestProto; 031import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlockKeysResponseProto; 032import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlocksRequestProto; 033import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlocksResponseProto; 034import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetEditLogManifestRequestProto; 035import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetEditLogManifestResponseProto; 036import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetMostRecentCheckpointTxIdRequestProto; 037import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetMostRecentCheckpointTxIdResponseProto; 038import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetTransactionIdRequestProto; 039import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetTransactionIdResponseProto; 040import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.IsUpgradeFinalizedRequestProto; 041import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.IsUpgradeFinalizedResponseProto; 042import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RegisterRequestProto; 043import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RegisterResponseProto; 044import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RollEditLogRequestProto; 045import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RollEditLogResponseProto; 046import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.StartCheckpointRequestProto; 047import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.StartCheckpointResponseProto; 048import org.apache.hadoop.hdfs.security.token.block.ExportedBlockKeys; 049import org.apache.hadoop.hdfs.server.namenode.CheckpointSignature; 050import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations; 051import org.apache.hadoop.hdfs.server.protocol.NamenodeCommand; 052import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol; 053import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration; 054import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo; 055import org.apache.hadoop.hdfs.server.protocol.RemoteEditLogManifest; 056 057import com.google.protobuf.RpcController; 058import com.google.protobuf.ServiceException; 059 060/** 061 * Implementation for protobuf service that forwards requests 062 * received on {@link NamenodeProtocolPB} to the 063 * {@link NamenodeProtocol} server implementation. 064 */ 065public class NamenodeProtocolServerSideTranslatorPB implements 066 NamenodeProtocolPB { 067 private final NamenodeProtocol impl; 068 069 private final static ErrorReportResponseProto VOID_ERROR_REPORT_RESPONSE = 070 ErrorReportResponseProto.newBuilder().build(); 071 072 private final static EndCheckpointResponseProto VOID_END_CHECKPOINT_RESPONSE = 073 EndCheckpointResponseProto.newBuilder().build(); 074 075 public NamenodeProtocolServerSideTranslatorPB(NamenodeProtocol impl) { 076 this.impl = impl; 077 } 078 079 @Override 080 public GetBlocksResponseProto getBlocks(RpcController unused, 081 GetBlocksRequestProto request) throws ServiceException { 082 DatanodeInfo dnInfo = new DatanodeInfo(PBHelper.convert(request 083 .getDatanode())); 084 BlocksWithLocations blocks; 085 try { 086 blocks = impl.getBlocks(dnInfo, request.getSize()); 087 } catch (IOException e) { 088 throw new ServiceException(e); 089 } 090 return GetBlocksResponseProto.newBuilder() 091 .setBlocks(PBHelper.convert(blocks)).build(); 092 } 093 094 @Override 095 public GetBlockKeysResponseProto getBlockKeys(RpcController unused, 096 GetBlockKeysRequestProto request) throws ServiceException { 097 ExportedBlockKeys keys; 098 try { 099 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 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 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 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 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 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 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 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 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 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 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}