From 3cafacc3e9d28047f25e3957cbbc72752272c351 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 6 Nov 2017 15:43:20 -0500 Subject: [PATCH 01/15] Fixes #2415 --- .../cloud/netflix/zuul/ZuulProxyMarkerConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyMarkerConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyMarkerConfiguration.java index 0e88776c..451442bf 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyMarkerConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyMarkerConfiguration.java @@ -22,7 +22,7 @@ import org.springframework.context.annotation.Configuration; /** * Responsible for adding in a marker bean to trigger activation of - * {@link ZuulServerAutoConfiguration} + * {@link ZuulProxyAutoConfiguration} * * @author Biju Kunjummen */ From 573d52119af9523fb43646a78242b14c19893063 Mon Sep 17 00:00:00 2001 From: agseijas Date: Tue, 7 Nov 2017 16:56:10 +0100 Subject: [PATCH 02/15] Adds feign-* missing managed dependencies (#2417) Probably we could import a bom from feign. --- spring-cloud-netflix-dependencies/pom.xml | 40 +++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml index d136670f..50c8fa8e 100644 --- a/spring-cloud-netflix-dependencies/pom.xml +++ b/spring-cloud-netflix-dependencies/pom.xml @@ -368,6 +368,46 @@ feign-okhttp ${feign.version} + + io.github.openfeign + feign-gson + ${feign.version} + + + io.github.openfeign + feign-jackson-jaxb + ${feign.version} + + + io.github.openfeign + feign-jackson + ${feign.version} + + + io.github.openfeign + feign-java8 + ${feign.version} + + + io.github.openfeign + feign-jaxb + ${feign.version} + + + io.github.openfeign + feign-jaxrs + ${feign.version} + + + io.github.openfeign + feign-ribbon + ${feign.version} + + + io.github.openfeign + feign-sax + ${feign.version} + com.netflix.hystrix hystrix-core From ba248113564745e42f3ffdc8152e707b53012163 Mon Sep 17 00:00:00 2001 From: Nastya Smirnova Date: Tue, 7 Nov 2017 20:42:23 +0200 Subject: [PATCH 03/15] Report jmx and management ports to Eureka metadata map (#1830) Follows: https://github.com/spring-cloud/spring-cloud-netflix/pull/1317 --- .../main/asciidoc/spring-cloud-netflix.adoc | 5 +- .../eureka/EurekaClientAutoConfiguration.java | 15 +++- .../EurekaClientAutoConfigurationTests.java | 86 ++++++++++++++----- 3 files changed, 83 insertions(+), 23 deletions(-) diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index 60728853..e2e26a0b 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -669,8 +669,9 @@ in order for the Hystrix Dashboard to make a successful connection to the stream Looking at an individual instances Hystrix data is not very useful in terms of the overall health of the system. https://github.com/Netflix/Turbine[Turbine] is an application that aggregates all of the relevant `/hystrix.stream` endpoints into a combined `/turbine.stream` for use in the Hystrix Dashboard. Individual instances are located via Eureka. Running Turbine is as simple as annotating your main class with the `@EnableTurbine` annotation (e.g. using spring-cloud-starter-netflix-turbine to set up the classpath). All of the documented configuration properties from https://github.com/Netflix/Turbine/wiki/Configuration-(1.x)[the Turbine 1 wiki] apply. The only difference is that the `turbine.instanceUrlSuffix` does not need the port prepended as this is handled automatically unless `turbine.instanceInsertPort=false`. -NOTE: By default, Turbine looks for the `/hystrix.stream` endpoint on a registered instance by looking up its `homePageUrl` entry in Eureka, then appending `/hystrix.stream` to it. This means that if `spring-boot-actuator` is running on its own port (which is the default), the call to `/hystrix.stream` will fail. -To make turbine find the Hystrix stream at the correct port, you need to add `management.port` to the instances' metadata: +NOTE: By default, Turbine looks for the `/hystrix.stream` endpoint on a registered instance by looking up its `hostName` and `port` entries in Eureka, then appending `/hystrix.stream` to it. +If the instance's metadata contains `management.port`, it will be used instead of the `port` value for the `/hystrix.stream` endpoint. +By default, metadata entry `management.port` is equal to the `management.port` configuration property, it can be overridden though with following configuration: ---- eureka: instance: diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index 30f00ab8..e763bbe2 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -12,7 +12,6 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * */ package org.springframework.cloud.netflix.eureka; @@ -26,6 +25,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.net.MalformedURLException; import java.net.URL; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.endpoint.Endpoint; @@ -131,6 +131,7 @@ public class EurekaClientAutoConfiguration { int managementPort = Integer.valueOf(propertyResolver.getProperty("management.port", String.valueOf(nonSecurePort))); String managementContextPath = propertyResolver.getProperty("management.contextPath", propertyResolver.getProperty("server.contextPath", "/")); + Integer jmxPort = propertyResolver.getProperty("com.sun.management.jmxremote.port", Integer.class);//nullable EurekaInstanceConfigBean instance = new EurekaInstanceConfigBean(inetUtils); instance.setNonSecurePort(nonSecurePort); instance.setInstanceId(getDefaultInstanceId(propertyResolver)); @@ -162,9 +163,21 @@ public class EurekaClientAutoConfiguration { instance.setStatusPageUrl(new URL(base, StringUtils.trimLeadingCharacter(instance.getStatusPageUrlPath(), '/')).toString()); instance.setHealthCheckUrl(new URL(base, StringUtils.trimLeadingCharacter(instance.getHealthCheckUrlPath(), '/')).toString()); } + setupMetadataMap(instance, managementPort, jmxPort); return instance; } + private void setupMetadataMap(EurekaInstanceConfigBean instance, int managementPort, + Integer jmxPort) { + Map metadataMap = instance.getMetadataMap(); + if (metadataMap.get("management.port") == null && managementPort != 0) { + metadataMap.put("management.port", String.valueOf(managementPort)); + } + if (metadataMap.get("jmx.port") == null && jmxPort != null) { + metadataMap.put("jmx.port", String.valueOf(jmxPort)); + } + } + @Bean public DiscoveryClient discoveryClient(EurekaInstanceConfig config, EurekaClient client) { return new EurekaDiscoveryClient(config, client); diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java index 3de661c7..8c7f59de 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java @@ -12,7 +12,6 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * */ package org.springframework.cloud.netflix.eureka; @@ -27,7 +26,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.util.EnvironmentTestUtils; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.cloud.commons.util.UtilAutoConfiguration; import org.springframework.cloud.context.scope.GenericScope; @@ -74,6 +72,54 @@ public class EurekaClientAutoConfigurationTests { this.context.refresh(); } + @Test + public void shouldSetManagementPortInMetadataMapIfEqualToServerPort() throws Exception { + addEnvironment(this.context, "server.port=8989"); + setupContext(RefreshAutoConfiguration.class); + + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + + assertEquals("8989", instance.getMetadataMap().get("management.port")); + } + + @Test + public void shouldNotSetManagementAndJmxPortsInMetadataMap() throws Exception { + addEnvironment(this.context, "server.port=8989", "management.port=0"); + setupContext(RefreshAutoConfiguration.class); + + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + + assertEquals(null, instance.getMetadataMap().get("management.port")); + assertEquals(null, instance.getMetadataMap().get("jmx.port")); + } + + @Test + public void shouldSetManagementAndJmxPortsInMetadataMap() throws Exception { + addEnvironment(this.context, "management.port=9999", + "com.sun.management.jmxremote.port=6789"); + setupContext(RefreshAutoConfiguration.class); + + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + assertEquals("9999", instance.getMetadataMap().get("management.port")); + assertEquals("6789", instance.getMetadataMap().get("jmx.port")); + } + + @Test + public void shouldNotResetManagementAndJmxPortsInMetadataMap() throws Exception { + addEnvironment(this.context, "management.port=9999", + "eureka.instance.metadata-map.jmx.port=9898", + "eureka.instance.metadata-map.management.port=7878"); + setupContext(RefreshAutoConfiguration.class); + + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + assertEquals("7878", instance.getMetadataMap().get("management.port")); + assertEquals("9898", instance.getMetadataMap().get("jmx.port")); + } + @Test public void nonSecurePortPeriods() { testNonSecurePort("server.port"); @@ -110,7 +156,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void managementPort() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999"); setupContext(RefreshAutoConfiguration.class); EurekaInstanceConfigBean instance = this.context @@ -121,7 +167,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void statusPageUrlPathAndManagementPort() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "eureka.instance.statusPageUrlPath=/myStatusPage"); setupContext(RefreshAutoConfiguration.class); @@ -133,7 +179,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void healthCheckUrlPathAndManagementPort() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "eureka.instance.healthCheckUrlPath=/myHealthCheck"); setupContext(RefreshAutoConfiguration.class); @@ -145,7 +191,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void statusPageUrlPathAndManagementPortAndContextPath() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "management.contextPath=/manage", "eureka.instance.statusPageUrlPath=/myStatusPage"); setupContext(RefreshAutoConfiguration.class); @@ -157,7 +203,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void healthCheckUrlPathAndManagementPortAndContextPath() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "management.contextPath=/manage", "eureka.instance.healthCheckUrlPath=/myHealthCheck"); setupContext(RefreshAutoConfiguration.class); @@ -169,7 +215,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void statusPageUrlPathAndManagementPortAndContextPathKebobCase() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "management.context-path=/manage", "eureka.instance.statusPageUrlPath=/myStatusPage"); setupContext(RefreshAutoConfiguration.class); @@ -181,7 +227,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void healthCheckUrlPathAndManagementPortAndContextPathKebobCase() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "management.context-path=/manage", "eureka.instance.healthCheckUrlPath=/myHealthCheck"); setupContext(RefreshAutoConfiguration.class); @@ -193,7 +239,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void statusPageUrlPathAndManagementPortKabobCase() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "eureka.instance.status-page-url-path=/myStatusPage"); setupContext(RefreshAutoConfiguration.class); @@ -205,7 +251,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void statusPageUrlAndPreferIpAddress() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "eureka.instance.hostname=foo", "eureka.instance.preferIpAddress:true"); @@ -219,7 +265,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void healthCheckUrlPathAndManagementPortKabobCase() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "eureka.instance.health-check-url-path=/myHealthCheck"); setupContext(RefreshAutoConfiguration.class); @@ -231,7 +277,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void statusPageUrlPathAndManagementPortUpperCase() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "EUREKA_INSTANCE_STATUS_PAGE_URL_PATH=/myStatusPage"); setupContext(RefreshAutoConfiguration.class); @@ -243,7 +289,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void healthCheckUrlPathAndManagementPortUpperCase() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "EUREKA_INSTANCE_HEALTH_CHECK_URL_PATH=/myHealthCheck"); setupContext(RefreshAutoConfiguration.class); @@ -255,7 +301,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void hostname() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "management.port=9999", "eureka.instance.hostname=foo"); setupContext(RefreshAutoConfiguration.class); EurekaInstanceConfigBean instance = this.context @@ -275,7 +321,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void basicAuth() { - EnvironmentTestUtils.addEnvironment(this.context, "server.port=8989", + addEnvironment(this.context, "server.port=8989", "eureka.client.serviceUrl.defaultZone=http://user:foo@example.com:80/eureka"); setupContext(MockClientConfiguration.class); // ApacheHttpClient4 http = this.context.getBean(ApacheHttpClient4.class); @@ -292,7 +338,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void testAppName() throws Exception { - EnvironmentTestUtils.addEnvironment(this.context, "spring.application.name=mytest"); + addEnvironment(this.context, "spring.application.name=mytest"); setupContext(); assertEquals("mytest", getInstanceConfig().getAppname()); assertEquals("mytest", getInstanceConfig().getVirtualHostName()); @@ -301,7 +347,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void testAppNameUpper() throws Exception { - EnvironmentTestUtils.addEnvironment(this.context, "SPRING_APPLICATION_NAME=mytestupper"); + addEnvironment(this.context, "SPRING_APPLICATION_NAME=mytestupper"); setupContext(); assertEquals("mytestupper", getInstanceConfig().getAppname()); assertEquals("mytestupper", getInstanceConfig().getVirtualHostName()); @@ -310,7 +356,7 @@ public class EurekaClientAutoConfigurationTests { @Test public void testInstanceNamePreferred() throws Exception { - EnvironmentTestUtils.addEnvironment(this.context, "SPRING_APPLICATION_NAME=mytestspringappname", + addEnvironment(this.context, "SPRING_APPLICATION_NAME=mytestspringappname", "eureka.instance.appname=mytesteurekaappname"); setupContext(); assertEquals("mytesteurekaappname", getInstanceConfig().getAppname()); @@ -349,7 +395,7 @@ public class EurekaClientAutoConfigurationTests { } private void testSecurePort(String propName) { - EnvironmentTestUtils.addEnvironment(this.context, "eureka.instance.securePortEnabled=true"); + addEnvironment(this.context, "eureka.instance.securePortEnabled=true"); addEnvironment(this.context, propName + ":8443"); setupContext(); assertEquals(8443, getInstanceConfig().getSecurePort()); From 65762b1dcebb53b240f10c0b493e183d954c1287 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Tue, 7 Nov 2017 17:26:17 -0500 Subject: [PATCH 04/15] Remove deprecated RetryableStatusCodeException. Fixes #2003 (#2427) --- .../support/RetryableStatusCodeException.java | 37 ------------------- .../RetryableStatusCodeExceptionTests.java | 36 ------------------ 2 files changed, 73 deletions(-) delete mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/RetryableStatusCodeException.java delete mode 100644 spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/support/RetryableStatusCodeExceptionTests.java diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/RetryableStatusCodeException.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/RetryableStatusCodeException.java deleted file mode 100644 index afc857b5..00000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/RetryableStatusCodeException.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * * Copyright 2013-2016 the original author or authors. - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.springframework.cloud.netflix.ribbon.support; - -import java.io.IOException; - -/** - * Exception to be thrown when the status code is deemed to be retryable. - * @author Ryan Baxter - * @deprecated Use {@link org.springframework.cloud.client.loadbalancer.RetryableStatusCodeException} instead - */ -//TODO Remove in Edgeware -@Deprecated -public class RetryableStatusCodeException extends IOException { - - private static final String MESSAGE = "Service %s returned a status code of %d"; - - public RetryableStatusCodeException(String serviceId, int statusCode) { - super(String.format(MESSAGE, serviceId, statusCode)); - } -} diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/support/RetryableStatusCodeExceptionTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/support/RetryableStatusCodeExceptionTests.java deleted file mode 100644 index e151e23c..00000000 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/support/RetryableStatusCodeExceptionTests.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * - * * Copyright 2013-2016 the original author or authors. - * * - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * - */ - -package org.springframework.cloud.netflix.ribbon.support; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - - -/** - * @author Ryan Baxter - */ -public class RetryableStatusCodeExceptionTests { - - @Test - public void testMessage() { - RetryableStatusCodeException ex = new RetryableStatusCodeException("foo", 404); - assertEquals("Service foo returned a status code of 404", ex.getMessage()); - } -} \ No newline at end of file From d9f7842aec61803a7be77ecf6ae8336c85dfd5e1 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 8 Nov 2017 11:00:51 -0500 Subject: [PATCH 05/15] Fix HystrixClientFallbackFactory implementation in docs. Fixes #2428 --- docs/src/main/asciidoc/spring-cloud-netflix.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index e2e26a0b..f98df075 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -1248,7 +1248,7 @@ protected interface HystrixClient { static class HystrixClientFallbackFactory implements FallbackFactory { @Override public HystrixClient create(Throwable cause) { - return new HystrixClientWithFallBackFactory() { + return new HystrixClient() { @Override public Hello iFailSometimes() { return new Hello("fallback; reason was: " + cause.getMessage()); From 89441ac12676f839cb5d549869656c9ff12baabb Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Fri, 10 Nov 2017 15:54:05 -0500 Subject: [PATCH 06/15] Added zuul timeout documentation. Fixes #2201 --- docs/src/main/asciidoc/spring-cloud-netflix.adoc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index f98df075..595d2233 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -2087,6 +2087,17 @@ class MyFallbackProvider implements FallbackProvider { } ---- +=== Zuul Timeouts + +If you want to configure the socket timeouts and read timeouts for requests proxied through +Zuul there are two options based on your configuration. + +If Zuul is using service discovery than you need to configure these timeouts via Ribbon properties, +`ribbon.ReadTimeout` and `ribbon.SocketTimeout`. + +If you have configured Zuul routes by specifying URLs than you will need to use +`zuul.host.connect-timeout-millis` and `zuul.host.socket-timeout-millis`. + [[zuul-redirect-location-rewrite]] === Rewriting `Location` header From 62a8f72b983a5dd501cbbda327291bee834544f1 Mon Sep 17 00:00:00 2001 From: Nastya Smirnova Date: Tue, 14 Nov 2017 19:54:12 +0200 Subject: [PATCH 07/15] Incorrect statusPageUrl and healthCheckUrl are reported to Eureka if management.context-path is not set (#2145) --- .../eureka/EurekaClientAutoConfiguration.java | 78 +++++----- .../DefaultManagementMetadataProvider.java | 97 ++++++++++++ .../eureka/metadata/ManagementMetadata.java | 53 +++++++ .../metadata/ManagementMetadataProvider.java | 10 ++ .../EurekaClientAutoConfigurationTests.java | 28 ++++ ...DefaultManagementMetadataProviderTest.java | 138 ++++++++++++++++++ 6 files changed, 370 insertions(+), 34 deletions(-) create mode 100644 spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProvider.java create mode 100644 spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/ManagementMetadata.java create mode 100644 spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/ManagementMetadataProvider.java create mode 100644 spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProviderTest.java diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index e763bbe2..d2c2a61e 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -24,7 +24,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.net.MalformedURLException; -import java.net.URL; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; @@ -50,6 +49,9 @@ import org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfi import org.springframework.cloud.commons.util.InetUtils; import org.springframework.cloud.context.scope.refresh.RefreshScope; import org.springframework.cloud.netflix.eureka.config.DiscoveryClientOptionalArgsConfiguration; +import org.springframework.cloud.netflix.eureka.metadata.DefaultManagementMetadataProvider; +import org.springframework.cloud.netflix.eureka.metadata.ManagementMetadata; +import org.springframework.cloud.netflix.eureka.metadata.ManagementMetadataProvider; import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaAutoServiceRegistration; import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration; import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry; @@ -119,60 +121,68 @@ public class EurekaClientAutoConfiguration { return client; } + @Bean + @ConditionalOnMissingBean + public ManagementMetadataProvider serviceManagementMetadataProvider() { + return new DefaultManagementMetadataProvider(); + } + @Bean @ConditionalOnMissingBean(value = EurekaInstanceConfig.class, search = SearchStrategy.CURRENT) - public EurekaInstanceConfigBean eurekaInstanceConfigBean(InetUtils inetUtils) throws MalformedURLException { + public EurekaInstanceConfigBean eurekaInstanceConfigBean(InetUtils inetUtils, + ManagementMetadataProvider managementMetadataProvider) throws MalformedURLException { PropertyResolver eurekaPropertyResolver = new RelaxedPropertyResolver(this.env, "eureka.instance."); String hostname = eurekaPropertyResolver.getProperty("hostname"); boolean preferIpAddress = Boolean.parseBoolean(eurekaPropertyResolver.getProperty("preferIpAddress")); boolean isSecurePortEnabled = Boolean.parseBoolean(eurekaPropertyResolver.getProperty("securePortEnabled")); - int nonSecurePort = Integer.valueOf(propertyResolver.getProperty("server.port", propertyResolver.getProperty("port", "8080"))); + String serverContextPath = propertyResolver.getProperty("server.contextPath", "/"); + int serverPort = Integer.valueOf(propertyResolver.getProperty("server.port", propertyResolver.getProperty("port", "8080"))); - int managementPort = Integer.valueOf(propertyResolver.getProperty("management.port", String.valueOf(nonSecurePort))); - String managementContextPath = propertyResolver.getProperty("management.contextPath", propertyResolver.getProperty("server.contextPath", "/")); + Integer managementPort = propertyResolver.getProperty("management.port", Integer.class);// nullable. should be wrapped into optional + String managementContextPath = propertyResolver.getProperty("management.contextPath");// nullable. should be wrapped into optional Integer jmxPort = propertyResolver.getProperty("com.sun.management.jmxremote.port", Integer.class);//nullable EurekaInstanceConfigBean instance = new EurekaInstanceConfigBean(inetUtils); - instance.setNonSecurePort(nonSecurePort); + + instance.setNonSecurePort(serverPort); instance.setInstanceId(getDefaultInstanceId(propertyResolver)); instance.setPreferIpAddress(preferIpAddress); if(isSecurePortEnabled) { - int securePort = Integer.valueOf(propertyResolver.getProperty("server.port", propertyResolver.getProperty("port", "8080"))); - instance.setSecurePort(securePort); + instance.setSecurePort(serverPort); } - if (managementPort != nonSecurePort && managementPort != 0) { - if (StringUtils.hasText(hostname)) { - instance.setHostname(hostname); - } - String statusPageUrlPath = eurekaPropertyResolver.getProperty("statusPageUrlPath"); - String healthCheckUrlPath = eurekaPropertyResolver.getProperty("healthCheckUrlPath"); - if (!managementContextPath.endsWith("/")) { - managementContextPath = managementContextPath + "/"; - } - if (StringUtils.hasText(statusPageUrlPath)) { - instance.setStatusPageUrlPath(statusPageUrlPath); - } - if (StringUtils.hasText(healthCheckUrlPath)) { - instance.setHealthCheckUrlPath(healthCheckUrlPath); - } - - String scheme = instance.getSecurePortEnabled() ? "https" : "http"; - URL base = new URL(scheme, instance.getHostname(), managementPort, managementContextPath); - instance.setStatusPageUrl(new URL(base, StringUtils.trimLeadingCharacter(instance.getStatusPageUrlPath(), '/')).toString()); - instance.setHealthCheckUrl(new URL(base, StringUtils.trimLeadingCharacter(instance.getHealthCheckUrlPath(), '/')).toString()); + if (StringUtils.hasText(hostname)) { + instance.setHostname(hostname); } - setupMetadataMap(instance, managementPort, jmxPort); + String statusPageUrlPath = eurekaPropertyResolver.getProperty("statusPageUrlPath"); + String healthCheckUrlPath = eurekaPropertyResolver.getProperty("healthCheckUrlPath"); + + if (StringUtils.hasText(statusPageUrlPath)) { + instance.setStatusPageUrlPath(statusPageUrlPath); + } + if (StringUtils.hasText(healthCheckUrlPath)) { + instance.setHealthCheckUrlPath(healthCheckUrlPath); + } + + ManagementMetadata metadata = managementMetadataProvider.get(instance, serverPort, + serverContextPath, managementContextPath, managementPort); + + if(metadata != null) { + instance.setStatusPageUrl(metadata.getStatusPageUrl()); + instance.setHealthCheckUrl(metadata.getHealthCheckUrl()); + Map metadataMap = instance.getMetadataMap(); + if (metadataMap.get("management.port") == null) { + metadataMap.put("management.port", String.valueOf(metadata.getManagementPort())); + } + } + + setupJmxPort(instance, jmxPort); return instance; } - private void setupMetadataMap(EurekaInstanceConfigBean instance, int managementPort, - Integer jmxPort) { + private void setupJmxPort(EurekaInstanceConfigBean instance, Integer jmxPort) { Map metadataMap = instance.getMetadataMap(); - if (metadataMap.get("management.port") == null && managementPort != 0) { - metadataMap.put("management.port", String.valueOf(managementPort)); - } if (metadataMap.get("jmx.port") == null && jmxPort != null) { metadataMap.put("jmx.port", String.valueOf(jmxPort)); } diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProvider.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProvider.java new file mode 100644 index 00000000..4f19b003 --- /dev/null +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProvider.java @@ -0,0 +1,97 @@ +package org.springframework.cloud.netflix.eureka.metadata; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; +import org.springframework.util.StringUtils; + +import java.net.MalformedURLException; +import java.net.URL; + +public class DefaultManagementMetadataProvider implements ManagementMetadataProvider { + + private static final int RANDOM_PORT = 0; + private static final Log log = LogFactory.getLog(DefaultManagementMetadataProvider.class); + + @Override + public ManagementMetadata get(EurekaInstanceConfigBean instance, int serverPort, + String serverContextPath, String managementContextPath, + Integer managementPort) { + if (isRandom(managementPort)) { + return null; + } + if (managementPort == null && isRandom(serverPort)) { + return null; + } + String healthCheckUrl = getHealthCheckUrl(instance, serverPort, serverContextPath, + managementContextPath, managementPort); + String statusPageUrl = getStatusPageUrl(instance, serverPort, serverContextPath, + managementContextPath, managementPort); + + return new ManagementMetadata(healthCheckUrl, statusPageUrl, managementPort == null ? serverPort : managementPort); + } + + private boolean isRandom(Integer port) { + return port != null && port == RANDOM_PORT; + } + + private String getHealthCheckUrl(EurekaInstanceConfigBean instance, int serverPort, String serverContextPath, + String managementContextPath, Integer managementPort) { + String healthCheckUrlPath = instance.getHealthCheckUrlPath(); + String healthCheckUrl = getUrl(instance, serverPort, serverContextPath, managementContextPath, + managementPort, healthCheckUrlPath); + log.debug("Constructed eureka meta-data healthcheckUrl: " + healthCheckUrl); + return healthCheckUrl; + } + + public String getStatusPageUrl(EurekaInstanceConfigBean instance, int serverPort, String serverContextPath, + String managementContextPath, Integer managementPort) { + String statusPageUrlPath = instance.getStatusPageUrlPath(); + String statusPageUrl = getUrl(instance, serverPort, serverContextPath, managementContextPath, + managementPort, statusPageUrlPath); + log.debug("Constructed eureka meta-data statusPageUrl: " + statusPageUrl); + return statusPageUrl; + } + + private String getUrl(EurekaInstanceConfigBean instance, int serverPort, + String serverContextPath, String managementContextPath, + Integer managementPort, String urlPath) { + managementContextPath = refineManagementContextPath(serverContextPath, managementContextPath, managementPort); + if (managementPort == null) { + managementPort = serverPort; + } + String scheme = instance.getSecurePortEnabled() ? "https" : "http"; + return constructValidUrl(scheme, instance.getHostname(), managementPort, managementContextPath, urlPath); + } + + private String refineManagementContextPath(String serverContextPath, String managementContextPath, + Integer managementPort) { + if(managementContextPath != null) { + return managementContextPath; + } + if(managementPort != null) { + return "/"; + } + return serverContextPath; + } + + private String constructValidUrl(String scheme, String hostname, int port, + String contextPath, String statusPath) { + try { + if (!contextPath.endsWith("/")) { + contextPath = contextPath + "/"; + } + URL base = new URL(scheme, hostname, port, contextPath); + String refinedStatusPath = StringUtils.trimLeadingCharacter(statusPath, '/'); + return new URL(base, refinedStatusPath).toString(); + } catch (MalformedURLException e) { + String message = getErrorMessage(scheme, hostname, port, contextPath, statusPath); + throw new IllegalStateException(message, e); + } + } + + private String getErrorMessage(String scheme, String hostname, int port, String contextPath, String statusPath) { + return String.format("Failed to construct url for scheme: %s, hostName: %s port: %s contextPath: %s statusPath: %s", + scheme, hostname, port, contextPath, statusPath); + } +} diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/ManagementMetadata.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/ManagementMetadata.java new file mode 100644 index 00000000..baa4a4ac --- /dev/null +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/ManagementMetadata.java @@ -0,0 +1,53 @@ +package org.springframework.cloud.netflix.eureka.metadata; + +import java.util.Objects; + +public class ManagementMetadata { + + private final String healthCheckUrl; + private final String statusPageUrl; + private final Integer managementPort; + + public ManagementMetadata(String healthCheckUrl, String statusPageUrl, Integer managementPort) { + this.healthCheckUrl = healthCheckUrl; + this.statusPageUrl = statusPageUrl; + this.managementPort = managementPort; + } + + public String getHealthCheckUrl() { + return healthCheckUrl; + } + + public String getStatusPageUrl() { + return statusPageUrl; + } + + public Integer getManagementPort() { + return managementPort; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ManagementMetadata that = (ManagementMetadata) o; + return Objects.equals(healthCheckUrl, that.healthCheckUrl) && + Objects.equals(statusPageUrl, that.statusPageUrl) && + Objects.equals(managementPort, that.managementPort); + } + + @Override + public int hashCode() { + return Objects.hash(healthCheckUrl, statusPageUrl, managementPort); + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("ManagementMetadata{"); + sb.append("healthCheckUrl='").append(healthCheckUrl).append('\''); + sb.append(", statusPageUrl='").append(statusPageUrl).append('\''); + sb.append(", managementPort=").append(managementPort); + sb.append('}'); + return sb.toString(); + } +} diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/ManagementMetadataProvider.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/ManagementMetadataProvider.java new file mode 100644 index 00000000..98bc770e --- /dev/null +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/ManagementMetadataProvider.java @@ -0,0 +1,10 @@ +package org.springframework.cloud.netflix.eureka.metadata; + +import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; + +public interface ManagementMetadataProvider { + + ManagementMetadata get(EurekaInstanceConfigBean instance, int serverPort, + String serverContextPath, String managementContextPath, Integer managementPort); + +} diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java index 8c7f59de..0143b7d1 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java @@ -189,6 +189,34 @@ public class EurekaClientAutoConfigurationTests { instance.getHealthCheckUrl().contains("/myHealthCheck")); } + @Test + public void statusPageUrl_and_healthCheckUrl_do_not_contain_server_context_path() throws Exception { + addEnvironment(this.context, "server.port=8989", + "management.port=9999", "server.contextPath=/service"); + + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + assertTrue("Wrong status page: " + instance.getStatusPageUrl(), + instance.getStatusPageUrl().endsWith(":9999/info")); + assertTrue("Wrong health check: " + instance.getHealthCheckUrl(), + instance.getHealthCheckUrl().endsWith(":9999/health")); + } + + @Test + public void statusPageUrl_and_healthCheckUrl_contain_management_context_path() throws Exception { + addEnvironment(this.context, + "server.port=8989", "management.contextPath=/management"); + + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + assertTrue("Wrong status page: " + instance.getStatusPageUrl(), + instance.getStatusPageUrl().endsWith(":8989/management/info")); + assertTrue("Wrong health check: " + instance.getHealthCheckUrl(), + instance.getHealthCheckUrl().endsWith(":8989/management/health")); + } + @Test public void statusPageUrlPathAndManagementPortAndContextPath() { addEnvironment(this.context, "server.port=8989", diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProviderTest.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProviderTest.java new file mode 100644 index 00000000..11b028a5 --- /dev/null +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProviderTest.java @@ -0,0 +1,138 @@ +package org.springframework.cloud.netflix.eureka.metadata; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class DefaultManagementMetadataProviderTest { + + private static final EurekaInstanceConfigBean INSTANCE = mock(EurekaInstanceConfigBean.class); + private final ManagementMetadataProvider provider = new DefaultManagementMetadataProvider(); + + @Before + public void setUp() throws Exception { + when(INSTANCE.getHostname()).thenReturn("host"); + when(INSTANCE.getHealthCheckUrlPath()).thenReturn("health"); + when(INSTANCE.getStatusPageUrlPath()).thenReturn("info"); + } + + @Test + public void serverPortIsRandomAndManagementPortIsNull() throws Exception { + int serverPort = 0; + String serverContextPath = "/"; + String managementContextPath = null; + Integer managementPort = null; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual).isNull(); + } + + @Test + public void managementPortIsRandom() throws Exception { + int serverPort = 0; + String serverContextPath = "/"; + String managementContextPath = null; + Integer managementPort = 0; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual).isNull(); + } + + @Test + public void serverPort() throws Exception { + int serverPort = 7777; + String serverContextPath = "/"; + String managementContextPath = null; + Integer managementPort = null; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:7777/health"); + assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:7777/info"); + assertThat(actual.getManagementPort()).isEqualTo(7777); + } + + @Test + public void serverPortManagementPort() throws Exception { + int serverPort = 7777; + String serverContextPath = "/"; + String managementContextPath = null; + Integer managementPort = 8888; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:8888/health"); + assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:8888/info"); + assertThat(actual.getManagementPort()).isEqualTo(8888); + } + + @Test + public void serverPortManagementPortServerContextPath() throws Exception { + int serverPort = 7777; + String serverContextPath = "/Server"; + String managementContextPath = null; + Integer managementPort = 8888; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:8888/health"); + assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:8888/info"); + assertThat(actual.getManagementPort()).isEqualTo(8888); + } + + @Test + public void serverPortManagementPortServerContextPathManagementContextPath() throws Exception { + int serverPort = 7777; + String serverContextPath = "/Server"; + String managementContextPath = "/Management"; + Integer managementPort = 8888; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:8888/Management/health"); + assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:8888/Management/info"); + assertThat(actual.getManagementPort()).isEqualTo(8888); + } + + @Test + public void serverPortServerContextPathManagementContextPath() throws Exception { + int serverPort = 7777; + String serverContextPath = "/Server"; + String managementContextPath = "/Management"; + Integer managementPort = null; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:7777/Management/health"); + assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:7777/Management/info"); + assertThat(actual.getManagementPort()).isEqualTo(7777); + } + + @Test + public void serverPortServerContextPath() throws Exception { + int serverPort = 7777; + String serverContextPath = "/Server"; + String managementContextPath = null; + Integer managementPort = null; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:7777/Server/health"); + assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:7777/Server/info"); + assertThat(actual.getManagementPort()).isEqualTo(7777); + } + + @Test + public void serverPortManagementPortManagementContextPath() throws Exception { + int serverPort = 7777; + String serverContextPath = "/"; + String managementContextPath = "/Management"; + Integer managementPort = 8888; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:8888/Management/health"); + assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:8888/Management/info"); + assertThat(actual.getManagementPort()).isEqualTo(8888); + + } + + +} \ No newline at end of file From 6e3b4fdd7b6fef858f1e3ce05fe1126ff1c2d90c Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Thu, 16 Nov 2017 20:11:55 -0500 Subject: [PATCH 08/15] Adds backoff policies when retrying requests (#2436) * Adds backoff policies when retrying requests. Fixes #2195 * fixing final variable --- .../main/asciidoc/spring-cloud-netflix.adoc | 21 +++++++ .../CachingSpringLoadBalancerFactory.java | 21 ++++++- .../FeignRibbonClientAutoConfiguration.java | 6 +- .../ribbon/RetryableFeignLoadBalancer.java | 19 +++++++ .../ribbon/RibbonAutoConfiguration.java | 9 +++ .../apache/HttpClientRibbonConfiguration.java | 7 ++- ...etryableRibbonLoadBalancingHttpClient.java | 20 +++++++ .../okhttp/OkHttpRibbonConfiguration.java | 6 +- .../RetryableOkHttpLoadBalancingClient.java | 17 ++++++ .../RetryableFeignLoadBalancerTests.java | 51 +++++++++++++++-- .../RibbonLoadBalancingHttpClientTests.java | 57 ++++++++++++++++--- 11 files changed, 212 insertions(+), 22 deletions(-) diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index 595d2233..629bad6e 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -2735,6 +2735,27 @@ https://github.com/spring-projects/spring-retry[Spring Retry] on your applicatio When Spring Retry is present load balanced `RestTemplates`, Feign, and Zuul will automatically retry any failed requests (assuming you configuration allows it to). +==== BackOff Policies +By default no backoff policy is used when retrying requests. If you would like to configure +a backoff policy you will need to create a bean of type `LoadBalancedBackOffPolicyFactory` +which will be used to create a `BackOffPolicy` for a given service. + +[source,java,indent=0] +---- +@Configuration +public class MyConfiguration { + @Bean + LoadBalancedBackOffPolicyFactory backOffPolciyFactory() { + return new LoadBalancedBackOffPolicyFactory() { + @Override + public BackOffPolicy createBackOffPolicy(String service) { + return new ExponentialBackOffPolicy(); + } + }; + } +} +---- + ==== Configuration Anytime Ribbon is used with Spring Retry you can control the retry functionality by configuring diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/CachingSpringLoadBalancerFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/CachingSpringLoadBalancerFactory.java index c2e0f940..3930a663 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/CachingSpringLoadBalancerFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/CachingSpringLoadBalancerFactory.java @@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.feign.ribbon; import java.util.Map; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancedRetryPolicyFactory; import org.springframework.cloud.netflix.ribbon.ServerIntrospector; @@ -32,11 +33,13 @@ import com.netflix.loadbalancer.ILoadBalancer; * * @author Spencer Gibb * @author Dave Syer + * @author Ryan Baxter */ public class CachingSpringLoadBalancerFactory { private final SpringClientFactory factory; private final LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory; + private final LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory; private boolean enableRetry = false; private volatile Map cache = new ConcurrentReferenceHashMap<>(); @@ -44,19 +47,35 @@ public class CachingSpringLoadBalancerFactory { public CachingSpringLoadBalancerFactory(SpringClientFactory factory) { this.factory = factory; this.loadBalancedRetryPolicyFactory = new RibbonLoadBalancedRetryPolicyFactory(factory); + this.loadBalancedBackOffPolicyFactory = null; } + @Deprecated + //TODO remove in 2.0.x public CachingSpringLoadBalancerFactory(SpringClientFactory factory, LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) { this.factory = factory; this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; + this.loadBalancedBackOffPolicyFactory = null; } + @Deprecated + //TODO remove in 2.0.0x public CachingSpringLoadBalancerFactory(SpringClientFactory factory, LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory, boolean enableRetry) { this.factory = factory; this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; this.enableRetry = enableRetry; + this.loadBalancedBackOffPolicyFactory = null; + } + + public CachingSpringLoadBalancerFactory(SpringClientFactory factory, + LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory, + LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory) { + this.factory = factory; + this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; + this.loadBalancedBackOffPolicyFactory = loadBalancedBackOffPolicyFactory; + this.enableRetry = true; } public FeignLoadBalancer create(String clientName) { @@ -67,7 +86,7 @@ public class CachingSpringLoadBalancerFactory { ILoadBalancer lb = this.factory.getLoadBalancer(clientName); ServerIntrospector serverIntrospector = this.factory.getInstance(clientName, ServerIntrospector.class); FeignLoadBalancer client = enableRetry ? new RetryableFeignLoadBalancer(lb, config, serverIntrospector, - loadBalancedRetryPolicyFactory) : new FeignLoadBalancer(lb, config, serverIntrospector); + loadBalancedRetryPolicyFactory, loadBalancedBackOffPolicyFactory) : new FeignLoadBalancer(lb, config, serverIntrospector); this.cache.put(clientName, client); return client; } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java index 7d304986..c9ca5d33 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java @@ -21,6 +21,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; import org.springframework.cloud.netflix.feign.FeignAutoConfiguration; import org.springframework.cloud.netflix.feign.support.FeignHttpClientProperties; @@ -65,8 +66,9 @@ public class FeignRibbonClientAutoConfiguration { @ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate") public CachingSpringLoadBalancerFactory retryabeCachingLBClientFactory( SpringClientFactory factory, - LoadBalancedRetryPolicyFactory retryPolicyFactory) { - return new CachingSpringLoadBalancerFactory(factory, retryPolicyFactory, true); + LoadBalancedRetryPolicyFactory retryPolicyFactory, + LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory) { + return new CachingSpringLoadBalancerFactory(factory, retryPolicyFactory, loadBalancedBackOffPolicyFactory); } @Bean diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancer.java index d82578ee..12546e2a 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancer.java @@ -23,6 +23,7 @@ import feign.Response; import java.io.IOException; import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryContext; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicy; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; @@ -32,6 +33,8 @@ import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient; import org.springframework.cloud.netflix.ribbon.ServerIntrospector; import org.springframework.retry.RetryCallback; import org.springframework.retry.RetryContext; +import org.springframework.retry.backoff.BackOffPolicy; +import org.springframework.retry.backoff.NoBackOffPolicy; import org.springframework.retry.policy.NeverRetryPolicy; import org.springframework.retry.support.RetryTemplate; import com.netflix.client.DefaultLoadBalancerRetryHandler; @@ -48,12 +51,26 @@ import com.netflix.loadbalancer.Server; public class RetryableFeignLoadBalancer extends FeignLoadBalancer implements ServiceInstanceChooser { private final LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory; + private final LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory; + @Deprecated + //TODO remove in 2.0.x public RetryableFeignLoadBalancer(ILoadBalancer lb, IClientConfig clientConfig, ServerIntrospector serverIntrospector, LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) { super(lb, clientConfig, serverIntrospector); this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; this.setRetryHandler(new DefaultLoadBalancerRetryHandler(clientConfig)); + this.loadBalancedBackOffPolicyFactory = new LoadBalancedBackOffPolicyFactory.NoBackOffPolicyFactory(); + } + + public RetryableFeignLoadBalancer(ILoadBalancer lb, IClientConfig clientConfig, + ServerIntrospector serverIntrospector, LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory, + LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory) { + super(lb, clientConfig, serverIntrospector); + this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; + this.setRetryHandler(new DefaultLoadBalancerRetryHandler(clientConfig)); + this.loadBalancedBackOffPolicyFactory = loadBalancedBackOffPolicyFactory == null ? + new LoadBalancedBackOffPolicyFactory.NoBackOffPolicyFactory() : loadBalancedBackOffPolicyFactory; } @Override @@ -72,6 +89,8 @@ public class RetryableFeignLoadBalancer extends FeignLoadBalancer implements Ser } final LoadBalancedRetryPolicy retryPolicy = loadBalancedRetryPolicyFactory.create(this.getClientName(), this); RetryTemplate retryTemplate = new RetryTemplate(); + BackOffPolicy backOffPolicy = loadBalancedBackOffPolicyFactory.createBackOffPolicy(this.getClientName()); + retryTemplate.setBackOffPolicy(backOffPolicy == null ? new NoBackOffPolicy() : backOffPolicy); retryTemplate.setRetryPolicy(retryPolicy == null ? new NeverRetryPolicy() : new FeignRetryPolicy(request.toHttpRequest(), retryPolicy, this, this.getClientName())); return retryTemplate.execute(new RetryCallback() { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java index 8d03633c..9f9127f6 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java @@ -35,6 +35,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.client.actuator.HasFeatures; import org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; @@ -102,6 +104,13 @@ public class RibbonAutoConfiguration { return new LoadBalancedRetryPolicyFactory.NeverRetryFactory(); } + @Bean + @ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate") + @ConditionalOnMissingBean + public LoadBalancedBackOffPolicyFactory loadBalancedBackoffPolicyFactory() { + return new LoadBalancedBackOffPolicyFactory.NoBackOffPolicyFactory(); + } + @Bean @ConditionalOnMissingBean public PropertiesFactory propertiesFactory() { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/HttpClientRibbonConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/HttpClientRibbonConfiguration.java index 6f2b6c27..2eb8e41c 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/HttpClientRibbonConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/HttpClientRibbonConfiguration.java @@ -31,6 +31,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; import org.springframework.cloud.commons.httpclient.ApacheHttpClientConnectionManagerFactory; import org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory; @@ -151,9 +152,11 @@ public class HttpClientRibbonConfiguration { public RetryableRibbonLoadBalancingHttpClient retryableRibbonLoadBalancingHttpClient( IClientConfig config, ServerIntrospector serverIntrospector, ILoadBalancer loadBalancer, RetryHandler retryHandler, - LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory, CloseableHttpClient httpClient) { + LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory, CloseableHttpClient httpClient, + LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory) { RetryableRibbonLoadBalancingHttpClient client = new RetryableRibbonLoadBalancingHttpClient( - httpClient, config, serverIntrospector, loadBalancedRetryPolicyFactory); + httpClient, config, serverIntrospector, loadBalancedRetryPolicyFactory, + loadBalancedBackOffPolicyFactory); client.setLoadBalancer(loadBalancer); client.setRetryHandler(retryHandler); Monitors.registerObject("Client_" + this.name, client); diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RetryableRibbonLoadBalancingHttpClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RetryableRibbonLoadBalancingHttpClient.java index 769c75bc..949343b7 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RetryableRibbonLoadBalancingHttpClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RetryableRibbonLoadBalancingHttpClient.java @@ -24,6 +24,7 @@ import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.CloseableHttpClient; import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryContext; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicy; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; @@ -35,6 +36,8 @@ import org.springframework.cloud.netflix.ribbon.ServerIntrospector; import org.springframework.http.HttpRequest; import org.springframework.retry.RetryCallback; import org.springframework.retry.RetryContext; +import org.springframework.retry.backoff.BackOffPolicy; +import org.springframework.retry.backoff.NoBackOffPolicy; import org.springframework.retry.policy.NeverRetryPolicy; import org.springframework.retry.support.RetryTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -51,7 +54,11 @@ import com.netflix.loadbalancer.Server; public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingHttpClient implements ServiceInstanceChooser { private LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory = new LoadBalancedRetryPolicyFactory.NeverRetryFactory(); + private LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory = + new LoadBalancedBackOffPolicyFactory.NoBackOffPolicyFactory(); + @Deprecated + //TODO remove in 2.0.x public RetryableRibbonLoadBalancingHttpClient(IClientConfig config, ServerIntrospector serverIntrospector, LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) { @@ -59,6 +66,8 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; } + @Deprecated + //TODO remove in 2.0.x public RetryableRibbonLoadBalancingHttpClient(CloseableHttpClient delegate, IClientConfig config, ServerIntrospector serverIntrospector, LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) { @@ -66,6 +75,15 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; } + public RetryableRibbonLoadBalancingHttpClient(CloseableHttpClient delegate, + IClientConfig config, ServerIntrospector serverIntrospector, + LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory, + LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory) { + super(delegate, config, serverIntrospector); + this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; + this.loadBalancedBackOffPolicyFactory = loadBalancedBackOffPolicyFactory; + } + @Override public RibbonApacheHttpResponse execute(final RibbonApacheHttpRequest request, final IClientConfig configOverride) throws Exception { @@ -137,6 +155,8 @@ public class RetryableRibbonLoadBalancingHttpClient extends RibbonLoadBalancingH retryTemplate.setRetryPolicy(retryPolicy == null || !retryable ? new NeverRetryPolicy() : new RetryPolicy(request, retryPolicy, this, this.getClientName())); + BackOffPolicy backOffPolicy = loadBalancedBackOffPolicyFactory.createBackOffPolicy(this.getClientName()); + retryTemplate.setBackOffPolicy(backOffPolicy == null ? new NoBackOffPolicy() : backOffPolicy); return retryTemplate.execute(callback); } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/OkHttpRibbonConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/OkHttpRibbonConfiguration.java index 1380df83..1e1f2fbf 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/OkHttpRibbonConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/OkHttpRibbonConfiguration.java @@ -34,6 +34,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; import org.springframework.cloud.commons.httpclient.OkHttpClientConnectionPoolFactory; import org.springframework.cloud.commons.httpclient.OkHttpClientFactory; @@ -115,9 +116,10 @@ public class OkHttpRibbonConfiguration { ILoadBalancer loadBalancer, RetryHandler retryHandler, LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory, - OkHttpClient delegate) { + OkHttpClient delegate, + LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory) { RetryableOkHttpLoadBalancingClient client = new RetryableOkHttpLoadBalancingClient(delegate, config, - serverIntrospector, loadBalancedRetryPolicyFactory); + serverIntrospector, loadBalancedRetryPolicyFactory, loadBalancedBackOffPolicyFactory); client.setLoadBalancer(loadBalancer); client.setRetryHandler(retryHandler); Monitors.registerObject("Client_" + this.name, client); diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/RetryableOkHttpLoadBalancingClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/RetryableOkHttpLoadBalancingClient.java index 3fd53528..67876d47 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/RetryableOkHttpLoadBalancingClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/okhttp/RetryableOkHttpLoadBalancingClient.java @@ -22,6 +22,7 @@ import okhttp3.Response; import java.net.URI; import org.apache.commons.lang.BooleanUtils; import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryContext; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicy; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; @@ -33,6 +34,8 @@ import org.springframework.cloud.netflix.ribbon.ServerIntrospector; import org.springframework.http.HttpRequest; import org.springframework.retry.RetryCallback; import org.springframework.retry.RetryContext; +import org.springframework.retry.backoff.BackOffPolicy; +import org.springframework.retry.backoff.NoBackOffPolicy; import org.springframework.retry.policy.NeverRetryPolicy; import org.springframework.retry.support.RetryTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -48,17 +51,31 @@ import com.netflix.loadbalancer.Server; public class RetryableOkHttpLoadBalancingClient extends OkHttpLoadBalancingClient implements ServiceInstanceChooser { private LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory; + private LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory = + new LoadBalancedBackOffPolicyFactory.NoBackOffPolicyFactory(); + @Deprecated + //TODO remove in 2.0.x public RetryableOkHttpLoadBalancingClient(OkHttpClient delegate, IClientConfig config, ServerIntrospector serverIntrospector, LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory) { super(delegate, config, serverIntrospector); this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; } + public RetryableOkHttpLoadBalancingClient(OkHttpClient delegate, IClientConfig config, ServerIntrospector serverIntrospector, + LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory, + LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory) { + super(delegate, config, serverIntrospector); + this.loadBalancedRetryPolicyFactory = loadBalancedRetryPolicyFactory; + this.loadBalancedBackOffPolicyFactory = loadBalancedBackOffPolicyFactory; + } + private OkHttpRibbonResponse executeWithRetry(OkHttpRibbonRequest request, LoadBalancedRetryPolicy retryPolicy, RetryCallback callback) throws Exception { RetryTemplate retryTemplate = new RetryTemplate(); + BackOffPolicy backOffPolicy = loadBalancedBackOffPolicyFactory.createBackOffPolicy(this.getClientName()); + retryTemplate.setBackOffPolicy(backOffPolicy == null ? new NoBackOffPolicy() : backOffPolicy); boolean retryable = request.getContext() == null ? true : BooleanUtils.toBooleanDefaultIfNull(request.getContext().getRetryable(), true); retryTemplate.setRetryPolicy(retryPolicy == null || !retryable ? new NeverRetryPolicy() diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancerTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancerTests.java index d37bf7a7..4a86ceef 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancerTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/RetryableFeignLoadBalancerTests.java @@ -33,6 +33,7 @@ import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicy; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; import org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser; @@ -43,6 +44,10 @@ import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerContext; import org.springframework.cloud.netflix.ribbon.ServerIntrospector; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.http.HttpRequest; +import org.springframework.retry.RetryContext; +import org.springframework.retry.backoff.BackOffContext; +import org.springframework.retry.backoff.BackOffInterruptedException; +import org.springframework.retry.backoff.BackOffPolicy; import com.netflix.client.RequestSpecificRetryHandler; import com.netflix.client.config.CommonClientConfigKey; @@ -80,6 +85,8 @@ public class RetryableFeignLoadBalancerTests { @Mock private IClientConfig config; private ServerIntrospector inspector = new DefaultServerIntrospector(); + private LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory = + new LoadBalancedBackOffPolicyFactory.NoBackOffPolicyFactory(); private Integer defaultConnectTimeout = 10000; private Integer defaultReadTimeout = 10000; @@ -117,7 +124,8 @@ public class RetryableFeignLoadBalancerTests { FeignLoadBalancer.RibbonRequest request = new FeignLoadBalancer.RibbonRequest(client, feignRequest, new URI("http://foo")); Response response = Response.builder().status(200).headers(new HashMap>()).build(); doReturn(response).when(client).execute(any(Request.class), any(Request.Options.class)); - RetryableFeignLoadBalancer feignLb = new RetryableFeignLoadBalancer(lb, config, inspector, loadBalancedRetryPolicyFactory); + RetryableFeignLoadBalancer feignLb = new RetryableFeignLoadBalancer(lb, config, inspector, loadBalancedRetryPolicyFactory, + loadBalancedBackOffPolicyFactory); FeignLoadBalancer.RibbonResponse ribbonResponse = feignLb.execute(request, null); assertEquals(200, ribbonResponse.toResponse().status()); verify(client, times(1)).execute(any(Request.class), any(Request.Options.class)); @@ -136,7 +144,7 @@ public class RetryableFeignLoadBalancerTests { public LoadBalancedRetryPolicy create(String s, ServiceInstanceChooser serviceInstanceChooser) { return null; } - }); + }, loadBalancedBackOffPolicyFactory); try { feignLb.execute(request, null); } catch(Exception e) { @@ -167,10 +175,13 @@ public class RetryableFeignLoadBalancerTests { FeignLoadBalancer.RibbonRequest request = new FeignLoadBalancer.RibbonRequest(client, feignRequest, new URI("http://foo")); Response response = Response.builder().status(200).headers(new HashMap>()).build(); doThrow(new IOException("boom")).doReturn(response).when(client).execute(any(Request.class), any(Request.Options.class)); - RetryableFeignLoadBalancer feignLb = new RetryableFeignLoadBalancer(lb, config, inspector, loadBalancedRetryPolicyFactory); + MyBackOffPolicyFactory backOffPolicyFactory = new MyBackOffPolicyFactory(); + RetryableFeignLoadBalancer feignLb = new RetryableFeignLoadBalancer(lb, config, inspector, loadBalancedRetryPolicyFactory, + backOffPolicyFactory); FeignLoadBalancer.RibbonResponse ribbonResponse = feignLb.execute(request, null); assertEquals(200, ribbonResponse.toResponse().status()); verify(client, times(2)).execute(any(Request.class), any(Request.Options.class)); + assertEquals(1, backOffPolicyFactory.getCount()); } @Test @@ -195,10 +206,13 @@ public class RetryableFeignLoadBalancerTests { Response response = Response.builder().status(200).headers(new HashMap>()).build(); Response fourOFourResponse = Response.builder().status(404).headers(new HashMap>()).build(); doReturn(fourOFourResponse).doReturn(response).when(client).execute(any(Request.class), any(Request.Options.class)); - RetryableFeignLoadBalancer feignLb = new RetryableFeignLoadBalancer(lb, config, inspector, loadBalancedRetryPolicyFactory); + MyBackOffPolicyFactory backOffPolicyFactory = new MyBackOffPolicyFactory(); + RetryableFeignLoadBalancer feignLb = new RetryableFeignLoadBalancer(lb, config, inspector, loadBalancedRetryPolicyFactory, + backOffPolicyFactory); FeignLoadBalancer.RibbonResponse ribbonResponse = feignLb.execute(request, null); assertEquals(200, ribbonResponse.toResponse().status()); verify(client, times(2)).execute(any(Request.class), any(Request.Options.class)); + assertEquals(1, backOffPolicyFactory.getCount()); } @Test @@ -214,7 +228,8 @@ public class RetryableFeignLoadBalancerTests { FeignLoadBalancer.RibbonRequest request = new FeignLoadBalancer.RibbonRequest(client, feignRequest, new URI("http://foo")); Response response = Response.builder().status(200).headers(new HashMap>()).build(); doReturn(response).when(client).execute(any(Request.class), any(Request.Options.class)); - RetryableFeignLoadBalancer feignLb = new RetryableFeignLoadBalancer(lb, config, inspector, loadBalancedRetryPolicyFactory); + RetryableFeignLoadBalancer feignLb = new RetryableFeignLoadBalancer(lb, config, inspector, loadBalancedRetryPolicyFactory, + loadBalancedBackOffPolicyFactory); RequestSpecificRetryHandler retryHandler = feignLb.getRequestSpecificRetryHandler(request, config); assertEquals(1, retryHandler.getMaxRetriesOnNextServer()); assertEquals(1, retryHandler.getMaxRetriesOnSameServer()); @@ -265,11 +280,35 @@ public class RetryableFeignLoadBalancerTests { public List getAllServers() { return null; } - }, config, inspector, loadBalancedRetryPolicyFactory); + }, config, inspector, loadBalancedRetryPolicyFactory, loadBalancedBackOffPolicyFactory); ServiceInstance serviceInstance = feignLb.choose("foo"); assertEquals("foo", serviceInstance.getHost()); assertEquals(80, serviceInstance.getPort()); } + class MyBackOffPolicyFactory implements LoadBalancedBackOffPolicyFactory, BackOffPolicy { + + private int count = 0; + + @Override + public BackOffContext start(RetryContext retryContext) { + return null; + } + + @Override + public void backOff(BackOffContext backOffContext) throws BackOffInterruptedException { + count++; + } + + public int getCount() { + return count; + } + + @Override + public BackOffPolicy createBackOffPolicy(String service) { + return this; + } + } + } \ No newline at end of file diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClientTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClientTests.java index c20fb9aa..f3464873 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClientTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClientTests.java @@ -30,6 +30,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; +import org.springframework.cloud.client.loadbalancer.LoadBalancedBackOffPolicyFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicyFactory; import org.springframework.cloud.commons.httpclient.HttpClientConfiguration; import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; @@ -42,6 +43,10 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; +import org.springframework.retry.RetryContext; +import org.springframework.retry.backoff.BackOffContext; +import org.springframework.retry.backoff.BackOffInterruptedException; +import org.springframework.retry.backoff.BackOffPolicy; import org.springframework.test.util.ReflectionTestUtils; import com.netflix.client.DefaultLoadBalancerRetryHandler; @@ -54,6 +59,7 @@ import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import static org.mockito.BDDMockito.given; @@ -72,6 +78,7 @@ import static org.mockito.Mockito.verify; public class RibbonLoadBalancingHttpClientTests { private ILoadBalancer loadBalancer; + private LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory = new LoadBalancedBackOffPolicyFactory.NoBackOffPolicyFactory(); @Before public void setup() { @@ -195,9 +202,10 @@ public class RibbonLoadBalancingHttpClientTests { } private RetryableRibbonLoadBalancingHttpClient setupClientForRetry(int retriesNextServer, int retriesSameServer, - boolean retryable, boolean retryOnAllOps, - String serviceName, String host, int port, - HttpClient delegate, ILoadBalancer lb, String statusCodes) throws Exception { + boolean retryable, boolean retryOnAllOps, + String serviceName, String host, int port, + CloseableHttpClient delegate, ILoadBalancer lb, String statusCodes, + LoadBalancedBackOffPolicyFactory loadBalancedBackOffPolicyFactory) throws Exception { ServerIntrospector introspector = mock(ServerIntrospector.class); RetryHandler retryHandler = new DefaultLoadBalancerRetryHandler(retriesSameServer, retriesNextServer, retryable); doReturn(new Server(host, port)).when(lb).chooseServer(eq(serviceName)); @@ -212,7 +220,8 @@ public class RibbonLoadBalancingHttpClientTests { doReturn(context).when(clientFactory).getLoadBalancerContext(eq(serviceName)); doReturn(clientConfig).when(clientFactory).getClientConfig(eq(serviceName)); LoadBalancedRetryPolicyFactory factory = new RibbonLoadBalancedRetryPolicyFactory(clientFactory); - RetryableRibbonLoadBalancingHttpClient client = new RetryableRibbonLoadBalancingHttpClient(clientConfig, introspector, factory); + RetryableRibbonLoadBalancingHttpClient client = new RetryableRibbonLoadBalancingHttpClient(delegate, clientConfig, + introspector, factory, loadBalancedBackOffPolicyFactory); client.setLoadBalancer(lb); ReflectionTestUtils.setField(client, "delegate", delegate); return client; @@ -237,7 +246,7 @@ public class RibbonLoadBalancingHttpClientTests { doThrow(new IOException("boom")).doReturn(response).when(delegate).execute(any(HttpUriRequest.class)); ILoadBalancer lb = mock(ILoadBalancer.class); RetryableRibbonLoadBalancingHttpClient client = setupClientForRetry(retriesNextServer, retriesSameServer, retryable, retryOnAllOps, - serviceName, host, port, delegate, lb, ""); + serviceName, host, port, delegate, lb, "", loadBalancedBackOffPolicyFactory); RibbonApacheHttpRequest request = mock(RibbonApacheHttpRequest.class); doReturn(uri).when(request).getURI(); doReturn(method).when(request).getMethod(); @@ -269,8 +278,9 @@ public class RibbonLoadBalancingHttpClientTests { doThrow(new IOException("boom")).doThrow(new IOException("boom again")).doReturn(response). when(delegate).execute(any(HttpUriRequest.class)); ILoadBalancer lb = mock(ILoadBalancer.class); + MyBackOffPolicyFactory myBackOffPolicyFactory = new MyBackOffPolicyFactory(); RetryableRibbonLoadBalancingHttpClient client = setupClientForRetry(retriesNextServer, retriesSameServer, retryable, retryOnAllOps, - serviceName, host, port, delegate, lb, ""); + serviceName, host, port, delegate, lb, "", myBackOffPolicyFactory); RibbonApacheHttpRequest request = mock(RibbonApacheHttpRequest.class); doReturn(uri).when(request).getURI(); doReturn(method).when(request).getMethod(); @@ -281,6 +291,7 @@ public class RibbonLoadBalancingHttpClientTests { RibbonApacheHttpResponse returnedResponse = client.execute(request, null); verify(delegate, times(3)).execute(any(HttpUriRequest.class)); verify(lb, times(1)).chooseServer(eq(serviceName)); + assertEquals(2, myBackOffPolicyFactory.getCount()); } @Test @@ -302,8 +313,9 @@ public class RibbonLoadBalancingHttpClientTests { doThrow(new IOException("boom")).doThrow(new IOException("boom again")).doReturn(response). when(delegate).execute(any(HttpUriRequest.class)); ILoadBalancer lb = mock(ILoadBalancer.class); + MyBackOffPolicyFactory myBackOffPolicyFactory = new MyBackOffPolicyFactory(); RetryableRibbonLoadBalancingHttpClient client = setupClientForRetry(retriesNextServer, retriesSameServer, retryable, retryOnAllOps, - serviceName, host, port, delegate, lb, ""); + serviceName, host, port, delegate, lb, "", myBackOffPolicyFactory); RibbonApacheHttpRequest request = mock(RibbonApacheHttpRequest.class); doReturn(method).when(request).getMethod(); doReturn(uri).when(request).getURI(); @@ -314,6 +326,7 @@ public class RibbonLoadBalancingHttpClientTests { verify(response, times(0)).close(); verify(delegate, times(3)).execute(any(HttpUriRequest.class)); verify(lb, times(1)).chooseServer(eq(serviceName)); + assertEquals(2, myBackOffPolicyFactory.getCount()); } @Test @@ -333,7 +346,7 @@ public class RibbonLoadBalancingHttpClientTests { when(delegate).execute(any(HttpUriRequest.class)); ILoadBalancer lb = mock(ILoadBalancer.class); RetryableRibbonLoadBalancingHttpClient client = setupClientForRetry(retriesNextServer, retriesSameServer, retryable, retryOnAllOps, - serviceName, host, port, delegate, lb, ""); + serviceName, host, port, delegate, lb, "", loadBalancedBackOffPolicyFactory); RibbonApacheHttpRequest request = mock(RibbonApacheHttpRequest.class); doReturn(method).when(request).getMethod(); doReturn(uri).when(request).getURI(); @@ -373,8 +386,9 @@ public class RibbonLoadBalancingHttpClientTests { doReturn(fourOFourStatusLine).when(fourOFourResponse).getStatusLine(); doReturn(fourOFourResponse).doReturn(response).when(delegate).execute(any(HttpUriRequest.class)); ILoadBalancer lb = mock(ILoadBalancer.class); + MyBackOffPolicyFactory myBackOffPolicyFactory = new MyBackOffPolicyFactory(); RetryableRibbonLoadBalancingHttpClient client = setupClientForRetry(retriesNextServer, retriesSameServer, retryable, retryOnAllOps, - serviceName, host, port, delegate, lb, "404"); + serviceName, host, port, delegate, lb, "404", myBackOffPolicyFactory); RibbonApacheHttpRequest request = mock(RibbonApacheHttpRequest.class); doReturn(uri).when(request).getURI(); doReturn(method).when(request).getMethod(); @@ -386,6 +400,7 @@ public class RibbonLoadBalancingHttpClientTests { verify(fourOFourResponse, times(1)).close(); verify(delegate, times(2)).execute(any(HttpUriRequest.class)); verify(lb, times(0)).chooseServer(eq(serviceName)); + assertEquals(1, myBackOffPolicyFactory.getCount()); } @Configuration @@ -477,4 +492,28 @@ public class RibbonLoadBalancingHttpClientTests { return requestConfigCaptor.getValue(); } + class MyBackOffPolicyFactory implements LoadBalancedBackOffPolicyFactory, BackOffPolicy { + + private int count = 0; + + @Override + public BackOffContext start(RetryContext retryContext) { + return null; + } + + @Override + public void backOff(BackOffContext backOffContext) throws BackOffInterruptedException { + count++; + } + + public int getCount() { + return count; + } + + @Override + public BackOffPolicy createBackOffPolicy(String service) { + return this; + } + } + } From 60c4e1b007f1d7ebb37d5a63fad62597775f5e66 Mon Sep 17 00:00:00 2001 From: Yongsung Yoon Date: Mon, 20 Nov 2017 20:28:23 +0900 Subject: [PATCH 09/15] Add support loadBalancerKey in RibbonRoutingFilter of Zuul for Canary test (#2439) * Add support loadBalancerKey in RibbonRoutingFilter * Add documentation about how to provide a loadBalancerKey to Ribbon * Add integrationtest for RibbonRoutingFilter's loadBalancerKey support --- .../main/asciidoc/spring-cloud-netflix.adoc | 26 +++ .../support/AbstractLoadBalancingClient.java | 8 + .../ribbon/support/ContextAwareRequest.java | 4 +- .../filters/route/RibbonCommandContext.java | 30 ++- .../filters/route/RibbonRoutingFilter.java | 5 +- .../zuul/filters/support/FilterConstants.java | 5 + .../support/ContextAwareRequestTests.java | 13 ++ .../route/RibbonCommandContextTest.java | 16 ++ ...FilterLoadBalancerKeyIntegrationTests.java | 178 ++++++++++++++++++ .../route/RibbonRoutingFilterTests.java | 57 +++++- spring-cloud-netflix-dependencies/pom.xml | 2 +- 11 files changed, 333 insertions(+), 11 deletions(-) create mode 100644 spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilterLoadBalancerKeyIntegrationTests.java diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index 629bad6e..1a285480 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -956,7 +956,33 @@ zuul: threadPoolKeyPrefix: zuulgw ---- +[[how-to-provdie-a-key-to-ribbon]] +=== How to Provide a Key to Ribbon's `IRule` +If you need to provide your own `IRule` implementation to handle a special routing requirement like a canary test, +you probably want to pass some information to the `choose` method of `IRule`. + +.com.netflix.loadbalancer.IRule.java +---- +public interface IRule{ + public Server choose(Object key); + : +---- + +You can provide some information that will be used to choose a target server by your `IRule` implementation like +the following: + +---- +RequestContext.getCurrentContext() + .set(FilterConstants.LOAD_BALANCER_KEY, "canary-test"); +---- + +If you put any object into the `RequestContext` with a key `FilterConstants.LOAD_BALANCER_KEY`, it will +be passed to the `choose` method of `IRule` implementation. Above code must be executed before `RibbonRoutingFilter` +is executed and Zuul's pre filter is the best place to do that. You can easily access HTTP headers and query parameters +via `RequestContext` in pre filter, so it can be used to determine `LOAD_BALANCER_KEY` that will be passed to Ribbon. +If you don't put any value with `LOAD_BALANCER_KEY` in `RequestContext`, null will be passed as a parameter of `choose` +method. [[spring-cloud-feign]] == Declarative REST Client: Feign diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/AbstractLoadBalancingClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/AbstractLoadBalancingClient.java index 22659d30..a3988c66 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/AbstractLoadBalancingClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/AbstractLoadBalancingClient.java @@ -17,6 +17,7 @@ package org.springframework.cloud.netflix.ribbon.support; +import com.netflix.loadbalancer.reactive.LoadBalancerCommand; import org.springframework.cloud.netflix.ribbon.DefaultServerIntrospector; import org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration; import org.springframework.cloud.netflix.ribbon.ServerIntrospector; @@ -140,4 +141,11 @@ public abstract class AbstractLoadBalancingClient builder) { + if (request.getLoadBalancerKey() != null) { + builder.withServerLocator(request.getLoadBalancerKey()); + } + } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/ContextAwareRequest.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/ContextAwareRequest.java index 09e45a8b..ae5da3e5 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/ContextAwareRequest.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/support/ContextAwareRequest.java @@ -43,6 +43,7 @@ public abstract class ContextAwareRequest extends ClientRequest implements HttpR } this.uri = context.uri(); this.isRetriable = context.getRetryable(); + this.loadBalancerKey = context.getLoadBalancerKey(); } public RibbonCommandContext getContext() { @@ -68,7 +69,8 @@ public abstract class ContextAwareRequest extends ClientRequest implements HttpR RibbonCommandContext commandContext = new RibbonCommandContext(this.context.getServiceId(), this.context.getMethod(), uri.toString(), this.context.getRetryable(), this.context.getHeaders(), this.context.getParams(), this.context.getRequestEntity(), - this.context.getRequestCustomizers(), this.context.getContentLength()); + this.context.getRequestCustomizers(), this.context.getContentLength(), + this.context.getLoadBalancerKey()); return commandContext; } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommandContext.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommandContext.java index 4e77e1a7..3ae88f21 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommandContext.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommandContext.java @@ -32,6 +32,7 @@ import java.util.Objects; /** * @author Spencer Gibb + * @author Yongsung Yoon */ public class RibbonCommandContext { private final String serviceId; @@ -43,6 +44,7 @@ public class RibbonCommandContext { private final List requestCustomizers; private InputStream requestEntity; private Long contentLength; + private Object loadBalancerKey; /** * Kept for backwards compatibility with Spring Cloud Sleuth 1.x versions @@ -52,7 +54,7 @@ public class RibbonCommandContext { String uri, Boolean retryable, MultiValueMap headers, MultiValueMap params, InputStream requestEntity) { this(serviceId, method, uri, retryable, headers, params, requestEntity, - new ArrayList(), null); + new ArrayList(), null, null); } public RibbonCommandContext(String serviceId, String method, String uri, @@ -60,13 +62,22 @@ public class RibbonCommandContext { MultiValueMap params, InputStream requestEntity, List requestCustomizers) { this(serviceId, method, uri, retryable, headers, params, requestEntity, - requestCustomizers, null); + requestCustomizers, null, null); } public RibbonCommandContext(String serviceId, String method, String uri, Boolean retryable, MultiValueMap headers, MultiValueMap params, InputStream requestEntity, List requestCustomizers, Long contentLength) { + this(serviceId, method, uri, retryable, headers, params, requestEntity, + requestCustomizers, contentLength, null); + } + + public RibbonCommandContext(String serviceId, String method, String uri, + Boolean retryable, MultiValueMap headers, + MultiValueMap params, InputStream requestEntity, + List requestCustomizers, Long contentLength, + Object loadBalancerKey) { Assert.notNull(serviceId, "serviceId may not be null"); Assert.notNull(method, "method may not be null"); Assert.notNull(uri, "uri may not be null"); @@ -82,6 +93,7 @@ public class RibbonCommandContext { this.requestEntity = requestEntity; this.requestCustomizers = requestCustomizers; this.contentLength = contentLength; + this.loadBalancerKey = loadBalancerKey; } public URI uri() { @@ -155,6 +167,14 @@ public class RibbonCommandContext { this.contentLength = contentLength; } + public Object getLoadBalancerKey() { + return loadBalancerKey; + } + + public void setLoadBalancerKey(Object loadBalancerKey) { + this.loadBalancerKey = loadBalancerKey; + } + @Override public boolean equals(Object o) { if (this == o) @@ -169,13 +189,14 @@ public class RibbonCommandContext { .equals(params, that.params) && Objects .equals(requestEntity, that.requestEntity) && Objects .equals(requestCustomizers, that.requestCustomizers) && Objects - .equals(contentLength, that.contentLength); + .equals(contentLength, that.contentLength) && Objects + .equals(loadBalancerKey, that.loadBalancerKey); } @Override public int hashCode() { return Objects.hash(serviceId, method, uri, retryable, headers, params, - requestEntity, requestCustomizers, contentLength); + requestEntity, requestCustomizers, contentLength, loadBalancerKey); } @Override @@ -190,6 +211,7 @@ public class RibbonCommandContext { sb.append(", requestEntity=").append(requestEntity); sb.append(", requestCustomizers=").append(requestCustomizers); sb.append(", contentLength=").append(contentLength); + sb.append(", loadBalancerKey=").append(loadBalancerKey); sb.append('}'); return sb.toString(); } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java index 36f86150..132dfc7d 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,6 +43,7 @@ import static org.springframework.cloud.netflix.zuul.filters.support.FilterConst import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.RIBBON_ROUTING_FILTER_ORDER; import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.ROUTE_TYPE; import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVICE_ID_KEY; +import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.LOAD_BALANCER_KEY; /** * Route {@link ZuulFilter} that uses Ribbon, Hystrix and pluggable http clients to send requests. @@ -135,6 +135,7 @@ public class RibbonRoutingFilter extends ZuulFilter { String serviceId = (String) context.get(SERVICE_ID_KEY); Boolean retryable = (Boolean) context.get(RETRYABLE_KEY); + Object loadBalancerKey = context.get(LOAD_BALANCER_KEY); String uri = this.helper.buildZuulRequestURI(request); @@ -144,7 +145,7 @@ public class RibbonRoutingFilter extends ZuulFilter { long contentLength = useServlet31 ? request.getContentLengthLong(): request.getContentLength(); return new RibbonCommandContext(serviceId, verb, uri, retryable, headers, params, - requestEntity, this.requestCustomizers, contentLength); + requestEntity, this.requestCustomizers, contentLength, loadBalancerKey); } protected ClientHttpResponse forward(RibbonCommandContext context) throws Exception { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/support/FilterConstants.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/support/FilterConstants.java index bf5f9c01..a2c24b3a 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/support/FilterConstants.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/support/FilterConstants.java @@ -70,6 +70,11 @@ public class FilterConstants { */ public static final String SERVICE_ID_KEY = "serviceId"; + /** + * Zuul {@link com.netflix.zuul.context.RequestContext} key for use in {@link org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter} + */ + public static final String LOAD_BALANCER_KEY = "loadBalancerKey"; + // ORDER constants ----------------------------------- /** diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/support/ContextAwareRequestTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/support/ContextAwareRequestTests.java index 9ccc2d6d..6b4b3227 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/support/ContextAwareRequestTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/support/ContextAwareRequestTests.java @@ -56,6 +56,7 @@ public class ContextAwareRequestTests { doReturn(new URI("http://foo")).when(context).uri(); doReturn("foo").when(context).getServiceId(); doReturn(new LinkedMultiValueMap<>()).when(context).getParams(); + doReturn("testLoadBalancerKey").when(context).getLoadBalancerKey(); request = new TestContextAwareRequest(context); } @@ -97,6 +98,18 @@ public class ContextAwareRequestTests { assertEquals(headers, request.getHeaders()); } + @Test + public void getLoadBalancerKey() throws Exception { + assertEquals("testLoadBalancerKey", request.getLoadBalancerKey()); + + RibbonCommandContext defaultContext = mock(RibbonCommandContext.class); + doReturn(new LinkedMultiValueMap()).when(defaultContext).getHeaders(); + doReturn(null).when(defaultContext).getLoadBalancerKey(); + ContextAwareRequest defaultRequest = new TestContextAwareRequest(defaultContext); + + assertNull(defaultRequest.getLoadBalancerKey()); + } + static class TestContextAwareRequest extends ContextAwareRequest { public TestContextAwareRequest(RibbonCommandContext context) { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommandContextTest.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommandContextTest.java index 004fb309..ce063c77 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommandContextTest.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommandContextTest.java @@ -27,9 +27,11 @@ import org.springframework.util.LinkedMultiValueMap; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.Collections; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; /** @@ -91,4 +93,18 @@ public class RibbonCommandContextTest { new ByteArrayInputStream(TEST_CONTENT), Lists.newArrayList(requestCustomizer)); } + + @Test + public void testNullSafetyWithNullableParameters() throws Exception { + LinkedMultiValueMap headers = new LinkedMultiValueMap(); + LinkedMultiValueMap params = new LinkedMultiValueMap(); + + RibbonCommandContext testContext = new RibbonCommandContext("serviceId", + HttpMethod.POST.toString(), "/my/route", true, headers, params, + new ByteArrayInputStream(TEST_CONTENT), Collections.emptyList(), + null, null); + + assertNotEquals(0, testContext.hashCode()); + assertNotNull(testContext.toString()); + } } \ No newline at end of file diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilterLoadBalancerKeyIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilterLoadBalancerKeyIntegrationTests.java new file mode 100644 index 00000000..d916fc3d --- /dev/null +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilterLoadBalancerKeyIntegrationTests.java @@ -0,0 +1,178 @@ +/* + * Copyright 2013-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.netflix.zuul.filters.route; + +import com.netflix.loadbalancer.AvailabilityFilteringRule; +import com.netflix.loadbalancer.IRule; +import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; +import com.netflix.zuul.ZuulFilter; +import com.netflix.zuul.context.RequestContext; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.context.embedded.LocalServerPort; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.cloud.netflix.ribbon.RibbonClient; +import org.springframework.cloud.netflix.ribbon.StaticServerList; +import org.springframework.cloud.netflix.zuul.EnableZuulProxy; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.*; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +import static org.junit.Assert.assertEquals; +import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.LOAD_BALANCER_KEY; +import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE; + +/** + * @author Yongsung Yoon + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = CanaryTestZuulProxyApplication.class, + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + value = { "zuul.routes.simple.path: /simple/**" }) +@DirtiesContext +public class RibbonRoutingFilterLoadBalancerKeyIntegrationTests { + + @Autowired + private TestRestTemplate testRestTemplate; + + @Before + public void setTestRequestContext() { + RequestContext context = new RequestContext(); + RequestContext.testSetCurrentContext(context); + } + + @After + public void clear() { + RequestContext.getCurrentContext().clear(); + } + + @Test + public void invokeWithUserDefinedCanaryHeader() { + HttpHeaders headers = new HttpHeaders(); + headers.set("X-Canary-Test", "true"); + + ResponseEntity result = testRestTemplate.exchange("/simple/hello", HttpMethod.GET, + new HttpEntity<>(headers), String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals("canary", result.getBody()); + } + + @Test + public void invokeWithoutUserDefinedCanaryHeader() { + HttpHeaders headers = new HttpHeaders(); + ResponseEntity result = testRestTemplate.exchange("/simple/hello", HttpMethod.GET, + new HttpEntity<>(headers), String.class); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, result.getStatusCode()); + } +} + +@Configuration +@EnableAutoConfiguration +@RestController +@EnableZuulProxy +@RibbonClient(name = "simple", configuration = CanaryTestRibbonClientConfiguration.class) +class CanaryTestZuulProxyApplication { + + @RequestMapping(value = "/hello", method = RequestMethod.GET) + public String hello() { + return "canary"; + } + + @Bean + public ZuulFilter testCanarySupportPreFilter() { + return new ZuulFilter() { + @Override + public Object run() { + RequestContext context = RequestContext.getCurrentContext(); + if (checkIfCanaryRequest(context)) { + context.set(LOAD_BALANCER_KEY, "canary"); // set loadBalancerKey for IRule + } + return null; + } + + private boolean checkIfCanaryRequest(RequestContext context) { + HttpServletRequest request = context.getRequest(); + String canaryHeader = request.getHeader("X-Canary-Test"); // user defined header + + if ((canaryHeader != null) && (canaryHeader.equalsIgnoreCase("true"))) { + return true; + } + return false; + } + + @Override + public boolean shouldFilter() { + return true; + } + + @Override + public String filterType() { + return PRE_TYPE; + } + + @Override + public int filterOrder() { + return 0; + } + }; + } +} + +@Configuration +class CanaryTestRibbonClientConfiguration { + + @LocalServerPort + private int port; + + private static Server testCanaryInstance; + + @Bean + public ServerList ribbonServerList() { + return new StaticServerList<>(new Server("normal-routing-notexist-localhost", this.port)); + } + + @Bean + public IRule canaryTestRule() { + if (testCanaryInstance == null) { + testCanaryInstance = new Server("localhost", port); // use test server as a canary instance + } + return new TestCanaryRule(); + } + + public static class TestCanaryRule extends AvailabilityFilteringRule { + @Override + public Server choose(Object key) { + if ((key != null) && (key.equals("canary"))) { + return testCanaryInstance; // choose test canary server instead of normal servers. + } + return super.choose(key); // normal routing + } + } +} diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilterTests.java index 909c6fab..08d3b646 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilterTests.java @@ -19,22 +19,73 @@ package org.springframework.cloud.netflix.zuul.filters.route; import java.util.Collections; +import com.netflix.zuul.context.RequestContext; +import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.springframework.cloud.netflix.ribbon.support.RibbonRequestCustomizer; import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper; +import org.springframework.mock.web.MockHttpServletRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; +import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.LOAD_BALANCER_KEY; +import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVICE_ID_KEY; /** * @author Spencer Gibb + * @author Yongsung Yoon */ public class RibbonRoutingFilterTests { + + private RequestContext requestContext; + private RibbonRoutingFilter filter; + + @Before + public void setUp() throws Exception { + setUpRequestContext(); + setupRibbonRoutingFilter(); + } + + @After + public void tearDown() throws Exception { + requestContext.unset(); + } + @Test public void useServlet31Works() { - RibbonCommandFactory factory = mock(RibbonCommandFactory.class); - RibbonRoutingFilter filter = new RibbonRoutingFilter(new ProxyRequestHelper(), factory, - Collections.emptyList()); assertThat(filter.isUseServlet31()).isTrue(); } + + @Test + public void testLoadBalancerKeyToRibbonCommandContext() throws Exception { + final String testKey = "testLoadBalancerKey"; + requestContext.set(LOAD_BALANCER_KEY, testKey); + RibbonCommandContext commandContext = filter.buildCommandContext(requestContext); + + assertThat(commandContext.getLoadBalancerKey()).isEqualTo(testKey); + } + + @Test + public void testNullLoadBalancerKeyToRibbonCommandContext() throws Exception { + requestContext.set(LOAD_BALANCER_KEY, null); + RibbonCommandContext commandContext = filter.buildCommandContext(requestContext); + + assertThat(commandContext.getLoadBalancerKey()).isNull(); + } + + private void setUpRequestContext() { + requestContext = RequestContext.getCurrentContext(); + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.setMethod("GET"); + mockRequest.setRequestURI("/foo/bar"); + requestContext.setRequest(mockRequest); + requestContext.setRequestQueryParams(Collections.EMPTY_MAP); + requestContext.set(SERVICE_ID_KEY, "testServiceId"); + } + + private void setupRibbonRoutingFilter() { + RibbonCommandFactory factory = mock(RibbonCommandFactory.class); + filter = new RibbonRoutingFilter(new ProxyRequestHelper(), factory, Collections.emptyList()); + } } diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml index 50c8fa8e..a46a6acf 100644 --- a/spring-cloud-netflix-dependencies/pom.xml +++ b/spring-cloud-netflix-dependencies/pom.xml @@ -18,7 +18,7 @@ 1.7.0 9.5.0 1.5.12 - 2.2.2 + 2.2.4 0.10.1 1.3.0 1.2.0 From 64ad2ba20c1fc2b5556cb94386fecd0f4f65a816 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 20 Nov 2017 15:54:27 -0500 Subject: [PATCH 10/15] Update SNAPSHOT to 1.4.0.RELEASE --- docs/pom.xml | 2 +- pom.xml | 10 +++++----- scripts/build.sh | 2 +- spring-cloud-netflix-core/pom.xml | 2 +- spring-cloud-netflix-dependencies/pom.xml | 4 ++-- spring-cloud-netflix-eureka-client/pom.xml | 2 +- spring-cloud-netflix-eureka-server/pom.xml | 2 +- spring-cloud-netflix-hystrix-amqp/pom.xml | 2 +- spring-cloud-netflix-hystrix-contract/pom.xml | 4 ++-- spring-cloud-netflix-hystrix-dashboard/pom.xml | 2 +- spring-cloud-netflix-hystrix-stream/pom.xml | 2 +- spring-cloud-netflix-sidecar/pom.xml | 2 +- spring-cloud-netflix-spectator/pom.xml | 2 +- spring-cloud-netflix-turbine-stream/pom.xml | 2 +- spring-cloud-netflix-turbine/pom.xml | 2 +- spring-cloud-starter-archaius/pom.xml | 2 +- spring-cloud-starter-atlas/pom.xml | 2 +- spring-cloud-starter-eureka-server/pom.xml | 2 +- spring-cloud-starter-eureka/pom.xml | 2 +- spring-cloud-starter-feign/pom.xml | 2 +- spring-cloud-starter-hystrix-dashboard/pom.xml | 2 +- spring-cloud-starter-hystrix/pom.xml | 2 +- spring-cloud-starter-netflix/pom.xml | 2 +- .../spring-cloud-starter-netflix-archaius/pom.xml | 2 +- .../spring-cloud-starter-netflix-atlas/pom.xml | 2 +- .../spring-cloud-starter-netflix-eureka-client/pom.xml | 2 +- .../spring-cloud-starter-netflix-eureka-server/pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-starter-netflix-hystrix/pom.xml | 2 +- .../spring-cloud-starter-netflix-ribbon/pom.xml | 2 +- .../spring-cloud-starter-netflix-spectator/pom.xml | 2 +- .../spring-cloud-starter-netflix-turbine-amqp/pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-starter-netflix-turbine/pom.xml | 2 +- .../spring-cloud-starter-netflix-zuul/pom.xml | 2 +- .../spring-cloud-starter-openfeign/pom.xml | 2 +- spring-cloud-starter-ribbon/pom.xml | 2 +- spring-cloud-starter-spectator/pom.xml | 2 +- spring-cloud-starter-turbine-amqp/pom.xml | 2 +- spring-cloud-starter-turbine-stream/pom.xml | 2 +- spring-cloud-starter-turbine/pom.xml | 2 +- spring-cloud-starter-zuul/pom.xml | 2 +- 42 files changed, 48 insertions(+), 48 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 9691d4c3..7519252d 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-netflix-docs pom diff --git a/pom.xml b/pom.xml index 3fef8412..37df2842 100644 --- a/pom.xml +++ b/pom.xml @@ -3,14 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE pom Spring Cloud Netflix Spring Cloud Netflix org.springframework.cloud spring-cloud-build - 1.3.5.RELEASE + 1.3.6.RELEASE @@ -24,9 +24,9 @@ ${basedir} 4.0.27.Final 2.7.3 - 1.3.0.BUILD-SNAPSHOT - 1.4.0.BUILD-SNAPSHOT - Ditmars.BUILD-SNAPSHOT + 1.3.0.RELEASE + 1.4.0.RELEASE + Ditmars.RELEASE 1.1.2.RELEASE diff --git a/scripts/build.sh b/scripts/build.sh index 9a06ffea..2dae9e91 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,4 +1,4 @@ #!/bin/bash -(cd spring-cloud-netflix-hystrix-contract && ./mvnw clean install) +(cd spring-cloud-netflix-hystrix-contract && ../mvnw clean install) ./mvnw clean install diff --git a/spring-cloud-netflix-core/pom.xml b/spring-cloud-netflix-core/pom.xml index f6c95ea2..b9488971 100644 --- a/spring-cloud-netflix-core/pom.xml +++ b/spring-cloud-netflix-core/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-core diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml index a46a6acf..b35bb624 100644 --- a/spring-cloud-netflix-dependencies/pom.xml +++ b/spring-cloud-netflix-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.3.5.BUILD-SNAPSHOT + 1.3.6.RELEASE spring-cloud-netflix-dependencies - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE pom spring-cloud-netflix-dependencies Spring Cloud Netflix Dependencies diff --git a/spring-cloud-netflix-eureka-client/pom.xml b/spring-cloud-netflix-eureka-client/pom.xml index bd93e3ab..07ecbbbd 100644 --- a/spring-cloud-netflix-eureka-client/pom.xml +++ b/spring-cloud-netflix-eureka-client/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-eureka-client diff --git a/spring-cloud-netflix-eureka-server/pom.xml b/spring-cloud-netflix-eureka-server/pom.xml index 3e34f9c7..4e07adc7 100644 --- a/spring-cloud-netflix-eureka-server/pom.xml +++ b/spring-cloud-netflix-eureka-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-eureka-server diff --git a/spring-cloud-netflix-hystrix-amqp/pom.xml b/spring-cloud-netflix-hystrix-amqp/pom.xml index c85428e7..01d2e166 100644 --- a/spring-cloud-netflix-hystrix-amqp/pom.xml +++ b/spring-cloud-netflix-hystrix-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-hystrix-amqp diff --git a/spring-cloud-netflix-hystrix-contract/pom.xml b/spring-cloud-netflix-hystrix-contract/pom.xml index 0f743e4a..1c7a32a3 100644 --- a/spring-cloud-netflix-hystrix-contract/pom.xml +++ b/spring-cloud-netflix-hystrix-contract/pom.xml @@ -5,11 +5,11 @@ org.springframework.cloud spring-cloud-build - 1.3.3.RELEASE + 1.3.6.RELEASE spring-cloud-netflix-hystrix-contract - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE jar spring-cloud-netflix-hystrix-contract Spring Cloud Netflix Hystrix Contract diff --git a/spring-cloud-netflix-hystrix-dashboard/pom.xml b/spring-cloud-netflix-hystrix-dashboard/pom.xml index e100a85e..15c9ab05 100644 --- a/spring-cloud-netflix-hystrix-dashboard/pom.xml +++ b/spring-cloud-netflix-hystrix-dashboard/pom.xml @@ -8,7 +8,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. diff --git a/spring-cloud-netflix-hystrix-stream/pom.xml b/spring-cloud-netflix-hystrix-stream/pom.xml index 4bc1e8f3..e345813e 100644 --- a/spring-cloud-netflix-hystrix-stream/pom.xml +++ b/spring-cloud-netflix-hystrix-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-hystrix-stream diff --git a/spring-cloud-netflix-sidecar/pom.xml b/spring-cloud-netflix-sidecar/pom.xml index 6958eec0..70d68461 100644 --- a/spring-cloud-netflix-sidecar/pom.xml +++ b/spring-cloud-netflix-sidecar/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-sidecar diff --git a/spring-cloud-netflix-spectator/pom.xml b/spring-cloud-netflix-spectator/pom.xml index da2791d9..49a51ca2 100644 --- a/spring-cloud-netflix-spectator/pom.xml +++ b/spring-cloud-netflix-spectator/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-spectator diff --git a/spring-cloud-netflix-turbine-stream/pom.xml b/spring-cloud-netflix-turbine-stream/pom.xml index 01f3e0c6..2c71991f 100644 --- a/spring-cloud-netflix-turbine-stream/pom.xml +++ b/spring-cloud-netflix-turbine-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-turbine-stream diff --git a/spring-cloud-netflix-turbine/pom.xml b/spring-cloud-netflix-turbine/pom.xml index e651d6d4..0a377f65 100644 --- a/spring-cloud-netflix-turbine/pom.xml +++ b/spring-cloud-netflix-turbine/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-netflix-turbine diff --git a/spring-cloud-starter-archaius/pom.xml b/spring-cloud-starter-archaius/pom.xml index d54193a6..672ea146 100644 --- a/spring-cloud-starter-archaius/pom.xml +++ b/spring-cloud-starter-archaius/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-archaius diff --git a/spring-cloud-starter-atlas/pom.xml b/spring-cloud-starter-atlas/pom.xml index 31816567..4a7672a0 100644 --- a/spring-cloud-starter-atlas/pom.xml +++ b/spring-cloud-starter-atlas/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-atlas diff --git a/spring-cloud-starter-eureka-server/pom.xml b/spring-cloud-starter-eureka-server/pom.xml index 4b0e7d88..694f11ec 100644 --- a/spring-cloud-starter-eureka-server/pom.xml +++ b/spring-cloud-starter-eureka-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-eureka-server diff --git a/spring-cloud-starter-eureka/pom.xml b/spring-cloud-starter-eureka/pom.xml index 8f90dfeb..b9ac14e3 100644 --- a/spring-cloud-starter-eureka/pom.xml +++ b/spring-cloud-starter-eureka/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-eureka diff --git a/spring-cloud-starter-feign/pom.xml b/spring-cloud-starter-feign/pom.xml index c18030c6..a98036c3 100644 --- a/spring-cloud-starter-feign/pom.xml +++ b/spring-cloud-starter-feign/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-feign diff --git a/spring-cloud-starter-hystrix-dashboard/pom.xml b/spring-cloud-starter-hystrix-dashboard/pom.xml index 66799065..670a0672 100644 --- a/spring-cloud-starter-hystrix-dashboard/pom.xml +++ b/spring-cloud-starter-hystrix-dashboard/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-hystrix-dashboard diff --git a/spring-cloud-starter-hystrix/pom.xml b/spring-cloud-starter-hystrix/pom.xml index 6119e439..e01e89f6 100644 --- a/spring-cloud-starter-hystrix/pom.xml +++ b/spring-cloud-starter-hystrix/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-hystrix diff --git a/spring-cloud-starter-netflix/pom.xml b/spring-cloud-starter-netflix/pom.xml index 22243092..6e4e78e7 100644 --- a/spring-cloud-starter-netflix/pom.xml +++ b/spring-cloud-starter-netflix/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-netflix diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml index f8c9e399..d839b702 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-archaius Spring Cloud Starter Netflix Archaius diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml index 4e8b8b9c..17502223 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-atlas Spring Cloud Starter Netflix Atlas diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml index 7e2a15b7..439fb66f 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-eureka-client Spring Cloud Starter Netflix Eureka Client diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml index 267254e2..23ea4664 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml @@ -3,7 +3,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-eureka-server Spring Cloud Starter Netflix Eureka Server diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml index 658584aa..568592e8 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-hystrix-dashboard Spring Cloud Starter Netflix Hystrix Dashboard diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml index de2e7bd6..d781fa7b 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-hystrix Spring Cloud Starter Netflix Hystrix diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml index 73949fbc..378a4617 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-ribbon Spring Cloud Starter Netflix Ribbon diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml index d7218ea0..8462aedd 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-spectator Spring Cloud Starter Netflix Spectator diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml index 509171a5..688df725 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml @@ -3,7 +3,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-turbine-amqp Spring Cloud Starter Netflix Turbine AMQP diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml index 6d0536f4..e4048eb1 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-turbine-stream Spring Cloud Starter Netflix Turbine Stream diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml index 0b930c89..d9998b74 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-turbine Spring Cloud Starter Netflix Turbine diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml index b894180f..4116c2f1 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-netflix-zuul Spring Cloud Starter Netflix Zuul diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml index e15ef009..7247e67d 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE spring-cloud-starter-openfeign Spring Cloud Starter OpenFeign diff --git a/spring-cloud-starter-ribbon/pom.xml b/spring-cloud-starter-ribbon/pom.xml index 5a1fd0a9..0b85d530 100644 --- a/spring-cloud-starter-ribbon/pom.xml +++ b/spring-cloud-starter-ribbon/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-ribbon diff --git a/spring-cloud-starter-spectator/pom.xml b/spring-cloud-starter-spectator/pom.xml index f62aa00a..599fa976 100644 --- a/spring-cloud-starter-spectator/pom.xml +++ b/spring-cloud-starter-spectator/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-spectator diff --git a/spring-cloud-starter-turbine-amqp/pom.xml b/spring-cloud-starter-turbine-amqp/pom.xml index 1f29a3a9..f2749da6 100644 --- a/spring-cloud-starter-turbine-amqp/pom.xml +++ b/spring-cloud-starter-turbine-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-turbine-amqp diff --git a/spring-cloud-starter-turbine-stream/pom.xml b/spring-cloud-starter-turbine-stream/pom.xml index b5feee43..7a72a790 100644 --- a/spring-cloud-starter-turbine-stream/pom.xml +++ b/spring-cloud-starter-turbine-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-turbine-stream diff --git a/spring-cloud-starter-turbine/pom.xml b/spring-cloud-starter-turbine/pom.xml index a0c666c3..19299acb 100644 --- a/spring-cloud-starter-turbine/pom.xml +++ b/spring-cloud-starter-turbine/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-turbine diff --git a/spring-cloud-starter-zuul/pom.xml b/spring-cloud-starter-zuul/pom.xml index aaeea73a..6958a998 100644 --- a/spring-cloud-starter-zuul/pom.xml +++ b/spring-cloud-starter-zuul/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.0.RELEASE .. spring-cloud-starter-zuul From 2489d5e234826dab425a9ab5370f148d91bd982e Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 20 Nov 2017 16:03:52 -0500 Subject: [PATCH 11/15] Going back to snapshots --- docs/pom.xml | 2 +- pom.xml | 10 +++++----- scripts/build.sh | 2 +- spring-cloud-netflix-core/pom.xml | 2 +- spring-cloud-netflix-dependencies/pom.xml | 4 ++-- spring-cloud-netflix-eureka-client/pom.xml | 2 +- spring-cloud-netflix-eureka-server/pom.xml | 2 +- spring-cloud-netflix-hystrix-amqp/pom.xml | 2 +- spring-cloud-netflix-hystrix-contract/pom.xml | 4 ++-- spring-cloud-netflix-hystrix-dashboard/pom.xml | 2 +- spring-cloud-netflix-hystrix-stream/pom.xml | 2 +- spring-cloud-netflix-sidecar/pom.xml | 2 +- spring-cloud-netflix-spectator/pom.xml | 2 +- spring-cloud-netflix-turbine-stream/pom.xml | 2 +- spring-cloud-netflix-turbine/pom.xml | 2 +- spring-cloud-starter-archaius/pom.xml | 2 +- spring-cloud-starter-atlas/pom.xml | 2 +- spring-cloud-starter-eureka-server/pom.xml | 2 +- spring-cloud-starter-eureka/pom.xml | 2 +- spring-cloud-starter-feign/pom.xml | 2 +- spring-cloud-starter-hystrix-dashboard/pom.xml | 2 +- spring-cloud-starter-hystrix/pom.xml | 2 +- spring-cloud-starter-netflix/pom.xml | 2 +- .../spring-cloud-starter-netflix-archaius/pom.xml | 2 +- .../spring-cloud-starter-netflix-atlas/pom.xml | 2 +- .../spring-cloud-starter-netflix-eureka-client/pom.xml | 2 +- .../spring-cloud-starter-netflix-eureka-server/pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-starter-netflix-hystrix/pom.xml | 2 +- .../spring-cloud-starter-netflix-ribbon/pom.xml | 2 +- .../spring-cloud-starter-netflix-spectator/pom.xml | 2 +- .../spring-cloud-starter-netflix-turbine-amqp/pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-starter-netflix-turbine/pom.xml | 2 +- .../spring-cloud-starter-netflix-zuul/pom.xml | 2 +- .../spring-cloud-starter-openfeign/pom.xml | 2 +- spring-cloud-starter-ribbon/pom.xml | 2 +- spring-cloud-starter-spectator/pom.xml | 2 +- spring-cloud-starter-turbine-amqp/pom.xml | 2 +- spring-cloud-starter-turbine-stream/pom.xml | 2 +- spring-cloud-starter-turbine/pom.xml | 2 +- spring-cloud-starter-zuul/pom.xml | 2 +- 42 files changed, 48 insertions(+), 48 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 7519252d..9691d4c3 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-netflix-docs pom diff --git a/pom.xml b/pom.xml index 37df2842..3fef8412 100644 --- a/pom.xml +++ b/pom.xml @@ -3,14 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT pom Spring Cloud Netflix Spring Cloud Netflix org.springframework.cloud spring-cloud-build - 1.3.6.RELEASE + 1.3.5.RELEASE @@ -24,9 +24,9 @@ ${basedir} 4.0.27.Final 2.7.3 - 1.3.0.RELEASE - 1.4.0.RELEASE - Ditmars.RELEASE + 1.3.0.BUILD-SNAPSHOT + 1.4.0.BUILD-SNAPSHOT + Ditmars.BUILD-SNAPSHOT 1.1.2.RELEASE diff --git a/scripts/build.sh b/scripts/build.sh index 2dae9e91..9a06ffea 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,4 +1,4 @@ #!/bin/bash -(cd spring-cloud-netflix-hystrix-contract && ../mvnw clean install) +(cd spring-cloud-netflix-hystrix-contract && ./mvnw clean install) ./mvnw clean install diff --git a/spring-cloud-netflix-core/pom.xml b/spring-cloud-netflix-core/pom.xml index b9488971..f6c95ea2 100644 --- a/spring-cloud-netflix-core/pom.xml +++ b/spring-cloud-netflix-core/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-core diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml index b35bb624..a46a6acf 100644 --- a/spring-cloud-netflix-dependencies/pom.xml +++ b/spring-cloud-netflix-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.3.6.RELEASE + 1.3.5.BUILD-SNAPSHOT spring-cloud-netflix-dependencies - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT pom spring-cloud-netflix-dependencies Spring Cloud Netflix Dependencies diff --git a/spring-cloud-netflix-eureka-client/pom.xml b/spring-cloud-netflix-eureka-client/pom.xml index 07ecbbbd..bd93e3ab 100644 --- a/spring-cloud-netflix-eureka-client/pom.xml +++ b/spring-cloud-netflix-eureka-client/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-eureka-client diff --git a/spring-cloud-netflix-eureka-server/pom.xml b/spring-cloud-netflix-eureka-server/pom.xml index 4e07adc7..3e34f9c7 100644 --- a/spring-cloud-netflix-eureka-server/pom.xml +++ b/spring-cloud-netflix-eureka-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-eureka-server diff --git a/spring-cloud-netflix-hystrix-amqp/pom.xml b/spring-cloud-netflix-hystrix-amqp/pom.xml index 01d2e166..c85428e7 100644 --- a/spring-cloud-netflix-hystrix-amqp/pom.xml +++ b/spring-cloud-netflix-hystrix-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-hystrix-amqp diff --git a/spring-cloud-netflix-hystrix-contract/pom.xml b/spring-cloud-netflix-hystrix-contract/pom.xml index 1c7a32a3..0f743e4a 100644 --- a/spring-cloud-netflix-hystrix-contract/pom.xml +++ b/spring-cloud-netflix-hystrix-contract/pom.xml @@ -5,11 +5,11 @@ org.springframework.cloud spring-cloud-build - 1.3.6.RELEASE + 1.3.3.RELEASE spring-cloud-netflix-hystrix-contract - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT jar spring-cloud-netflix-hystrix-contract Spring Cloud Netflix Hystrix Contract diff --git a/spring-cloud-netflix-hystrix-dashboard/pom.xml b/spring-cloud-netflix-hystrix-dashboard/pom.xml index 15c9ab05..e100a85e 100644 --- a/spring-cloud-netflix-hystrix-dashboard/pom.xml +++ b/spring-cloud-netflix-hystrix-dashboard/pom.xml @@ -8,7 +8,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. diff --git a/spring-cloud-netflix-hystrix-stream/pom.xml b/spring-cloud-netflix-hystrix-stream/pom.xml index e345813e..4bc1e8f3 100644 --- a/spring-cloud-netflix-hystrix-stream/pom.xml +++ b/spring-cloud-netflix-hystrix-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-hystrix-stream diff --git a/spring-cloud-netflix-sidecar/pom.xml b/spring-cloud-netflix-sidecar/pom.xml index 70d68461..6958eec0 100644 --- a/spring-cloud-netflix-sidecar/pom.xml +++ b/spring-cloud-netflix-sidecar/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-sidecar diff --git a/spring-cloud-netflix-spectator/pom.xml b/spring-cloud-netflix-spectator/pom.xml index 49a51ca2..da2791d9 100644 --- a/spring-cloud-netflix-spectator/pom.xml +++ b/spring-cloud-netflix-spectator/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-spectator diff --git a/spring-cloud-netflix-turbine-stream/pom.xml b/spring-cloud-netflix-turbine-stream/pom.xml index 2c71991f..01f3e0c6 100644 --- a/spring-cloud-netflix-turbine-stream/pom.xml +++ b/spring-cloud-netflix-turbine-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-turbine-stream diff --git a/spring-cloud-netflix-turbine/pom.xml b/spring-cloud-netflix-turbine/pom.xml index 0a377f65..e651d6d4 100644 --- a/spring-cloud-netflix-turbine/pom.xml +++ b/spring-cloud-netflix-turbine/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-netflix-turbine diff --git a/spring-cloud-starter-archaius/pom.xml b/spring-cloud-starter-archaius/pom.xml index 672ea146..d54193a6 100644 --- a/spring-cloud-starter-archaius/pom.xml +++ b/spring-cloud-starter-archaius/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-archaius diff --git a/spring-cloud-starter-atlas/pom.xml b/spring-cloud-starter-atlas/pom.xml index 4a7672a0..31816567 100644 --- a/spring-cloud-starter-atlas/pom.xml +++ b/spring-cloud-starter-atlas/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-atlas diff --git a/spring-cloud-starter-eureka-server/pom.xml b/spring-cloud-starter-eureka-server/pom.xml index 694f11ec..4b0e7d88 100644 --- a/spring-cloud-starter-eureka-server/pom.xml +++ b/spring-cloud-starter-eureka-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-eureka-server diff --git a/spring-cloud-starter-eureka/pom.xml b/spring-cloud-starter-eureka/pom.xml index b9ac14e3..8f90dfeb 100644 --- a/spring-cloud-starter-eureka/pom.xml +++ b/spring-cloud-starter-eureka/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-eureka diff --git a/spring-cloud-starter-feign/pom.xml b/spring-cloud-starter-feign/pom.xml index a98036c3..c18030c6 100644 --- a/spring-cloud-starter-feign/pom.xml +++ b/spring-cloud-starter-feign/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-feign diff --git a/spring-cloud-starter-hystrix-dashboard/pom.xml b/spring-cloud-starter-hystrix-dashboard/pom.xml index 670a0672..66799065 100644 --- a/spring-cloud-starter-hystrix-dashboard/pom.xml +++ b/spring-cloud-starter-hystrix-dashboard/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-hystrix-dashboard diff --git a/spring-cloud-starter-hystrix/pom.xml b/spring-cloud-starter-hystrix/pom.xml index e01e89f6..6119e439 100644 --- a/spring-cloud-starter-hystrix/pom.xml +++ b/spring-cloud-starter-hystrix/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-hystrix diff --git a/spring-cloud-starter-netflix/pom.xml b/spring-cloud-starter-netflix/pom.xml index 6e4e78e7..22243092 100644 --- a/spring-cloud-starter-netflix/pom.xml +++ b/spring-cloud-starter-netflix/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-netflix diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml index d839b702..f8c9e399 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-archaius Spring Cloud Starter Netflix Archaius diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml index 17502223..4e8b8b9c 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-atlas Spring Cloud Starter Netflix Atlas diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml index 439fb66f..7e2a15b7 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-eureka-client Spring Cloud Starter Netflix Eureka Client diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml index 23ea4664..267254e2 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml @@ -3,7 +3,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-eureka-server Spring Cloud Starter Netflix Eureka Server diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml index 568592e8..658584aa 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-hystrix-dashboard Spring Cloud Starter Netflix Hystrix Dashboard diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml index d781fa7b..de2e7bd6 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-hystrix Spring Cloud Starter Netflix Hystrix diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml index 378a4617..73949fbc 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-ribbon Spring Cloud Starter Netflix Ribbon diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml index 8462aedd..d7218ea0 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-spectator Spring Cloud Starter Netflix Spectator diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml index 688df725..509171a5 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml @@ -3,7 +3,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-turbine-amqp Spring Cloud Starter Netflix Turbine AMQP diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml index e4048eb1..6d0536f4 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-turbine-stream Spring Cloud Starter Netflix Turbine Stream diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml index d9998b74..0b930c89 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-turbine Spring Cloud Starter Netflix Turbine diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml index 4116c2f1..b894180f 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-netflix-zuul Spring Cloud Starter Netflix Zuul diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml index 7247e67d..e15ef009 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT spring-cloud-starter-openfeign Spring Cloud Starter OpenFeign diff --git a/spring-cloud-starter-ribbon/pom.xml b/spring-cloud-starter-ribbon/pom.xml index 0b85d530..5a1fd0a9 100644 --- a/spring-cloud-starter-ribbon/pom.xml +++ b/spring-cloud-starter-ribbon/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-ribbon diff --git a/spring-cloud-starter-spectator/pom.xml b/spring-cloud-starter-spectator/pom.xml index 599fa976..f62aa00a 100644 --- a/spring-cloud-starter-spectator/pom.xml +++ b/spring-cloud-starter-spectator/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-spectator diff --git a/spring-cloud-starter-turbine-amqp/pom.xml b/spring-cloud-starter-turbine-amqp/pom.xml index f2749da6..1f29a3a9 100644 --- a/spring-cloud-starter-turbine-amqp/pom.xml +++ b/spring-cloud-starter-turbine-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-turbine-amqp diff --git a/spring-cloud-starter-turbine-stream/pom.xml b/spring-cloud-starter-turbine-stream/pom.xml index 7a72a790..b5feee43 100644 --- a/spring-cloud-starter-turbine-stream/pom.xml +++ b/spring-cloud-starter-turbine-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-turbine-stream diff --git a/spring-cloud-starter-turbine/pom.xml b/spring-cloud-starter-turbine/pom.xml index 19299acb..a0c666c3 100644 --- a/spring-cloud-starter-turbine/pom.xml +++ b/spring-cloud-starter-turbine/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-turbine diff --git a/spring-cloud-starter-zuul/pom.xml b/spring-cloud-starter-zuul/pom.xml index 6958a998..aaeea73a 100644 --- a/spring-cloud-starter-zuul/pom.xml +++ b/spring-cloud-starter-zuul/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.RELEASE + 1.4.0.BUILD-SNAPSHOT .. spring-cloud-starter-zuul From 202f96876ed41d094bdc40574d7372c97ec1c21f Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 20 Nov 2017 16:03:53 -0500 Subject: [PATCH 12/15] Bumping versions to 1.4.1.BUILD-SNAPSHOT after release --- docs/pom.xml | 2 +- pom.xml | 10 +++++----- spring-cloud-netflix-core/pom.xml | 2 +- spring-cloud-netflix-dependencies/pom.xml | 4 ++-- spring-cloud-netflix-eureka-client/pom.xml | 2 +- spring-cloud-netflix-eureka-server/pom.xml | 2 +- spring-cloud-netflix-hystrix-amqp/pom.xml | 2 +- spring-cloud-netflix-hystrix-contract/pom.xml | 4 ++-- spring-cloud-netflix-hystrix-dashboard/pom.xml | 2 +- spring-cloud-netflix-hystrix-stream/pom.xml | 2 +- spring-cloud-netflix-sidecar/pom.xml | 2 +- spring-cloud-netflix-spectator/pom.xml | 2 +- spring-cloud-netflix-turbine-stream/pom.xml | 2 +- spring-cloud-netflix-turbine/pom.xml | 2 +- spring-cloud-starter-archaius/pom.xml | 2 +- spring-cloud-starter-atlas/pom.xml | 2 +- spring-cloud-starter-eureka-server/pom.xml | 2 +- spring-cloud-starter-eureka/pom.xml | 2 +- spring-cloud-starter-feign/pom.xml | 2 +- spring-cloud-starter-hystrix-dashboard/pom.xml | 2 +- spring-cloud-starter-hystrix/pom.xml | 2 +- spring-cloud-starter-netflix/pom.xml | 2 +- .../spring-cloud-starter-netflix-archaius/pom.xml | 2 +- .../spring-cloud-starter-netflix-atlas/pom.xml | 2 +- .../spring-cloud-starter-netflix-eureka-client/pom.xml | 2 +- .../spring-cloud-starter-netflix-eureka-server/pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-starter-netflix-hystrix/pom.xml | 2 +- .../spring-cloud-starter-netflix-ribbon/pom.xml | 2 +- .../spring-cloud-starter-netflix-spectator/pom.xml | 2 +- .../spring-cloud-starter-netflix-turbine-amqp/pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-starter-netflix-turbine/pom.xml | 2 +- .../spring-cloud-starter-netflix-zuul/pom.xml | 2 +- .../spring-cloud-starter-openfeign/pom.xml | 2 +- spring-cloud-starter-ribbon/pom.xml | 2 +- spring-cloud-starter-spectator/pom.xml | 2 +- spring-cloud-starter-turbine-amqp/pom.xml | 2 +- spring-cloud-starter-turbine-stream/pom.xml | 2 +- spring-cloud-starter-turbine/pom.xml | 2 +- spring-cloud-starter-zuul/pom.xml | 2 +- 41 files changed, 47 insertions(+), 47 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 9691d4c3..fdee1b2e 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-netflix-docs pom diff --git a/pom.xml b/pom.xml index 3fef8412..507d6445 100644 --- a/pom.xml +++ b/pom.xml @@ -3,14 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT pom Spring Cloud Netflix Spring Cloud Netflix org.springframework.cloud spring-cloud-build - 1.3.5.RELEASE + 1.3.6.RELEASE @@ -24,9 +24,9 @@ ${basedir} 4.0.27.Final 2.7.3 - 1.3.0.BUILD-SNAPSHOT - 1.4.0.BUILD-SNAPSHOT - Ditmars.BUILD-SNAPSHOT + 1.3.0.RELEASE + 1.4.0.RELEASE + Ditmars.RELEASE 1.1.2.RELEASE diff --git a/spring-cloud-netflix-core/pom.xml b/spring-cloud-netflix-core/pom.xml index f6c95ea2..57c24aaa 100644 --- a/spring-cloud-netflix-core/pom.xml +++ b/spring-cloud-netflix-core/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-core diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml index a46a6acf..fa3051bd 100644 --- a/spring-cloud-netflix-dependencies/pom.xml +++ b/spring-cloud-netflix-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.3.5.BUILD-SNAPSHOT + 1.3.6.RELEASE spring-cloud-netflix-dependencies - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT pom spring-cloud-netflix-dependencies Spring Cloud Netflix Dependencies diff --git a/spring-cloud-netflix-eureka-client/pom.xml b/spring-cloud-netflix-eureka-client/pom.xml index bd93e3ab..659378bc 100644 --- a/spring-cloud-netflix-eureka-client/pom.xml +++ b/spring-cloud-netflix-eureka-client/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-eureka-client diff --git a/spring-cloud-netflix-eureka-server/pom.xml b/spring-cloud-netflix-eureka-server/pom.xml index 3e34f9c7..39872531 100644 --- a/spring-cloud-netflix-eureka-server/pom.xml +++ b/spring-cloud-netflix-eureka-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-eureka-server diff --git a/spring-cloud-netflix-hystrix-amqp/pom.xml b/spring-cloud-netflix-hystrix-amqp/pom.xml index c85428e7..fc82f544 100644 --- a/spring-cloud-netflix-hystrix-amqp/pom.xml +++ b/spring-cloud-netflix-hystrix-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-hystrix-amqp diff --git a/spring-cloud-netflix-hystrix-contract/pom.xml b/spring-cloud-netflix-hystrix-contract/pom.xml index 0f743e4a..6b359b86 100644 --- a/spring-cloud-netflix-hystrix-contract/pom.xml +++ b/spring-cloud-netflix-hystrix-contract/pom.xml @@ -5,11 +5,11 @@ org.springframework.cloud spring-cloud-build - 1.3.3.RELEASE + 1.3.6.RELEASE spring-cloud-netflix-hystrix-contract - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT jar spring-cloud-netflix-hystrix-contract Spring Cloud Netflix Hystrix Contract diff --git a/spring-cloud-netflix-hystrix-dashboard/pom.xml b/spring-cloud-netflix-hystrix-dashboard/pom.xml index e100a85e..471176ca 100644 --- a/spring-cloud-netflix-hystrix-dashboard/pom.xml +++ b/spring-cloud-netflix-hystrix-dashboard/pom.xml @@ -8,7 +8,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. diff --git a/spring-cloud-netflix-hystrix-stream/pom.xml b/spring-cloud-netflix-hystrix-stream/pom.xml index 4bc1e8f3..606993c4 100644 --- a/spring-cloud-netflix-hystrix-stream/pom.xml +++ b/spring-cloud-netflix-hystrix-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-hystrix-stream diff --git a/spring-cloud-netflix-sidecar/pom.xml b/spring-cloud-netflix-sidecar/pom.xml index 6958eec0..a1a787d5 100644 --- a/spring-cloud-netflix-sidecar/pom.xml +++ b/spring-cloud-netflix-sidecar/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-sidecar diff --git a/spring-cloud-netflix-spectator/pom.xml b/spring-cloud-netflix-spectator/pom.xml index da2791d9..b9442d74 100644 --- a/spring-cloud-netflix-spectator/pom.xml +++ b/spring-cloud-netflix-spectator/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-spectator diff --git a/spring-cloud-netflix-turbine-stream/pom.xml b/spring-cloud-netflix-turbine-stream/pom.xml index 01f3e0c6..720e420e 100644 --- a/spring-cloud-netflix-turbine-stream/pom.xml +++ b/spring-cloud-netflix-turbine-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-turbine-stream diff --git a/spring-cloud-netflix-turbine/pom.xml b/spring-cloud-netflix-turbine/pom.xml index e651d6d4..ec66922a 100644 --- a/spring-cloud-netflix-turbine/pom.xml +++ b/spring-cloud-netflix-turbine/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-netflix-turbine diff --git a/spring-cloud-starter-archaius/pom.xml b/spring-cloud-starter-archaius/pom.xml index d54193a6..8787db36 100644 --- a/spring-cloud-starter-archaius/pom.xml +++ b/spring-cloud-starter-archaius/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-archaius diff --git a/spring-cloud-starter-atlas/pom.xml b/spring-cloud-starter-atlas/pom.xml index 31816567..2de06db6 100644 --- a/spring-cloud-starter-atlas/pom.xml +++ b/spring-cloud-starter-atlas/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-atlas diff --git a/spring-cloud-starter-eureka-server/pom.xml b/spring-cloud-starter-eureka-server/pom.xml index 4b0e7d88..64ca69c9 100644 --- a/spring-cloud-starter-eureka-server/pom.xml +++ b/spring-cloud-starter-eureka-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-eureka-server diff --git a/spring-cloud-starter-eureka/pom.xml b/spring-cloud-starter-eureka/pom.xml index 8f90dfeb..ab4f2e6c 100644 --- a/spring-cloud-starter-eureka/pom.xml +++ b/spring-cloud-starter-eureka/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-eureka diff --git a/spring-cloud-starter-feign/pom.xml b/spring-cloud-starter-feign/pom.xml index c18030c6..5744b4ef 100644 --- a/spring-cloud-starter-feign/pom.xml +++ b/spring-cloud-starter-feign/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-feign diff --git a/spring-cloud-starter-hystrix-dashboard/pom.xml b/spring-cloud-starter-hystrix-dashboard/pom.xml index 66799065..d9b5f5d3 100644 --- a/spring-cloud-starter-hystrix-dashboard/pom.xml +++ b/spring-cloud-starter-hystrix-dashboard/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-hystrix-dashboard diff --git a/spring-cloud-starter-hystrix/pom.xml b/spring-cloud-starter-hystrix/pom.xml index 6119e439..194b2a72 100644 --- a/spring-cloud-starter-hystrix/pom.xml +++ b/spring-cloud-starter-hystrix/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-hystrix diff --git a/spring-cloud-starter-netflix/pom.xml b/spring-cloud-starter-netflix/pom.xml index 22243092..bfa4eb1e 100644 --- a/spring-cloud-starter-netflix/pom.xml +++ b/spring-cloud-starter-netflix/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-netflix diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml index f8c9e399..6c0bc7d1 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-archaius/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-archaius Spring Cloud Starter Netflix Archaius diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml index 4e8b8b9c..0566926f 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-atlas/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-atlas Spring Cloud Starter Netflix Atlas diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml index 7e2a15b7..34af09f0 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-client/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-eureka-client Spring Cloud Starter Netflix Eureka Client diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml index 267254e2..114d0727 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-eureka-server/pom.xml @@ -3,7 +3,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-eureka-server Spring Cloud Starter Netflix Eureka Server diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml index 658584aa..4d1f2a1b 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix-dashboard/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-hystrix-dashboard Spring Cloud Starter Netflix Hystrix Dashboard diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml index de2e7bd6..882a2cf5 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-hystrix/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-hystrix Spring Cloud Starter Netflix Hystrix diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml index 73949fbc..6a5141b7 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-ribbon/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-ribbon Spring Cloud Starter Netflix Ribbon diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml index d7218ea0..584ef8c5 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-spectator/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-spectator Spring Cloud Starter Netflix Spectator diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml index 509171a5..c78c47bd 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-amqp/pom.xml @@ -3,7 +3,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-turbine-amqp Spring Cloud Starter Netflix Turbine AMQP diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml index 6d0536f4..8ede348e 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine-stream/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-turbine-stream Spring Cloud Starter Netflix Turbine Stream diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml index 0b930c89..57e4da12 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-turbine/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-turbine Spring Cloud Starter Netflix Turbine diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml index b894180f..884ef5af 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-netflix-zuul/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-netflix-zuul Spring Cloud Starter Netflix Zuul diff --git a/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml index e15ef009..3fde3202 100644 --- a/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml +++ b/spring-cloud-starter-netflix/spring-cloud-starter-openfeign/pom.xml @@ -4,7 +4,7 @@ org.springframework.cloud spring-cloud-starter-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT spring-cloud-starter-openfeign Spring Cloud Starter OpenFeign diff --git a/spring-cloud-starter-ribbon/pom.xml b/spring-cloud-starter-ribbon/pom.xml index 5a1fd0a9..2f51ee4e 100644 --- a/spring-cloud-starter-ribbon/pom.xml +++ b/spring-cloud-starter-ribbon/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-ribbon diff --git a/spring-cloud-starter-spectator/pom.xml b/spring-cloud-starter-spectator/pom.xml index f62aa00a..11e7dad8 100644 --- a/spring-cloud-starter-spectator/pom.xml +++ b/spring-cloud-starter-spectator/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-spectator diff --git a/spring-cloud-starter-turbine-amqp/pom.xml b/spring-cloud-starter-turbine-amqp/pom.xml index 1f29a3a9..3984ec29 100644 --- a/spring-cloud-starter-turbine-amqp/pom.xml +++ b/spring-cloud-starter-turbine-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-turbine-amqp diff --git a/spring-cloud-starter-turbine-stream/pom.xml b/spring-cloud-starter-turbine-stream/pom.xml index b5feee43..6ded7d44 100644 --- a/spring-cloud-starter-turbine-stream/pom.xml +++ b/spring-cloud-starter-turbine-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-turbine-stream diff --git a/spring-cloud-starter-turbine/pom.xml b/spring-cloud-starter-turbine/pom.xml index a0c666c3..7d714e2a 100644 --- a/spring-cloud-starter-turbine/pom.xml +++ b/spring-cloud-starter-turbine/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-turbine diff --git a/spring-cloud-starter-zuul/pom.xml b/spring-cloud-starter-zuul/pom.xml index aaeea73a..c8d5a173 100644 --- a/spring-cloud-starter-zuul/pom.xml +++ b/spring-cloud-starter-zuul/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 1.4.0.BUILD-SNAPSHOT + 1.4.1.BUILD-SNAPSHOT .. spring-cloud-starter-zuul From db3a412c8aa112a060679868f79af1c3911f1be9 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 20 Nov 2017 16:10:55 -0500 Subject: [PATCH 13/15] Fixing command to run maven --- scripts/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build.sh b/scripts/build.sh index 9a06ffea..2dae9e91 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,4 +1,4 @@ #!/bin/bash -(cd spring-cloud-netflix-hystrix-contract && ./mvnw clean install) +(cd spring-cloud-netflix-hystrix-contract && ../mvnw clean install) ./mvnw clean install From f59a228daf8c1a734775bf9f253a77e010d4ddf3 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 21 Nov 2017 17:47:33 -0500 Subject: [PATCH 14/15] Pass system properties to releaser build command --- config/releaser.yml | 2 +- scripts/build.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/releaser.yml b/config/releaser.yml index 20b9f16a..26e5e8c2 100644 --- a/config/releaser.yml +++ b/config/releaser.yml @@ -1,3 +1,3 @@ releaser: maven: - buildCommand: ./scripts/build.sh + buildCommand: ./scripts/build.sh {{systemProps}} diff --git a/scripts/build.sh b/scripts/build.sh index 2dae9e91..b16ab2a4 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,4 +1,4 @@ #!/bin/bash -(cd spring-cloud-netflix-hystrix-contract && ../mvnw clean install) -./mvnw clean install +(cd spring-cloud-netflix-hystrix-contract && ../mvnw clean install ${@}) +./mvnw clean install ${@} From 1e87b509984d676300a42594c292147470c39535 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 21 Nov 2017 18:37:48 -0500 Subject: [PATCH 15/15] Update releaser build to build docs --- scripts/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index b16ab2a4..fe43ccda 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,4 +1,4 @@ #!/bin/bash -(cd spring-cloud-netflix-hystrix-contract && ../mvnw clean install ${@}) -./mvnw clean install ${@} +(cd spring-cloud-netflix-hystrix-contract && ../mvnw clean install -B -Pdocs ${@}) +./mvnw clean install -B -Pdocs ${@}