Skip to content

Commit 22b2300

Browse files
authored
feat: support lossless config from console & support warmup (#1435)
1 parent ee94dc5 commit 22b2300

File tree

16 files changed

+272
-115
lines changed

16 files changed

+272
-115
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,4 @@
3434
- [fix: fix PolarisCircuitBreakerConfiguration not clear when gateway invoke by wildcard apis](https://github.com/Tencent/spring-cloud-tencent/pull/1418)
3535
- [fix:fix actuator name warning from #1428 .](https://github.com/Tencent/spring-cloud-tencent/pull/1429)
3636
- [feat:upgrade api circuit breaker.](https://github.com/Tencent/spring-cloud-tencent/pull/1438)
37+
- [feat: support lossless config from console & support warmup.](https://github.com/Tencent/spring-cloud-tencent/pull/1435)

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989

9090
<properties>
9191
<!-- Project revision -->
92-
<revision>2.0.0.0-2022.0.5-RC2</revision>
92+
<revision>2.0.0.0-2022.0.5-SNAPSHOT</revision>
9393

9494
<!-- Spring Framework -->
9595
<spring.framework.version>6.0.22</spring.framework.version>

spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public class PolarisLoadBalancerClientConfiguration {
5757

5858
@Bean
5959
@ConditionalOnMissingBean
60-
@ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.strategy", havingValue = "roundRobin", matchIfMissing = true)
60+
@ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.strategy", havingValue = "roundRobin")
6161
public ReactorLoadBalancer<ServiceInstance> roundRobinLoadBalancer(Environment environment,
6262
LoadBalancerClientFactory loadBalancerClientFactory) {
6363
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
@@ -97,7 +97,7 @@ public ReactorLoadBalancer<ServiceInstance> polarisRingHashLoadBalancer(Environm
9797

9898
@Bean
9999
@ConditionalOnMissingBean
100-
@ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.strategy", havingValue = "polarisWeightedRoundRobin")
100+
@ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.strategy", havingValue = "polarisWeightedRoundRobin", matchIfMissing = true)
101101
public ReactorLoadBalancer<ServiceInstance> polarisWeightedRoundRobinLoadBalancer(Environment environment,
102102
LoadBalancerClientFactory loadBalancerClientFactory, PolarisSDKContextManager polarisSDKContextManager) {
103103
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);

spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/plugin/lossless/config/LosslessConfigModifierTest.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
2121
import com.tencent.polaris.api.config.provider.LosslessConfig;
22+
import com.tencent.polaris.specification.api.v1.traffic.manage.LosslessProto;
2223
import org.junit.jupiter.api.BeforeEach;
2324
import org.junit.jupiter.api.Test;
2425

@@ -35,14 +36,23 @@
3536
*/
3637
public class LosslessConfigModifierTest {
3738

38-
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
39+
private final ApplicationContextRunner delayRegisterContextRunner = new ApplicationContextRunner()
3940
.withConfiguration(AutoConfigurations.of(TestApplication.class))
4041
.withPropertyValues("spring.cloud.nacos.discovery.enabled=false")
4142
.withPropertyValues("spring.cloud.polaris.enabled=true")
4243
.withPropertyValues("spring.cloud.polaris.lossless.enabled=true")
4344
.withPropertyValues("spring.cloud.polaris.lossless.port=20000")
44-
.withPropertyValues("spring.cloud.polaris.lossless.healthCheckPath=/xxx")
4545
.withPropertyValues("spring.cloud.polaris.lossless.delayRegisterInterval=10")
46+
.withPropertyValues("spring.application.name=test")
47+
.withPropertyValues("spring.cloud.gateway.enabled=false");
48+
49+
private final ApplicationContextRunner healthCheckContextRunner = new ApplicationContextRunner()
50+
.withConfiguration(AutoConfigurations.of(TestApplication.class))
51+
.withPropertyValues("spring.cloud.nacos.discovery.enabled=false")
52+
.withPropertyValues("spring.cloud.polaris.enabled=true")
53+
.withPropertyValues("spring.cloud.polaris.lossless.enabled=true")
54+
.withPropertyValues("spring.cloud.polaris.lossless.port=20000")
55+
.withPropertyValues("spring.cloud.polaris.lossless.healthCheckPath=/xxx")
4656
.withPropertyValues("spring.cloud.polaris.lossless.healthCheckInterval=5")
4757
.withPropertyValues("spring.application.name=test")
4858
.withPropertyValues("spring.cloud.gateway.enabled=false");
@@ -60,15 +70,29 @@ void setUp() {
6070
}
6171

6272
@Test
63-
void testModify() {
64-
contextRunner.run(context -> {
73+
void testDelayRegister() {
74+
delayRegisterContextRunner.run(context -> {
6575
PolarisSDKContextManager polarisSDKContextManager = context.getBean(PolarisSDKContextManager.class);
6676
LosslessConfig losslessConfig = polarisSDKContextManager.getSDKContext().
6777
getConfig().getProvider().getLossless();
6878
assertThat(losslessConfig.getHost()).isEqualTo("0.0.0.0");
6979
assertThat(losslessConfig.getPort()).isEqualTo(20000);
7080
assertThat(losslessConfig.getDelayRegisterInterval()).isEqualTo(10);
81+
assertThat(losslessConfig.getStrategy()).isEqualTo(LosslessProto.DelayRegister.DelayStrategy.DELAY_BY_TIME);
82+
});
83+
}
84+
85+
@Test
86+
void testHealthCheck() {
87+
healthCheckContextRunner.run(context -> {
88+
PolarisSDKContextManager polarisSDKContextManager = context.getBean(PolarisSDKContextManager.class);
89+
LosslessConfig losslessConfig = polarisSDKContextManager.getSDKContext().
90+
getConfig().getProvider().getLossless();
91+
assertThat(losslessConfig.getHost()).isEqualTo("0.0.0.0");
92+
assertThat(losslessConfig.getPort()).isEqualTo(20000);
93+
assertThat(losslessConfig.getHealthCheckPath()).isEqualTo("/xxx");
7194
assertThat(losslessConfig.getHealthCheckInterval()).isEqualTo(5);
95+
assertThat(losslessConfig.getStrategy()).isEqualTo(LosslessProto.DelayRegister.DelayStrategy.DELAY_BY_HEALTH_CHECK);
7296
});
7397
}
7498

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
3+
*
4+
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
5+
*
6+
* Licensed under the BSD 3-Clause License (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* https://opensource.org/licenses/BSD-3-Clause
11+
*
12+
* Unless required by applicable law or agreed to in writing, software distributed
13+
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
14+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
15+
* specific language governing permissions and limitations under the License.
16+
*/
17+
18+
package com.tencent.cloud.plugin.lossless.config;
19+
20+
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
21+
import com.tencent.polaris.api.config.consumer.WeightAdjustConfig;
22+
import com.tencent.polaris.plugin.lossless.warmup.WarmupWeightAdjuster;
23+
import org.junit.jupiter.api.BeforeEach;
24+
import org.junit.jupiter.api.Test;
25+
26+
import org.springframework.boot.autoconfigure.AutoConfigurations;
27+
import org.springframework.boot.autoconfigure.SpringBootApplication;
28+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
29+
30+
import static org.assertj.core.api.Assertions.assertThat;
31+
32+
/**
33+
* Test for {@link WarmupConfigModifier}.
34+
*
35+
* @author Shedfree Wu
36+
*/
37+
public class WarmupConfigModifierTest {
38+
39+
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
40+
.withConfiguration(AutoConfigurations.of(TestApplication.class))
41+
.withPropertyValues("spring.cloud.nacos.discovery.enabled=false")
42+
.withPropertyValues("spring.cloud.polaris.enabled=true")
43+
.withPropertyValues("spring.cloud.polaris.warmup.enabled=true")
44+
.withPropertyValues("spring.application.name=test")
45+
.withPropertyValues("spring.cloud.gateway.enabled=false");
46+
private final ApplicationContextRunner disabledContextRunner = new ApplicationContextRunner()
47+
.withConfiguration(AutoConfigurations.of(TestApplication.class))
48+
.withPropertyValues("spring.cloud.nacos.discovery.enabled=false")
49+
.withPropertyValues("spring.cloud.polaris.enabled=true")
50+
.withPropertyValues("spring.cloud.polaris.warmup.enabled=false")
51+
.withPropertyValues("spring.application.name=test")
52+
.withPropertyValues("spring.cloud.gateway.enabled=false");
53+
54+
@BeforeEach
55+
void setUp() {
56+
PolarisSDKContextManager.innerDestroy();
57+
}
58+
59+
@Test
60+
void testModify() {
61+
contextRunner.run(context -> {
62+
PolarisSDKContextManager polarisSDKContextManager = context.getBean(PolarisSDKContextManager.class);
63+
WeightAdjustConfig weightAdjustConfig = polarisSDKContextManager.getSDKContext().
64+
getConfig().getConsumer().getWeightAdjust();
65+
assertThat(weightAdjustConfig.isEnable()).isTrue();
66+
assertThat(weightAdjustConfig.getChain().contains(WarmupWeightAdjuster.WARMUP_WEIGHT_ADJUSTER_NAME)).isTrue();
67+
});
68+
}
69+
70+
71+
@Test
72+
void testDisabled() {
73+
disabledContextRunner.run(context -> {
74+
PolarisSDKContextManager polarisSDKContextManager = context.getBean(PolarisSDKContextManager.class);
75+
WeightAdjustConfig weightAdjustConfig = polarisSDKContextManager.getSDKContext().
76+
getConfig().getConsumer().getWeightAdjust();
77+
assertThat(weightAdjustConfig.isEnable()).isTrue();
78+
assertThat(weightAdjustConfig.getChain().contains(WarmupWeightAdjuster.WARMUP_WEIGHT_ADJUSTER_NAME)).isFalse();
79+
});
80+
}
81+
82+
@SpringBootApplication
83+
protected static class TestApplication {
84+
85+
}
86+
}

spring-cloud-starter-tencent-polaris-discovery/src/test/java/org/springframework/cloud/client/serviceregistry/AutoServiceRegistrationUtils.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717

1818
package org.springframework.cloud.client.serviceregistry;
1919

20-
public class AutoServiceRegistrationUtils {
20+
public final class AutoServiceRegistrationUtils {
21+
22+
private AutoServiceRegistrationUtils() {
23+
24+
}
2125

2226
public static void register(AbstractAutoServiceRegistration autoServiceRegistration) {
2327
autoServiceRegistration.register();

spring-cloud-tencent-dependencies/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@
7171

7272
<properties>
7373
<!-- Project revision -->
74-
<revision>2.0.0.0-2022.0.5-RC2</revision>
74+
<revision>2.0.0.0-2022.0.5-SNAPSHOT</revision>
7575

7676
<!-- Polaris SDK version -->
77-
<polaris.version>2.0.0.0-RC2</polaris.version>
77+
<polaris.version>2.0.0.0-SNAPSHOT</polaris.version>
7878

7979
<!-- Dependencies -->
8080
<guava.version>32.0.1-jre</guava.version>

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@
3030
<artifactId>lossless-deregister</artifactId>
3131
</dependency>
3232

33+
<dependency>
34+
<groupId>com.tencent.polaris</groupId>
35+
<artifactId>lossless-warmup</artifactId>
36+
</dependency>
37+
3338
<dependency>
3439
<groupId>org.springframework.boot</groupId>
3540
<artifactId>spring-boot-starter-aop</artifactId>

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/LosslessRegistryAspect.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.tencent.cloud.polaris.context.config.PolarisContextProperties;
2323
import com.tencent.cloud.rpc.enhancement.transformer.RegistrationTransformer;
2424
import com.tencent.polaris.api.pojo.BaseInstance;
25+
import com.tencent.polaris.plugin.lossless.common.HttpLosslessActionProvider;
2526
import org.aspectj.lang.ProceedingJoinPoint;
2627
import org.aspectj.lang.annotation.Around;
2728
import org.aspectj.lang.annotation.Aspect;
@@ -78,12 +79,13 @@ public Object invokeRegister(ProceedingJoinPoint joinPoint) throws Throwable {
7879
}
7980

8081
// web started, get port from registration
81-
BaseInstance instance = SpringCloudLosslessActionProvider.getBaseInstance(registration, registrationTransformer);
82+
BaseInstance instance = getBaseInstance(registration, registrationTransformer);
8283

8384
Runnable registerAction = () -> executeJoinPoint(joinPoint);
84-
85-
SpringCloudLosslessActionProvider losslessActionProvider =
86-
new SpringCloudLosslessActionProvider(serviceRegistry, registration, losslessProperties, registerAction);
85+
Runnable deregisterAction = () -> serviceRegistry.deregister(registration);
86+
HttpLosslessActionProvider losslessActionProvider =
87+
new HttpLosslessActionProvider(registerAction, deregisterAction, registration.getPort(),
88+
instance, polarisSDKContextManager.getSDKContext().getExtensions());
8789

8890
polarisSDKContextManager.getLosslessAPI().setLosslessActionProvider(instance, losslessActionProvider);
8991
polarisSDKContextManager.getLosslessAPI().losslessRegister(instance);
@@ -104,4 +106,8 @@ public void executeJoinPoint(ProceedingJoinPoint joinPoint) {
104106
throw new RuntimeException(e);
105107
}
106108
}
109+
110+
public static BaseInstance getBaseInstance(Registration registration, RegistrationTransformer registrationTransformer) {
111+
return registrationTransformer.transform(registration);
112+
}
107113
}

spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/SpringCloudLosslessActionProvider.java

Lines changed: 0 additions & 95 deletions
This file was deleted.

0 commit comments

Comments
 (0)