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 
19 package org.apache.hadoop.yarn.server.api.impl.pb.client;
20 
21 import java.io.Closeable;
22 import java.io.IOException;
23 import java.net.InetSocketAddress;
24 
25 import org.apache.hadoop.classification.InterfaceAudience.Private;
26 import org.apache.hadoop.conf.Configuration;
27 import org.apache.hadoop.ipc.ProtobufHelper;
28 import org.apache.hadoop.ipc.ProtobufRpcEngine;
29 import org.apache.hadoop.ipc.RPC;
30 import org.apache.hadoop.yarn.exceptions.YarnException;
31 import org.apache.hadoop.yarn.ipc.RPCUtil;
32 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.AddToClusterNodeLabelsRequestProto;
33 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.GetGroupsForUserRequestProto;
34 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.GetGroupsForUserResponseProto;
35 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.RefreshAdminAclsRequestProto;
36 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.RefreshNodesRequestProto;
37 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.RefreshQueuesRequestProto;
38 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.RefreshServiceAclsRequestProto;
39 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.RefreshSuperUserGroupsConfigurationRequestProto;
40 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.RefreshUserToGroupsMappingsRequestProto;
41 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.RemoveFromClusterNodeLabelsRequestProto;
42 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.ReplaceLabelsOnNodeRequestProto;
43 import org.apache.hadoop.yarn.proto.YarnServerResourceManagerServiceProtos.UpdateNodeResourceRequestProto;
44 import org.apache.hadoop.yarn.server.api.ResourceManagerAdministrationProtocol;
45 import org.apache.hadoop.yarn.server.api.ResourceManagerAdministrationProtocolPB;
46 import org.apache.hadoop.yarn.server.api.protocolrecords.AddToClusterNodeLabelsRequest;
47 import org.apache.hadoop.yarn.server.api.protocolrecords.AddToClusterNodeLabelsResponse;
48 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshAdminAclsRequest;
49 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshAdminAclsResponse;
50 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshNodesRequest;
51 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshNodesResponse;
52 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshQueuesRequest;
53 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshQueuesResponse;
54 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshServiceAclsRequest;
55 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshServiceAclsResponse;
56 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshSuperUserGroupsConfigurationRequest;
57 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshSuperUserGroupsConfigurationResponse;
58 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshUserToGroupsMappingsRequest;
59 import org.apache.hadoop.yarn.server.api.protocolrecords.RefreshUserToGroupsMappingsResponse;
60 import org.apache.hadoop.yarn.server.api.protocolrecords.RemoveFromClusterNodeLabelsRequest;
61 import org.apache.hadoop.yarn.server.api.protocolrecords.RemoveFromClusterNodeLabelsResponse;
62 import org.apache.hadoop.yarn.server.api.protocolrecords.ReplaceLabelsOnNodeRequest;
63 import org.apache.hadoop.yarn.server.api.protocolrecords.ReplaceLabelsOnNodeResponse;
64 import org.apache.hadoop.yarn.server.api.protocolrecords.UpdateNodeResourceRequest;
65 import org.apache.hadoop.yarn.server.api.protocolrecords.UpdateNodeResourceResponse;
66 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.AddToClusterNodeLabelsRequestPBImpl;
67 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.AddToClusterNodeLabelsResponsePBImpl;
68 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshAdminAclsRequestPBImpl;
69 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshAdminAclsResponsePBImpl;
70 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshNodesRequestPBImpl;
71 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshNodesResponsePBImpl;
72 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshQueuesRequestPBImpl;
73 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshQueuesResponsePBImpl;
74 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshServiceAclsRequestPBImpl;
75 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshServiceAclsResponsePBImpl;
76 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshSuperUserGroupsConfigurationRequestPBImpl;
77 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshSuperUserGroupsConfigurationResponsePBImpl;
78 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshUserToGroupsMappingsRequestPBImpl;
79 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RefreshUserToGroupsMappingsResponsePBImpl;
80 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RemoveFromClusterNodeLabelsRequestPBImpl;
81 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RemoveFromClusterNodeLabelsResponsePBImpl;
82 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.ReplaceLabelsOnNodeRequestPBImpl;
83 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.ReplaceLabelsOnNodeResponsePBImpl;
84 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.UpdateNodeResourceRequestPBImpl;
85 import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.UpdateNodeResourceResponsePBImpl;
86 
87 import com.google.protobuf.ServiceException;
88 
89 @Private
90 public class ResourceManagerAdministrationProtocolPBClientImpl implements ResourceManagerAdministrationProtocol, Closeable {
91 
92   private ResourceManagerAdministrationProtocolPB proxy;
93 
ResourceManagerAdministrationProtocolPBClientImpl(long clientVersion, InetSocketAddress addr, Configuration conf)94   public ResourceManagerAdministrationProtocolPBClientImpl(long clientVersion, InetSocketAddress addr,
95       Configuration conf) throws IOException {
96     RPC.setProtocolEngine(conf, ResourceManagerAdministrationProtocolPB.class,
97         ProtobufRpcEngine.class);
98     proxy = (ResourceManagerAdministrationProtocolPB)RPC.getProxy(
99         ResourceManagerAdministrationProtocolPB.class, clientVersion, addr, conf);
100   }
101 
102   @Override
close()103   public void close() {
104     if (this.proxy != null) {
105       RPC.stopProxy(this.proxy);
106     }
107   }
108 
109   @Override
refreshQueues(RefreshQueuesRequest request)110   public RefreshQueuesResponse refreshQueues(RefreshQueuesRequest request)
111       throws YarnException, IOException {
112     RefreshQueuesRequestProto requestProto =
113       ((RefreshQueuesRequestPBImpl)request).getProto();
114     try {
115       return new RefreshQueuesResponsePBImpl(
116           proxy.refreshQueues(null, requestProto));
117     } catch (ServiceException e) {
118       RPCUtil.unwrapAndThrowException(e);
119       return null;
120     }
121   }
122 
123   @Override
refreshNodes(RefreshNodesRequest request)124   public RefreshNodesResponse refreshNodes(RefreshNodesRequest request)
125   throws YarnException, IOException {
126     RefreshNodesRequestProto requestProto =
127       ((RefreshNodesRequestPBImpl)request).getProto();
128     try {
129       return new RefreshNodesResponsePBImpl(
130           proxy.refreshNodes(null, requestProto));
131     } catch (ServiceException e) {
132       RPCUtil.unwrapAndThrowException(e);
133       return null;
134     }
135   }
136 
137   @Override
refreshSuperUserGroupsConfiguration( RefreshSuperUserGroupsConfigurationRequest request)138   public RefreshSuperUserGroupsConfigurationResponse refreshSuperUserGroupsConfiguration(
139       RefreshSuperUserGroupsConfigurationRequest request)
140       throws YarnException, IOException {
141     RefreshSuperUserGroupsConfigurationRequestProto requestProto =
142       ((RefreshSuperUserGroupsConfigurationRequestPBImpl)request).getProto();
143     try {
144       return new RefreshSuperUserGroupsConfigurationResponsePBImpl(
145           proxy.refreshSuperUserGroupsConfiguration(null, requestProto));
146     } catch (ServiceException e) {
147       RPCUtil.unwrapAndThrowException(e);
148       return null;
149     }
150   }
151 
152   @Override
refreshUserToGroupsMappings( RefreshUserToGroupsMappingsRequest request)153   public RefreshUserToGroupsMappingsResponse refreshUserToGroupsMappings(
154       RefreshUserToGroupsMappingsRequest request) throws YarnException,
155       IOException {
156     RefreshUserToGroupsMappingsRequestProto requestProto =
157       ((RefreshUserToGroupsMappingsRequestPBImpl)request).getProto();
158     try {
159       return new RefreshUserToGroupsMappingsResponsePBImpl(
160           proxy.refreshUserToGroupsMappings(null, requestProto));
161     } catch (ServiceException e) {
162       RPCUtil.unwrapAndThrowException(e);
163       return null;
164     }
165   }
166 
167   @Override
refreshAdminAcls( RefreshAdminAclsRequest request)168   public RefreshAdminAclsResponse refreshAdminAcls(
169       RefreshAdminAclsRequest request) throws YarnException, IOException {
170     RefreshAdminAclsRequestProto requestProto =
171       ((RefreshAdminAclsRequestPBImpl)request).getProto();
172     try {
173       return new RefreshAdminAclsResponsePBImpl(
174           proxy.refreshAdminAcls(null, requestProto));
175     } catch (ServiceException e) {
176       RPCUtil.unwrapAndThrowException(e);
177       return null;
178     }
179   }
180 
181   @Override
refreshServiceAcls( RefreshServiceAclsRequest request)182   public RefreshServiceAclsResponse refreshServiceAcls(
183       RefreshServiceAclsRequest request) throws YarnException,
184       IOException {
185     RefreshServiceAclsRequestProto requestProto =
186         ((RefreshServiceAclsRequestPBImpl)request).getProto();
187     try {
188       return new RefreshServiceAclsResponsePBImpl(proxy.refreshServiceAcls(
189           null, requestProto));
190     } catch (ServiceException e) {
191       RPCUtil.unwrapAndThrowException(e);
192       return null;
193     }
194   }
195 
196   @Override
getGroupsForUser(String user)197   public String[] getGroupsForUser(String user) throws IOException {
198     GetGroupsForUserRequestProto requestProto =
199         GetGroupsForUserRequestProto.newBuilder().setUser(user).build();
200     try {
201       GetGroupsForUserResponseProto responseProto =
202           proxy.getGroupsForUser(null, requestProto);
203       return (String[]) responseProto.getGroupsList().toArray(
204           new String[responseProto.getGroupsCount()]);
205     } catch (ServiceException e) {
206       throw ProtobufHelper.getRemoteException(e);
207     }
208   }
209 
210   @Override
updateNodeResource( UpdateNodeResourceRequest request)211   public UpdateNodeResourceResponse updateNodeResource(
212       UpdateNodeResourceRequest request) throws YarnException, IOException {
213     UpdateNodeResourceRequestProto requestProto =
214         ((UpdateNodeResourceRequestPBImpl) request).getProto();
215     try {
216       return new UpdateNodeResourceResponsePBImpl(proxy.updateNodeResource(null,
217           requestProto));
218     } catch (ServiceException e) {
219       RPCUtil.unwrapAndThrowException(e);
220       return null;
221     }
222   }
223 
224   @Override
addToClusterNodeLabels( AddToClusterNodeLabelsRequest request)225   public AddToClusterNodeLabelsResponse addToClusterNodeLabels(
226       AddToClusterNodeLabelsRequest request) throws YarnException, IOException {
227     AddToClusterNodeLabelsRequestProto requestProto =
228         ((AddToClusterNodeLabelsRequestPBImpl) request).getProto();
229     try {
230       return new AddToClusterNodeLabelsResponsePBImpl(
231           proxy.addToClusterNodeLabels(null, requestProto));
232     } catch (ServiceException e) {
233       RPCUtil.unwrapAndThrowException(e);
234       return null;
235     }
236   }
237 
238   @Override
removeFromClusterNodeLabels( RemoveFromClusterNodeLabelsRequest request)239   public RemoveFromClusterNodeLabelsResponse removeFromClusterNodeLabels(
240       RemoveFromClusterNodeLabelsRequest request) throws YarnException,
241       IOException {
242     RemoveFromClusterNodeLabelsRequestProto requestProto =
243         ((RemoveFromClusterNodeLabelsRequestPBImpl) request).getProto();
244     try {
245       return new RemoveFromClusterNodeLabelsResponsePBImpl(
246           proxy.removeFromClusterNodeLabels(null, requestProto));
247     } catch (ServiceException e) {
248       RPCUtil.unwrapAndThrowException(e);
249       return null;
250     }
251   }
252 
253   @Override
replaceLabelsOnNode( ReplaceLabelsOnNodeRequest request)254   public ReplaceLabelsOnNodeResponse replaceLabelsOnNode(
255       ReplaceLabelsOnNodeRequest request) throws YarnException, IOException {
256     ReplaceLabelsOnNodeRequestProto requestProto =
257         ((ReplaceLabelsOnNodeRequestPBImpl) request).getProto();
258     try {
259       return new ReplaceLabelsOnNodeResponsePBImpl(proxy.replaceLabelsOnNodes(
260           null, requestProto));
261     } catch (ServiceException e) {
262       RPCUtil.unwrapAndThrowException(e);
263       return null;
264     }
265   }
266 }
267