summaryrefslogtreecommitdiff
path: root/grpc/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc
diff options
context:
space:
mode:
Diffstat (limited to 'grpc/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc')
-rw-r--r--grpc/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc40
1 files changed, 22 insertions, 18 deletions
diff --git a/grpc/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc b/grpc/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc
index 037eea58..3cd7c541 100644
--- a/grpc/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc
+++ b/grpc/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc
@@ -179,10 +179,10 @@ class PriorityLb : public LoadBalancingPolicy {
void StartFailoverTimerLocked();
- static void OnFailoverTimer(void* arg, grpc_error* error);
- void OnFailoverTimerLocked(grpc_error* error);
- static void OnDeactivationTimer(void* arg, grpc_error* error);
- void OnDeactivationTimerLocked(grpc_error* error);
+ static void OnFailoverTimer(void* arg, grpc_error_handle error);
+ void OnFailoverTimerLocked(grpc_error_handle error);
+ static void OnDeactivationTimer(void* arg, grpc_error_handle error);
+ void OnDeactivationTimerLocked(grpc_error_handle error);
RefCountedPtr<PriorityLb> priority_policy_;
const std::string name_;
@@ -363,8 +363,10 @@ void PriorityLb::HandleChildConnectivityStateChangeLocked(
// Otherwise, find the child's priority.
uint32_t child_priority = GetChildPriorityLocked(child->name());
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
- gpr_log(GPR_INFO, "[priority_lb %p] state update for priority %d, child %s",
- this, child_priority, child->name().c_str());
+ gpr_log(GPR_INFO,
+ "[priority_lb %p] state update for priority %u, child %s, current "
+ "priority %u",
+ this, child_priority, child->name().c_str(), current_priority_);
}
// Ignore priorities not in the current config.
if (child_priority == UINT32_MAX) return;
@@ -412,12 +414,13 @@ void PriorityLb::DeleteChild(ChildPriority* child) {
}
void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
+ current_priority_ = UINT32_MAX;
for (uint32_t priority = 0; priority < config_->priorities().size();
++priority) {
// If the child for the priority does not exist yet, create it.
const std::string& child_name = config_->priorities()[priority];
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
- gpr_log(GPR_INFO, "[priority_lb %p] trying priority %d, child %s", this,
+ gpr_log(GPR_INFO, "[priority_lb %p] trying priority %u, child %s", this,
priority, child_name.c_str());
}
auto& child = children_[child_name];
@@ -448,7 +451,7 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
if (child->failover_timer_callback_pending()) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
gpr_log(GPR_INFO,
- "[priority_lb %p] priority %d, child %s: child still "
+ "[priority_lb %p] priority %u, child %s: child still "
"attempting to connect, will wait",
this, priority, child_name.c_str());
}
@@ -468,9 +471,8 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
"TRANSIENT_FAILURE",
this);
}
- current_priority_ = UINT32_MAX;
current_child_from_before_update_ = nullptr;
- grpc_error* error = grpc_error_set_int(
+ grpc_error_handle error = grpc_error_set_int(
GRPC_ERROR_CREATE_FROM_STATIC_STRING("no ready priority"),
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
channel_control_helper()->UpdateState(
@@ -480,7 +482,7 @@ void PriorityLb::TryNextPriorityLocked(bool report_connecting) {
void PriorityLb::SelectPriorityLocked(uint32_t priority) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
- gpr_log(GPR_INFO, "[priority_lb %p] selected priority %d, child %s", this,
+ gpr_log(GPR_INFO, "[priority_lb %p] selected priority %u, child %s", this,
priority, config_->priorities()[priority].c_str());
}
current_priority_ = priority;
@@ -653,14 +655,15 @@ void PriorityLb::ChildPriority::MaybeCancelFailoverTimerLocked() {
}
}
-void PriorityLb::ChildPriority::OnFailoverTimer(void* arg, grpc_error* error) {
+void PriorityLb::ChildPriority::OnFailoverTimer(void* arg,
+ grpc_error_handle error) {
ChildPriority* self = static_cast<ChildPriority*>(arg);
GRPC_ERROR_REF(error); // ref owned by lambda
self->priority_policy_->work_serializer()->Run(
[self, error]() { self->OnFailoverTimerLocked(error); }, DEBUG_LOCATION);
}
-void PriorityLb::ChildPriority::OnFailoverTimerLocked(grpc_error* error) {
+void PriorityLb::ChildPriority::OnFailoverTimerLocked(grpc_error_handle error) {
if (error == GRPC_ERROR_NONE && failover_timer_callback_pending_ &&
!priority_policy_->shutting_down_) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
@@ -710,7 +713,7 @@ void PriorityLb::ChildPriority::MaybeReactivateLocked() {
}
void PriorityLb::ChildPriority::OnDeactivationTimer(void* arg,
- grpc_error* error) {
+ grpc_error_handle error) {
ChildPriority* self = static_cast<ChildPriority*>(arg);
GRPC_ERROR_REF(error); // ref owned by lambda
self->priority_policy_->work_serializer()->Run(
@@ -718,7 +721,8 @@ void PriorityLb::ChildPriority::OnDeactivationTimer(void* arg,
DEBUG_LOCATION);
}
-void PriorityLb::ChildPriority::OnDeactivationTimerLocked(grpc_error* error) {
+void PriorityLb::ChildPriority::OnDeactivationTimerLocked(
+ grpc_error_handle error) {
if (error == GRPC_ERROR_NONE && deactivation_timer_callback_pending_ &&
!priority_policy_->shutting_down_) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
@@ -783,7 +787,7 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
const char* name() const override { return kPriority; }
RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
- const Json& json, grpc_error** error) const override {
+ const Json& json, grpc_error_handle* error) const override {
GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
if (json.type() == Json::Type::JSON_NULL) {
// priority was mentioned as a policy in the deprecated
@@ -794,7 +798,7 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
"config instead.");
return nullptr;
}
- std::vector<grpc_error*> error_list;
+ std::vector<grpc_error_handle> error_list;
// Children.
std::map<std::string, PriorityLbConfig::PriorityLbChild> children;
auto it = json.object_value().find("children");
@@ -822,7 +826,7 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
" error:missing 'config' field")
.c_str()));
} else {
- grpc_error* parse_error = GRPC_ERROR_NONE;
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
auto config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
it2->second, &parse_error);
bool ignore_resolution_requests = false;