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