Commit 98aeda6b authored by caidaojin's avatar caidaojin

pass parameters string to lb SetParamters()

parent be11fcda
......@@ -64,7 +64,7 @@ SharedLoadBalancer::~SharedLoadBalancer() {
int SharedLoadBalancer::Init(const char* lb_protocol) {
std::string lb_name;
butil::StringPairs lb_params;
butil::StringPiece lb_params;
if (!ParseParameters(lb_protocol, &lb_name, &lb_params)) {
LOG(FATAL) << "Fail to parse this load balancer protocol '" << lb_protocol << '\'';
return -1;
......@@ -101,22 +101,20 @@ void SharedLoadBalancer::Describe(std::ostream& os,
bool SharedLoadBalancer::ParseParameters(const butil::StringPiece& lb_protocol,
std::string* lb_name,
butil::StringPairs* lb_params) {
butil::StringPiece* lb_params) {
lb_name->clear();
lb_params->clear();
if (lb_protocol.empty()) {
return false;
}
size_t pos = lb_protocol.find(':');
const char separator = ':';
size_t pos = lb_protocol.find(separator);
if (pos == std::string::npos) {
lb_name->append(lb_protocol.data(), lb_protocol.size());
} else {
lb_name->append(lb_protocol.data(), pos);
butil::StringPiece params_piece = lb_protocol.substr(pos + sizeof(':'));
std::string params_str(params_piece.data(), params_piece.size());
if (!butil::SplitStringIntoKeyValuePairs(params_str, '=', ' ', lb_params)) {
lb_params->clear();
return false;
if (pos < lb_protocol.size() - sizeof(separator)) {
*lb_params = lb_protocol.substr(pos + sizeof(separator));
}
}
......
......@@ -106,10 +106,18 @@ public:
// Config user passed parameters to lb after constrction which
// make lb function more flexible.
virtual bool SetParameters(const butil::StringPairs& params) { return true; }
virtual bool SetParameters(const butil::StringPiece& params) { return true; }
protected:
virtual ~LoadBalancer() { }
bool SplitParameters(const butil::StringPiece& params, butil::StringPairs* param_vec) {
std::string params_str(params.data(), params.size());
if (!butil::SplitStringIntoKeyValuePairs(params_str, '=', ' ', param_vec)) {
param_vec->clear();
return false;
}
return true;
}
};
DECLARE_bool(show_lb_in_vars);
......@@ -172,7 +180,7 @@ public:
private:
static bool ParseParameters(const butil::StringPiece& lb_protocol,
std::string* lb_name,
butil::StringPairs* lb_params);
butil::StringPiece* lb_params);
static void DescribeLB(std::ostream& os, void* arg);
void ExposeLB();
......
......@@ -341,8 +341,12 @@ void ConsistentHashingLoadBalancer::GetLoads(
}
}
bool ConsistentHashingLoadBalancer::SetParameters(const butil::StringPairs& params) {
for (const std::pair<std::string, std::string>& param : params) {
bool ConsistentHashingLoadBalancer::SetParameters(const butil::StringPiece& params) {
butil::StringPairs param_vec;
if (!SplitParameters(params, &param_vec)) {
return false;
}
for (const std::pair<std::string, std::string>& param : param_vec) {
if (param.first == "replicas") {
size_t replicas = 0;
if (butil::StringToSizeT(param.second, &replicas)) {
......
......@@ -54,7 +54,7 @@ public:
void Destroy();
int SelectServer(const SelectIn &in, SelectOut *out);
void Describe(std::ostream &os, const DescribeOptions& options);
virtual bool SetParameters(const butil::StringPairs& params);
virtual bool SetParameters(const butil::StringPiece& params);
private:
void Init(const std::string& name);
......
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