YARN-9801. SchedConfCli does not work wiwith https mode. Contributed by Prabhu Joseph

(cherry picked from commit 99cd7572f1)
This commit is contained in:
Sunil G 2019-10-01 20:06:21 +05:30
parent 5cd6eb2a18
commit 312cfa994a
1 changed files with 58 additions and 4 deletions

View File

@ -23,6 +23,8 @@ import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.WebResource.Builder; import com.sun.jersey.api.client.WebResource.Builder;
import com.sun.jersey.client.urlconnection.HttpURLConnectionFactory;
import com.sun.jersey.client.urlconnection.URLConnectionClientHandler;
import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.GnuParser; import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.MissingArgumentException; import org.apache.commons.cli.MissingArgumentException;
@ -31,6 +33,8 @@ import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.hadoop.classification.InterfaceStability.Unstable; import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured; import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.security.authentication.client.AuthenticatedURL;
import org.apache.hadoop.security.ssl.SSLFactory;
import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.Tool;
import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.conf.YarnConfiguration;
@ -41,6 +45,9 @@ import org.apache.hadoop.yarn.webapp.util.YarnWebServiceUtils;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@ -156,7 +163,12 @@ public class SchedConfCLI extends Configured implements Tool {
@VisibleForTesting @VisibleForTesting
int formatSchedulerConf(String webAppAddress, WebResource resource) int formatSchedulerConf(String webAppAddress, WebResource resource)
throws Exception { throws Exception {
Client webServiceClient = Client.create(); Configuration conf = getConf();
SSLFactory clientSslFactory = null;
if (YarnConfiguration.useHttps(conf)) {
clientSslFactory = new SSLFactory(SSLFactory.Mode.CLIENT, conf);
}
Client webServiceClient = createWebServiceClient(clientSslFactory);
ClientResponse response = null; ClientResponse response = null;
resource = (resource != null) ? resource : resource = (resource != null) ? resource :
webServiceClient.resource(webAppAddress); webServiceClient.resource(webAppAddress);
@ -194,14 +206,24 @@ public class SchedConfCLI extends Configured implements Tool {
if (response != null) { if (response != null) {
response.close(); response.close();
} }
webServiceClient.destroy(); if (webServiceClient != null) {
webServiceClient.destroy();
}
if (clientSslFactory != null) {
clientSslFactory.destroy();
}
} }
} }
@VisibleForTesting @VisibleForTesting
int updateSchedulerConfOnRMNode(String webAppAddress, int updateSchedulerConfOnRMNode(String webAppAddress,
SchedConfUpdateInfo updateInfo) throws Exception { SchedConfUpdateInfo updateInfo) throws Exception {
Client webServiceClient = Client.create(); Configuration conf = getConf();
SSLFactory clientSslFactory = null;
if (YarnConfiguration.useHttps(conf)) {
clientSslFactory = new SSLFactory(SSLFactory.Mode.CLIENT, conf);
}
Client webServiceClient = createWebServiceClient(clientSslFactory);
ClientResponse response = null; ClientResponse response = null;
WebResource resource = webServiceClient.resource(webAppAddress); WebResource resource = webServiceClient.resource(webAppAddress);
@ -236,10 +258,42 @@ public class SchedConfCLI extends Configured implements Tool {
if (response != null) { if (response != null) {
response.close(); response.close();
} }
webServiceClient.destroy(); if (webServiceClient != null) {
webServiceClient.destroy();
}
if (clientSslFactory != null) {
clientSslFactory.destroy();
}
} }
} }
private Client createWebServiceClient(SSLFactory clientSslFactory) {
Client webServiceClient = new Client(new URLConnectionClientHandler(
new HttpURLConnectionFactory() {
@Override
public HttpURLConnection getHttpURLConnection(URL url)
throws IOException {
AuthenticatedURL.Token token = new AuthenticatedURL.Token();
AuthenticatedURL aUrl;
HttpURLConnection conn = null;
try {
if (clientSslFactory != null) {
clientSslFactory.init();
aUrl = new AuthenticatedURL(null, clientSslFactory);
} else {
aUrl = new AuthenticatedURL();
}
conn = aUrl.openConnection(url, token);
} catch (Exception e) {
throw new IOException(e);
}
return conn;
}
}));
webServiceClient.setChunkedEncodingSize(null);
return webServiceClient;
}
@VisibleForTesting @VisibleForTesting
void addQueues(String args, SchedConfUpdateInfo updateInfo) { void addQueues(String args, SchedConfUpdateInfo updateInfo) {