@@ -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
8787void 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
182182RuleRouterSet* 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+
320322ReturnCode RuleServiceRouter::DoRoute (RouteInfo& route_info, RouteResult* route_result) {
321323 ServiceRouteRule* route_rule = route_info.GetServiceRouteRule ();
322324 POLARIS_CHECK_ARGUMENT (route_rule != nullptr );
0 commit comments