diff options
author | 2017-11-27 12:53:14 -0800 | |
---|---|---|
committer | 2017-11-27 12:53:14 -0800 | |
commit | d27e2422ccf0e580f2f85a91c2f3919076693257 (patch) | |
tree | f6333a45cd49445c212e6243542250c56e202982 /src/core/ext/filters/client_channel/subchannel.cc | |
parent | dde6afc0c01d2ebac5c5532aaf35e416c72a4245 (diff) |
Use ManualConstructor
Diffstat (limited to 'src/core/ext/filters/client_channel/subchannel.cc')
-rw-r--r-- | src/core/ext/filters/client_channel/subchannel.cc | 55 |
1 files changed, 6 insertions, 49 deletions
diff --git a/src/core/ext/filters/client_channel/subchannel.cc b/src/core/ext/filters/client_channel/subchannel.cc index a0b441a73a..945c237d2c 100644 --- a/src/core/ext/filters/client_channel/subchannel.cc +++ b/src/core/ext/filters/client_channel/subchannel.cc @@ -39,7 +39,7 @@ #include "src/core/lib/iomgr/timer.h" #include "src/core/lib/profiling/timers.h" #include "src/core/lib/slice/slice_internal.h" -#include "src/core/lib/support/alloc_new.h" +#include "src/core/lib/support/manual_constructor.h" #include "src/core/lib/surface/channel.h" #include "src/core/lib/surface/channel_init.h" #include "src/core/lib/transport/connectivity_state.h" @@ -73,9 +73,6 @@ typedef struct external_state_watcher { } external_state_watcher; struct grpc_subchannel { - grpc_subchannel(const grpc_core::Backoff::Options& backoff_options) - : backoff(backoff_options) {} - grpc_connector* connector; /** refcount @@ -122,7 +119,7 @@ struct grpc_subchannel { external_state_watcher root_external_state_watcher; /** backoff state */ - grpc_core::Backoff backoff; + grpc_core::ManualConstructor<grpc_core::Backoff> backoff; grpc_core::Backoff::Result backoff_result; /** do we have an active alarm? */ @@ -344,7 +341,7 @@ grpc_subchannel* grpc_subchannel_create(grpc_exec_ctx* exec_ctx, } GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED(exec_ctx); - c = GPR_NEW(grpc_subchannel(extract_backoff_options(args->args))); + c = (grpc_subchannel*)gpr_zalloc(sizeof(*c)); c->key = key; gpr_atm_no_barrier_store(&c->ref_pair, 1 << INTERNAL_REF_BITS); c->connector = connector; @@ -384,47 +381,7 @@ grpc_subchannel* grpc_subchannel_create(grpc_exec_ctx* exec_ctx, grpc_schedule_on_exec_ctx); grpc_connectivity_state_init(&c->state_tracker, GRPC_CHANNEL_IDLE, "subchannel"); - int initial_backoff_ms = - GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS * 1000; - int min_connect_timeout_ms = - GRPC_SUBCHANNEL_RECONNECT_MIN_BACKOFF_SECONDS * 1000; - int max_backoff_ms = GRPC_SUBCHANNEL_RECONNECT_MAX_BACKOFF_SECONDS * 1000; - bool fixed_reconnect_backoff = false; - if (c->args) { - for (size_t i = 0; i < c->args->num_args; i++) { - if (0 == strcmp(c->args->args[i].key, - "grpc.testing.fixed_reconnect_backoff_ms")) { - fixed_reconnect_backoff = true; - initial_backoff_ms = min_connect_timeout_ms = max_backoff_ms = - grpc_channel_arg_get_integer(&c->args->args[i], - {initial_backoff_ms, 100, INT_MAX}); - } else if (0 == strcmp(c->args->args[i].key, - GRPC_ARG_MIN_RECONNECT_BACKOFF_MS)) { - fixed_reconnect_backoff = false; - min_connect_timeout_ms = grpc_channel_arg_get_integer( - &c->args->args[i], {min_connect_timeout_ms, 100, INT_MAX}); - } else if (0 == strcmp(c->args->args[i].key, - GRPC_ARG_MAX_RECONNECT_BACKOFF_MS)) { - fixed_reconnect_backoff = false; - max_backoff_ms = grpc_channel_arg_get_integer( - &c->args->args[i], {max_backoff_ms, 100, INT_MAX}); - } else if (0 == strcmp(c->args->args[i].key, - GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS)) { - fixed_reconnect_backoff = false; - initial_backoff_ms = grpc_channel_arg_get_integer( - &c->args->args[i], {initial_backoff_ms, 100, INT_MAX}); - } - } - } - grpc_core::Backoff::Options backoff_options; - backoff_options.set_initial_backoff(initial_backoff_ms) - .set_multiplier(fixed_reconnect_backoff - ? 1.0 - : GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER) - .set_jitter(fixed_reconnect_backoff ? 0.0 - : GRPC_SUBCHANNEL_RECONNECT_JITTER) - .set_min_connect_timeout(min_connect_timeout_ms) - .set_max_backoff(max_backoff_ms); + c->backoff.Init(extract_backoff_options(args->args)); gpr_mu_init(&c->mu); return grpc_subchannel_index_register(exec_ctx, key, c); @@ -483,7 +440,7 @@ static void on_alarm(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) { } if (error == GRPC_ERROR_NONE) { gpr_log(GPR_INFO, "Failed to connect to channel, retrying"); - c->backoff_result = c->backoff.Step(exec_ctx); + c->backoff_result = c->backoff->Step(exec_ctx); continue_connect_locked(exec_ctx, c); gpr_mu_unlock(&c->mu); } else { @@ -520,7 +477,7 @@ static void maybe_start_connecting_locked(grpc_exec_ctx* exec_ctx, if (!c->backoff_begun) { c->backoff_begun = true; - c->backoff_result = c->backoff.Begin(exec_ctx); + c->backoff_result = c->backoff->Begin(exec_ctx); continue_connect_locked(exec_ctx, c); } else { GPR_ASSERT(!c->have_alarm); |