001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.hadoop.hdfs.protocolPB;
019
020 import java.io.IOException;
021
022 import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
023 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.VersionRequestProto;
024 import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.VersionResponseProto;
025 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.EndCheckpointRequestProto;
026 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.EndCheckpointResponseProto;
027 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.ErrorReportRequestProto;
028 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.ErrorReportResponseProto;
029 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlockKeysRequestProto;
030 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlockKeysResponseProto;
031 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlocksRequestProto;
032 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetBlocksResponseProto;
033 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetEditLogManifestRequestProto;
034 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetEditLogManifestResponseProto;
035 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetMostRecentCheckpointTxIdRequestProto;
036 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetMostRecentCheckpointTxIdResponseProto;
037 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetTransactionIdRequestProto;
038 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.GetTransactionIdResponseProto;
039 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RegisterRequestProto;
040 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RegisterResponseProto;
041 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RollEditLogRequestProto;
042 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.RollEditLogResponseProto;
043 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.StartCheckpointRequestProto;
044 import org.apache.hadoop.hdfs.protocol.proto.NamenodeProtocolProtos.StartCheckpointResponseProto;
045 import org.apache.hadoop.hdfs.security.token.block.ExportedBlockKeys;
046 import org.apache.hadoop.hdfs.server.namenode.CheckpointSignature;
047 import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations;
048 import org.apache.hadoop.hdfs.server.protocol.NamenodeCommand;
049 import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol;
050 import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration;
051 import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo;
052 import org.apache.hadoop.hdfs.server.protocol.RemoteEditLogManifest;
053
054 import com.google.protobuf.RpcController;
055 import com.google.protobuf.ServiceException;
056
057 /**
058 * Implementation for protobuf service that forwards requests
059 * received on {@link NamenodeProtocolPB} to the
060 * {@link NamenodeProtocol} server implementation.
061 */
062 public class NamenodeProtocolServerSideTranslatorPB implements
063 NamenodeProtocolPB {
064 private final NamenodeProtocol impl;
065
066 private final static ErrorReportResponseProto VOID_ERROR_REPORT_RESPONSE =
067 ErrorReportResponseProto.newBuilder().build();
068
069 private final static EndCheckpointResponseProto VOID_END_CHECKPOINT_RESPONSE =
070 EndCheckpointResponseProto.newBuilder().build();
071
072 public NamenodeProtocolServerSideTranslatorPB(NamenodeProtocol impl) {
073 this.impl = impl;
074 }
075
076 @Override
077 public GetBlocksResponseProto getBlocks(RpcController unused,
078 GetBlocksRequestProto request) throws ServiceException {
079 DatanodeInfo dnInfo = new DatanodeInfo(PBHelper.convert(request
080 .getDatanode()));
081 BlocksWithLocations blocks;
082 try {
083 blocks = impl.getBlocks(dnInfo, request.getSize());
084 } catch (IOException e) {
085 throw new ServiceException(e);
086 }
087 return GetBlocksResponseProto.newBuilder()
088 .setBlocks(PBHelper.convert(blocks)).build();
089 }
090
091 @Override
092 public GetBlockKeysResponseProto getBlockKeys(RpcController unused,
093 GetBlockKeysRequestProto request) throws ServiceException {
094 ExportedBlockKeys keys;
095 try {
096 keys = impl.getBlockKeys();
097 } catch (IOException e) {
098 throw new ServiceException(e);
099 }
100 GetBlockKeysResponseProto.Builder builder =
101 GetBlockKeysResponseProto.newBuilder();
102 if (keys != null) {
103 builder.setKeys(PBHelper.convert(keys));
104 }
105 return builder.build();
106 }
107
108 @Override
109 public GetTransactionIdResponseProto getTransactionId(RpcController unused,
110 GetTransactionIdRequestProto request) throws ServiceException {
111 long txid;
112 try {
113 txid = impl.getTransactionID();
114 } catch (IOException e) {
115 throw new ServiceException(e);
116 }
117 return GetTransactionIdResponseProto.newBuilder().setTxId(txid).build();
118 }
119
120 @Override
121 public GetMostRecentCheckpointTxIdResponseProto getMostRecentCheckpointTxId(
122 RpcController unused, GetMostRecentCheckpointTxIdRequestProto request)
123 throws ServiceException {
124 long txid;
125 try {
126 txid = impl.getMostRecentCheckpointTxId();
127 } catch (IOException e) {
128 throw new ServiceException(e);
129 }
130 return GetMostRecentCheckpointTxIdResponseProto.newBuilder().setTxId(txid).build();
131 }
132
133
134 @Override
135 public RollEditLogResponseProto rollEditLog(RpcController unused,
136 RollEditLogRequestProto request) throws ServiceException {
137 CheckpointSignature signature;
138 try {
139 signature = impl.rollEditLog();
140 } catch (IOException e) {
141 throw new ServiceException(e);
142 }
143 return RollEditLogResponseProto.newBuilder()
144 .setSignature(PBHelper.convert(signature)).build();
145 }
146
147 @Override
148 public ErrorReportResponseProto errorReport(RpcController unused,
149 ErrorReportRequestProto request) throws ServiceException {
150 try {
151 impl.errorReport(PBHelper.convert(request.getRegistration()),
152 request.getErrorCode(), request.getMsg());
153 } catch (IOException e) {
154 throw new ServiceException(e);
155 }
156 return VOID_ERROR_REPORT_RESPONSE;
157 }
158
159 @Override
160 public RegisterResponseProto registerSubordinateNamenode(
161 RpcController unused, RegisterRequestProto request)
162 throws ServiceException {
163 NamenodeRegistration reg;
164 try {
165 reg = impl.registerSubordinateNamenode(
166 PBHelper.convert(request.getRegistration()));
167 } catch (IOException e) {
168 throw new ServiceException(e);
169 }
170 return RegisterResponseProto.newBuilder()
171 .setRegistration(PBHelper.convert(reg)).build();
172 }
173
174 @Override
175 public StartCheckpointResponseProto startCheckpoint(RpcController unused,
176 StartCheckpointRequestProto request) throws ServiceException {
177 NamenodeCommand cmd;
178 try {
179 cmd = impl.startCheckpoint(PBHelper.convert(request.getRegistration()));
180 } catch (IOException e) {
181 throw new ServiceException(e);
182 }
183 return StartCheckpointResponseProto.newBuilder()
184 .setCommand(PBHelper.convert(cmd)).build();
185 }
186
187 @Override
188 public EndCheckpointResponseProto endCheckpoint(RpcController unused,
189 EndCheckpointRequestProto request) throws ServiceException {
190 try {
191 impl.endCheckpoint(PBHelper.convert(request.getRegistration()),
192 PBHelper.convert(request.getSignature()));
193 } catch (IOException e) {
194 throw new ServiceException(e);
195 }
196 return VOID_END_CHECKPOINT_RESPONSE;
197 }
198
199 @Override
200 public GetEditLogManifestResponseProto getEditLogManifest(
201 RpcController unused, GetEditLogManifestRequestProto request)
202 throws ServiceException {
203 RemoteEditLogManifest manifest;
204 try {
205 manifest = impl.getEditLogManifest(request.getSinceTxId());
206 } catch (IOException e) {
207 throw new ServiceException(e);
208 }
209 return GetEditLogManifestResponseProto.newBuilder()
210 .setManifest(PBHelper.convert(manifest)).build();
211 }
212
213 @Override
214 public VersionResponseProto versionRequest(RpcController controller,
215 VersionRequestProto request) throws ServiceException {
216 NamespaceInfo info;
217 try {
218 info = impl.versionRequest();
219 } catch (IOException e) {
220 throw new ServiceException(e);
221 }
222 return VersionResponseProto.newBuilder()
223 .setInfo(PBHelper.convert(info)).build();
224 }
225 }