diff options
author | Kristian Aune <kristian@ymail.com> | 2019-05-10 15:05:59 +0200 |
---|---|---|
committer | Kristian Aune <kristian@ymail.com> | 2019-05-10 15:05:59 +0200 |
commit | 2493c712767aaef001cd352e36daeaf3efa2b20f (patch) | |
tree | 9fd2ec9f781aa053330a2b255cc9d76afb3e9ec6 /vespa-http-client | |
parent | ac6d02a037eef115b545e98187f00486e01bd189 (diff) |
Add endpoint parameter
- and allow building an endpoint from URL
Diffstat (limited to 'vespa-http-client')
3 files changed, 73 insertions, 12 deletions
diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/config/Endpoint.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/config/Endpoint.java index 7ba6dd04a80..b7d8cab5a4f 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/config/Endpoint.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/config/Endpoint.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.http.client.config; import java.io.Serializable; +import java.net.URL; /** * Represents an endpoint, in most cases a JDisc container @@ -34,6 +35,10 @@ public final class Endpoint implements Serializable { return new Endpoint(hostname, port, useSsl); } + public static Endpoint create(URL url) { + return new Endpoint(url.getHost(), url.getPort(), "https".equals(url.getProtocol())); + } + private static final long serialVersionUID = 4545345L; private final String hostname; private final int port; diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/CommandLineArguments.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/CommandLineArguments.java index b9219d8f267..dff5e0f4ef3 100644 --- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/CommandLineArguments.java +++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/runner/CommandLineArguments.java @@ -18,6 +18,8 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.message.BasicLineParser; import javax.inject.Inject; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -49,10 +51,18 @@ public class CommandLineArguments { if (cmdArgs.helpOption.showHelpIfRequested()) { return null; } - - if (cmdArgs.hostArg == null) { - System.err.println("'--host' not set."); - return null; + if (cmdArgs.endpointArg != null) { + try { + URL url = new URL(cmdArgs.endpointArg); + } catch (MalformedURLException e) { + e.printStackTrace(System.err); + return null; + } + } else { + if (cmdArgs.hostArg == null) { + System.err.println("'--host' or '--endpoint' not set."); + return null; + } } if (cmdArgs.priorityArg != null && ! checkPriorityFlag(cmdArgs.priorityArg)) { return null; @@ -114,8 +124,12 @@ public class CommandLineArguments { description = "(=default)The route to send the data to.") private String routeArg = "default"; + @Option(name = {"--endpoint"}, + description = "Vespa endpoint.") + private String endpointArg; + @Option(name = {"--host"}, - description = "The host(s) for the gateway. If using several, use comma to sepparate them.") + description = "The host(s) for the gateway. If using several, use comma to separate them.") private String hostArg; @Option(name = {"--port"}, @@ -141,7 +155,7 @@ public class CommandLineArguments { @Option(name = {"-v", "--verbose"}, description = "Enable verbose output of progress.") - private boolean verboaseArg = false; + private boolean verboseArg = false; @Option(name = {"--noretry"}, description = "Turns off retries of recoverable failures..") @@ -199,7 +213,7 @@ public class CommandLineArguments { public String getFile() { return fileArg; }; - public boolean getVerbose() { return verboaseArg; } + public boolean getVerbose() { return verboseArg; } public boolean getAddRootElementToXml() { return addRootElementToXml; } @@ -239,11 +253,21 @@ public class CommandLineArguments { // Enable dynamic throttling. .setThrottlerMinSize(minThrottleValue) .setClientQueueSize(maxPendingOperationCountArg); - Iterable<String> hosts = Splitter.on(',').trimResults().split(hostArg); - for (String host : hosts) { - builder.addCluster(new Cluster.Builder() - .addEndpoint(Endpoint.create(host, portArg, useTls)) - .build()); + if (endpointArg != null) { + try { + builder.addCluster(new Cluster.Builder() + .addEndpoint(Endpoint.create(new URL(endpointArg))) + .build()); + } + catch (MalformedURLException e) {} // already checked when parsing arguments + } + else { + Iterable<String> hosts = Splitter.on(',').trimResults().split(hostArg); + for (String host : hosts) { + builder.addCluster(new Cluster.Builder() + .addEndpoint(Endpoint.create(host, portArg, useTls)) + .build()); + } } return builder.build(); } diff --git a/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/runner/CommandLineArgumentsTest.java b/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/runner/CommandLineArgumentsTest.java index 02509626176..6dd0c54e150 100644 --- a/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/runner/CommandLineArgumentsTest.java +++ b/vespa-http-client/src/test/java/com/yahoo/vespa/http/client/runner/CommandLineArgumentsTest.java @@ -180,4 +180,36 @@ public class CommandLineArgumentsTest { CommandLineArguments arguments = CommandLineArguments.build(asArray()); SessionParams params = arguments.createSessionParams(true /* use json */); } + + @Test + public void testEndpointAndHost() { + args.clear(); + add("endpoint", "http://myendpoint:1234"); + CommandLineArguments arguments = CommandLineArguments.build(asArray()); + SessionParams params = arguments.createSessionParams(true); + + assertThat(params.getClusters().get(0).getEndpoints().get(0).getHostname(), is("myendpoint")); + assertThat(params.getClusters().get(0).getEndpoints().get(0).getPort(), is(1234)); + assertThat(params.getClusters().get(0).getEndpoints().get(0).isUseSsl(), is(false)); + + add("host", "myhost"); // endpoint dominates host and port + add("port", "2345"); + arguments = CommandLineArguments.build(asArray()); + params = arguments.createSessionParams(true); + assertThat(params.getClusters().get(0).getEndpoints().get(0).getHostname(), is("myendpoint")); + assertThat(params.getClusters().get(0).getEndpoints().get(0).getPort(), is(1234)); + + args.clear(); + add("endpoint", "https://myendpoint:1234"); + arguments = CommandLineArguments.build(asArray()); + params = arguments.createSessionParams(true); + assertThat(params.getClusters().get(0).getEndpoints().get(0).isUseSsl(), is(true)); + + args.clear(); + add("endpoint", "https://myendpoint::1234"); + arguments = CommandLineArguments.build(asArray()); + params = arguments.createSessionParams(true); + assertThat(params.getClusters().get(0).getEndpoints().get(0).isUseSsl(), is(true)); + + } } |