|
|
|
@ -1205,6 +1205,9 @@ static void pick_after_resolver_result_cancel_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
"Pick cancelled", &error, 1)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void pick_after_resolver_result_start_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
grpc_call_element *elem); |
|
|
|
|
|
|
|
|
|
static void pick_after_resolver_result_done_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
void *arg, |
|
|
|
|
grpc_error *error) { |
|
|
|
@ -1228,7 +1231,7 @@ static void pick_after_resolver_result_done_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
chand, calld); |
|
|
|
|
} |
|
|
|
|
async_pick_done_locked(exec_ctx, elem, GRPC_ERROR_REF(error)); |
|
|
|
|
} else { |
|
|
|
|
} else if (chand->lb_policy != NULL) { |
|
|
|
|
if (GRPC_TRACER_ON(grpc_client_channel_trace)) { |
|
|
|
|
gpr_log(GPR_DEBUG, "chand=%p calld=%p: resolver returned, doing pick", |
|
|
|
|
chand, calld); |
|
|
|
@ -1242,6 +1245,30 @@ static void pick_after_resolver_result_done_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|
async_pick_done_locked(exec_ctx, elem, GRPC_ERROR_NONE); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// TODO(roth): It should be impossible for chand->lb_policy to be NULL
|
|
|
|
|
// here, so the rest of this code should never actually be executed.
|
|
|
|
|
// However, we have reports of a crash on iOS that triggers this case,
|
|
|
|
|
// so we are temporarily adding this to restore branches that were
|
|
|
|
|
// removed in https://github.com/grpc/grpc/pull/12297. Need to figure
|
|
|
|
|
// out what is actually causing this to occur and then figure out the
|
|
|
|
|
// right way to deal with it.
|
|
|
|
|
else if (chand->resolver != NULL) { |
|
|
|
|
// No LB policy, so try again.
|
|
|
|
|
if (GRPC_TRACER_ON(grpc_client_channel_trace)) { |
|
|
|
|
gpr_log(GPR_DEBUG, |
|
|
|
|
"chand=%p calld=%p: resolver returned but no LB policy, " |
|
|
|
|
"trying again", |
|
|
|
|
chand, calld); |
|
|
|
|
} |
|
|
|
|
pick_after_resolver_result_start_locked(exec_ctx, elem); |
|
|
|
|
} else { |
|
|
|
|
if (GRPC_TRACER_ON(grpc_client_channel_trace)) { |
|
|
|
|
gpr_log(GPR_DEBUG, "chand=%p calld=%p: resolver disconnected", chand, |
|
|
|
|
calld); |
|
|
|
|
} |
|
|
|
|
async_pick_done_locked( |
|
|
|
|
exec_ctx, elem, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Disconnected")); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void pick_after_resolver_result_start_locked(grpc_exec_ctx *exec_ctx, |
|
|
|
|