Skip to content

Commit 252cf1d

Browse files
authored
fix:修复编译失败问题 (#50)
1 parent 2627c5c commit 252cf1d

File tree

5 files changed

+38
-28
lines changed

5 files changed

+38
-28
lines changed

polaris/plugin/service_router/rule_router.cpp

+30-28
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ bool RuleRouterCluster::CalculateRouteResult(std::vector<RuleRouterSet*>& result
7171
if (!result.empty()) { // 找不到了不用降级
7272
break;
7373
}
74-
//已经降级寻找了一次,不需要再找了
74+
// 已经降级寻找了一次,不需要再找了
7575
if (downgrade) {
7676
break;
7777
}
@@ -85,21 +85,21 @@ bool RuleRouterCluster::CalculateRouteResult(std::vector<RuleRouterSet*>& result
8585
}
8686

8787
void RuleRouterCluster::CalculateSubset(ServiceInstances* service_instances, Labels& labels) {
88-
//检查最高优先级的subset,状态健康则返回其中实例,如果同优先级的有多个subset,则根据权重计算返回实例
89-
//如果最高优先级subset不健康,那么按照优先级遍历检查其他subset,如果有健康的,返回其中实例,如有多个同优先级的subset则按权重计算
90-
//若无健康的低优先级subset,则无论最高优先级subset健康与否,都返回其中实例
91-
//如果是熔断半开状态,要支持按比例放量
92-
// PRESERVED:熔断器维持,节点处于保守状态,此时只能正常接收自身流量,不可接受别的集群降级流量
93-
94-
//为空,直接返回
95-
//剔除不健康的subset
88+
// 检查最高优先级的subset,状态健康则返回其中实例,如果同优先级的有多个subset,则根据权重计算返回实例
89+
// 如果最高优先级subset不健康,那么按照优先级遍历检查其他subset,如果有健康的,返回其中实例,如有多个同优先级的subset则按权重计算
90+
// 若无健康的低优先级subset,则无论最高优先级subset健康与否,都返回其中实例
91+
// 如果是熔断半开状态,要支持按比例放量
92+
// PRESERVED:熔断器维持,节点处于保守状态,此时只能正常接收自身流量,不可接受别的集群降级流量
93+
94+
// 为空,直接返回
95+
// 剔除不健康的subset
9696
if (data_.empty()) {
9797
return;
9898
}
9999
std::map<uint32_t, std::vector<RuleRouterSet*> >::iterator data_it = data_.begin();
100100
std::vector<RuleRouterSet*>& cluster_highest_priority = data_it->second;
101101

102-
//通过service_instances直接获取熔断set信息
102+
// 通过service_instances直接获取熔断set信息
103103
std::map<std::string, SetCircuitBreakerUnhealthyInfo> circuit_breaker_sets;
104104
if (service_instances->GetService() == nullptr) {
105105
POLARIS_LOG(LOG_ERROR, "Service member is null");
@@ -109,20 +109,20 @@ void RuleRouterCluster::CalculateSubset(ServiceInstances* service_instances, Lab
109109

110110
std::vector<RuleRouterSet*> cluster_halfopen;
111111
if (GetHealthyAndHalfOpenSubSet(cluster_highest_priority, circuit_breaker_sets, cluster_halfopen, labels)) {
112-
//如果有半开的,考虑降级
112+
// 如果有半开的,考虑降级
113113
for (std::vector<RuleRouterSet*>::iterator set_it = cluster_halfopen.begin(); set_it != cluster_halfopen.end();
114114
++set_it) {
115115
RuleRouterSet* downgrade = GetDownGradeSubset(circuit_breaker_sets, labels);
116116
if (downgrade) {
117-
//根据半开放量率计算比例
117+
// 根据半开放量率计算比例
118118
float pass_rate = 1.0;
119119
SetCircuitBreakerUnhealthyInfo* breaker_info = nullptr;
120120
GetSetBreakerInfo(circuit_breaker_sets, (*set_it)->subset, labels, &breaker_info);
121121
if (breaker_info != nullptr) {
122122
pass_rate = breaker_info->half_open_release_percent;
123123
}
124124

125-
//修改权重
125+
// 修改权重
126126
(*set_it)->weight_ *= pass_rate;
127127
downgrade->weight_ *= (1 - pass_rate);
128128
cluster_highest_priority.push_back(*set_it);
@@ -133,8 +133,8 @@ void RuleRouterCluster::CalculateSubset(ServiceInstances* service_instances, Lab
133133
}
134134
return;
135135
}
136-
//没有
137-
//降级寻找,只找健康的set,否则返回最高优先级set
136+
// 没有
137+
// 降级寻找,只找健康的set,否则返回最高优先级set
138138
++data_it;
139139
for (; data_it != data_.end(); ++data_it) {
140140
if (GetHealthySubSet(data_it->second, circuit_breaker_sets, labels)) {
@@ -143,14 +143,14 @@ void RuleRouterCluster::CalculateSubset(ServiceInstances* service_instances, Lab
143143
}
144144

145145
if (data_it == data_.end()) {
146-
//依旧取最高优先级的实例,此处什么也不用做
146+
// 依旧取最高优先级的实例,此处什么也不用做
147147
return;
148148
} else {
149-
//找到一个可替换的优先级subset组
149+
// 找到一个可替换的优先级subset组
150150
std::map<uint32_t, std::vector<RuleRouterSet*> > data_tmp;
151151
data_tmp[data_it->first].swap(data_it->second);
152152
data_.swap(data_tmp);
153-
//释放Set指针的内存
153+
// 释放Set指针的内存
154154
for (std::map<uint32_t, std::vector<RuleRouterSet*> >::iterator tmp_it = data_tmp.begin(); tmp_it != data_tmp.end();
155155
++tmp_it) {
156156
const std::vector<RuleRouterSet*>& set_data = tmp_it->second;
@@ -174,15 +174,15 @@ void RuleRouterCluster::GetSetBreakerInfo(std::map<std::string, SetCircuitBreake
174174
std::string subset_key = subset.GetSubInfoStrId() + "#" + labels.GetLabelStr();
175175
std::map<std::string, SetCircuitBreakerUnhealthyInfo>::iterator subset_it = circuit_breaker_sets.find(subset_key);
176176
if (subset_it != circuit_breaker_sets.end()) {
177-
//接口级熔断
177+
// 接口级熔断
178178
*breaker_info = &subset_it->second;
179179
}
180180
}
181181

182182
RuleRouterSet* RuleRouterCluster::GetDownGradeSubset(
183183
std::map<std::string, SetCircuitBreakerUnhealthyInfo>& circuit_breaker_sets, Labels& labels) {
184-
//为空或者只有一个优先级组,都直接返回
185-
//寻找一个健康的降级subset
184+
// 为空或者只有一个优先级组,都直接返回
185+
// 寻找一个健康的降级subset
186186
if (data_.size() <= 1) {
187187
return nullptr;
188188
}
@@ -197,7 +197,7 @@ RuleRouterSet* RuleRouterCluster::GetDownGradeSubset(
197197
cbs = breaker_info->status;
198198
}
199199
if (!(*it)->isolated_ && cbs == kCircuitBreakerClose) {
200-
//要从vector中移除,免得重复释放,用sharedptr比较好
200+
// 要从vector中移除,免得重复释放,用sharedptr比较好
201201
RuleRouterSet* result = *it;
202202
data_it->second.erase(it);
203203
return result;
@@ -213,7 +213,7 @@ bool RuleRouterCluster::GetHealthyAndHalfOpenSubSet(
213213
if (cluster.empty()) {
214214
return false;
215215
}
216-
//判断subset状态是否健康,剔除不健康的set
216+
// 判断subset状态是否健康,剔除不健康的set
217217
std::vector<RuleRouterSet*> cluster_healthy;
218218
std::vector<RuleRouterSet*> cluster_unhealthy;
219219
std::vector<RuleRouterSet*> cluster_isolated;
@@ -236,22 +236,22 @@ bool RuleRouterCluster::GetHealthyAndHalfOpenSubSet(
236236
cluster_unhealthy.push_back(*it);
237237
}
238238
}
239-
//移除隔离的set
239+
// 移除隔离的set
240240
for (std::vector<RuleRouterSet*>::iterator it = cluster_isolated.begin(); it != cluster_isolated.end(); ++it) {
241241
delete *it;
242242
}
243243

244244
if (!cluster_healthy.empty() || !cluster_halfopen.empty()) {
245-
//只保留健康和半开的set
246-
//注意内存释放!
245+
// 只保留健康和半开的set
246+
// 注意内存释放!
247247
cluster.swap(cluster_healthy);
248248
for (std::vector<RuleRouterSet*>::iterator it = cluster_unhealthy.begin(); it != cluster_unhealthy.end(); ++it) {
249249
delete *it;
250250
}
251251
return true;
252252
}
253-
//没有健康的set
254-
//隔离的set已经被释放
253+
// 没有健康的set
254+
// 隔离的set已经被释放
255255
cluster.swap(cluster_unhealthy);
256256
return false;
257257
}
@@ -317,6 +317,8 @@ ReturnCode RuleServiceRouter::Init(Config* config, Context* context) {
317317
return kReturnOk;
318318
}
319319

320+
std::string RuleServiceRouter::Name() { return "RuleServiceRouter"; }
321+
320322
ReturnCode RuleServiceRouter::DoRoute(RouteInfo& route_info, RouteResult* route_result) {
321323
ServiceRouteRule* route_rule = route_info.GetServiceRouteRule();
322324
POLARIS_CHECK_ARGUMENT(route_rule != nullptr);

polaris/plugin/service_router/rule_router.h

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ class RuleServiceRouter : public ServiceRouter {
7272

7373
virtual RouterStatData* CollectStat();
7474

75+
virtual std::string Name();
76+
7577
private:
7678
bool enable_recover_all_;
7779
float percent_of_min_instances_;

polaris/plugin/service_router/set_division_router.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ ReturnCode SetDivisionServiceRouter::Init(Config* /*config*/, Context* context)
4545
return kReturnOk;
4646
}
4747

48+
std::string SetDivisionServiceRouter::Name() { return "SetDivisionServiceRouter"; }
49+
4850
// 根据主调和被调的metadata判断是否启用set分组
4951
bool SetDivisionServiceRouter::IsSetDivisionRouterEnable(const std::string& caller_set_name,
5052
const std::string& callee_set_name,

polaris/plugin/service_router/set_division_router.h

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ class SetDivisionServiceRouter : public ServiceRouter {
4040

4141
virtual RouterStatData* CollectStat();
4242

43+
virtual std::string Name();
44+
4345
// 根据主调set名和被调set名和metadata判断是否启用set分组
4446
bool IsSetDivisionRouterEnable(const std::string& caller_set_name, const std::string& callee_set_name,
4547
const std::map<std::string, std::string>& callee_metadata);

test/mock/mock_service_router.h

+2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class MockServiceRouter : public ServiceRouter {
4444

4545
MOCK_METHOD0(CollectStat, RouterStatData *());
4646

47+
MOCK_METHOD0(Name, std::string());
48+
4749
static Plugin *MockServiceRouterFactory() { return mock_service_router_list_[mock_service_router_index_++]; }
4850

4951
static void RegisterMockPlugin() { RegisterPlugin("mockRouter", kPluginServiceRouter, MockServiceRouterFactory); }

0 commit comments

Comments
 (0)