Commit ef3ee436 authored by Soultz's avatar Soultz Committed by helei

ignore ELIMIT for circuit breaker

parent 1d29f21b
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#include "brpc/circuit_breaker.h" #include "brpc/circuit_breaker.h"
#include "brpc/circuit_breaker.h"
#include <cmath> #include <cmath>
#include <mutex> #include <mutex>
#include <gflags/gflags.h> #include <gflags/gflags.h>
...@@ -27,9 +29,9 @@ ...@@ -27,9 +29,9 @@
namespace brpc { namespace brpc {
DEFINE_string(circuit_breaker_ignored_error_codes, "2004", DEFINE_string(circuit_breaker_ignored_error_codes, "2004",
"Comma sparated error code list, those error codes will be ignored by" "Comma sparated error code list, those error codes will be ignored by"
"circuit breaker. Note that you should never ignore 0, we ignored ELIMIT for default."); "circuit breaker. Note that you should never ignore 0, we ignored ELIMIT for default.");
DEFINE_int32(circuit_breaker_short_window_size, 1500, DEFINE_int32(circuit_breaker_short_window_size, 1500,
"Short window sample size."); "Short window sample size.");
DEFINE_int32(circuit_breaker_long_window_size, 3000, DEFINE_int32(circuit_breaker_long_window_size, 3000,
...@@ -68,18 +70,18 @@ namespace { ...@@ -68,18 +70,18 @@ namespace {
std::once_flag g_init_ignored_error_codes_once; std::once_flag g_init_ignored_error_codes_once;
std::set<int> g_ignored_error_codes; std::set<int> g_ignored_error_codes;
void InitIgoredErrorCodes() { void InitIgnoredErrorCodes() {
std::vector<std::string> error_codes; std::vector<std::string> error_codes;
SplitString(FLAGS_circuit_breaker_ignored_error_codes, ',', &error_codes); SplitString(FLAGS_circuit_breaker_ignored_error_codes, ',', &error_codes);
for (const std::string& str : error_codes) { for (const std::string& str : error_codes) {
int error_code = 0; int error_code = 0;
if (!butil::StringToInt(str, &error_code) || error_code == 0) { if (!butil::StringToInt(str, &error_code) || error_code == 0) {
LOG(ERROR) << "Invalid error code '" << str LOG(ERROR) << "Invalid error code '" << str
<< "', check the value of flag 'circuit_breaker_ignored_error_code': " << "', check the value of flag 'circuit_breaker_ignored_error_code': "
<< FLAGS_circuit_breaker_ignored_error_codes; << FLAGS_circuit_breaker_ignored_error_codes;
continue; continue;
} }
g_ignored_error_codes.insert(error_code); g_ignored_error_codes.insert(error_code);
} }
} }
...@@ -198,7 +200,7 @@ CircuitBreaker::CircuitBreaker() ...@@ -198,7 +200,7 @@ CircuitBreaker::CircuitBreaker()
} }
bool CircuitBreaker::OnCallEnd(int error_code, int64_t latency) { bool CircuitBreaker::OnCallEnd(int error_code, int64_t latency) {
std::call_once(g_init_ignored_error_codes_once, InitIgoredErrorCodes); std::call_once(g_init_ignored_error_codes_once, InitIgnoredErrorCodes);
if (g_ignored_error_codes.find(error_code) != g_ignored_error_codes.end()) { if (g_ignored_error_codes.find(error_code) != g_ignored_error_codes.end()) {
return true; return true;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment