From 3ea0f8d283e9624001f2f7167717d970bbfdbd39 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 14 Jan 2015 14:49:23 -0800 Subject: [PATCH] Polish --- .../cloud/netflix/Constants.java | 2 + .../archaius/ArchaiusAutoConfiguration.java | 5 +- .../ArchaiusDelegatingProxyUtils.java | 1 - .../netflix/archaius/ArchaiusEndpoint.java | 1 - .../ConfigurableEnvironmentConfiguration.java | 13 +- ...ntConfigServiceBootstrapConfiguration.java | 5 +- ...kaClientConfigServerAutoConfiguration.java | 2 +- .../endpoint/ServletWrappingEndpoint.java | 8 +- .../DataCenterAwareMarshallingStrategy.java | 5 +- .../eureka/DiscoveryManagerInitializer.java | 1 + .../netflix/eureka/EnableEurekaClient.java | 7 +- .../eureka/EurekaClientAutoConfiguration.java | 1 - .../eureka/EurekaClientConfigBean.java | 2 - .../netflix/eureka/EurekaDiscoveryClient.java | 1 + .../EurekaDiscoveryClientConfiguration.java | 6 +- .../netflix/eureka/EurekaHealthIndicator.java | 9 +- .../eureka/EurekaInstanceConfigBean.java | 6 +- .../eureka/EurekaServerConfigBean.java | 113 ++++++------ .../netflix/feign/FeignAutoConfiguration.java | 6 +- .../cloud/netflix/feign/FeignClient.java | 2 + .../netflix/feign/FeignClientFactoryBean.java | 3 + .../cloud/netflix/feign/FeignClientScan.java | 3 - .../feign/FeignClientScanRegistrar.java | 10 +- .../netflix/feign/FeignConfiguration.java | 1 + .../cloud/netflix/feign/FeignUtils.java | 2 + .../cloud/netflix/feign/SpringDecoder.java | 6 +- .../cloud/netflix/feign/SpringEncoder.java | 18 +- .../netflix/feign/SpringMvcContract.java | 14 +- .../feign/ribbon/FeignRibbonClient.java | 43 +++-- .../feign/ribbon/RibbonLoadBalancer.java | 4 + .../cloud/netflix/hystrix/EnableHystrix.java | 7 +- .../hystrix/HystrixAutoConfiguration.java | 3 +- .../HystrixCircuitBreakerConfiguration.java | 3 +- .../hystrix/HystrixHealthIndicator.java | 1 - .../hystrix/HystrixStreamEndpoint.java | 1 + .../ribbon/RibbonAutoConfiguration.java | 3 +- .../cloud/netflix/ribbon/RibbonClient.java | 3 +- .../ribbon/RibbonClientConfiguration.java | 1 - .../RibbonClientConfigurationRegistrar.java | 1 - .../ribbon/RibbonClientSpecification.java | 2 +- .../cloud/netflix/ribbon/RibbonClients.java | 1 - .../netflix/ribbon/RibbonInterceptor.java | 33 +++- .../ribbon/RibbonLoadBalancerClient.java | 9 +- .../ribbon/RibbonLoadBalancerContext.java | 1 + .../netflix/ribbon/SpringClientFactory.java | 11 +- .../eureka/DomainExtractingServerList.java | 3 +- .../EurekaRibbonClientConfiguration.java | 1 + .../eureka/RibbonEurekaAutoConfiguration.java | 2 +- .../ZonePreferenceServerListFilter.java | 4 +- .../netflix/servo/ServoMetricCollector.java | 1 + .../servo/ServoMetricsAutoConfiguration.java | 1 + .../cloud/netflix/zuul/EnableZuulProxy.java | 1 + .../cloud/netflix/zuul/EnableZuulServer.java | 1 + .../cloud/netflix/zuul/ProxyRouteLocator.java | 32 +--- .../cloud/netflix/zuul/RouteLocator.java | 1 - .../cloud/netflix/zuul/RoutesEndpoint.java | 1 + .../netflix/zuul/RoutesRefreshedEvent.java | 1 - .../netflix/zuul/SimpleRouteLocator.java | 1 - .../cloud/netflix/zuul/ZuulConfiguration.java | 66 +++---- .../cloud/netflix/zuul/ZuulController.java | 1 + .../netflix/zuul/ZuulHandlerMapping.java | 4 +- .../cloud/netflix/zuul/ZuulProperties.java | 11 ++ .../netflix/zuul/ZuulProxyConfiguration.java | 28 +-- .../zuul/filters/ProxyRequestHelper.java | 21 --- .../zuul/filters/post/SendErrorFilter.java | 5 +- .../zuul/filters/post/SendResponseFilter.java | 48 ++--- .../netflix/zuul/filters/pre/DebugFilter.java | 13 +- .../filters/pre/FormBodyWrapperFilter.java | 13 +- .../zuul/filters/pre/PreDecorationFilter.java | 13 +- .../filters/pre/Servlet30WrapperFilter.java | 7 +- .../zuul/filters/route/RibbonCommand.java | 53 +++--- .../filters/route/RibbonRoutingFilter.java | 31 ++-- .../route/SimpleHostRoutingFilter.java | 170 +++++++++--------- .../ArchaiusAutoConfigurationTests.java | 1 - .../archaius/ArchaiusEndpointTests.java | 1 - ...figServiceBootstrapConfigurationTests.java | 1 - ...entConfigServerAutoConfigurationTests.java | 1 - .../eureka/EurekaClientConfigBeanTests.java | 1 - .../eureka/EurekaInstanceConfigBeanTests.java | 1 - .../netflix/feign/SpringDecoderTests.java | 61 +++---- .../hystrix/HystrixConfigurationTests.java | 1 - .../netflix/hystrix/HystrixOnlyTests.java | 1 + .../hystrix/HystrixStreamEndpointTests.java | 1 - ...bonClientPreprocessorIntegrationTests.java | 1 - ...bonClientPreprocessorIntegrationTests.java | 1 - ...onClientsPreprocessorIntegrationTests.java | 1 - .../ribbon/RibbonInterceptorTests.java | 9 +- .../ribbon/RibbonLoadBalancerClientTests.java | 18 +- .../DomainExtractingServerListTests.java | 14 +- .../EurekaRibbonClientConfigurationTests.java | 8 - ...bonClientPreprocessorIntegrationTests.java | 2 +- .../ZonePreferenceServerListFilterTests.java | 1 - .../zuul/FormZuulProxyApplicationTests.java | 4 + .../netflix/zuul/ProxyRouteLocatorTests.java | 27 +-- .../zuul/SampleZuulProxyApplicationTests.java | 5 + .../filters/post/SendErrorFilterTests.java | 3 - .../filters/pre/PreDecorationFilterTests.java | 1 - .../eureka/server/EurekaController.java | 29 +-- .../server/EurekaDashboardProperties.java | 4 +- .../server/EurekaServerConfiguration.java | 3 +- .../EurekaServerInitializerConfiguration.java | 19 +- .../server/advice/LeaseManagerLite.java | 1 - .../advice/PiggybackMethodInterceptor.java | 2 +- .../event/EurekaInstanceCanceledEvent.java | 4 + .../event/EurekaInstanceRegisteredEvent.java | 4 + .../event/EurekaInstanceRenewedEvent.java | 5 + .../event/EurekaRegistryAvailableEvent.java | 1 - .../event/EurekaServerStartedEvent.java | 1 - .../event/LeaseManagerMessageBroker.java | 2 +- .../server/ApplicationContextTests.java | 23 +-- .../eureka/server/ApplicationTests.java | 1 - .../amqp/HystrixStreamAmqpProperties.java | 4 + .../hystrix/amqp/HystrixStreamChannel.java | 1 + .../hystrix/amqp/HystrixStreamTask.java | 15 +- .../hystrix/amqp/HystrixAmqpTests.java | 3 + .../dashboard/EnableHystrixDashboard.java | 1 + .../HystrixDashboardConfiguration.java | 22 ++- .../dashboard/HystrixDashboardController.java | 8 +- .../HystrixDashboardHomePageTests.java | 1 + .../dashboard/HystrixDashboardTests.java | 3 +- .../cloud/netflix/sidecar/EnableSidecar.java | 1 + .../LocalApplicationHealthIndicator.java | 5 +- .../netflix/sidecar/SidecarConfiguration.java | 6 +- .../netflix/sidecar/SidecarController.java | 5 +- .../netflix/sidecar/SidecarProperties.java | 4 + .../netflix/sidecar/SidecarApplication.java | 1 + .../netflix/turbine/amqp/Aggregator.java | 8 +- .../turbine/amqp/EnableTurbineAmqp.java | 1 + .../amqp/TurbineAmqpConfiguration.java | 5 +- .../netflix/turbine/amqp/AggregatorTest.java | 10 +- .../turbine/amqp/TurbineAmqpTests.java | 2 + .../netflix/turbine/amqp/hystrixamqp.stream | 0 .../cloud/netflix/turbine/EnableTurbine.java | 1 - .../turbine/EurekaInstanceDiscovery.java | 75 +++----- .../turbine/SpringAggregatorFactory.java | 8 +- .../netflix/turbine/SpringClusterMonitor.java | 13 +- .../netflix/turbine/TurbineConfiguration.java | 1 + .../netflix/turbine/TurbineProperties.java | 2 + .../turbine/EurekaInstanceDiscoveryTest.java | 1 + 139 files changed, 652 insertions(+), 733 deletions(-) rename spring-cloud-netflix-turbine-amqp/src/test/{java => resources}/org/springframework/cloud/netflix/turbine/amqp/hystrixamqp.stream (100%) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/Constants.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/Constants.java index 3b8556b2..b0e2d6a5 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/Constants.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/Constants.java @@ -20,5 +20,7 @@ package org.springframework.cloud.netflix; * @author Spencer Gibb */ public interface Constants { + String HYSTRIX_STREAM_NAME = "spring.cloud.hystrix.stream"; + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java index 4152305e..bf263357 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java @@ -56,6 +56,7 @@ public class ArchaiusAutoConfiguration { private static final Logger logger = LoggerFactory .getLogger(ArchaiusAutoConfiguration.class); + private static final AtomicBoolean initialized = new AtomicBoolean(false); @Autowired @@ -117,8 +118,8 @@ public class ArchaiusAutoConfiguration { try { config.addConfiguration(defaultURLConfig, URL_CONFIG_NAME); } - catch (Throwable e) { - logger.error("Cannot create config from " + defaultURLConfig, e); + catch (Throwable ex) { + logger.error("Cannot create config from " + defaultURLConfig, ex); } // TODO: sys/env above urls? diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusDelegatingProxyUtils.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusDelegatingProxyUtils.java index a971550f..a28507b9 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusDelegatingProxyUtils.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusDelegatingProxyUtils.java @@ -24,7 +24,6 @@ import com.netflix.config.ConfigurationManager; /** * @author Dave Syer - * */ public class ArchaiusDelegatingProxyUtils { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusEndpoint.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusEndpoint.java index 623f5f03..d3a478bd 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusEndpoint.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusEndpoint.java @@ -31,7 +31,6 @@ import com.netflix.config.ConfigurationManager; /** * @author Dave Syer - * */ public class ArchaiusEndpoint extends AbstractEndpoint> { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ConfigurableEnvironmentConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ConfigurableEnvironmentConfiguration.java index 0c0c0698..a2419d78 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ConfigurableEnvironmentConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ConfigurableEnvironmentConfiguration.java @@ -34,7 +34,8 @@ import org.springframework.core.env.StandardEnvironment; * @author Spencer Gibb */ public class ConfigurableEnvironmentConfiguration extends AbstractConfiguration { - ConfigurableEnvironment environment; + + private final ConfigurableEnvironment environment; public ConfigurableEnvironmentConfiguration(ConfigurableEnvironment environment) { this.environment = environment; @@ -77,14 +78,8 @@ public class ConfigurableEnvironmentConfiguration extends AbstractConfiguration private Map> getPropertySources() { Map> map = new LinkedHashMap<>(); - MutablePropertySources sources; - if (this.environment != null - && this.environment instanceof ConfigurableEnvironment) { - sources = this.environment.getPropertySources(); - } - else { - sources = new StandardEnvironment().getPropertySources(); - } + MutablePropertySources sources = (this.environment != null ? this.environment + .getPropertySources() : new StandardEnvironment().getPropertySources()); for (PropertySource source : sources) { extract("", map, source); } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java index b4035832..7d751d68 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java @@ -40,7 +40,6 @@ import com.netflix.discovery.DiscoveryClient; * discovery. * * @author Dave Syer - * */ @ConditionalOnClass({ DiscoveryClient.class, ConfigServicePropertySourceLocator.class }) @ConditionalOnExpression("${spring.cloud.config.discovery.enabled:false}") @@ -85,8 +84,8 @@ public class DiscoveryClientConfigServiceBootstrapConfiguration implements } this.config.setUri(url); } - catch (Exception e) { - log.warn("Could not locate configserver via discovery", e); + catch (Exception ex) { + log.warn("Could not locate configserver via discovery", ex); } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/EurekaClientConfigServerAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/EurekaClientConfigServerAutoConfiguration.java index 7404635a..5fe44d69 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/EurekaClientConfigServerAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/EurekaClientConfigServerAutoConfiguration.java @@ -30,8 +30,8 @@ import com.netflix.discovery.DiscoveryClient; /** * Extra configuration for config server if it happens to be a Eureka instance. - * @author Dave Syer * + * @author Dave Syer */ @Configuration @EnableConfigurationProperties diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/endpoint/ServletWrappingEndpoint.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/endpoint/ServletWrappingEndpoint.java index 0c352a79..751d637f 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/endpoint/ServletWrappingEndpoint.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/endpoint/ServletWrappingEndpoint.java @@ -31,14 +31,15 @@ import org.springframework.web.context.ServletContextAware; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.ServletWrappingController; -/** - * TODO: move to spring-boot? User: spencergibb Date: 4/24/14 Time: 9:13 PM - */ public abstract class ServletWrappingEndpoint implements InitializingBean, ApplicationContextAware, ServletContextAware, MvcEndpoint { + // TODO: move to spring-boot? + protected String path; + protected boolean sensitive; + protected boolean enabled = true; protected final ServletWrappingController controller = new ServletWrappingController(); @@ -88,4 +89,5 @@ public abstract class ServletWrappingEndpoint implements InitializingBean, public Class> getEndpointType() { return null; } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java index 514fa57b..e781fb2e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DataCenterAwareMarshallingStrategy.java @@ -53,11 +53,11 @@ import com.thoughtworks.xstream.mapper.Mapper; * that isn't very useful when sitting behind a proxy). * * @author Dave Syer - * */ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { private TreeMarshallingStrategy delegate = new TreeMarshallingStrategy(); + private ApplicationContext context; public DataCenterAwareMarshallingStrategy(ApplicationContext context) { @@ -104,6 +104,7 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { private static class DataCenterAwareConverterLookup implements ConverterLookup { private ConverterLookup delegate; + private ApplicationContext context; public DataCenterAwareConverterLookup(ConverterLookup delegate, @@ -147,6 +148,7 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { @Slf4j private static class SetVersionInterceptor implements MethodInterceptor { + private ApplicationContext context; public SetVersionInterceptor(ApplicationContext context) { @@ -164,6 +166,7 @@ public class DataCenterAwareMarshallingStrategy implements MarshallingStrategy { } return ret; } + } private static class DataCenterAwareConverter extends InstanceInfoConverter { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerInitializer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerInitializer.java index cb0e3ba7..5307b086 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerInitializer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/DiscoveryManagerInitializer.java @@ -39,4 +39,5 @@ public class DiscoveryManagerInitializer { this.clientConfig); } } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EnableEurekaClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EnableEurekaClient.java index 072945dc..4a4ad36d 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EnableEurekaClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EnableEurekaClient.java @@ -16,10 +16,6 @@ package org.springframework.cloud.netflix.eureka; -/** - * @author Spencer Gibb - */ - import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; @@ -37,7 +33,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; * well). * * @author Dave Syer - * + * @author Spencer Gibb */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @@ -45,4 +41,5 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @Inherited @EnableDiscoveryClient public @interface EnableEurekaClient { + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index 39a3787c..4103914e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -34,7 +34,6 @@ import com.netflix.discovery.converters.XmlXStream; /** * @author Dave Syer - * */ @Configuration @EnableConfigurationProperties diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBean.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBean.java index ea7d7636..ead95e2f 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBean.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBean.java @@ -30,7 +30,6 @@ import com.netflix.discovery.EurekaClientConfig; /** * @author Dave Syer - * */ @Data @ConfigurationProperties("eureka.client") @@ -92,7 +91,6 @@ public class EurekaClientConfigBean implements EurekaClientConfig { private int cacheRefreshExecutorExponentialBackOffBound = 10; private Map serviceUrl = new HashMap(); - { this.serviceUrl.put(DEFAULT_ZONE, DEFAULT_URL); } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java index cf8dd81f..44ec7ed9 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java @@ -154,4 +154,5 @@ public class EurekaDiscoveryClient implements DiscoveryClient { }); return Lists.newArrayList(instances); } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java index c3c82be4..b5bed3e8 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java @@ -56,7 +56,6 @@ import com.netflix.discovery.shared.EurekaJerseyClient; /** * @author Dave Syer - * */ @Configuration @EnableConfigurationProperties @@ -105,8 +104,8 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order jerseyClient.destroyResources(); } } - catch (Exception e) { - logger.error("Error closing DiscoveryClient.jerseyClient", e); + catch (Exception ex) { + logger.error("Error closing DiscoveryClient.jerseyClient", ex); } } } @@ -218,4 +217,5 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order return new EurekaHealthIndicator(eurekaDiscoveryClient, metrics, config); } } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaHealthIndicator.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaHealthIndicator.java index 0ddf36a9..2be627ea 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaHealthIndicator.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaHealthIndicator.java @@ -34,18 +34,17 @@ import com.netflix.discovery.shared.Applications; /** * @author Dave Syer - * */ public class EurekaHealthIndicator implements DiscoveryHealthIndicator { - private EurekaInstanceConfig instanceConfig; + private final DiscoveryClient discovery; - private MetricReader metrics; + private final MetricReader metrics; + + private final EurekaInstanceConfig instanceConfig; private int failCount = 0; - private DiscoveryClient discovery; - public EurekaHealthIndicator(DiscoveryClient discovery, MetricReader metrics, EurekaInstanceConfig instanceConfig) { super(); diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java index f34246d8..3676cd57 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java @@ -38,7 +38,6 @@ import com.netflix.appinfo.UniqueIdentifier; /** * @author Dave Syer - * */ @Data @ConfigurationProperties("eureka.instance") @@ -120,8 +119,8 @@ public class EurekaInstanceConfigBean implements EurekaInstanceConfig { info[0] = InetAddress.getLocalHost().getHostAddress(); info[1] = InetAddress.getLocalHost().getHostName(); } - catch (UnknownHostException e) { - logger.error("Cannot get host info", e); + catch (UnknownHostException ex) { + logger.error("Cannot get host info", ex); } return info; } @@ -133,6 +132,7 @@ public class EurekaInstanceConfigBean implements EurekaInstanceConfig { private final class IdentifyingDataCenterInfo implements DataCenterInfo, UniqueIdentifier { + @Getter @Setter private Name name = Name.MyOwn; diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaServerConfigBean.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaServerConfigBean.java index 5f57d6f3..f6321508 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaServerConfigBean.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaServerConfigBean.java @@ -29,7 +29,6 @@ import com.netflix.eureka.EurekaServerConfig; /** * @author Dave Syer - * */ @Data @ConfigurationProperties("eureka.server") @@ -49,11 +48,6 @@ public class EurekaServerConfigBean implements EurekaServerConfig { private boolean enableSelfPreservation = true; - @Override - public boolean shouldEnableSelfPreservation() { - return this.enableSelfPreservation; - } - private double renewalPercentThreshold = 0.85; private int renewalThresholdUpdateIntervalMs = 10 * MINUTES; @@ -92,11 +86,6 @@ public class EurekaServerConfigBean implements EurekaServerConfig { private boolean disableDelta; - @Override - public boolean shouldDisableDelta() { - return this.disableDelta; - } - private long maxIdleThreadInMinutesAgeForStatusReplication = 10; private int minThreadsForStatusReplication = 1; @@ -107,11 +96,6 @@ public class EurekaServerConfigBean implements EurekaServerConfig { private boolean syncWhenTimestampDiffers = true; - @Override - public boolean shouldSyncWhenTimestampDiffers() { - return this.syncWhenTimestampDiffers; - } - private int registrySyncRetries = 5; private int maxElementsInPeerReplicationPool = 10000; @@ -126,18 +110,8 @@ public class EurekaServerConfigBean implements EurekaServerConfig { private boolean primeAwsReplicaConnections = true; - @Override - public boolean shouldPrimeAwsReplicaConnections() { - return this.primeAwsReplicaConnections; - } - private boolean disableDeltaForRemoteRegions; - @Override - public boolean shouldDisableDeltaForRemoteRegions() { - return this.disableDeltaForRemoteRegions; - } - private int remoteRegionConnectTimeoutMs = 1000; private int remoteRegionReadTimeoutMs = 1000; @@ -150,28 +124,12 @@ public class EurekaServerConfigBean implements EurekaServerConfig { private boolean gZipContentFromRemoteRegion = true; - @Override - public boolean shouldGZipContentFromRemoteRegion() { - return this.gZipContentFromRemoteRegion; - } - private Map remoteRegionUrlsWithName = new HashMap(); private String[] remoteRegionUrls; private Map> remoteRegionAppWhitelist; - @Override - public Set getRemoteRegionAppWhitelist(String regionName) { - if (null == regionName) { - regionName = "global"; - } - else { - regionName = regionName.trim().toLowerCase(); - } - return this.remoteRegionAppWhitelist.get(regionName); - } - private int remoteRegionRegistryFetchInterval = 30; private String remoteRegionTrustStore = ""; @@ -180,25 +138,8 @@ public class EurekaServerConfigBean implements EurekaServerConfig { private boolean disableTransparentFallbackToOtherRegion; - @Override - public boolean disableTransparentFallbackToOtherRegion() { - return this.disableTransparentFallbackToOtherRegion; - } - private boolean batchReplication; - @Override - public boolean shouldBatchReplication() { - return this.batchReplication; - } - - private boolean logIdentityHeaders = true; - - @Override - public boolean shouldLogIdentityHeaders() { - return this.logIdentityHeaders; - } - private boolean rateLimiterEnabled = false; private boolean rateLimiterThrottleStandardClients = false; @@ -210,4 +151,58 @@ public class EurekaServerConfigBean implements EurekaServerConfig { private int rateLimiterRegistryFetchAverageRate = 500; private int rateLimiterFullFetchAverageRate = 100; + + private boolean logIdentityHeaders = true; + + @Override + public boolean shouldEnableSelfPreservation() { + return this.enableSelfPreservation; + } + + @Override + public boolean shouldDisableDelta() { + return this.disableDelta; + } + + @Override + public boolean shouldSyncWhenTimestampDiffers() { + return this.syncWhenTimestampDiffers; + } + + @Override + public boolean shouldPrimeAwsReplicaConnections() { + return this.primeAwsReplicaConnections; + } + + @Override + public boolean shouldDisableDeltaForRemoteRegions() { + return this.disableDeltaForRemoteRegions; + } + + @Override + public boolean shouldGZipContentFromRemoteRegion() { + return this.gZipContentFromRemoteRegion; + } + + @Override + public Set getRemoteRegionAppWhitelist(String regionName) { + return this.remoteRegionAppWhitelist.get(regionName == null ? "global" + : regionName.trim().toLowerCase()); + } + + @Override + public boolean disableTransparentFallbackToOtherRegion() { + return this.disableTransparentFallbackToOtherRegion; + } + + @Override + public boolean shouldBatchReplication() { + return this.batchReplication; + } + + @Override + public boolean shouldLogIdentityHeaders() { + return this.logIdentityHeaders; + } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java index 96dbe665..15c5c34e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java @@ -39,13 +39,14 @@ import feign.Logger; @ConditionalOnClass(Feign.class) @AutoConfigureAfter(ArchaiusAutoConfiguration.class) public class FeignAutoConfiguration { + @Bean - SpringDecoder feignDecoder() { + public SpringDecoder feignDecoder() { return new SpringDecoder(); } @Bean - SpringEncoder feignEncoder() { + public SpringEncoder feignEncoder() { return new SpringEncoder(); } @@ -68,4 +69,5 @@ public class FeignAutoConfiguration { return new FeignRibbonClient(factory); } } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClient.java index 7f54c962..34999f25 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClient.java @@ -29,6 +29,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FeignClient { + /** * @return serviceId if loadbalance is true, url otherwise No need to prefix serviceId * with http:// @@ -36,4 +37,5 @@ public @interface FeignClient { String value(); boolean loadbalance() default true; + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java index ff074e03..ef0db78b 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java @@ -29,7 +29,9 @@ import org.springframework.beans.factory.FactoryBean; class FeignClientFactoryBean extends FeignConfiguration implements FactoryBean { private boolean loadbalance; + private Class type; + private String schemeName; @Override @@ -52,4 +54,5 @@ class FeignClientFactoryBean extends FeignConfiguration implements FactoryBean * Use {@link #basePackageClasses()} for a type-safe alternative to String-based * package names. - * * @return the array of 'basePackages'. */ String[] basePackages() default {}; @@ -65,7 +63,6 @@ public @interface FeignClientScan { *

* Consider creating a special no-op marker class or interface in each package that * serves no purpose other than being referenced by this attribute. - * * @return the array of 'basePackageClasses'. */ Class[] basePackageClasses() default {}; diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientScanRegistrar.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientScanRegistrar.java index 88506186..43acd0cc 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientScanRegistrar.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientScanRegistrar.java @@ -39,12 +39,13 @@ import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; /** - * @author Spencer Gibb patterned after Spring Integration - * IntegrationComponentScanRegistrar + * @author Spencer Gibb */ public class FeignClientScanRegistrar extends FeignConfiguration implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, BeanClassLoaderAware { + // patterned after Spring Integration IntegrationComponentScanRegistrar + private ResourceLoader resourceLoader; private ClassLoader classLoader; @@ -123,15 +124,16 @@ public class FeignClientScanRegistrar extends FeignConfiguration implements FeignClientScanRegistrar.this.classLoader); return !target.isAnnotation(); } - catch (Exception e) { + catch (Exception ex) { this.logger.error("Could not load target class: " - + beanDefinition.getMetadata().getClassName(), e); + + beanDefinition.getMetadata().getClassName(), ex); } } return true; } return false; + } }; } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignConfiguration.java index fbf83b74..2d5d8109 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignConfiguration.java @@ -36,6 +36,7 @@ import feign.ribbon.LoadBalancingTarget; */ @Configuration public class FeignConfiguration { + @Autowired ConfigurableEnvironmentConfiguration envConfig; // FIXME: howto enforce this? diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignUtils.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignUtils.java index 733d5457..2c7dadb9 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignUtils.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignUtils.java @@ -26,6 +26,7 @@ import org.springframework.http.HttpHeaders; * @author Spencer Gibb */ public class FeignUtils { + static HttpHeaders getHttpHeaders(Map> headers) { HttpHeaders httpHeaders = new HttpHeaders(); for (Map.Entry> entry : headers.entrySet()) { @@ -33,4 +34,5 @@ public class FeignUtils { } return httpHeaders; } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringDecoder.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringDecoder.java index e3115850..c9a81192 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringDecoder.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringDecoder.java @@ -63,6 +63,7 @@ public class SpringDecoder implements Decoder { } private class FeignResponseAdapter implements ClientHttpResponse { + private final Response response; private FeignResponseAdapter(Response response) { @@ -89,8 +90,8 @@ public class SpringDecoder implements Decoder { try { this.response.body().close(); } - catch (IOException e) { - e.printStackTrace(); + catch (IOException ex) { + ex.printStackTrace(); } } @@ -105,4 +106,5 @@ public class SpringDecoder implements Decoder { } } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringEncoder.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringEncoder.java index 1f8d2dfd..eb63e460 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringEncoder.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringEncoder.java @@ -44,14 +44,12 @@ import static org.springframework.cloud.netflix.feign.FeignUtils.getHttpHeaders; * @author Spencer Gibb */ public class SpringEncoder implements Encoder { + private static final Logger logger = LoggerFactory.getLogger(SpringEncoder.class); @Autowired Provider messageConverters; - public SpringEncoder() { - } - @Override public void encode(Object requestBody, RequestTemplate request) throws EncodeException { @@ -88,16 +86,16 @@ public class SpringEncoder implements Encoder { HttpMessageConverter copy = (HttpMessageConverter) messageConverter; copy.write(requestBody, requestContentType, outputMessage); } - catch (IOException e) { - throw new EncodeException("Error converting request body", e); + catch (IOException ex) { + throw new EncodeException("Error converting request body", ex); } request.body(outputMessage.getOutputStream().toByteArray(), Charsets.UTF_8); // TODO: set charset return; } } - String message = "Could not write request: no suitable HttpMessageConverter found for request type [" - + requestType.getName() + "]"; + String message = "Could not write request: no suitable HttpMessageConverter " + + "found for request type [" + requestType.getName() + "]"; if (requestContentType != null) { message += " and content type [" + requestContentType + "]"; } @@ -106,8 +104,10 @@ public class SpringEncoder implements Encoder { } private class FeignOutputMessage implements HttpOutputMessage { + final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - RequestTemplate request; + + private final RequestTemplate request; private FeignOutputMessage(RequestTemplate request) { this.request = request; @@ -126,5 +126,7 @@ public class SpringEncoder implements Encoder { public ByteArrayOutputStream getOutputStream() { return this.outputStream; } + } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringMvcContract.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringMvcContract.java index 8fc9a73d..c2695176 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringMvcContract.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringMvcContract.java @@ -37,8 +37,10 @@ import static feign.Util.emptyToNull; * @author Spencer Gibb */ public class SpringMvcContract extends Contract.BaseContract { - static final String ACCEPT = "Accept"; - static final String CONTENT_TYPE = "Content-Type"; + + private static final String ACCEPT = "Accept"; + + private static final String CONTENT_TYPE = "Content-Type"; @Override protected void processAnnotationOnMethod(MethodMetadata data, @@ -145,7 +147,10 @@ public class SpringMvcContract extends Contract.BaseContract { data.template().header(name, header); nameParam(data, name, paramIndex); isHttpAnnotation = true; - }/* + } + + // TODO + /* * else if (annotationType == FormParam.class) { String name = * FormParam.class.cast(parameterAnnotation).value(); * checkState(emptyToNull(name) != null, @@ -163,13 +168,12 @@ public class SpringMvcContract extends Contract.BaseContract { if (values == null) { return false; } - for (Collection entry : values) { if (entry.contains(search)) { return true; } } - return false; } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClient.java index 313cf28c..b98d608f 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClient.java @@ -41,17 +41,9 @@ import feign.Response; */ public class FeignRibbonClient implements Client { - private Client defaultClient = new Default(new Lazy() { - @Override - public SSLSocketFactory get() { - return (SSLSocketFactory) SSLSocketFactory.getDefault(); - } - }, new Lazy() { - @Override - public HostnameVerifier get() { - return HttpsURLConnection.getDefaultHostnameVerifier(); - } - }); + private Client defaultClient = new Default(new LazySSLSocketFactory(), + new LazyHostnameVerifier()); + private SpringClientFactory factory; public FeignRibbonClient(SpringClientFactory factory) { @@ -61,7 +53,6 @@ public class FeignRibbonClient implements Client { @Override public Response execute(Request request, Request.Options options) throws IOException { try { - URI asUri = URI.create(request.url()); String clientName = asUri.getHost(); URI uriWithoutSchemeAndPort = URI.create(request.url().replace( @@ -70,13 +61,12 @@ public class FeignRibbonClient implements Client { request, uriWithoutSchemeAndPort); return lbClient(clientName).executeWithLoadBalancer(ribbonRequest) .toResponse(); - } - catch (ClientException e) { - if (e.getCause() instanceof IOException) { - throw IOException.class.cast(e.getCause()); + catch (ClientException ex) { + if (ex.getCause() instanceof IOException) { + throw IOException.class.cast(ex.getCause()); } - throw Throwables.propagate(e); + throw Throwables.propagate(ex); } } @@ -89,4 +79,23 @@ public class FeignRibbonClient implements Client { public void setDefaultClient(Client defaultClient) { this.defaultClient = defaultClient; } + + private static class LazySSLSocketFactory implements Lazy { + + @Override + public SSLSocketFactory get() { + return (SSLSocketFactory) SSLSocketFactory.getDefault(); + } + + } + + private static class LazyHostnameVerifier implements Lazy { + + @Override + public HostnameVerifier get() { + return HttpsURLConnection.getDefaultHostnameVerifier(); + } + + } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RibbonLoadBalancer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RibbonLoadBalancer.java index 478d98b7..52562872 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RibbonLoadBalancer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/RibbonLoadBalancer.java @@ -41,8 +41,11 @@ public class RibbonLoadBalancer AbstractLoadBalancerAwareClient { private final Client delegate; + private final int connectTimeout; + private final int readTimeout; + private final IClientConfig clientConfig; public RibbonLoadBalancer(Client delegate, ILoadBalancer lb, @@ -157,4 +160,5 @@ public class RibbonLoadBalancer } } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java index fd5f6351..eecebe16 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java @@ -16,10 +16,6 @@ package org.springframework.cloud.netflix.hystrix; -/** - * @author Spencer Gibb - */ - import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; @@ -37,7 +33,7 @@ import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; * well). * * @author Dave Syer - * + * @author Spencer Gibb */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @@ -45,4 +41,5 @@ import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; @Inherited @EnableCircuitBreaker public @interface EnableHystrix { + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixAutoConfiguration.java index 0bc0e716..59149707 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixAutoConfiguration.java @@ -27,7 +27,8 @@ import org.springframework.context.annotation.Configuration; import com.netflix.hystrix.Hystrix; /** - * Auto configuration for Hystrix + * Auto configuration for Hystrix. + * * @author Christian Dupuis */ @Configuration diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixCircuitBreakerConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixCircuitBreakerConfiguration.java index 5b6ce8a9..0d986f11 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixCircuitBreakerConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixCircuitBreakerConfiguration.java @@ -107,7 +107,7 @@ public class HystrixCircuitBreakerConfiguration { addMetrics(map, "hystrix."); } } - catch (IOException e) { + catch (IOException ex) { // ignore } } @@ -190,4 +190,5 @@ public class HystrixCircuitBreakerConfiguration { } } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixHealthIndicator.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixHealthIndicator.java index acf67b63..59e60dd0 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixHealthIndicator.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixHealthIndicator.java @@ -37,7 +37,6 @@ import com.netflix.hystrix.HystrixCommandMetrics; */ public class HystrixHealthIndicator extends AbstractHealthIndicator { - /** Status code for open circuits */ private static final Status CIRCUIT_OPEN = new Status("CIRCUIT_OPEN"); @Override diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixStreamEndpoint.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixStreamEndpoint.java index 7b501f87..ebd9c362 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixStreamEndpoint.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixStreamEndpoint.java @@ -29,4 +29,5 @@ public class HystrixStreamEndpoint extends ServletWrappingEndpoint { super(HystrixMetricsStreamServlet.class, "hystrixStream", "/hystrix.stream", false, true); } + } 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 c6017f8c..744ea428 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 @@ -33,7 +33,8 @@ import org.springframework.web.client.RestTemplate; import com.netflix.client.IClient; /** - * Auto configuration for Ribbon (client side load balancing) + * Auto configuration for Ribbon (client side load balancing). + * * @author Spencer Gibb * @author Dave Syer */ diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClient.java index d4e739ba..2ad16d05 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClient.java @@ -27,7 +27,6 @@ import org.springframework.context.annotation.Import; /** * @author Dave Syer - * */ @Configuration @Import(RibbonClientConfigurationRegistrar.class) @@ -35,9 +34,11 @@ import org.springframework.context.annotation.Import; @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RibbonClient { + String value() default ""; String name() default ""; Class[] configuration() default {}; + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java index f8fd93f9..bedd87fb 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfiguration.java @@ -37,7 +37,6 @@ import com.netflix.servo.monitor.Monitors; /** * @author Dave Syer - * */ @SuppressWarnings("deprecation") @Configuration diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationRegistrar.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationRegistrar.java index 4f9103d0..44a2ff96 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationRegistrar.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientConfigurationRegistrar.java @@ -27,7 +27,6 @@ import org.springframework.util.StringUtils; /** * @author Dave Syer - * */ public class RibbonClientConfigurationRegistrar implements ImportBeanDefinitionRegistrar { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientSpecification.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientSpecification.java index 10666eaf..7c492a5c 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientSpecification.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClientSpecification.java @@ -21,13 +21,13 @@ import lombok.Data; /** * @author Dave Syer - * */ @Data @AllArgsConstructor public class RibbonClientSpecification { private String name; + private Class[] configuration; } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClients.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClients.java index 0715f267..f623eab0 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClients.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonClients.java @@ -30,7 +30,6 @@ import org.springframework.context.annotation.Import; * annotations on a single class (including in Java 7). * * @author Dave Syer - * */ @Configuration @Retention(RetentionPolicy.RUNTIME) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonInterceptor.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonInterceptor.java index f603a879..d82c3d57 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonInterceptor.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonInterceptor.java @@ -46,19 +46,34 @@ public class RibbonInterceptor implements ClientHttpRequestInterceptor { String serviceName = originalUri.getHost(); return this.loadBalancer.execute(serviceName, new LoadBalancerRequest() { + @Override public ClientHttpResponse apply(final ServiceInstance instance) throws Exception { - HttpRequestWrapper wrapper = new HttpRequestWrapper(request) { - @Override - public URI getURI() { - URI uri = RibbonInterceptor.this.loadBalancer - .reconstructURI(instance, originalUri); - return uri; - } - }; - return execution.execute(wrapper, body); + HttpRequest serviceRequest = new ServiceRequestWrapper(request, + instance); + return execution.execute(serviceRequest, body); } + }); } + + private class ServiceRequestWrapper extends HttpRequestWrapper { + + private final ServiceInstance instance; + + public ServiceRequestWrapper(HttpRequest request, ServiceInstance instance) { + super(request); + this.instance = instance; + } + + @Override + public URI getURI() { + URI uri = RibbonInterceptor.this.loadBalancer.reconstructURI(this.instance, + getRequest().getURI()); + return uri; + } + + } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java index 1ec8bbd9..d3ce0588 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java @@ -68,14 +68,13 @@ public class RibbonLoadBalancerClient implements LoadBalancerClient { Stopwatch tracer = context.getExecuteTracer().start(); try { - T returnVal = request.apply(ribbonServer); recordStats(context, tracer, serverStats, returnVal, null); return returnVal; } - catch (Exception e) { - recordStats(context, tracer, serverStats, null, e); - Throwables.propagate(e); + catch (Exception ex) { + recordStats(context, tracer, serverStats, null, ex); + Throwables.propagate(ex); } return null; } @@ -127,5 +126,7 @@ public class RibbonLoadBalancerClient implements LoadBalancerClient { public int getPort() { return this.server.getPort(); } + } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerContext.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerContext.java index 41c7c091..72eb2471 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerContext.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerContext.java @@ -61,4 +61,5 @@ public class RibbonLoadBalancerContext extends LoadBalancerContext { long responseTime, RetryHandler errorHandler) { super.noteRequestCompletion(stats, response, e, responseTime, errorHandler); } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/SpringClientFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/SpringClientFactory.java index 8180ee36..1c1b5f8a 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/SpringClientFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/SpringClientFactory.java @@ -43,11 +43,15 @@ import com.netflix.loadbalancer.ILoadBalancer; * creates a Spring ApplicationContext per client name, and extracts the beans that it * needs from there. * + * @author Spencer Gibb + * @author Dave Syer */ public class SpringClientFactory implements DisposableBean, ApplicationContextAware { private Map contexts = new ConcurrentHashMap<>(); + private Map configurations = new ConcurrentHashMap<>(); + private ApplicationContext parent; @Override @@ -72,7 +76,6 @@ public class SpringClientFactory implements DisposableBean, ApplicationContextAw /** * Get the rest client associated with the name. - * * @throws RuntimeException if any error occurs */ public > C getClient(String name, Class clientClass) { @@ -81,7 +84,6 @@ public class SpringClientFactory implements DisposableBean, ApplicationContextAw /** * Get the load balancer associated with the name. - * * @throws RuntimeException if any error occurs */ public ILoadBalancer getLoadBalancer(String name) { @@ -90,7 +92,6 @@ public class SpringClientFactory implements DisposableBean, ApplicationContextAw /** * Get the client config associated with the name. - * * @throws RuntimeException if any error occurs */ public IClientConfig getClientConfig(String name) { @@ -99,7 +100,6 @@ public class SpringClientFactory implements DisposableBean, ApplicationContextAw /** * Get the load balancer context associated with the name. - * * @throws RuntimeException if any error occurs */ public RibbonLoadBalancerContext getLoadBalancerContext(String serviceId) { @@ -169,7 +169,8 @@ public class SpringClientFactory implements DisposableBean, ApplicationContextAw result = BeanUtils.instantiate(clazz); } } - catch (Throwable e) { // NOPMD + catch (Throwable ex) { + // NOPMD } } context.getAutowireCapableBeanFactory().autowireBean(result); diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java index 3abecc6d..c0edd5a6 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerList.java @@ -33,12 +33,13 @@ import com.netflix.niws.loadbalancer.DiscoveryEnabledServer; /** * @author Dave Syer - * */ public class DomainExtractingServerList implements ServerList { private ServerList list; + private IClientConfig clientConfig; + private boolean approximateZoneFromHostname; public DomainExtractingServerList(ServerList list, diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientConfiguration.java index 13828b5b..d4bfc7e2 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientConfiguration.java @@ -51,6 +51,7 @@ public class EurekaRibbonClientConfiguration { private String serviceId = "client"; protected static final String VALUE_NOT_SET = "__not__set__"; + protected static final String DEFAULT_NAMESPACE = "ribbon"; @Autowired(required = false) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java index db255135..5aa0260b 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java @@ -30,7 +30,6 @@ import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList; /** * @author Dave Syer - * */ @Configuration @EnableConfigurationProperties @@ -40,4 +39,5 @@ import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList; @AutoConfigureAfter(RibbonAutoConfiguration.class) @RibbonClients(defaultConfiguration = EurekaRibbonClientConfiguration.class) public class RibbonEurekaAutoConfiguration { + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/ZonePreferenceServerListFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/ZonePreferenceServerListFilter.java index cb6b1c05..389304b5 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/ZonePreferenceServerListFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/ZonePreferenceServerListFilter.java @@ -33,13 +33,13 @@ import com.netflix.loadbalancer.ZoneAffinityServerListFilter; * the Eureka instance metadata). * * @author Dave Syer - * - * TODO: move out of ribbon.eureka package since it has nothing specific to eureka */ @Data @EqualsAndHashCode(callSuper = false) public class ZonePreferenceServerListFilter extends ZoneAffinityServerListFilter { + // TODO: move out of ribbon.eureka package since it has nothing specific to eureka + private String zone; @Override diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricCollector.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricCollector.java index ed909ea3..15daf782 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricCollector.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricCollector.java @@ -95,6 +95,7 @@ public class ServoMetricCollector implements DisposableBean { } } } + } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java index b1c99b45..5af9bd5a 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java @@ -48,4 +48,5 @@ public class ServoMetricsAutoConfiguration { public ServoMetricCollector servoMetricCollector(MetricWriter metrics) { return new ServoMetricCollector(metrics); } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulProxy.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulProxy.java index 54ab120f..3d86c700 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulProxy.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulProxy.java @@ -41,4 +41,5 @@ import org.springframework.context.annotation.Import; @Retention(RetentionPolicy.RUNTIME) @Import(ZuulProxyConfiguration.class) public @interface EnableZuulProxy { + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulServer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulServer.java index d8500ba1..76522fd0 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulServer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulServer.java @@ -38,4 +38,5 @@ import org.springframework.context.annotation.Import; @Documented @Import(ZuulConfiguration.class) public @interface EnableZuulServer { + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ProxyRouteLocator.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ProxyRouteLocator.java index 9e45ead1..91f1363b 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ProxyRouteLocator.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ProxyRouteLocator.java @@ -72,19 +72,15 @@ public class ProxyRouteLocator implements RouteLocator { } public Map getRoutes() { - if (this.routes.get() == null) { this.routes.set(locateRoutes()); } - Map values = new LinkedHashMap<>(); - for (String key : this.routes.get().keySet()) { String url = key; values.put(url, this.routes.get().get(key).getLocation()); } return values; - } public ProxyRouteSpec getMatchingRoute(String path) { @@ -113,8 +109,8 @@ public class ProxyRouteLocator implements RouteLocator { break; } } - return location == null ? null : new ProxyRouteSpec(id, targetPath, location, - prefix); + return (location == null ? null : new ProxyRouteSpec(id, targetPath, location, + prefix)); } public void resetRoutes() { @@ -122,12 +118,9 @@ public class ProxyRouteLocator implements RouteLocator { } protected LinkedHashMap locateRoutes() { - LinkedHashMap routesMap = new LinkedHashMap<>(); - addConfiguredRoutes(routesMap); routesMap.putAll(this.staticRoutes); - if (this.discovery != null) { // Add routes for discovery services by default List services = this.discovery.getServices(); @@ -141,36 +134,28 @@ public class ProxyRouteLocator implements RouteLocator { } } } - if (routesMap.get(DEFAULT_ROUTE) != null) { ZuulRoute defaultRoute = routesMap.get(DEFAULT_ROUTE); // Move the defaultServiceId to the end routesMap.remove(DEFAULT_ROUTE); routesMap.put(DEFAULT_ROUTE, defaultRoute); } - LinkedHashMap values = new LinkedHashMap<>(); for (Entry entry : routesMap.entrySet()) { - String path = entry.getKey(); // Prepend with slash if not already present. if (!path.startsWith("/")) { path = "/" + path; } - if (StringUtils.hasText(this.properties.getPrefix())) { path = this.properties.getPrefix() + path; if (!path.startsWith("/")) { path = "/" + path; } } - values.put(path, entry.getValue()); - } - return values; - } protected void addConfiguredRoutes(Map routes) { @@ -187,23 +172,22 @@ public class ProxyRouteLocator implements RouteLocator { public String getTargetPath(String matchingRoute, String requestURI) { String path = getRoutes().get(matchingRoute); - if (path == null) { - path = requestURI; - } - else { - - } - return path; + return (path != null ? path : requestURI); } @Data @AllArgsConstructor public static class ProxyRouteSpec { + private String id; + private String path; + private String location; + private String prefix; + } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RouteLocator.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RouteLocator.java index 941f26f1..83c3baf4 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RouteLocator.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RouteLocator.java @@ -20,7 +20,6 @@ import java.util.Collection; /** * @author Dave Syer - * */ public interface RouteLocator { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RoutesEndpoint.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RoutesEndpoint.java index 077751f4..7e371efc 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RoutesEndpoint.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RoutesEndpoint.java @@ -40,6 +40,7 @@ import org.springframework.web.bind.annotation.ResponseBody; public class RoutesEndpoint implements MvcEndpoint, ApplicationEventPublisherAware { private ProxyRouteLocator routes; + private ApplicationEventPublisher publisher; @Override diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RoutesRefreshedEvent.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RoutesRefreshedEvent.java index 3a22bc32..58010972 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RoutesRefreshedEvent.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/RoutesRefreshedEvent.java @@ -20,7 +20,6 @@ import org.springframework.context.ApplicationEvent; /** * @author Dave Syer - * */ @SuppressWarnings("serial") public class RoutesRefreshedEvent extends ApplicationEvent { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/SimpleRouteLocator.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/SimpleRouteLocator.java index 653c62d5..34879623 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/SimpleRouteLocator.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/SimpleRouteLocator.java @@ -23,7 +23,6 @@ import org.springframework.cloud.netflix.zuul.ZuulProperties.ZuulRoute; /** * @author Dave Syer - * */ public class SimpleRouteLocator implements RouteLocator { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java index b317c903..948def79 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java @@ -63,6 +63,40 @@ public class ZuulConfiguration { return new ZuulHandlerMapping(routes, zuulController()); } + @Bean + public ApplicationListener zuulRefreshRoutesListener() { + return new ZuulRefreshListener(); + } + + // pre filters + + @Bean + public FormBodyWrapperFilter formBodyWrapperFilter() { + return new FormBodyWrapperFilter(); + } + + @Bean + public DebugFilter debugFilter() { + return new DebugFilter(); + } + + @Bean + public Servlet30WrapperFilter servlet30WrapperFilter() { + return new Servlet30WrapperFilter(); + } + + // post filters + + @Bean + public SendResponseFilter sendResponseFilter() { + return new SendResponseFilter(); + } + + @Bean + public SendErrorFilter sendErrorFilter() { + return new SendErrorFilter(); + } + @Configuration protected static class ZuulFilterConfiguration { @@ -76,11 +110,6 @@ public class ZuulConfiguration { } - @Bean - public ApplicationListener zuulRefreshRoutesListener() { - return new ZuulRefreshListener(); - } - private static class ZuulRefreshListener implements ApplicationListener { @@ -97,31 +126,4 @@ public class ZuulConfiguration { } - // pre filters - @Bean - public FormBodyWrapperFilter formBodyWrapperFilter() { - return new FormBodyWrapperFilter(); - } - - @Bean - public DebugFilter debugFilter() { - return new DebugFilter(); - } - - @Bean - public Servlet30WrapperFilter servlet30WrapperFilter() { - return new Servlet30WrapperFilter(); - } - - // post filters - @Bean - public SendResponseFilter sendResponseFilter() { - return new SendResponseFilter(); - } - - @Bean - public SendErrorFilter sendErrorFilter() { - return new SendErrorFilter(); - } - } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulController.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulController.java index 1aeebd16..1b8c00cf 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulController.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulController.java @@ -47,4 +47,5 @@ public class ZuulController extends ServletWrappingController { RequestContext.getCurrentContext().unset(); } } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulHandlerMapping.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulHandlerMapping.java index b4efc1a6..4e48a099 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulHandlerMapping.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulHandlerMapping.java @@ -29,9 +29,9 @@ import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping; */ public class ZuulHandlerMapping extends AbstractUrlHandlerMapping { - private RouteLocator routeLocator; + private final RouteLocator routeLocator; - private ZuulController zuul; + private final ZuulController zuul; @Autowired public ZuulHandlerMapping(RouteLocator routeLocator, ZuulController zuul) { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProperties.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProperties.java index 69b6ea28..738af9c1 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProperties.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProperties.java @@ -38,10 +38,15 @@ import org.springframework.util.StringUtils; @Data @ConfigurationProperties("zuul") public class ZuulProperties { + private String prefix = ""; + private boolean stripPrefix = true; + private Map routes = new LinkedHashMap(); + private boolean addProxyHeaders = true; + private List ignoredServices = new ArrayList(); @PostConstruct @@ -64,10 +69,15 @@ public class ZuulProperties { @AllArgsConstructor @NoArgsConstructor public static class ZuulRoute { + private String id; + private String path; + private String serviceId; + private String url; + private boolean stripPrefix = true; public ZuulRoute(String text) { @@ -115,6 +125,7 @@ public class ZuulProperties { path = path.replace("/*", "").replace("*", ""); return path; } + } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java index 4d7328fd..ef30c9e2 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java @@ -61,19 +61,6 @@ public class ZuulProxyConfiguration extends ZuulConfiguration { return new ProxyRouteLocator(this.discovery, this.zuulProperties); } - @Configuration - @ConditionalOnClass(Endpoint.class) - protected static class RoutesEndpointConfuguration { - @Autowired - private ProxyRouteLocator routeLocator; - - @Bean - // @RefreshScope - public RoutesEndpoint zuulEndpoint() { - return new RoutesEndpoint(this.routeLocator); - } - } - // pre filters @Bean public PreDecorationFilter preDecorationFilter() { @@ -106,6 +93,21 @@ public class ZuulProxyConfiguration extends ZuulConfiguration { return new ZuulRefreshListener(); } + @Configuration + @ConditionalOnClass(Endpoint.class) + protected static class RoutesEndpointConfuguration { + + @Autowired + private ProxyRouteLocator routeLocator; + + @Bean + // @RefreshScope + public RoutesEndpoint zuulEndpoint() { + return new RoutesEndpoint(this.routeLocator); + } + + } + private static class ZuulRefreshListener implements ApplicationListener { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelper.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelper.java index 35894f30..0b702a00 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelper.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelper.java @@ -40,7 +40,6 @@ import com.netflix.zuul.util.HTTPRequestUtils; /** * @author Dave Syer - * */ public class ProxyRequestHelper { @@ -60,16 +59,12 @@ public class ProxyRequestHelper { public MultiValueMap buildZuulRequestQueryParams( HttpServletRequest request) { - Map> map = HTTPRequestUtils.getInstance().getQueryParams(); - MultiValueMap params = new LinkedMultiValueMap<>(); if (map == null) { return params; } - for (String key : map.keySet()) { - for (String value : map.get(key)) { params.add(key, value); } @@ -79,9 +74,7 @@ public class ProxyRequestHelper { public MultiValueMap buildZuulRequestHeaders( HttpServletRequest request) { - RequestContext context = RequestContext.getCurrentContext(); - MultiValueMap headers = new LinkedMultiValueMap<>(); Enumeration headerNames = request.getHeaderNames(); if (headerNames != null) { @@ -94,27 +87,21 @@ public class ProxyRequestHelper { } } Map zuulRequestHeaders = context.getZuulRequestHeaders(); - for (String header : zuulRequestHeaders.keySet()) { headers.set(header, zuulRequestHeaders.get(header)); } - headers.set("accept-encoding", "deflate, gzip"); - return headers; } public void setResponse(int status, InputStream entity, MultiValueMap headers) throws IOException { RequestContext context = RequestContext.getCurrentContext(); - RequestContext.getCurrentContext().setResponseStatusCode(status); if (entity != null) { RequestContext.getCurrentContext().setResponseDataStream(entity); } - boolean isOriginResponseGzipped = false; - if (headers.containsKey(CONTENT_ENCODING)) { Collection collection = headers.get(CONTENT_ENCODING); for (String header : collection) { @@ -125,23 +112,19 @@ public class ProxyRequestHelper { } } context.setResponseGZipped(isOriginResponseGzipped); - for (Entry> header : headers.entrySet()) { RequestContext ctx = RequestContext.getCurrentContext(); String name = header.getKey(); for (String value : header.getValue()) { ctx.addOriginResponseHeader(name, value); - if (name.equalsIgnoreCase("content-length")) { ctx.setOriginContentLength(value); } - if (isIncludedHeader(name)) { ctx.addZuulResponseHeader(name, value); } } } - } public void addIgnoredHeaders(String... names) { @@ -181,10 +164,8 @@ public class ProxyRequestHelper { public Map debug(String verb, String uri, MultiValueMap headers, MultiValueMap params, InputStream requestEntity) throws IOException { - Map info = new LinkedHashMap(); if (this.traces != null) { - RequestContext context = RequestContext.getCurrentContext(); StringBuilder query = new StringBuilder(); for (String param : params.keySet()) { @@ -200,7 +181,6 @@ public class ProxyRequestHelper { info.put("query", query.toString()); info.put("remote", true); info.put("proxy", context.get("proxy")); - Map trace = new LinkedHashMap(); Map input = new LinkedHashMap(); trace.put("request", input); @@ -213,7 +193,6 @@ public class ProxyRequestHelper { } input.put(entry.getKey(), value); } - RequestContext ctx = RequestContext.getCurrentContext(); if (!ctx.isChunkedRequestBody()) { if (requestEntity != null) { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendErrorFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendErrorFilter.java index e4655c5b..773542a6 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendErrorFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendErrorFilter.java @@ -75,8 +75,8 @@ public class SendErrorFilter extends ZuulFilter { } } } - catch (Exception e) { - Throwables.propagate(e); + catch (Exception ex) { + Throwables.propagate(ex); } return null; } @@ -84,4 +84,5 @@ public class SendErrorFilter extends ZuulFilter { public void setErrorPath(String errorPath) { this.errorPath = errorPath; } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendResponseFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendResponseFilter.java index 550615ff..b75affe2 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendResponseFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/post/SendResponseFilter.java @@ -35,17 +35,20 @@ import com.netflix.zuul.constants.ZuulConstants; import com.netflix.zuul.constants.ZuulHeaders; import com.netflix.zuul.context.RequestContext; +/** + * @author Spencer Gibb + */ public class SendResponseFilter extends ZuulFilter { - static DynamicBooleanProperty INCLUDE_DEBUG_HEADER = DynamicPropertyFactory + private static DynamicBooleanProperty INCLUDE_DEBUG_HEADER = DynamicPropertyFactory .getInstance().getBooleanProperty(ZuulConstants.ZUUL_INCLUDE_DEBUG_HEADER, false); - static DynamicIntProperty INITIAL_STREAM_BUFFER_SIZE = DynamicPropertyFactory + private static DynamicIntProperty INITIAL_STREAM_BUFFER_SIZE = DynamicPropertyFactory .getInstance().getIntProperty(ZuulConstants.ZUUL_INITIAL_STREAM_BUFFER_SIZE, 1024); - static DynamicBooleanProperty SET_CONTENT_LENGTH = DynamicPropertyFactory + private static DynamicBooleanProperty SET_CONTENT_LENGTH = DynamicPropertyFactory .getInstance().getBooleanProperty(ZuulConstants.ZUUL_SET_CONTENT_LENGTH, false); @@ -72,23 +75,20 @@ public class SendResponseFilter extends ZuulFilter { addResponseHeaders(); writeResponse(); } - catch (Exception e) { - Throwables.propagate(e); + catch (Exception ex) { + Throwables.propagate(ex); } return null; } - void writeResponse() throws Exception { + private void writeResponse() throws Exception { RequestContext context = RequestContext.getCurrentContext(); - // there is no body to send if (context.getResponseBody() == null && context.getResponseDataStream() == null) { return; } - HttpServletResponse servletResponse = context.getResponse(); servletResponse.setCharacterEncoding("UTF-8"); - OutputStream outStream = servletResponse.getOutputStream(); InputStream is = null; try { @@ -97,14 +97,12 @@ public class SendResponseFilter extends ZuulFilter { writeResponse(new ByteArrayInputStream(body.getBytes()), outStream); return; } - boolean isGzipRequested = false; final String requestEncoding = context.getRequest().getHeader( ZuulHeaders.ACCEPT_ENCODING); if (requestEncoding != null && requestEncoding.equals("gzip")) { isGzipRequested = true; } - is = context.getResponseDataStream(); InputStream inputStream = is; if (is != null) { @@ -116,14 +114,12 @@ public class SendResponseFilter extends ZuulFilter { if (context.getResponseGZipped() && !isGzipRequested) { try { inputStream = new GZIPInputStream(is); - } - catch (java.util.zip.ZipException e) { - System.out - .println("gzip expected but not received assuming unencoded response" - + RequestContext.getCurrentContext() - .getRequest().getRequestURL() - .toString()); + catch (java.util.zip.ZipException ex) { + System.out.println("gzip expected but not " + + "received assuming unencoded response" + + RequestContext.getCurrentContext().getRequest() + .getRequestURL().toString()); inputStream = is; } } @@ -133,19 +129,16 @@ public class SendResponseFilter extends ZuulFilter { writeResponse(inputStream, outStream); } } - } finally { try { if (is != null) { is.close(); } - outStream.flush(); outStream.close(); } - catch (IOException e) { - + catch (IOException ex) { } } } @@ -154,19 +147,18 @@ public class SendResponseFilter extends ZuulFilter { byte[] bytes = new byte[INITIAL_STREAM_BUFFER_SIZE.get()]; int bytesRead = -1; while ((bytesRead = zin.read(bytes)) != -1) { + // TODO // if (Debug.debugRequest() && !Debug.debugRequestHeadersOnly()) { // Debug.addRequestDebug("OUTBOUND: < " + new String(bytes, 0, bytesRead)); // } - try { out.write(bytes, 0, bytesRead); out.flush(); } - catch (IOException e) { + catch (IOException ex) { // ignore - e.printStackTrace(); + ex.printStackTrace(); } - // doubles buffer size if previous read filled it if (bytesRead == bytes.length) { bytes = new byte[bytes.length * 2]; @@ -178,7 +170,6 @@ public class SendResponseFilter extends ZuulFilter { RequestContext context = RequestContext.getCurrentContext(); HttpServletResponse servletResponse = context.getResponse(); List> zuulResponseHeaders = context.getZuulResponseHeaders(); - @SuppressWarnings("unchecked") List rd = (List) RequestContext.getCurrentContext().get( "routingDebug"); @@ -191,16 +182,13 @@ public class SendResponseFilter extends ZuulFilter { servletResponse.addHeader("X-Zuul-Debug-Header", debugHeader.toString()); } } - if (zuulResponseHeaders != null) { for (Pair it : zuulResponseHeaders) { servletResponse.addHeader(it.first(), it.second()); } } - RequestContext ctx = RequestContext.getCurrentContext(); Integer contentLength = ctx.getOriginContentLength(); - // Only inserts Content-Length if origin provides it and origin response is not // gzipped if (SET_CONTENT_LENGTH.get()) { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/DebugFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/DebugFilter.java index f9d1fce7..3c9e2228 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/DebugFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/DebugFilter.java @@ -25,11 +25,15 @@ import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.constants.ZuulConstants; import com.netflix.zuul.context.RequestContext; +/** + * @author Spencer Gibb + */ public class DebugFilter extends ZuulFilter { - static final DynamicBooleanProperty routingDebug = DynamicPropertyFactory + private static final DynamicBooleanProperty ROUTING_DEBUG = DynamicPropertyFactory .getInstance().getBooleanProperty(ZuulConstants.ZUUL_DEBUG_REQUEST, false); - static final DynamicStringProperty debugParameter = DynamicPropertyFactory + + private static final DynamicStringProperty DEBUG_PARAMETER = DynamicPropertyFactory .getInstance().getStringProperty(ZuulConstants.ZUUL_DEBUG_PARAMETER, "debug"); @Override @@ -45,11 +49,10 @@ public class DebugFilter extends ZuulFilter { @Override public boolean shouldFilter() { HttpServletRequest request = RequestContext.getCurrentContext().getRequest(); - if ("true".equals(request.getParameter(debugParameter.get()))) { + if ("true".equals(request.getParameter(DEBUG_PARAMETER.get()))) { return true; } - - return routingDebug.get(); + return ROUTING_DEBUG.get(); } @Override diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java index b9792b78..d96eeb39 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java @@ -39,7 +39,8 @@ import com.netflix.zuul.http.ServletInputStreamWrapper; * @author Spencer Gibb */ public class FormBodyWrapperFilter extends ZuulFilter { - protected Field requestField = null; + + private Field requestField; public FormBodyWrapperFilter() { this.requestField = ReflectionUtils.findField(HttpServletRequestWrapper.class, @@ -63,18 +64,16 @@ public class FormBodyWrapperFilter extends ZuulFilter { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); String contentType = request.getContentType(); - // Don't use this filter on GET method if (contentType == null) { return false; } - // Only use this filter for MediaType : application/x-www-form-urlencoded try { return MediaType.APPLICATION_FORM_URLENCODED.includes(MediaType .valueOf(contentType)); } - catch (InvalidMediaTypeException imte) { + catch (InvalidMediaTypeException ex) { return false; } } @@ -89,8 +88,8 @@ public class FormBodyWrapperFilter extends ZuulFilter { .get(request); this.requestField.set(request, new FormBodyRequestWrapper(wrapped)); } - catch (IllegalAccessException e) { - Throwables.propagate(e); + catch (IllegalAccessException ex) { + Throwables.propagate(ex); } } else { @@ -102,6 +101,7 @@ public class FormBodyWrapperFilter extends ZuulFilter { private class FormBodyRequestWrapper extends HttpServletRequestWrapper { private HttpServletRequest request; + private byte[] contentData; public FormBodyRequestWrapper(HttpServletRequest request) { @@ -145,4 +145,5 @@ public class FormBodyWrapperFilter extends ZuulFilter { } } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java index 0f61f5a1..5e9c3bb2 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java @@ -32,6 +32,7 @@ import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; public class PreDecorationFilter extends ZuulFilter { + private static Logger LOG = LoggerFactory.getLogger(PreDecorationFilter.class); private ProxyRouteLocator routeLocator; @@ -61,20 +62,13 @@ public class PreDecorationFilter extends ZuulFilter { @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); - final String requestURI = ctx.getRequest().getRequestURI(); - ProxyRouteSpec route = this.routeLocator.getMatchingRoute(requestURI); - if (route != null) { - String location = route.getLocation(); - if (location != null) { - ctx.put("requestURI", route.getPath()); ctx.put("proxy", route.getId()); - if (location.startsWith("http:") || location.startsWith("https:")) { ctx.setRouteHost(getUrl(location)); ctx.addOriginResponseHeader("X-Zuul-Service", location); @@ -85,7 +79,6 @@ public class PreDecorationFilter extends ZuulFilter { ctx.setRouteHost(null); ctx.addOriginResponseHeader("X-Zuul-ServiceId", location); } - if (this.properties.isAddProxyHeaders()) { ctx.addZuulRequestHeader( "X-Forwarded-Host", @@ -108,8 +101,8 @@ public class PreDecorationFilter extends ZuulFilter { try { return new URL(target); } - catch (MalformedURLException e) { - throw new IllegalStateException("Target URL is malformed", e); + catch (MalformedURLException ex) { + throw new IllegalStateException("Target URL is malformed", ex); } } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/Servlet30WrapperFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/Servlet30WrapperFilter.java index b31e717b..07742bb5 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/Servlet30WrapperFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/Servlet30WrapperFilter.java @@ -42,6 +42,7 @@ import com.netflix.zuul.http.HttpServletRequestWrapper; * @author Spencer Gibb */ public class Servlet30WrapperFilter extends ZuulFilter { + protected Field requestField = null; public Servlet30WrapperFilter() { @@ -74,8 +75,8 @@ public class Servlet30WrapperFilter extends ZuulFilter { try { request = (HttpServletRequest) this.requestField.get(request); } - catch (IllegalAccessException e) { - Throwables.propagate(e); + catch (IllegalAccessException ex) { + Throwables.propagate(ex); } } ctx.setRequest(new Servlet30RequestWrapper(request)); @@ -154,5 +155,7 @@ public class Servlet30WrapperFilter extends ZuulFilter { public DispatcherType getDispatcherType() { return this.request.getDispatcherType(); } + } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommand.java index 4ea5448f..50f5886b 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommand.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommand.java @@ -27,10 +27,12 @@ import com.netflix.client.http.HttpRequest; import com.netflix.client.http.HttpRequest.Builder; import com.netflix.client.http.HttpRequest.Verb; import com.netflix.client.http.HttpResponse; +import com.netflix.config.DynamicIntProperty; import com.netflix.config.DynamicPropertyFactory; import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandGroupKey; import com.netflix.hystrix.HystrixCommandProperties; +import com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy; import com.netflix.niws.client.http.RestClient; import com.netflix.zuul.constants.ZuulConstants; import com.netflix.zuul.context.RequestContext; @@ -45,10 +47,15 @@ import com.netflix.zuul.context.RequestContext; public class RibbonCommand extends HystrixCommand { private RestClient restClient; + private Verb verb; + private URI uri; + private MultivaluedMap headers; + private MultivaluedMap params; + private InputStream requestEntity; public RibbonCommand(RestClient restClient, Verb verb, String uri, @@ -62,25 +69,7 @@ public class RibbonCommand extends HystrixCommand { MultivaluedMap headers, MultivaluedMap params, InputStream requestEntity) throws URISyntaxException { - - super( - Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(commandKey)) - .andCommandPropertiesDefaults( - // we want to default to semaphore-isolation since this wraps - // 2 others commands that are already thread isolated - HystrixCommandProperties - .Setter() - .withExecutionIsolationStrategy( - HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE) - .withExecutionIsolationSemaphoreMaxConcurrentRequests( - DynamicPropertyFactory - .getInstance() - .getIntProperty( - ZuulConstants.ZUUL_EUREKA - + commandKey - + ".semaphore.maxSemaphores", - 100).get()))); - + super(getSetter(commandKey)); this.restClient = restClient; this.verb = verb; this.uri = new URI(uri); @@ -89,39 +78,41 @@ public class RibbonCommand extends HystrixCommand { this.requestEntity = requestEntity; } + private static HystrixCommand.Setter getSetter(String commandKey) { + // we want to default to semaphore-isolation since this wraps + // 2 others commands that are already thread isolated + String name = ZuulConstants.ZUUL_EUREKA + commandKey + ".semaphore.maxSemaphores"; + DynamicIntProperty value = DynamicPropertyFactory.getInstance().getIntProperty( + name, 100); + HystrixCommandProperties.Setter setter = HystrixCommandProperties.Setter() + .withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE) + .withExecutionIsolationSemaphoreMaxConcurrentRequests(value.get()); + return Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(commandKey)) + .andCommandPropertiesDefaults(setter); + } + @Override protected HttpResponse run() throws Exception { - try { - return forward(); - } - catch (Exception e) { - throw e; - } + return forward(); } private HttpResponse forward() throws Exception { - RequestContext context = RequestContext.getCurrentContext(); - Builder builder = HttpRequest.newBuilder().verb(this.verb).uri(this.uri) .entity(this.requestEntity); - for (String name : this.headers.keySet()) { List values = this.headers.get(name); for (String value : values) { builder.header(name, value); } } - for (String name : this.params.keySet()) { List values = this.params.get(name); for (String value : values) { builder.queryParams(name, value); } } - HttpRequest httpClientRequest = builder.build(); - HttpResponse response = this.restClient .executeWithLoadBalancer(httpClientRequest); context.set("ribbonResponse", response); 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 45aa36a3..9b5ac566 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 @@ -111,9 +111,9 @@ public class RibbonRoutingFilter extends ZuulFilter { setResponse(response); return response; } - catch (Exception e) { + catch (Exception ex) { context.set("error.status_code", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - context.set("error.exception", e); + context.set("error.exception", ex); } return null; } @@ -121,10 +121,8 @@ public class RibbonRoutingFilter extends ZuulFilter { private HttpResponse forward(RestClient restClient, Verb verb, String uri, MultiValueMap headers, MultiValueMap params, InputStream requestEntity) throws Exception { - Map info = this.helper.debug(verb.verb(), uri, headers, params, requestEntity); - RibbonCommand command = new RibbonCommand(restClient, verb, uri, convertHeaders(headers), convertHeaders(params), requestEntity); try { @@ -133,17 +131,17 @@ public class RibbonRoutingFilter extends ZuulFilter { revertHeaders(response.getHeaders())); return response; } - catch (HystrixRuntimeException e) { + catch (HystrixRuntimeException ex) { info.put("status", "500"); - if (e.getFallbackException() != null - && e.getFallbackException().getCause() != null - && e.getFallbackException().getCause() instanceof ClientException) { - ClientException ex = (ClientException) e.getFallbackException() + if (ex.getFallbackException() != null + && ex.getFallbackException().getCause() != null + && ex.getFallbackException().getCause() instanceof ClientException) { + ClientException cause = (ClientException) ex.getFallbackException() .getCause(); - throw new ZuulException(ex, "Forwarding error", 500, ex.getErrorType() - .toString()); + throw new ZuulException(cause, "Forwarding error", 500, cause + .getErrorType().toString()); } - throw new ZuulException(e, "Forwarding error", 500, e.getFailureType() + throw new ZuulException(ex, "Forwarding error", 500, ex.getFailureType() .toString()); } @@ -180,19 +178,18 @@ public class RibbonRoutingFilter extends ZuulFilter { requestEntity = request.getInputStream(); } } - catch (IOException e) { - LOG.error("Error during getRequestBody", e); + catch (IOException ex) { + LOG.error("Error during getRequestBody", ex); } - return requestEntity; } - Verb getVerb(HttpServletRequest request) { + private Verb getVerb(HttpServletRequest request) { String sMethod = request.getMethod(); return getVerb(sMethod); } - Verb getVerb(String sMethod) { + private Verb getVerb(String sMethod) { if (sMethod == null) { return Verb.GET; } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java index 0622da90..e97c567a 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/SimpleHostRoutingFilter.java @@ -94,6 +94,7 @@ public class SimpleHostRoutingFilter extends ZuulFilter { private static final DynamicIntProperty SOCKET_TIMEOUT = DynamicPropertyFactory .getInstance().getIntProperty(ZuulConstants.ZUUL_HOST_SOCKET_TIMEOUT_MILLIS, 10000); + private static final DynamicIntProperty CONNECTION_TIMEOUT = DynamicPropertyFactory .getInstance().getIntProperty(ZuulConstants.ZUUL_HOST_CONNECT_TIMEOUT_MILLIS, 2000); @@ -118,34 +119,13 @@ public class SimpleHostRoutingFilter extends ZuulFilter { } hc.getConnectionManager().closeExpiredConnections(); } - catch (Throwable t) { - LOG.error("error closing expired connections", t); + catch (Throwable ex) { + LOG.error("error closing expired connections", ex); } } }, 30000, 5000); } - private static final ClientConnectionManager newConnectionManager() throws Exception { - - KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - trustStore.load(null, null); - - SSLSocketFactory sf = new MySSLSocketFactory(trustStore); - sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); - - SchemeRegistry registry = new SchemeRegistry(); - registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); - registry.register(new Scheme("https", sf, 443)); - registry.register(new Scheme("https", sf, 8443)); - - ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(registry); - cm.setMaxTotal(Integer.parseInt(System.getProperty("zuul.max.host.connections", - "200"))); - cm.setDefaultMaxPerRoute(Integer.parseInt(System.getProperty( - "zuul.max.host.connections", "20"))); - return cm; - } - private ProxyRequestHelper helper; public SimpleHostRoutingFilter() { @@ -177,61 +157,6 @@ public class SimpleHostRoutingFilter extends ZuulFilter { && RequestContext.getCurrentContext().sendZuulResponse(); } - private static final void loadClient() { - final HttpClient oldClient = CLIENT.get(); - CLIENT.set(newClient()); - if (oldClient != null) { - CONNECTION_MANAGER_TIMER.schedule(new TimerTask() { - @Override - public void run() { - try { - oldClient.getConnectionManager().shutdown(); - } - catch (Throwable t) { - LOG.error("error shutting down old connection manager", t); - } - } - }, 30000); - } - - } - - private static final HttpClient newClient() { - // I could statically cache the connection manager but we will probably want to - // make some of its properties - // dynamic in the near future also - try { - DefaultHttpClient httpclient = new DefaultHttpClient(newConnectionManager()); - HttpParams httpParams = httpclient.getParams(); - httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, - SOCKET_TIMEOUT.get()); - httpParams.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, - CONNECTION_TIMEOUT.get()); - httpclient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, - false)); - httpParams.setParameter(ClientPNames.COOKIE_POLICY, - org.apache.http.client.params.CookiePolicy.IGNORE_COOKIES); - httpclient.setRedirectStrategy(new org.apache.http.client.RedirectStrategy() { - @Override - public boolean isRedirected(HttpRequest httpRequest, - HttpResponse httpResponse, HttpContext httpContext) { - return false; - } - - @Override - public org.apache.http.client.methods.HttpUriRequest getRedirect( - HttpRequest httpRequest, HttpResponse httpResponse, - HttpContext httpContext) { - return null; - } - }); - return httpclient; - } - catch (Exception e) { - throw new RuntimeException(e); - } - } - @Override public Object run() { RequestContext context = RequestContext.getCurrentContext(); @@ -254,9 +179,9 @@ public class SimpleHostRoutingFilter extends ZuulFilter { params, requestEntity); setResponse(response); } - catch (Exception e) { + catch (Exception ex) { context.set("error.status_code", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - context.set("error.exception", e); + context.set("error.exception", ex); } return null; } @@ -265,16 +190,12 @@ public class SimpleHostRoutingFilter extends ZuulFilter { HttpServletRequest request, MultiValueMap headers, MultiValueMap params, InputStream requestEntity) throws Exception { - Map info = this.helper.debug(verb, uri, headers, params, requestEntity); - URL host = RequestContext.getCurrentContext().getRouteHost(); HttpHost httpHost = getHttpHost(host); uri = StringUtils.cleanPath(host.getPath() + uri); - HttpRequest httpRequest; - switch (verb.toUpperCase()) { case "POST": HttpPost httpPost = new HttpPost(uri + getQueryString()); @@ -292,7 +213,6 @@ public class SimpleHostRoutingFilter extends ZuulFilter { httpRequest = new BasicHttpRequest(verb, uri + getQueryString()); LOG.debug(uri + getQueryString()); } - try { httpRequest.setHeaders(convertHeaders(headers)); LOG.debug(httpHost.getHostName() + " " + httpHost.getPort() + " " @@ -308,7 +228,6 @@ public class SimpleHostRoutingFilter extends ZuulFilter { // immediate deallocation of all system resources // httpclient.getConnectionManager().shutdown(); } - } private MultiValueMap revertHeaders(Header[] headers) { @@ -355,7 +274,7 @@ public class SimpleHostRoutingFilter extends ZuulFilter { try { requestEntity = request.getInputStream(); } - catch (IOException e) { + catch (IOException ex) { // no requestBody is ok. } return requestEntity; @@ -372,14 +291,85 @@ public class SimpleHostRoutingFilter extends ZuulFilter { revertHeaders(response.getAllHeaders())); } + private static ClientConnectionManager newConnectionManager() throws Exception { + KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); + trustStore.load(null, null); + SSLSocketFactory sf = new MySSLSocketFactory(trustStore); + sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + SchemeRegistry registry = new SchemeRegistry(); + registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); + registry.register(new Scheme("https", sf, 443)); + registry.register(new Scheme("https", sf, 8443)); + ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(registry); + cm.setMaxTotal(Integer.parseInt(System.getProperty("zuul.max.host.connections", + "200"))); + cm.setDefaultMaxPerRoute(Integer.parseInt(System.getProperty( + "zuul.max.host.connections", "20"))); + return cm; + } + + private static void loadClient() { + final HttpClient oldClient = CLIENT.get(); + CLIENT.set(newClient()); + if (oldClient != null) { + CONNECTION_MANAGER_TIMER.schedule(new TimerTask() { + @Override + public void run() { + try { + oldClient.getConnectionManager().shutdown(); + } + catch (Throwable ex) { + LOG.error("error shutting down old connection manager", ex); + } + } + }, 30000); + } + } + + private static HttpClient newClient() { + // I could statically cache the connection manager but we will probably want to + // make some of its properties + // dynamic in the near future also + try { + DefaultHttpClient httpclient = new DefaultHttpClient(newConnectionManager()); + HttpParams httpParams = httpclient.getParams(); + httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, + SOCKET_TIMEOUT.get()); + httpParams.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, + CONNECTION_TIMEOUT.get()); + httpclient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, + false)); + httpParams.setParameter(ClientPNames.COOKIE_POLICY, + org.apache.http.client.params.CookiePolicy.IGNORE_COOKIES); + httpclient.setRedirectStrategy(new org.apache.http.client.RedirectStrategy() { + @Override + public boolean isRedirected(HttpRequest httpRequest, + HttpResponse httpResponse, HttpContext httpContext) { + return false; + } + + @Override + public org.apache.http.client.methods.HttpUriRequest getRedirect( + HttpRequest httpRequest, HttpResponse httpResponse, + HttpContext httpContext) { + return null; + } + }); + return httpclient; + } + catch (Exception ex) { + throw new RuntimeException(ex); + } + } + public static class MySSLSocketFactory extends SSLSocketFactory { SSLContext sslContext = SSLContext.getInstance("TLS"); public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { super(truststore); - TrustManager tm = new X509TrustManager() { + @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { @@ -394,8 +384,8 @@ public class SimpleHostRoutingFilter extends ZuulFilter { public X509Certificate[] getAcceptedIssuers() { return null; } - }; + }; TrustManager[] tms = new TrustManager[1]; tms[0] = tm; this.sslContext.init(null, tms, null); @@ -412,5 +402,7 @@ public class SimpleHostRoutingFilter extends ZuulFilter { public Socket createSocket() throws IOException { return this.sslContext.getSocketFactory().createSocket(); } + } + } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfigurationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfigurationTests.java index 6ff99860..a6759087 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfigurationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfigurationTests.java @@ -25,7 +25,6 @@ import static org.junit.Assert.assertNotNull; /** * @author Dave Syer - * */ public class ArchaiusAutoConfigurationTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/archaius/ArchaiusEndpointTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/archaius/ArchaiusEndpointTests.java index 8f3b618c..50b883d2 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/archaius/ArchaiusEndpointTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/archaius/ArchaiusEndpointTests.java @@ -29,7 +29,6 @@ import static org.junit.Assert.assertTrue; /** * @author Dave Syer - * */ public class ArchaiusEndpointTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfigurationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfigurationTests.java index 02a88c20..f97aaae0 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfigurationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfigurationTests.java @@ -31,7 +31,6 @@ import static org.junit.Assert.assertEquals; /** * @author Dave Syer - * */ public class DiscoveryClientConfigServiceBootstrapConfigurationTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/EurekaClientConfigServerAutoConfigurationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/EurekaClientConfigServerAutoConfigurationTests.java index 4b9023b1..145faf8a 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/EurekaClientConfigServerAutoConfigurationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/EurekaClientConfigServerAutoConfigurationTests.java @@ -31,7 +31,6 @@ import static org.junit.Assert.assertEquals; /** * @author Dave Syer - * */ public class EurekaClientConfigServerAutoConfigurationTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBeanTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBeanTests.java index 1c6e256e..af33fe14 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBeanTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBeanTests.java @@ -32,7 +32,6 @@ import static org.junit.Assert.assertEquals; /** * @author Dave Syer - * */ public class EurekaClientConfigBeanTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBeanTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBeanTests.java index a0786e38..556a98cd 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBeanTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBeanTests.java @@ -33,7 +33,6 @@ import static org.springframework.boot.test.EnvironmentTestUtils.addEnvironment; /** * @author Dave Syer - * */ public class EurekaInstanceConfigBeanTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/SpringDecoderTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/SpringDecoderTests.java index 51894013..a63c584f 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/SpringDecoderTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/SpringDecoderTests.java @@ -59,6 +59,37 @@ public class SpringDecoderTests extends FeignConfiguration { return feign().target(TestClient.class, "http://localhost:" + this.port); } + @Test + public void testSimpleType() { + Hello hello = testClient().getHello(); + assertNotNull("hello was null", hello); + assertEquals("first hello didn't match", new Hello("hello world 1"), hello); + } + + @Test + public void testUserParameterizedTypeDecode() { + List hellos = testClient().getHellos(); + assertNotNull("hellos was null", hellos); + assertEquals("hellos was not the right size", 2, hellos.size()); + assertEquals("first hello didn't match", new Hello("hello world 1"), + hellos.get(0)); + } + + @Test + public void testSimpleParameterizedTypeDecode() { + List hellos = testClient().getHelloStrings(); + assertNotNull("hellos was null", hellos); + assertEquals("hellos was not the right size", 2, hellos.size()); + assertEquals("first hello didn't match", "hello world 1", hellos.get(0)); + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Hello { + private String message; + } + protected static interface TestClient { @RequestMapping(method = RequestMethod.GET, value = "/hello") public Hello getHello(); @@ -103,34 +134,4 @@ public class SpringDecoderTests extends FeignConfiguration { } } - @Test - public void testSimpleType() { - Hello hello = testClient().getHello(); - assertNotNull("hello was null", hello); - assertEquals("first hello didn't match", new Hello("hello world 1"), hello); - } - - @Test - public void testUserParameterizedTypeDecode() { - List hellos = testClient().getHellos(); - assertNotNull("hellos was null", hellos); - assertEquals("hellos was not the right size", 2, hellos.size()); - assertEquals("first hello didn't match", new Hello("hello world 1"), - hellos.get(0)); - } - - @Test - public void testSimpleParameterizedTypeDecode() { - List hellos = testClient().getHelloStrings(); - assertNotNull("hellos was null", hellos); - assertEquals("hellos was not the right size", 2, hellos.size()); - assertEquals("first hello didn't match", "hello world 1", hellos.get(0)); - } - - @Data - @AllArgsConstructor - @NoArgsConstructor - public static class Hello { - private String message; - } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurationTests.java index dbd407fa..3982bfc0 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurationTests.java @@ -21,7 +21,6 @@ import org.springframework.boot.builder.SpringApplicationBuilder; /** * @author Dave Syer - * */ public class HystrixConfigurationTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixOnlyTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixOnlyTests.java index 5fc020d7..c40b8e2c 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixOnlyTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixOnlyTests.java @@ -135,4 +135,5 @@ class HystrixOnlyApplication { public static void main(String[] args) { SpringApplication.run(HystrixOnlyApplication.class, args); } + } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixStreamEndpointTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixStreamEndpointTests.java index a67391c0..e03d5135 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixStreamEndpointTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/hystrix/HystrixStreamEndpointTests.java @@ -22,7 +22,6 @@ import static org.junit.Assert.assertEquals; /** * @author Dave Syer - * */ public class HystrixStreamEndpointTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/PlainRibbonClientPreprocessorIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/PlainRibbonClientPreprocessorIntegrationTests.java index 2671c7d5..6233ac75 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/PlainRibbonClientPreprocessorIntegrationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/PlainRibbonClientPreprocessorIntegrationTests.java @@ -34,7 +34,6 @@ import com.netflix.loadbalancer.ZoneAwareLoadBalancer; /** * @author Dave Syer - * */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = TestConfiguration.class) diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientPreprocessorIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientPreprocessorIntegrationTests.java index fab9fda7..62ea4c5a 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientPreprocessorIntegrationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientPreprocessorIntegrationTests.java @@ -39,7 +39,6 @@ import static org.junit.Assert.assertEquals; /** * @author Dave Syer - * */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = TestConfiguration.class) diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java index 3873121a..4d3fb239 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonClientsPreprocessorIntegrationTests.java @@ -41,7 +41,6 @@ import static org.junit.Assert.assertEquals; /** * @author Dave Syer - * */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = TestConfiguration.class) diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonInterceptorTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonInterceptorTests.java index 122afdb2..eebfa361 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonInterceptorTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonInterceptorTests.java @@ -84,7 +84,8 @@ public class RibbonInterceptorTests { } protected static class MyClient implements LoadBalancerClient { - ServiceInstance instance; + + private ServiceInstance instance; public MyClient(ServiceInstance instance) { this.instance = instance; @@ -100,8 +101,8 @@ public class RibbonInterceptorTests { try { return request.apply(this.instance); } - catch (Exception e) { - Throwables.propagate(e); + catch (Exception ex) { + Throwables.propagate(ex); } return null; } @@ -111,5 +112,7 @@ public class RibbonInterceptorTests { return UriComponentsBuilder.fromUri(original).host(instance.getHost()) .port(instance.getPort()).build().toUri(); } + } + } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClientTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClientTests.java index 1e9db8a3..224a238d 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClientTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClientTests.java @@ -47,16 +47,16 @@ import static org.mockito.Mockito.when; public class RibbonLoadBalancerClientTests { @Mock - SpringClientFactory clientFactory; + private SpringClientFactory clientFactory; @Mock - BaseLoadBalancer loadBalancer; + private BaseLoadBalancer loadBalancer; @Mock - LoadBalancerStats loadBalancerStats; + private LoadBalancerStats loadBalancerStats; @Mock - ServerStats serverStats; + private ServerStats serverStats; @Before public void init() { @@ -88,7 +88,6 @@ public class RibbonLoadBalancerClientTests { public void testExecute() { final RibbonServer server = getRibbonServer(); RibbonLoadBalancerClient client = getRibbonLoadBalancerClient(server); - final String returnVal = "myval"; Object actualReturn = client.execute(server.getServiceId(), new LoadBalancerRequest() { @@ -98,9 +97,7 @@ public class RibbonLoadBalancerClientTests { return returnVal; } }); - verifyServerStats(); - assertEquals("retVal was wrong", returnVal, actualReturn); } @@ -108,7 +105,6 @@ public class RibbonLoadBalancerClientTests { public void testExecuteException() { final RibbonServer ribbonServer = getRibbonServer(); RibbonLoadBalancerClient client = getRibbonLoadBalancerClient(ribbonServer); - try { client.execute(ribbonServer.getServiceId(), new LoadBalancerRequest() { @@ -120,10 +116,9 @@ public class RibbonLoadBalancerClientTests { }); fail("Should have thrown exception"); } - catch (Exception e) { - assertNotNull(e); + catch (Exception ex) { + assertNotNull(ex); } - verifyServerStats(); } @@ -156,7 +151,6 @@ public class RibbonLoadBalancerClientTests { this.serverStats); when(this.clientFactory.getLoadBalancer(this.loadBalancer.getName())).thenReturn( this.loadBalancer); - return new RibbonLoadBalancerClient(this.clientFactory); } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerListTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerListTests.java index bfab7d46..98f4598c 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerListTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/DomainExtractingServerListTests.java @@ -41,20 +41,22 @@ import static org.mockito.Mockito.when; public class DomainExtractingServerListTests { static final String IP_ADDR = "10.0.0.2"; + static final int PORT = 8080; + static final String ZONE = "myzone.mydomain.com"; + static final String HOST_NAME = "myHostName." + ZONE; + static final String INSTANCE_ID = "myInstanceId"; @Test public void testDomainExtractingServer() { DomainExtractingServerList serverList = getDomainExtractingServerList( new DefaultClientConfigImpl(), true); - List servers = serverList.getInitialListOfServers(); assertNotNull("servers was null", servers); assertEquals("servers was not size 1", 1, servers.size()); - DomainExtractingServer des = assertDomainExtractingServer(servers, ZONE); assertEquals("hostPort was wrong", HOST_NAME + ":" + PORT, des.getHostPort()); } @@ -63,11 +65,9 @@ public class DomainExtractingServerListTests { public void testDomainExtractingServerDontApproximateZone() { DomainExtractingServerList serverList = getDomainExtractingServerList( new DefaultClientConfigImpl(), false); - List servers = serverList.getInitialListOfServers(); assertNotNull("servers was null", servers); assertEquals("servers was not size 1", 1, servers.size()); - DomainExtractingServer des = assertDomainExtractingServer(servers, null); assertEquals("hostPort was wrong", HOST_NAME + ":" + PORT, des.getHostPort()); } @@ -89,11 +89,9 @@ public class DomainExtractingServerListTests { config.setProperty(CommonClientConfigKey.UseIPAddrForServer, true); DomainExtractingServerList serverList = getDomainExtractingServerList(config, true); - List servers = serverList.getInitialListOfServers(); assertNotNull("servers was null", servers); assertEquals("servers was not size 1", 1, servers.size()); - DomainExtractingServer des = assertDomainExtractingServer(servers, ZONE); assertEquals("hostPort was wrong", IP_ADDR + ":" + PORT, des.getHostPort()); } @@ -104,20 +102,16 @@ public class DomainExtractingServerListTests { @SuppressWarnings("unchecked") ServerList originalServerList = mock(ServerList.class); InstanceInfo instanceInfo = mock(InstanceInfo.class); - when(server.getInstanceInfo()).thenReturn(instanceInfo); when(server.getHost()).thenReturn(HOST_NAME); - when(instanceInfo.getMetadata()).thenReturn( ImmutableMap. builder().put("instanceId", INSTANCE_ID) .build()); when(instanceInfo.getHostName()).thenReturn(HOST_NAME); when(instanceInfo.getIPAddr()).thenReturn(IP_ADDR); when(instanceInfo.getPort()).thenReturn(PORT); - when(originalServerList.getInitialListOfServers()).thenReturn( Arrays. asList(server)); - return new DomainExtractingServerList(originalServerList, config, approximateZoneFromHostname); } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientConfigurationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientConfigurationTests.java index e6a4815d..0aeaaed7 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientConfigurationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientConfigurationTests.java @@ -36,7 +36,6 @@ import static org.springframework.cloud.netflix.ribbon.eureka.EurekaRibbonClient /** * @author Dave Syer - * */ public class EurekaRibbonClientConfigurationTests { @@ -68,22 +67,15 @@ public class EurekaRibbonClientConfigurationTests { EurekaClientConfigBean client = new EurekaClientConfigBean(); EurekaRibbonClientConfiguration preprocessor = new EurekaRibbonClientConfiguration( client, "myService"); - String serviceId = "myService"; String suffix = "mySuffix"; String value = "myValue"; - DynamicStringProperty property = preprocessor.getProperty(preprocessor.getKey( serviceId, suffix)); - assertEquals("property doesn't have default value", VALUE_NOT_SET, property.get()); - preprocessor.setProp(serviceId, suffix, value); - assertEquals("property has wrong value", value, property.get()); - preprocessor.setProp(serviceId, suffix, value); - assertEquals("property has wrong value", value, property.get()); } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientPreprocessorIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientPreprocessorIntegrationTests.java index 590625fc..1849c16f 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientPreprocessorIntegrationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonClientPreprocessorIntegrationTests.java @@ -38,7 +38,6 @@ import com.netflix.loadbalancer.ZoneAwareLoadBalancer; /** * @author Dave Syer - * */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = TestConfiguration.class) @@ -62,6 +61,7 @@ public class EurekaRibbonClientPreprocessorIntegrationTests { ArchaiusAutoConfiguration.class, RibbonAutoConfiguration.class, EurekaClientAutoConfiguration.class, RibbonEurekaAutoConfiguration.class }) protected static class TestConfiguration { + } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/ZonePreferenceServerListFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/ZonePreferenceServerListFilterTests.java index f9997580..357b6dc3 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/ZonePreferenceServerListFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/ZonePreferenceServerListFilterTests.java @@ -29,7 +29,6 @@ import static org.junit.Assert.assertEquals; /** * @author Dave Syer - * */ public class ZonePreferenceServerListFilterTests { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulProxyApplicationTests.java index 84725a22..cd6af3cf 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulProxyApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/FormZuulProxyApplicationTests.java @@ -116,6 +116,7 @@ class FormZuulProxyApplication { @Bean public ZuulFilter sampleFilter() { return new ZuulFilter() { + @Override public String filterType() { return "pre"; @@ -135,6 +136,7 @@ class FormZuulProxyApplication { public int filterOrder() { return 0; } + }; } @@ -147,6 +149,7 @@ class FormZuulProxyApplication { // Load balancer with fixed server list for "simple" pointing to localhost @Configuration class FormRibbonClientConfiguration { + @Bean public ILoadBalancer ribbonLoadBalancer(EurekaInstanceConfig instance) { BaseLoadBalancer balancer = new BaseLoadBalancer(); @@ -154,4 +157,5 @@ class FormRibbonClientConfiguration { .getNonSecurePort()))); return balancer; } + } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ProxyRouteLocatorTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ProxyRouteLocatorTests.java index 26dbc2d5..d52e0e38 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ProxyRouteLocatorTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/ProxyRouteLocatorTests.java @@ -42,14 +42,16 @@ import static org.mockito.MockitoAnnotations.initMocks; public class ProxyRouteLocatorTests { public static final String IGNOREDSERVICE = "ignoredservice"; + public static final String ASERVICE = "aservice"; + public static final String MYSERVICE = "myservice"; @Mock - ConfigurableEnvironment env; + private ConfigurableEnvironment env; @Mock - DiscoveryClient discovery; + private DiscoveryClient discovery; private ZuulProperties properties = new ZuulProperties(); @@ -143,9 +145,7 @@ public class ProxyRouteLocatorTests { this.properties); this.properties.getRoutes().put(ASERVICE, new ZuulRoute("/" + ASERVICE + "/**")); this.properties.init(); - Map routesMap = routeLocator.getRoutes(); - assertNotNull("routesMap was null", routesMap); assertFalse("routesMap was empty", routesMap.isEmpty()); assertMapping(routesMap, ASERVICE); @@ -169,9 +169,7 @@ public class ProxyRouteLocatorTests { this.properties); this.properties.getRoutes().put(ASERVICE, new ZuulRoute("/" + ASERVICE + "/**", "http://" + ASERVICE)); - Map routesMap = routeLocator.getRoutes(); - assertNotNull("routesMap was null", routesMap); assertFalse("routesMap was empty", routesMap.isEmpty()); assertMapping(routesMap, "http://" + ASERVICE, ASERVICE); @@ -182,9 +180,7 @@ public class ProxyRouteLocatorTests { ProxyRouteLocator routeLocator = new ProxyRouteLocator(this.discovery, this.properties); this.properties.getRoutes().put(ASERVICE, new ZuulRoute("/**", ASERVICE)); - Map routesMap = routeLocator.getRoutes(); - assertNotNull("routesMap was null", routesMap); assertFalse("routesMap was empty", routesMap.isEmpty()); assertDefaultMapping(routesMap, ASERVICE); @@ -196,9 +192,7 @@ public class ProxyRouteLocatorTests { this.properties); this.properties.getRoutes().put(ASERVICE, new ZuulRoute("/**", "http://" + ASERVICE)); - Map routesMap = routeLocator.getRoutes(); - assertNotNull("routesMap was null", routesMap); assertFalse("routesMap was empty", routesMap.isEmpty()); assertDefaultMapping(routesMap, "http://" + ASERVICE); @@ -221,11 +215,8 @@ public class ProxyRouteLocatorTests { public void testAutoRoutes() { ProxyRouteLocator routeLocator = new ProxyRouteLocator(this.discovery, this.properties); - when(this.discovery.getServices()).thenReturn(Lists.newArrayList(MYSERVICE)); - Map routesMap = routeLocator.getRoutes(); - assertNotNull("routesMap was null", routesMap); assertFalse("routesMap was empty", routesMap.isEmpty()); assertMapping(routesMap, MYSERVICE); @@ -233,17 +224,13 @@ public class ProxyRouteLocatorTests { @Test public void testAutoRoutesCanBeOverridden() { - this.properties.getRoutes() - .put(MYSERVICE, - new ZuulRoute("/" + MYSERVICE + "/**", "http://example.com/" - + MYSERVICE)); + ZuulRoute route = new ZuulRoute("/" + MYSERVICE + "/**", "http://example.com/" + + MYSERVICE); + this.properties.getRoutes().put(MYSERVICE, route); ProxyRouteLocator routeLocator = new ProxyRouteLocator(this.discovery, this.properties); - when(this.discovery.getServices()).thenReturn(Lists.newArrayList(MYSERVICE)); - Map routesMap = routeLocator.getRoutes(); - assertNotNull("routesMap was null", routesMap); assertFalse("routesMap was empty", routesMap.isEmpty()); assertMapping(routesMap, "http://example.com/" + MYSERVICE, MYSERVICE); diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java index a6ec82b4..3aa6b143 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java @@ -115,6 +115,7 @@ public class SampleZuulProxyApplicationTests { assertEquals(HttpStatus.OK, result.getStatusCode()); assertEquals("Gotten!", result.getBody()); } + } // Don't use @SpringBootApplication because we don't want to component scan @@ -186,6 +187,7 @@ class SampleZuulProxyApplication { // Load balancer with fixed server list for "simple" pointing to localhost @Configuration class SimpleRibbonClientConfiguration { + @Bean public ILoadBalancer ribbonLoadBalancer(EurekaInstanceConfig instance) { BaseLoadBalancer balancer = new BaseLoadBalancer(); @@ -193,10 +195,12 @@ class SimpleRibbonClientConfiguration { .getNonSecurePort()))); return balancer; } + } @Configuration class AnotherRibbonClientConfiguration { + @Bean public ILoadBalancer ribbonLoadBalancer(EurekaInstanceConfig instance) { BaseLoadBalancer balancer = new BaseLoadBalancer(); @@ -204,4 +208,5 @@ class AnotherRibbonClientConfiguration { .getNonSecurePort()))); return balancer; } + } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/post/SendErrorFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/post/SendErrorFilterTests.java index 772cfc8c..f134d853 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/post/SendErrorFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/post/SendErrorFilterTests.java @@ -43,7 +43,6 @@ public class SendErrorFilterTests { @Test public void runsNormally() { SendErrorFilter filter = createSendErrorFilter(new MockHttpServletRequest()); - assertTrue("shouldFilter returned false", filter.shouldFilter()); filter.run(); } @@ -62,7 +61,6 @@ public class SendErrorFilterTests { @Test public void noRequestDispatcher() { SendErrorFilter filter = createSendErrorFilter(mock(HttpServletRequest.class)); - assertTrue("shouldFilter returned false", filter.shouldFilter()); filter.run(); } @@ -70,7 +68,6 @@ public class SendErrorFilterTests { @Test public void doesNotRunTwice() { SendErrorFilter filter = createSendErrorFilter(new MockHttpServletRequest()); - assertTrue("shouldFilter returned false", filter.shouldFilter()); filter.run(); assertFalse("shouldFilter returned true", filter.shouldFilter()); diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java index c1b4f9c4..c0780f6f 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java @@ -35,7 +35,6 @@ import static org.mockito.MockitoAnnotations.initMocks; /** * @author Dave Syer - * */ public class PreDecorationFilterTests { diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java index 91523abe..a269ede0 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java @@ -57,14 +57,10 @@ public class EurekaController { @RequestMapping(method = RequestMethod.GET) public String status(HttpServletRequest request, Map model) { populateBase(request, model); - populateApps(model); - StatusInfo statusInfo = new StatusResource().getStatusInfo(); model.put("statusInfo", statusInfo); - populateInstanceInfo(model, statusInfo); - return "eureka/status"; } @@ -72,7 +68,6 @@ public class EurekaController { public String lastn(HttpServletRequest request, Map model) { populateBase(request, model); PeerAwareInstanceRegistry registery = PeerAwareInstanceRegistry.getInstance(); - ArrayList> lastNCanceled = new ArrayList<>(); List> list = registery.getLastNCanceledInstances(); for (Pair entry : list) { @@ -80,7 +75,6 @@ public class EurekaController { .longValue())); } model.put("lastNCanceled", lastNCanceled); - list = registery.getLastNRegisteredInstances(); ArrayList> lastNRegistered = new ArrayList<>(); for (Pair entry : list) { @@ -88,7 +82,6 @@ public class EurekaController { .longValue())); } model.put("lastNRegistered", lastNRegistered); - return "eureka/lastn"; } @@ -104,9 +97,7 @@ public class EurekaController { model.put("basePath", "/"); model.put("dashboardPath", this.dashboardPath.equals("/") ? "" : this.dashboardPath); - populateHeader(model); - populateNavbar(request, model); } @@ -120,7 +111,6 @@ public class EurekaController { model.put("registry", PeerAwareInstanceRegistry.getInstance()); model.put("isBelowRenewThresold", PeerAwareInstanceRegistry.getInstance() .isBelowRenewThresold() == 1); - DataCenterInfo info = ApplicationInfoManager.getInstance().getInfo() .getDataCenterInfo(); if (info.getName() == DataCenterInfo.Name.Amazon) { @@ -143,7 +133,7 @@ public class EurekaController { String href = node.getServiceUrl(); replicas.put(uri.getHost(), href); } - catch (Exception e) { + catch (Exception ex) { // ignore? } } @@ -153,18 +143,14 @@ public class EurekaController { private void populateApps(Map model) { List sortedApplications = PeerAwareInstanceRegistry .getInstance().getSortedApplications(); - ArrayList> apps = new ArrayList<>(); - for (Application app : sortedApplications) { LinkedHashMap appData = new LinkedHashMap<>(); apps.add(appData); - appData.put("name", app.getName()); Map amiCounts = new HashMap<>(); Map>> instancesByStatus = new HashMap<>(); Map zoneCounts = new HashMap<>(); - for (InstanceInfo info : app.getInstances()) { String id = info.getId(); String url = info.getStatusPageUrl(); @@ -176,7 +162,6 @@ public class EurekaController { ami = dcInfo.get(AmazonInfo.MetaDataKey.amiId); zone = dcInfo.get(AmazonInfo.MetaDataKey.availabilityZone); } - Integer count = amiCounts.get(ami); if (count != null) { amiCounts.put(ami, Integer.valueOf(count.intValue() + 1)); @@ -184,7 +169,6 @@ public class EurekaController { else { amiCounts.put(ami, Integer.valueOf(1)); } - count = zoneCounts.get(zone); if (count != null) { zoneCounts.put(zone, Integer.valueOf(count.intValue() + 1)); @@ -193,35 +177,31 @@ public class EurekaController { zoneCounts.put(zone, Integer.valueOf(1)); } List> list = instancesByStatus.get(status); - if (list == null) { list = new ArrayList<>(); instancesByStatus.put(status, list); } list.add(new Pair<>(id, url)); } - appData.put("amiCounts", amiCounts.entrySet()); appData.put("zoneCounts", zoneCounts.entrySet()); - ArrayList> instanceInfos = new ArrayList<>(); appData.put("instanceInfos", instanceInfos); - for (Iterator>>> iter = instancesByStatus .entrySet().iterator(); iter.hasNext();) { Map.Entry>> entry = iter .next(); List> value = entry.getValue(); InstanceInfo.InstanceStatus status = entry.getKey(); - LinkedHashMap instanceData = new LinkedHashMap<>(); instanceInfos.add(instanceData); - instanceData.put("status", entry.getKey()); ArrayList> instances = new ArrayList<>(); instanceData.put("instances", instances); instanceData.put("isNotUp", status != InstanceInfo.InstanceStatus.UP); + // TODO + /* * if(status != InstanceInfo.InstanceStatus.UP){ * buf.append(""); } @@ -248,13 +228,11 @@ public class EurekaController { } // out.println("" + buf.toString() + ""); } - model.put("apps", apps); } private void populateInstanceInfo(Map model, StatusInfo statusInfo) { InstanceInfo instanceInfo = statusInfo.getInstanceInfo(); - Map instanceMap = new HashMap<>(); instanceMap.put("ipAddr", instanceInfo.getIPAddr()); instanceMap.put("status", instanceInfo.getStatus().toString()); @@ -270,7 +248,6 @@ public class EurekaController { instanceMap.put("instance-type", info.get(AmazonInfo.MetaDataKey.instanceType)); } - model.put("instanceInfo", instanceMap); } } diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaDashboardProperties.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaDashboardProperties.java index 2897cffc..f9b983bb 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaDashboardProperties.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaDashboardProperties.java @@ -22,8 +22,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; /** * Configuration properties for the Eureka dashboard (UI). - * @author Dave Syer * + * @author Dave Syer */ @ConfigurationProperties("eureka.dashboard") @Data @@ -35,7 +35,7 @@ public class EurekaDashboardProperties { private String path = "/"; /** - * FLag to enable the Eureka dashboard. Default true. + * Flag to enable the Eureka dashboard. Default true. */ private boolean enabled = true; diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerConfiguration.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerConfiguration.java index 31b8a099..86dde5de 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerConfiguration.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerConfiguration.java @@ -34,9 +34,7 @@ import com.google.common.collect.Lists; import com.sun.jersey.spi.container.servlet.ServletContainer; /** - * * @author Gunnar Hillert - * */ @Configuration @Import(EurekaServerInitializerConfiguration.class) @@ -72,4 +70,5 @@ public class EurekaServerConfiguration extends WebMvcConfigurerAdapter { bean.setOrder(Ordered.LOWEST_PRECEDENCE - 10); return bean; } + } diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java index bd01749f..3b621f15 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerInitializerConfiguration.java @@ -63,7 +63,6 @@ import com.netflix.eureka.PeerAwareInstanceRegistry; /** * @author Dave Syer - * */ @Configuration @EnableConfigurationProperties(EurekaServerConfigBean.class) @@ -114,7 +113,7 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware .toString()); } } - catch (IOException e) { + catch (IOException ex) { // ignore } LoggingConfiguration.getInstance().configure(); @@ -145,9 +144,9 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware .publishEvent(new EurekaServerStartedEvent( EurekaServerInitializerConfiguration.this.eurekaServerConfig)); } - catch (Exception e) { + catch (Exception ex) { // Help! - logger.error("Could not initialize Eureka servlet context", e); + logger.error("Could not initialize Eureka servlet context", ex); } } }).start(); @@ -226,8 +225,8 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); ReflectionUtils.setField(field, null, proxy); } - catch (Exception e) { - throw new IllegalStateException("Cannot modify instance registry", e); + catch (Exception ex) { + throw new IllegalStateException("Cannot modify instance registry", ex); } } @@ -260,9 +259,9 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware ReflectionUtils.setField(field, this.instance, count); } } - catch (Exception e) { + catch (Exception ex) { throw new IllegalStateException( - "Cannot modify instance registry expected renews", e); + "Cannot modify instance registry expected renews", ex); } } @@ -274,9 +273,6 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware * hasn't sent any renewals recently. This happens for a standalone server. It * seems like a bad default, so we set it to the smallest non-zero value we can, * so that any instances that subsequently register can bump up the threshold. - * - * @author Dave Syer - * */ private class TrafficOpener implements MethodInterceptor { @@ -290,6 +286,7 @@ public class EurekaServerInitializerConfiguration implements ServletContextAware } return invocation.proceed(); } + } } diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/advice/LeaseManagerLite.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/advice/LeaseManagerLite.java index 54ce3cf2..0c6ec102 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/advice/LeaseManagerLite.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/advice/LeaseManagerLite.java @@ -21,7 +21,6 @@ import com.netflix.eureka.lease.LeaseManager; /** * @author Dave Syer - * */ public interface LeaseManagerLite extends LeaseManager { diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/advice/PiggybackMethodInterceptor.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/advice/PiggybackMethodInterceptor.java index 28c10c81..745485a5 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/advice/PiggybackMethodInterceptor.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/advice/PiggybackMethodInterceptor.java @@ -24,11 +24,11 @@ import org.springframework.util.ReflectionUtils; /** * @author Dave Syer - * */ public class PiggybackMethodInterceptor implements MethodInterceptor { private Object delegate; + private Class[] types; public PiggybackMethodInterceptor(Object delegate, Class... types) { diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceCanceledEvent.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceCanceledEvent.java index 9f8c328f..bab49751 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceCanceledEvent.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceCanceledEvent.java @@ -28,8 +28,11 @@ import org.springframework.context.ApplicationEvent; @EqualsAndHashCode(callSuper = false) @SuppressWarnings("serial") public class EurekaInstanceCanceledEvent extends ApplicationEvent { + private String appName; + private String serverId; + boolean replication; public EurekaInstanceCanceledEvent(Object source, String appName, String serverId, @@ -39,4 +42,5 @@ public class EurekaInstanceCanceledEvent extends ApplicationEvent { this.serverId = serverId; this.replication = replication; } + } diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceRegisteredEvent.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceRegisteredEvent.java index 470fc1de..013f3ba4 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceRegisteredEvent.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceRegisteredEvent.java @@ -30,8 +30,11 @@ import com.netflix.appinfo.InstanceInfo; @EqualsAndHashCode(callSuper = false) @SuppressWarnings("serial") public class EurekaInstanceRegisteredEvent extends ApplicationEvent { + private InstanceInfo instanceInfo; + private int leaseDuration; + boolean replication; public EurekaInstanceRegisteredEvent(Object source, InstanceInfo instanceInfo, @@ -41,4 +44,5 @@ public class EurekaInstanceRegisteredEvent extends ApplicationEvent { this.leaseDuration = leaseDuration; this.replication = replication; } + } diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceRenewedEvent.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceRenewedEvent.java index 3314d78f..e80dfea8 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceRenewedEvent.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaInstanceRenewedEvent.java @@ -30,9 +30,13 @@ import com.netflix.appinfo.InstanceInfo; @EqualsAndHashCode(callSuper = false) @SuppressWarnings("serial") public class EurekaInstanceRenewedEvent extends ApplicationEvent { + private String appName; + private String serverId; + private InstanceInfo instanceInfo; + boolean replication; public EurekaInstanceRenewedEvent(Object source, String appName, String serverId, @@ -43,4 +47,5 @@ public class EurekaInstanceRenewedEvent extends ApplicationEvent { this.instanceInfo = instanceInfo; this.replication = replication; } + } diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaRegistryAvailableEvent.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaRegistryAvailableEvent.java index 66b80331..588dca22 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaRegistryAvailableEvent.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaRegistryAvailableEvent.java @@ -22,7 +22,6 @@ import com.netflix.eureka.EurekaServerConfig; /** * @author Dave Syer - * */ @SuppressWarnings("serial") public class EurekaRegistryAvailableEvent extends ApplicationEvent { diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaServerStartedEvent.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaServerStartedEvent.java index 80f7ab37..4b9f7ced 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaServerStartedEvent.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/EurekaServerStartedEvent.java @@ -22,7 +22,6 @@ import com.netflix.eureka.EurekaServerConfig; /** * @author Dave Syer - * */ @SuppressWarnings("serial") public class EurekaServerStartedEvent extends ApplicationEvent { diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/LeaseManagerMessageBroker.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/LeaseManagerMessageBroker.java index d6d033e3..6867a0e9 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/LeaseManagerMessageBroker.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/event/LeaseManagerMessageBroker.java @@ -81,7 +81,6 @@ public class LeaseManagerMessageBroker implements LeaseManagerLite return input.getName().equals(appName); } }); - if (app.isPresent()) { Optional info = tryFind(app.get().getInstances(), new Predicate() { @@ -99,4 +98,5 @@ public class LeaseManagerMessageBroker implements LeaseManagerLite @Override public void evict() { } + } diff --git a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationContextTests.java b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationContextTests.java index 274161e4..77c761f9 100644 --- a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationContextTests.java +++ b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationContextTests.java @@ -46,17 +46,6 @@ public class ApplicationContextTests { @Value("${local.server.port}") private int port = 0; - @Configuration - @EnableAutoConfiguration - @EnableEurekaServer - protected static class Application { - public static void main(String[] args) { - new SpringApplicationBuilder(Application.class).properties( - "spring.application.name=eureka", "server.contextPath=/context").run( - args); - } - } - @Test public void catalogLoads() { @SuppressWarnings("rawtypes") @@ -103,4 +92,16 @@ public class ApplicationContextTests { assertEquals(HttpStatus.OK, entity.getStatusCode()); } + @Configuration + @EnableAutoConfiguration + @EnableEurekaServer + protected static class Application { + + public static void main(String[] args) { + new SpringApplicationBuilder(Application.class).properties( + "spring.application.name=eureka", "server.contextPath=/context").run( + args); + } + + } } diff --git a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationTests.java b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationTests.java index 7fb12bb9..062d8751 100644 --- a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationTests.java +++ b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/ApplicationTests.java @@ -81,7 +81,6 @@ public class ApplicationTests { String body = entity.getBody(); assertNotNull(body); assertFalse("basePath contains double slashes", body.contains(basePath + "/")); - } } diff --git a/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamAmqpProperties.java b/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamAmqpProperties.java index a324a7a2..f034108e 100644 --- a/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamAmqpProperties.java +++ b/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamAmqpProperties.java @@ -26,7 +26,11 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties("hystrix.stream.amqp") @Data public class HystrixStreamAmqpProperties { + private boolean enabled = true; + private boolean prefixMetricName = true; + private boolean sendId = true; + } diff --git a/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamChannel.java b/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamChannel.java index 3f416c60..30d297d8 100644 --- a/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamChannel.java +++ b/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamChannel.java @@ -27,4 +27,5 @@ public interface HystrixStreamChannel { @Gateway(requestChannel = "hystrixStream") public void send(String s); + } diff --git a/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamTask.java b/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamTask.java index 1e8c4690..2ca2f38c 100644 --- a/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamTask.java +++ b/spring-cloud-netflix-hystrix-amqp/src/main/java/org/springframework/netflix/hystrix/amqp/HystrixStreamTask.java @@ -43,8 +43,8 @@ import com.netflix.hystrix.HystrixThreadPoolMetrics; import com.netflix.hystrix.util.HystrixRollingNumberEvent; /** - * @author Spencer Gibb see - * com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller.MetricsPoller + * @author Spencer Gibb + * @see com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller.MetricsPoller */ @Slf4j public class HystrixStreamTask implements ApplicationContextAware { @@ -84,8 +84,8 @@ public class HystrixStreamTask implements ApplicationContextAware { try { this.channel.send(json); } - catch (Exception e) { - e.printStackTrace(); + catch (Exception ex) { + ex.printStackTrace(); } } } @@ -247,6 +247,7 @@ public class HystrixStreamTask implements ApplicationContextAware { commandProperties .fallbackIsolationSemaphoreMaxConcurrentRequests().get()); + // TODO /* * The following are commented out as these rarely change and are verbose * for streaming for something people don't change. We could perhaps allow @@ -339,14 +340,13 @@ public class HystrixStreamTask implements ApplicationContextAware { this.jsonMetrics.add(jsonString.getBuffer().toString()); } } - catch (Exception e) { - log.error("Error adding metrics to queue", e); + catch (Exception ex) { + log.error("Error adding metrics to queue", ex); } } private void addServiceData(JsonGenerator json, ServiceInstance localService) throws IOException { - json.writeObjectFieldStart("origin"); json.writeStringField("host", localService.getHost()); json.writeNumberField("port", localService.getPort()); @@ -356,4 +356,5 @@ public class HystrixStreamTask implements ApplicationContextAware { } json.writeEndObject(); } + } diff --git a/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/HystrixAmqpTests.java b/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/HystrixAmqpTests.java index 0b2ac641..e4958b79 100644 --- a/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/HystrixAmqpTests.java +++ b/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/HystrixAmqpTests.java @@ -57,9 +57,12 @@ public class HystrixAmqpTests { public static void main(String[] args) { SpringApplication.run(Application.class, args); } + } @Test public void contextLoads() { + } + } diff --git a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/EnableHystrixDashboard.java b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/EnableHystrixDashboard.java index 48324a3c..d65f57f8 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/EnableHystrixDashboard.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/EnableHystrixDashboard.java @@ -32,4 +32,5 @@ import org.springframework.context.annotation.Import; @Documented @Import(HystrixDashboardConfiguration.class) public @interface EnableHystrixDashboard { + } diff --git a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfiguration.java b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfiguration.java index 5a395b64..bff1d998 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfiguration.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfiguration.java @@ -88,7 +88,9 @@ public class HystrixDashboardConfiguration { * can request a stream from a different server. */ public static class ProxyStreamServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + private static final Logger logger = LoggerFactory .getLogger(ProxyStreamServlet.class); @@ -170,8 +172,8 @@ public class HystrixDashboardConfiguration { os.flush(); } } - catch (Exception e) { - if (e.getClass().getSimpleName() + catch (Exception ex) { + if (ex.getClass().getSimpleName() .equalsIgnoreCase("ClientAbortException")) { // don't throw an exception as this means the user closed // the connection @@ -182,22 +184,22 @@ public class HystrixDashboardConfiguration { else { // received unknown error while writing so throw an // exception - throw new RuntimeException(e); + throw new RuntimeException(ex); } } } } } - catch (Exception e) { - logger.error("Error proxying request: " + url, e); + catch (Exception ex) { + logger.error("Error proxying request: " + url, ex); } finally { if (httpget != null) { try { httpget.abort(); } - catch (Exception e) { - logger.error("failed aborting proxy connection.", e); + catch (Exception ex) { + logger.error("failed aborting proxy connection.", ex); } } @@ -208,7 +210,7 @@ public class HystrixDashboardConfiguration { try { is.close(); } - catch (Exception e) { + catch (Exception ex) { // e.printStackTrace(); } } @@ -216,7 +218,9 @@ public class HystrixDashboardConfiguration { } private static class ProxyConnectionManager { + private final static PoolingClientConnectionManager threadSafeConnectionManager = new PoolingClientConnectionManager(); + private final static HttpClient httpClient = new DefaultHttpClient( threadSafeConnectionManager); @@ -231,6 +235,8 @@ public class HystrixDashboardConfiguration { threadSafeConnectionManager.setDefaultMaxPerRoute(400); threadSafeConnectionManager.setMaxTotal(400); } + } + } } diff --git a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardController.java b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardController.java index cfa2521f..9b4b972f 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardController.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardController.java @@ -25,7 +25,6 @@ import org.springframework.web.context.request.WebRequest; /** * @author Dave Syer - * */ @Controller public class HystrixDashboardController { @@ -45,10 +44,9 @@ public class HystrixDashboardController { private String extractPath(WebRequest request) { String path = request.getContextPath() - + (String) request - .getAttribute( - "org.springframework.web.servlet.HandlerMapping.pathWithinHandlerMapping", - RequestAttributes.SCOPE_REQUEST); + + (String) request.getAttribute("org.springframework." + + "web.servlet.HandlerMapping.pathWithinHandlerMapping", + RequestAttributes.SCOPE_REQUEST); return path; } diff --git a/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardHomePageTests.java b/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardHomePageTests.java index ae6102f4..19c51ac2 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardHomePageTests.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardHomePageTests.java @@ -87,6 +87,7 @@ public class HystrixDashboardHomePageTests { new SpringApplicationBuilder(Application.class).properties( "spring.application.name=hystrix-dashboard").run(); } + } } diff --git a/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardTests.java b/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardTests.java index 8c2223b0..ed552320 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardTests.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardTests.java @@ -35,7 +35,6 @@ import static org.junit.Assert.assertEquals; /** * @author Dave Syer - * */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @@ -74,10 +73,12 @@ public class HystrixDashboardTests { @EnableAutoConfiguration @EnableHystrixDashboard protected static class Application { + public static void main(String[] args) { new SpringApplicationBuilder(Application.class).properties( "spring.application.name=hystrix-dashboard").run(); } + } } diff --git a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/EnableSidecar.java b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/EnableSidecar.java index 3321248b..805d5328 100644 --- a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/EnableSidecar.java +++ b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/EnableSidecar.java @@ -38,4 +38,5 @@ import org.springframework.context.annotation.Import; @Documented @Import(SidecarConfiguration.class) public @interface EnableSidecar { + } diff --git a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/LocalApplicationHealthIndicator.java b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/LocalApplicationHealthIndicator.java index 3daad3ee..19e1d1f1 100644 --- a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/LocalApplicationHealthIndicator.java +++ b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/LocalApplicationHealthIndicator.java @@ -30,7 +30,7 @@ import org.springframework.web.client.RestTemplate; public class LocalApplicationHealthIndicator extends AbstractHealthIndicator { @Autowired - SidecarProperties properties; + private SidecarProperties properties; @SuppressWarnings("unchecked") @Override @@ -40,10 +40,8 @@ public class LocalApplicationHealthIndicator extends AbstractHealthIndicator { builder.up(); return; } - Map map = new RestTemplate().getForObject(uri, Map.class); Object status = map.get("status"); - if (status != null && status instanceof String) { builder.status(status.toString()); } @@ -65,4 +63,5 @@ public class LocalApplicationHealthIndicator extends AbstractHealthIndicator { private Health.Builder getWarning(Health.Builder builder) { return builder.unknown().withDetail("warning", "no status field in response"); } + } diff --git a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java index 7287bdcf..cfe0da15 100644 --- a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java +++ b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java @@ -30,6 +30,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties @ConditionalOnExpression("${sidecar.enabled:true}") public class SidecarConfiguration { + @Value("${server.port:${SERVER_PORT:${PORT:8080}}}") private int serverPort = 8080; @@ -41,17 +42,13 @@ public class SidecarConfiguration { @Bean public EurekaInstanceConfigBean eurekaInstanceConfigBean() { EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(); - int port = sidecarProperties().getPort(); config.setNonSecurePort(port); - String scheme = config.getSecurePortEnabled() ? "https" : "http"; - config.setStatusPageUrl(scheme + "://" + config.getHostname() + ":" + this.serverPort + config.getStatusPageUrlPath()); config.setHealthCheckUrl(scheme + "://" + config.getHostname() + ":" + this.serverPort + config.getHealthCheckUrlPath()); - config.setHomePageUrl(scheme + "://" + config.getHostname() + ":" + port + config.getHomePageUrlPath()); return config; @@ -66,4 +63,5 @@ public class SidecarConfiguration { public SidecarController sidecarController() { return new SidecarController(); } + } diff --git a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarController.java b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarController.java index 62dd9961..b526d039 100644 --- a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarController.java +++ b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarController.java @@ -34,10 +34,10 @@ import org.springframework.web.bind.annotation.RestController; public class SidecarController { @Autowired - DiscoveryClient discovery; + private DiscoveryClient discovery; @Value("${spring.application.name}") - String appName; + private String appName; @RequestMapping("/ping") public String ping() { @@ -62,4 +62,5 @@ public class SidecarController { + "health
\n" + "hosts/" + this.appName + "
\n" + ""; } + } diff --git a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarProperties.java b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarProperties.java index b088801b..e15edb17 100644 --- a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarProperties.java +++ b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarProperties.java @@ -28,7 +28,11 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties("sidecar") public class SidecarProperties { + private URI healthUri; + private URI homePageUri; + private int port; + } diff --git a/spring-cloud-netflix-sidecar/src/test/java/org/springframework/cloud/netflix/sidecar/SidecarApplication.java b/spring-cloud-netflix-sidecar/src/test/java/org/springframework/cloud/netflix/sidecar/SidecarApplication.java index 17cddee8..8095a778 100644 --- a/spring-cloud-netflix-sidecar/src/test/java/org/springframework/cloud/netflix/sidecar/SidecarApplication.java +++ b/spring-cloud-netflix-sidecar/src/test/java/org/springframework/cloud/netflix/sidecar/SidecarApplication.java @@ -35,4 +35,5 @@ public class SidecarApplication { public static void main(String[] args) { SpringApplication.run(SidecarApplication.class, args); } + } diff --git a/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/Aggregator.java b/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/Aggregator.java index 951da5a3..fe029f71 100644 --- a/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/Aggregator.java +++ b/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/Aggregator.java @@ -53,29 +53,25 @@ public class Aggregator { log.debug("Received hystrix stream payload: {}", data); this.subject.onNext(data); } - catch (IOException e) { - log.error("Error receiving hystrix stream payload: " + payload, e); + catch (IOException ex) { + log.error("Error receiving hystrix stream payload: " + payload, ex); } } public static Map getPayloadData(Map jsonMap) { @SuppressWarnings("unchecked") Map origin = (Map) jsonMap.get("origin"); - String instanceId = null; if (origin.containsKey("id")) { instanceId = origin.get("id").toString(); } - if (!StringUtils.hasText(instanceId)) { // TODO: instanceid template instanceId = origin.get("serviceId") + ":" + origin.get("host") + ":" + origin.get("port"); } - @SuppressWarnings("unchecked") Map data = (Map) jsonMap.get("data"); - data.put("instanceId", instanceId); return data; } diff --git a/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/EnableTurbineAmqp.java b/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/EnableTurbineAmqp.java index 5e16ab77..aa156d38 100644 --- a/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/EnableTurbineAmqp.java +++ b/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/EnableTurbineAmqp.java @@ -34,4 +34,5 @@ import org.springframework.context.annotation.Import; @Documented @Import(TurbineAmqpConfiguration.class) public @interface EnableTurbineAmqp { + } diff --git a/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpConfiguration.java b/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpConfiguration.java index d8ee2256..a0d8c77a 100644 --- a/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpConfiguration.java +++ b/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpConfiguration.java @@ -113,8 +113,8 @@ public class TurbineAmqpConfiguration implements SmartLifecycle { try { aggregatorServer().shutdown(); } - catch (InterruptedException e) { - log.error("Error shutting down", e); + catch (InterruptedException ex) { + log.error("Error shutting down", ex); } this.running = false; } @@ -132,4 +132,5 @@ public class TurbineAmqpConfiguration implements SmartLifecycle { public int getTurbinePort() { return this.turbinePort; } + } diff --git a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/AggregatorTest.java b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/AggregatorTest.java index 53f2174f..c8136a68 100644 --- a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/AggregatorTest.java +++ b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/AggregatorTest.java @@ -64,16 +64,16 @@ public class AggregatorTest { sub.onNext(data); Thread.sleep(latencyBetweenEvents); } - catch (Exception e) { - e.printStackTrace(); + catch (Exception ex) { + ex.printStackTrace(); } } } } } } - catch (Exception e) { - sub.onError(e); + catch (Exception ex) { + sub.onError(ex); } }); Observable>> observable = objectObservable @@ -81,6 +81,8 @@ public class AggregatorTest { return StreamAggregator.aggregateGroupedStreams(observable); } + // TODO + /* * public static GroupedObservable> * getHystrixStreamFromFileEachLineScheduledEvery10Milliseconds(final String stream, diff --git a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpTests.java b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpTests.java index 41ed0547..ad5870fe 100644 --- a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpTests.java +++ b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpTests.java @@ -33,6 +33,7 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration @IntegrationTest({ "server.port=0", "turbine.amqp.port=0", "spring.jmx.enabled=true" }) public class TurbineAmqpTests { + @EnableAutoConfiguration @EnableTurbineAmqp public static class Application { @@ -44,4 +45,5 @@ public class TurbineAmqpTests { @Test public void contextLoads() { } + } diff --git a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/hystrixamqp.stream b/spring-cloud-netflix-turbine-amqp/src/test/resources/org/springframework/cloud/netflix/turbine/amqp/hystrixamqp.stream similarity index 100% rename from spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/hystrixamqp.stream rename to spring-cloud-netflix-turbine-amqp/src/test/resources/org/springframework/cloud/netflix/turbine/amqp/hystrixamqp.stream diff --git a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/EnableTurbine.java b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/EnableTurbine.java index be085bca..23bd0fea 100644 --- a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/EnableTurbine.java +++ b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/EnableTurbine.java @@ -26,7 +26,6 @@ import org.springframework.context.annotation.Import; /** * @author Spencer Gibb - * */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/EurekaInstanceDiscovery.java b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/EurekaInstanceDiscovery.java index 91f7097e..1adbb84d 100644 --- a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/EurekaInstanceDiscovery.java +++ b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/EurekaInstanceDiscovery.java @@ -46,9 +46,11 @@ import com.netflix.turbine.discovery.InstanceDiscovery; * each application. Instance information retrieved from Eureka must be translated to * something that Turbine can understand i.e the * {@link com.netflix.turbine.discovery.Instance} class. - * + *

* All the logic to perform this translation can be overriden here, so that you can * provide your own implementation if needed. + * + * @author Spencer Gibb */ public class EurekaInstanceDiscovery implements InstanceDiscovery { @@ -66,7 +68,6 @@ public class EurekaInstanceDiscovery implements InstanceDiscovery { // initialize eureka client. // DiscoveryManager.getInstance().initComponent(new MyDataCenterInstanceConfig(), // new DefaultEurekaClientConfig()); - SpelExpressionParser parser = new SpelExpressionParser(); this.clusterNameExpression = parser.parseExpression(turbineProperties .getClusterNameExpression()); @@ -78,30 +79,26 @@ public class EurekaInstanceDiscovery implements InstanceDiscovery { */ @Override public Collection getInstanceList() throws Exception { - List instances = new ArrayList(); - List appNames = parseApps(); if (appNames == null || appNames.size() == 0) { logger.info("No apps configured, returning an empty instance list"); return instances; } - logger.info("Fetching instance list for apps: " + appNames); - for (String appName : appNames) { try { instances.addAll(getInstancesForApp(appName)); } - catch (Exception e) { + catch (Exception ex) { logger.error("Failed to fetch instances for app: " + appName - + ", retrying once more", e); + + ", retrying once more", ex); try { instances.addAll(getInstancesForApp(appName)); } - catch (Exception e1) { + catch (Exception retryException) { logger.error("Failed again to fetch instances for app: " + appName - + ", giving up", e); + + ", giving up", ex); } } } @@ -115,9 +112,7 @@ public class EurekaInstanceDiscovery implements InstanceDiscovery { * @throws Exception */ private List getInstancesForApp(String appName) throws Exception { - List instances = new ArrayList(); - logger.info("Fetching instances for app: {}", appName); Application app = DiscoveryManager.getInstance().getDiscoveryClient() .getApplication(appName); @@ -125,7 +120,6 @@ public class EurekaInstanceDiscovery implements InstanceDiscovery { logger.warn("Eureka returned null for app: {}", appName); } List instancesForApp = app.getInstances(); - if (instancesForApp != null) { logger.info("Received instance list for app: {} = {}", appName, instancesForApp.size()); @@ -136,7 +130,6 @@ public class EurekaInstanceDiscovery implements InstanceDiscovery { } } } - return instances; } @@ -144,35 +137,29 @@ public class EurekaInstanceDiscovery implements InstanceDiscovery { * Private helper that marshals the information from each instance into something that * Turbine can understand. Override this method for your own implementation for * parsing Eureka info. - * - * @param iInfo + * @param instanceInfo * @return Instance */ - protected Instance marshallInstanceInfo(InstanceInfo iInfo) { - - String hostname = iInfo.getHostName(); - String cluster = getClusterName(iInfo); - Boolean status = parseInstanceStatus(iInfo.getStatus()); - + protected Instance marshallInstanceInfo(InstanceInfo instanceInfo) { + String hostname = instanceInfo.getHostName(); + String cluster = getClusterName(instanceInfo); + Boolean status = parseInstanceStatus(instanceInfo.getStatus()); if (hostname != null && cluster != null && status != null) { Instance instance = new Instance(hostname, cluster, status); - Map metadata = iInfo.getMetadata(); + Map metadata = instanceInfo.getMetadata(); if (metadata != null) { instance.getAttributes().putAll(metadata); } - - String asgName = iInfo.getASGName(); + String asgName = instanceInfo.getASGName(); if (asgName != null) { instance.getAttributes().put("asg", asgName); } - instance.getAttributes().put("port", String.valueOf(iInfo.getPort())); - - DataCenterInfo dcInfo = iInfo.getDataCenterInfo(); + instance.getAttributes().put("port", String.valueOf(instanceInfo.getPort())); + DataCenterInfo dcInfo = instanceInfo.getDataCenterInfo(); if (dcInfo != null && dcInfo.getName().equals(DataCenterInfo.Name.Amazon)) { AmazonInfo amznInfo = (AmazonInfo) dcInfo; instance.getAttributes().putAll(amznInfo.getMetadata()); } - return instance; } else { @@ -182,31 +169,18 @@ public class EurekaInstanceDiscovery implements InstanceDiscovery { /** * Helper that returns whether the instance is Up of Down - * @param status - * @return */ protected Boolean parseInstanceStatus(InstanceStatus status) { - - if (status != null) { - if (status == InstanceStatus.UP) { - return Boolean.TRUE; - } - else { - return Boolean.FALSE; - } - } - else { + if (status == null) { return null; } + return status == InstanceStatus.UP; } /** * Helper that fetches the cluster name. Cluster is a Turbine concept and not a Eureka * concept. By default we choose the amazon asg name as the cluster. A custom * implementation can be plugged in by overriding this method. - * - * @param iInfo - * @return */ protected String getClusterName(InstanceInfo iInfo) { StandardEvaluationContext context = new StandardEvaluationContext(iInfo); @@ -217,29 +191,22 @@ public class EurekaInstanceDiscovery implements InstanceDiscovery { return null; } - /** - * TODO: move to ConfigurationProperties Private helper that parses the list of - * application names. - * - * @return List - */ private List parseApps() { - + // TODO: move to ConfigurationProperties Private helper that parses the list of + // application names. String appList = ApplicationList.get(); if (appList == null) { return null; } - appList = appList.trim(); if (appList.length() == 0) { return null; } - String[] parts = appList.split(","); if (parts != null && parts.length > 0) { return Arrays.asList(parts); } - return null; } + } diff --git a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringAggregatorFactory.java b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringAggregatorFactory.java index cc2e939c..0c357432 100644 --- a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringAggregatorFactory.java +++ b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringAggregatorFactory.java @@ -59,10 +59,8 @@ public class SpringAggregatorFactory implements ClusterMonitorFactory findOrRegisterAggregateMonitor( String clusterName) { - TurbineDataMonitor clusterMonitor = AggregatorClusterMonitorConsole .findMonitor(clusterName + "_agg"); - if (clusterMonitor == null) { logger.info("Could not find monitors: " + AggregatorClusterMonitorConsole.toString()); @@ -70,7 +68,6 @@ public class SpringAggregatorFactory implements ClusterMonitorFactory getClusterNames() { - List clusters = new ArrayList(); String clusterNames = aggClusters.get(); if (clusterNames == null || clusterNames.trim().length() == 0) { @@ -111,7 +107,6 @@ public class SpringAggregatorFactory implements ClusterMonitorFactory clusterMonitor = (ClusterMonitor) AggregateClusterMonitor .findOrRegisterAggregateMonitor(clusterName); @@ -158,5 +153,6 @@ public class SpringAggregatorFactory implements ClusterMonitorFactory