Skip to content

Commit 787fd30

Browse files
committed
feat:support concurrency rate limit.
1 parent 31a3a05 commit 787fd30

File tree

63 files changed

+3697
-582
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+3697
-582
lines changed

polaris-common/polaris-config/src/main/java/com/tencent/polaris/api/config/provider/RateLimitConfig.java

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

2020
import com.tencent.polaris.api.config.plugin.PluginConfig;
2121
import com.tencent.polaris.api.config.verify.Verifier;
22+
2223
import java.util.List;
24+
import java.util.Map;
2325

2426
public interface RateLimitConfig extends PluginConfig, Verifier {
2527

@@ -86,6 +88,8 @@ public interface RateLimitConfig extends PluginConfig, Verifier {
8688
*/
8789
boolean isReportMetrics();
8890

91+
Map<String, String> getMetadata();
92+
8993
enum Fallback {
9094
pass, reject,
9195
}

polaris-common/polaris-config/src/main/java/com/tencent/polaris/factory/config/provider/RateLimitConfigImpl.java

Lines changed: 183 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -17,187 +17,197 @@
1717

1818
package com.tencent.polaris.factory.config.provider;
1919

20-
import java.util.List;
21-
2220
import com.fasterxml.jackson.annotation.JsonProperty;
2321
import com.tencent.polaris.api.config.provider.RateLimitConfig;
2422
import com.tencent.polaris.factory.config.plugin.PluginConfigImpl;
2523
import com.tencent.polaris.factory.util.ConfigUtils;
2624

25+
import java.util.HashMap;
26+
import java.util.List;
27+
import java.util.Map;
28+
2729
public class RateLimitConfigImpl extends PluginConfigImpl implements RateLimitConfig {
2830

29-
@JsonProperty
30-
private Boolean enable;
31-
32-
@JsonProperty
33-
private String limiterService;
34-
35-
@JsonProperty
36-
private String limiterNamespace;
37-
38-
@JsonProperty
39-
private List<String> limiterAddresses;
40-
41-
@JsonProperty
42-
private Integer maxWindowCount;
43-
44-
@JsonProperty
45-
private Fallback fallbackOnExceedWindowCount;
46-
47-
@JsonProperty
48-
private Long remoteSyncTimeoutMilli;
49-
50-
@JsonProperty
51-
private Long maxQueuingTime;
52-
53-
@JsonProperty
54-
private Boolean reportMetrics;
55-
56-
public boolean isEnable() {
57-
if (null == enable) {
58-
return false;
59-
}
60-
return enable;
61-
}
62-
63-
public void setEnable(boolean enable) {
64-
this.enable = enable;
65-
}
66-
67-
@Override
68-
public int getMaxWindowCount() {
69-
if (null == maxWindowCount) {
70-
return 0;
71-
}
72-
return maxWindowCount;
73-
}
74-
75-
public void setMaxWindowCount(int maxWindowCount) {
76-
this.maxWindowCount = maxWindowCount;
77-
}
78-
79-
@Override
80-
public Fallback getFallbackOnExceedWindowCount() {
81-
return fallbackOnExceedWindowCount;
82-
}
83-
84-
public void setFallbackOnExceedWindowCount(
85-
Fallback fallbackOnExceedWindowCount) {
86-
this.fallbackOnExceedWindowCount = fallbackOnExceedWindowCount;
87-
}
88-
89-
public String getLimiterService() {
90-
return limiterService;
91-
}
92-
93-
public void setLimiterService(String limiterService) {
94-
this.limiterService = limiterService;
95-
}
96-
97-
public String getLimiterNamespace() {
98-
return limiterNamespace;
99-
}
100-
101-
public void setLimiterNamespace(String limiterNamespace) {
102-
this.limiterNamespace = limiterNamespace;
103-
}
104-
105-
public List<String> getLimiterAddresses() {
106-
return limiterAddresses;
107-
}
108-
109-
public void setLimiterAddresses(List<String> limiterAddresses) {
110-
this.limiterAddresses = limiterAddresses;
111-
}
112-
113-
@Override
114-
public void verify() {
115-
ConfigUtils.validateNull(enable, "rateLimit.enable");
116-
if (!enable) {
117-
return;
118-
}
119-
ConfigUtils.validatePositive(maxWindowCount, "rateLimit.maxWindowCount");
120-
ConfigUtils.validateNull(fallbackOnExceedWindowCount, "rateLimit.fallbackOnExceedWindowCount");
121-
verifyPluginConfig();
122-
}
123-
124-
@Override
125-
public long getRemoteSyncTimeoutMilli() {
126-
return remoteSyncTimeoutMilli;
127-
}
128-
129-
public void setRemoteSyncTimeoutMilli(long remoteSyncTimeoutMilli) {
130-
this.remoteSyncTimeoutMilli = remoteSyncTimeoutMilli;
131-
}
132-
133-
@Override
134-
public long getMaxQueuingTime() {
135-
return maxQueuingTime;
136-
}
137-
138-
public void setMaxQueuingTime(Long maxQueuingTime) {
139-
this.maxQueuingTime = maxQueuingTime;
140-
}
141-
142-
@Override
143-
public boolean isReportMetrics() {
144-
if (null == reportMetrics) {
145-
return false;
146-
}
147-
return reportMetrics;
148-
}
149-
150-
public void setReportMetrics(boolean reportMetrics) {
151-
this.reportMetrics = reportMetrics;
152-
}
153-
154-
@Override
155-
public void setDefault(Object defaultObject) {
156-
if (null != defaultObject) {
157-
RateLimitConfig rateLimitConfig = (RateLimitConfig) defaultObject;
158-
if (null == enable) {
159-
setEnable(rateLimitConfig.isEnable());
160-
}
161-
if (null == maxWindowCount) {
162-
setMaxWindowCount(rateLimitConfig.getMaxWindowCount());
163-
}
164-
if (null == fallbackOnExceedWindowCount) {
165-
setFallbackOnExceedWindowCount(rateLimitConfig.getFallbackOnExceedWindowCount());
166-
}
167-
if (null == remoteSyncTimeoutMilli) {
168-
setRemoteSyncTimeoutMilli(rateLimitConfig.getRemoteSyncTimeoutMilli());
169-
}
170-
if (null == fallbackOnExceedWindowCount) {
171-
setFallbackOnExceedWindowCount(rateLimitConfig.getFallbackOnExceedWindowCount());
172-
}
173-
if (null == limiterNamespace) {
174-
setLimiterNamespace(rateLimitConfig.getLimiterNamespace());
175-
}
176-
if (null == limiterService) {
177-
setLimiterService(rateLimitConfig.getLimiterService());
178-
}
179-
if (null == maxQueuingTime) {
180-
setMaxQueuingTime(rateLimitConfig.getMaxQueuingTime());
181-
}
31+
@JsonProperty
32+
private Boolean enable;
33+
34+
@JsonProperty
35+
private String limiterService;
36+
37+
@JsonProperty
38+
private String limiterNamespace;
39+
40+
@JsonProperty
41+
private List<String> limiterAddresses;
42+
43+
@JsonProperty
44+
private Integer maxWindowCount;
45+
46+
@JsonProperty
47+
private Fallback fallbackOnExceedWindowCount;
48+
49+
@JsonProperty
50+
private Long remoteSyncTimeoutMilli;
51+
52+
@JsonProperty
53+
private Long maxQueuingTime;
54+
55+
@JsonProperty
56+
private Boolean reportMetrics;
57+
58+
private final Map<String, String> metadata = new HashMap<>();
59+
60+
public boolean isEnable() {
61+
if (null == enable) {
62+
return false;
63+
}
64+
return enable;
65+
}
66+
67+
public void setEnable(boolean enable) {
68+
this.enable = enable;
69+
}
70+
71+
@Override
72+
public int getMaxWindowCount() {
73+
if (null == maxWindowCount) {
74+
return 0;
75+
}
76+
return maxWindowCount;
77+
}
78+
79+
public void setMaxWindowCount(int maxWindowCount) {
80+
this.maxWindowCount = maxWindowCount;
81+
}
82+
83+
@Override
84+
public Fallback getFallbackOnExceedWindowCount() {
85+
return fallbackOnExceedWindowCount;
86+
}
87+
88+
public void setFallbackOnExceedWindowCount(
89+
Fallback fallbackOnExceedWindowCount) {
90+
this.fallbackOnExceedWindowCount = fallbackOnExceedWindowCount;
91+
}
92+
93+
public String getLimiterService() {
94+
return limiterService;
95+
}
96+
97+
public void setLimiterService(String limiterService) {
98+
this.limiterService = limiterService;
99+
}
100+
101+
public String getLimiterNamespace() {
102+
return limiterNamespace;
103+
}
104+
105+
public void setLimiterNamespace(String limiterNamespace) {
106+
this.limiterNamespace = limiterNamespace;
107+
}
108+
109+
public List<String> getLimiterAddresses() {
110+
return limiterAddresses;
111+
}
112+
113+
public void setLimiterAddresses(List<String> limiterAddresses) {
114+
this.limiterAddresses = limiterAddresses;
115+
}
116+
117+
@Override
118+
public void verify() {
119+
ConfigUtils.validateNull(enable, "rateLimit.enable");
120+
if (!enable) {
121+
return;
122+
}
123+
ConfigUtils.validatePositive(maxWindowCount, "rateLimit.maxWindowCount");
124+
ConfigUtils.validateNull(fallbackOnExceedWindowCount, "rateLimit.fallbackOnExceedWindowCount");
125+
verifyPluginConfig();
126+
}
127+
128+
@Override
129+
public long getRemoteSyncTimeoutMilli() {
130+
return remoteSyncTimeoutMilli;
131+
}
132+
133+
public void setRemoteSyncTimeoutMilli(long remoteSyncTimeoutMilli) {
134+
this.remoteSyncTimeoutMilli = remoteSyncTimeoutMilli;
135+
}
136+
137+
@Override
138+
public long getMaxQueuingTime() {
139+
return maxQueuingTime;
140+
}
141+
142+
public void setMaxQueuingTime(Long maxQueuingTime) {
143+
this.maxQueuingTime = maxQueuingTime;
144+
}
145+
146+
@Override
147+
public boolean isReportMetrics() {
148+
if (null == reportMetrics) {
149+
return false;
150+
}
151+
return reportMetrics;
152+
}
153+
154+
public void setReportMetrics(boolean reportMetrics) {
155+
this.reportMetrics = reportMetrics;
156+
}
157+
158+
@Override
159+
public Map<String, String> getMetadata() {
160+
return metadata;
161+
}
162+
163+
@Override
164+
public void setDefault(Object defaultObject) {
165+
if (null != defaultObject) {
166+
RateLimitConfig rateLimitConfig = (RateLimitConfig) defaultObject;
167+
if (null == enable) {
168+
setEnable(rateLimitConfig.isEnable());
169+
}
170+
if (null == maxWindowCount) {
171+
setMaxWindowCount(rateLimitConfig.getMaxWindowCount());
172+
}
173+
if (null == fallbackOnExceedWindowCount) {
174+
setFallbackOnExceedWindowCount(rateLimitConfig.getFallbackOnExceedWindowCount());
175+
}
176+
if (null == remoteSyncTimeoutMilli) {
177+
setRemoteSyncTimeoutMilli(rateLimitConfig.getRemoteSyncTimeoutMilli());
178+
}
179+
if (null == fallbackOnExceedWindowCount) {
180+
setFallbackOnExceedWindowCount(rateLimitConfig.getFallbackOnExceedWindowCount());
181+
}
182+
if (null == limiterNamespace) {
183+
setLimiterNamespace(rateLimitConfig.getLimiterNamespace());
184+
}
185+
if (null == limiterService) {
186+
setLimiterService(rateLimitConfig.getLimiterService());
187+
}
188+
if (null == maxQueuingTime) {
189+
setMaxQueuingTime(rateLimitConfig.getMaxQueuingTime());
190+
}
182191
if (null == reportMetrics) {
183192
setReportMetrics(rateLimitConfig.isReportMetrics());
184193
}
185-
setDefaultPluginConfig(rateLimitConfig);
186-
}
187-
}
188-
189-
@Override
190-
public String toString() {
191-
return "RateLimitConfigImpl{" +
192-
"enable=" + enable +
193-
", limiterService='" + limiterService + '\'' +
194-
", limiterNamespace='" + limiterNamespace + '\'' +
195-
", limiterAddresses=" + limiterAddresses +
196-
", maxWindowCount=" + maxWindowCount +
197-
", fallbackOnExceedWindowCount=" + fallbackOnExceedWindowCount +
198-
", remoteSyncTimeoutMilli=" + remoteSyncTimeoutMilli +
199-
", maxQueuingTime=" + maxQueuingTime +
200-
", reportMetrics=" + reportMetrics +
201-
'}';
202-
}
194+
setDefaultPluginConfig(rateLimitConfig);
195+
}
196+
}
197+
198+
@Override
199+
public String toString() {
200+
return "RateLimitConfigImpl{" +
201+
"enable=" + enable +
202+
", limiterService='" + limiterService + '\'' +
203+
", limiterNamespace='" + limiterNamespace + '\'' +
204+
", limiterAddresses=" + limiterAddresses +
205+
", maxWindowCount=" + maxWindowCount +
206+
", fallbackOnExceedWindowCount=" + fallbackOnExceedWindowCount +
207+
", remoteSyncTimeoutMilli=" + remoteSyncTimeoutMilli +
208+
", maxQueuingTime=" + maxQueuingTime +
209+
", reportMetrics=" + reportMetrics +
210+
", metadata=" + metadata +
211+
'}';
212+
}
203213
}

0 commit comments

Comments
 (0)