From 79f2b9bbf83382bf11466057b8b04b0ac605ea3f Mon Sep 17 00:00:00 2001 From: Justin Chen Date: Mon, 21 Mar 2022 21:25:17 -0500 Subject: [PATCH 1/2] fix json-related flaky tests --- .../feign/Metadata2HeaderFeignInterceptorTest.java | 9 ++++++--- .../MetadataRestTemplateInterceptorTest.java | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/src/test/java/com/tencent/cloud/metadata/core/intercepter/feign/Metadata2HeaderFeignInterceptorTest.java b/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/src/test/java/com/tencent/cloud/metadata/core/intercepter/feign/Metadata2HeaderFeignInterceptorTest.java index ad32c4dc..391b92fd 100644 --- a/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/src/test/java/com/tencent/cloud/metadata/core/intercepter/feign/Metadata2HeaderFeignInterceptorTest.java +++ b/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/src/test/java/com/tencent/cloud/metadata/core/intercepter/feign/Metadata2HeaderFeignInterceptorTest.java @@ -17,6 +17,8 @@ package com.tencent.cloud.metadata.core.intercepter.feign; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.tencent.cloud.metadata.config.MetadataLocalProperties; import com.tencent.cloud.metadata.constant.MetadataConstant; import com.tencent.cloud.metadata.context.MetadataContextHolder; @@ -61,10 +63,11 @@ public class Metadata2HeaderFeignInterceptorTest { private TestApplication.TestFeign testFeign; @Test - public void test1() { + public void test1() throws JsonProcessingException { String metadata = testFeign.test(); - Assertions.assertThat(metadata).isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}{\"LOCAL_SERVICE\":\"test" - + "\",\"LOCAL_PATH\":\"/test\",\"LOCAL_NAMESPACE\":\"default\"}"); + ObjectMapper mapper = new ObjectMapper(); + Assertions.assertThat(mapper.readTree(metadata)).isEqualTo(mapper.readTree("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}{\"LOCAL_SERVICE\":\"test" + + "\",\"LOCAL_PATH\":\"/test\",\"LOCAL_NAMESPACE\":\"default\"}")); Assertions.assertThat(metadataLocalProperties.getContent().get("a")).isEqualTo("1"); Assertions.assertThat(metadataLocalProperties.getContent().get("b")).isEqualTo("2"); Assertions.assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("a")).isEqualTo("11"); diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/src/test/java/com/tencent/cloud/metadata/core/intercepter/resttemplate/MetadataRestTemplateInterceptorTest.java b/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/src/test/java/com/tencent/cloud/metadata/core/intercepter/resttemplate/MetadataRestTemplateInterceptorTest.java index 3fcc704f..dbad98ee 100644 --- a/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/src/test/java/com/tencent/cloud/metadata/core/intercepter/resttemplate/MetadataRestTemplateInterceptorTest.java +++ b/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/src/test/java/com/tencent/cloud/metadata/core/intercepter/resttemplate/MetadataRestTemplateInterceptorTest.java @@ -17,6 +17,8 @@ package com.tencent.cloud.metadata.core.intercepter.resttemplate; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.tencent.cloud.metadata.config.MetadataLocalProperties; import com.tencent.cloud.metadata.constant.MetadataConstant; import com.tencent.cloud.metadata.context.MetadataContextHolder; @@ -65,14 +67,15 @@ public class MetadataRestTemplateInterceptorTest { private int localServerPort; @Test - public void test1() { + public void test1() throws JsonProcessingException { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set(MetadataConstant.HeaderName.CUSTOM_METADATA, "{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}"); HttpEntity httpEntity = new HttpEntity<>(httpHeaders); String metadata = restTemplate.exchange("http://localhost:" + localServerPort + "/test", HttpMethod.GET, httpEntity, String.class).getBody(); - Assertions.assertThat(metadata).isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}{\"LOCAL_SERVICE\":\"test" - + "\",\"LOCAL_PATH\":\"/test\",\"LOCAL_NAMESPACE\":\"default\"}"); + ObjectMapper mapper = new ObjectMapper(); + Assertions.assertThat(mapper.readTree(metadata)).isEqualTo(mapper.readTree("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}{\"LOCAL_SERVICE\":\"test" + + "\",\"LOCAL_PATH\":\"/test\",\"LOCAL_NAMESPACE\":\"default\"}")); Assertions.assertThat(metadataLocalProperties.getContent().get("a")).isEqualTo("1"); Assertions.assertThat(metadataLocalProperties.getContent().get("b")).isEqualTo("2"); Assertions.assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("a")).isEqualTo("11"); From 3a13601365e8ae79de60c14e8c855d2cc581412b Mon Sep 17 00:00:00 2001 From: lepdou Date: Thu, 24 Mar 2022 14:36:48 +0800 Subject: [PATCH 2/2] send heartbeat if healthcheck url not configured --- .../registry/PolarisServiceRegistry.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java index d3c87480..5b232d9f 100644 --- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java +++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java @@ -177,22 +177,28 @@ public class PolarisServiceRegistry implements ServiceRegistry { * @param heartbeatRequest 心跳请求 */ public void heartbeat(InstanceHeartbeatRequest heartbeatRequest) { - heartbeatExecutor.scheduleWithFixedDelay(new Runnable() { - @Override - public void run() { - try { - String healthCheckUrl = String.format("http://%s:%s%s", heartbeatRequest.getHost(), heartbeatRequest.getPort(), polarisProperties.getHealthCheckUrl()); - //先判断是否配置了health-check-url,如果配置了,需要先进行服务实例健康检查,如果健康检查通过,则进行心跳上报,如果不通过,则不上报心跳 - if (Strings.isNotEmpty(healthCheckUrl) && !OkHttpUtil.get(healthCheckUrl, null)){ - log.error("polaris health check failed"); + heartbeatExecutor.scheduleWithFixedDelay(() -> { + try { + String healthCheckEndpoint = polarisProperties.getHealthCheckUrl(); + //先判断是否配置了health-check-url,如果配置了,需要先进行服务实例健康检查,如果健康检查通过,则进行心跳上报,如果不通过,则不上报心跳 + if (Strings.isNotEmpty(healthCheckEndpoint)) { + if (!healthCheckEndpoint.startsWith("/")) { + healthCheckEndpoint = "/" + healthCheckEndpoint; + } + + String healthCheckUrl = String.format("http://%s:%s%s", heartbeatRequest.getHost(), heartbeatRequest.getPort(), healthCheckEndpoint); + + if (!OkHttpUtil.get(healthCheckUrl, null)){ + log.error("backend service health check failed. health check endpoint = {}", healthCheckEndpoint); return; } - polarisDiscoveryHandler.getProviderAPI().heartbeat(heartbeatRequest); - } catch (PolarisException e) { - log.error("polaris heartbeat[{}]", e.getCode(), e); - } catch (Exception e) { - log.error("polaris heartbeat runtime error", e); } + + polarisDiscoveryHandler.getProviderAPI().heartbeat(heartbeatRequest); + } catch (PolarisException e) { + log.error("polaris heartbeat[{}]", e.getCode(), e); + } catch (Exception e) { + log.error("polaris heartbeat runtime error", e); } }, 0, ttl, TimeUnit.SECONDS); }