|
|
|
@ -371,6 +371,7 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
grpc_error_string(error)); |
|
|
|
|
} |
|
|
|
|
// Extract the following fields from the resolver result, if non-NULL.
|
|
|
|
|
bool lb_policy_updated = false; |
|
|
|
|
char *lb_policy_name = NULL; |
|
|
|
|
bool lb_policy_name_changed = false; |
|
|
|
|
grpc_lb_policy *new_lb_policy = NULL; |
|
|
|
@ -425,6 +426,7 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
strcmp(chand->info_lb_policy_name, lb_policy_name) != 0; |
|
|
|
|
if (chand->lb_policy != NULL && !lb_policy_name_changed) { |
|
|
|
|
// Continue using the same LB policy. Update with new addresses.
|
|
|
|
|
lb_policy_updated = true; |
|
|
|
|
grpc_lb_policy_update_locked(exec_ctx, chand->lb_policy, &lb_policy_args); |
|
|
|
|
} else { |
|
|
|
|
// Instantiate new LB policy.
|
|
|
|
@ -570,8 +572,11 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
} |
|
|
|
|
watch_lb_policy_locked(exec_ctx, chand, new_lb_policy, state); |
|
|
|
|
} |
|
|
|
|
set_channel_connectivity_state_locked( |
|
|
|
|
exec_ctx, chand, state, GRPC_ERROR_REF(state_error), "new_lb+resolver"); |
|
|
|
|
if (!lb_policy_updated) { |
|
|
|
|
set_channel_connectivity_state_locked(exec_ctx, chand, state, |
|
|
|
|
GRPC_ERROR_REF(state_error), |
|
|
|
|
"new_lb+resolver"); |
|
|
|
|
} |
|
|
|
|
grpc_resolver_next_locked(exec_ctx, chand->resolver, |
|
|
|
|
&chand->resolver_result, |
|
|
|
|
&chand->on_resolver_result_changed); |
|
|
|
|