Reverting the feature

This commit is contained in:
Marcin Grzejszczak
2016-09-08 12:19:30 +02:00
parent 062aba6ec1
commit c26a722ced
4 changed files with 0 additions and 214 deletions

View File

@@ -1,9 +1,6 @@
package org.springframework.cloud.sleuth.instrument.web.client.feign;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.cloud.netflix.feign.ribbon.CachingSpringLoadBalancerFactory;
import org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import feign.Client;
@@ -17,39 +14,14 @@ final class TraceFeignObjectWrapper {
private final BeanFactory beanFactory;
private CachingSpringLoadBalancerFactory cachingSpringLoadBalancerFactory;
private SpringClientFactory springClientFactory;
TraceFeignObjectWrapper(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
Object wrap(Object bean) {
if (bean instanceof Client && !(bean instanceof TraceFeignClient)) {
if (bean instanceof LoadBalancerFeignClient) {
LoadBalancerFeignClient client = ((LoadBalancerFeignClient) bean);
return new TraceLoadBalancerFeignClient(
client.getDelegate(), factory(),
clientFactory(), this.beanFactory);
}
return new TraceFeignClient(this.beanFactory, (Client) bean);
}
return bean;
}
CachingSpringLoadBalancerFactory factory() {
if (this.cachingSpringLoadBalancerFactory == null) {
this.cachingSpringLoadBalancerFactory = this.beanFactory
.getBean(CachingSpringLoadBalancerFactory.class);
}
return this.cachingSpringLoadBalancerFactory;
}
SpringClientFactory clientFactory() {
if (this.springClientFactory == null) {
this.springClientFactory = this.beanFactory
.getBean(SpringClientFactory.class);
}
return this.springClientFactory;
}
}

View File

@@ -1,28 +0,0 @@
package org.springframework.cloud.sleuth.instrument.web.client.feign;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.cloud.netflix.feign.ribbon.CachingSpringLoadBalancerFactory;
import org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import feign.Client;
/**
* We need to wrap the {@link LoadBalancerFeignClient} into a trace representation
* due to casts in {@link org.springframework.cloud.netflix.feign.FeignClientFactoryBean}.
*
* @author Marcin Grzejszczak
* @since 1.0.7
*/
class TraceLoadBalancerFeignClient extends LoadBalancerFeignClient {
public TraceLoadBalancerFeignClient(Client delegate,
CachingSpringLoadBalancerFactory lbClientFactory,
SpringClientFactory clientFactory, BeanFactory beanFactory) {
super(wrap(delegate, beanFactory), lbClientFactory, clientFactory);
}
private static Client wrap(Client delegate, BeanFactory beanFactory) {
return (Client) new TraceFeignObjectWrapper(beanFactory).wrap(delegate);
}
}

View File

@@ -1,156 +0,0 @@
/*
* Copyright 2013-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cloud.sleuth.instrument.web.client.feign.issues.issue393;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.boot.test.WebIntegrationTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.cloud.sleuth.assertions.SleuthAssertions;
import org.springframework.cloud.sleuth.sampler.AlwaysSampler;
import org.springframework.cloud.sleuth.trace.TestSpanContextHolder;
import org.springframework.cloud.sleuth.util.ExceptionUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import feign.Logger;
import feign.Response;
import feign.RetryableException;
import feign.Retryer;
import feign.codec.ErrorDecoder;
import static org.assertj.core.api.Assertions.fail;
import static org.assertj.core.api.Assertions.registerCustomDateFormat;
import static org.assertj.core.api.Assertions.registerFormatterForType;
import static org.assertj.core.api.BDDAssertions.then;
/**
* @author Marcin Grzejszczak
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@TestPropertySource(properties = {"spring.application.name=demo-feign-uri",
"server.port=9978", "eureka.client.enabled=true"})
@Ignore
public class Issue393Tests {
RestTemplate template = new RestTemplate();
@Autowired Tracer tracer;
@Before
public void open() {
TestSpanContextHolder.removeCurrentSpan();
ExceptionUtils.setFail(true);
}
@After
public void cleanup() {
TestSpanContextHolder.removeCurrentSpan();
}
@Test
public void should_successfully_work_when_service_discovery_is_on_classpath_and_feign_uses_url() {
String url = "http://localhost:9978/hello/mikesarver";
ResponseEntity<String> response = this.template.getForEntity(url, String.class);
then(response.getBody()).isEqualTo("mikesarver foo");
then(ExceptionUtils.getLastException()).isNull();
then(this.tracer.getCurrentSpan()).isNull();
}
}
@Configuration
@EnableAutoConfiguration
@EnableFeignClients
@EnableDiscoveryClient
class Application {
@Bean
public DemoController demoController(MyNameRemote myNameRemote) {
return new DemoController(myNameRemote);
}
@Bean
public feign.Logger.Level feignLoggerLevel() {
return feign.Logger.Level.BASIC;
}
@Bean
public AlwaysSampler defaultSampler() {
return new AlwaysSampler();
}
}
@FeignClient(name="no-name",
url="http://localhost:9978")
interface MyNameRemote {
@RequestMapping(value = "/name/{id}", method = RequestMethod.GET)
String getName(@PathVariable("id") String id);
}
@RestController
class DemoController {
private final MyNameRemote myNameRemote;
public DemoController(MyNameRemote myNameRemote) {
this.myNameRemote = myNameRemote;
}
@RequestMapping(value = "/hello/{name}")
public String getHello(@PathVariable("name") String name) {
return myNameRemote.getName(name) + " foo";
}
@RequestMapping(value = "/name/{name}")
public String getName(@PathVariable("name") String name) {
return name;
}
}

View File

@@ -9,8 +9,6 @@ exceptionService.ribbon:
ConnectTimeout: 1
ReadTimeout: 1
eureka.client.enabled: false
spring.sleuth.scheduled.skipPattern: "^org.*TestBeanWithScheduledMethodToBeIgnored$"
# comma separated list of matchers
spring.sleuth.rxjava.schedulers.ignoredthreads: HystixMetricPoller,^MyCustomThread.*$,^RxComputation.*$