diff --git a/include/grpc/impl/codegen/grpc_types.h b/include/grpc/impl/codegen/grpc_types.h index 55e7f3d9669..4f33acf85af 100644 --- a/include/grpc/impl/codegen/grpc_types.h +++ b/include/grpc/impl/codegen/grpc_types.h @@ -384,7 +384,7 @@ typedef struct { Defaults to "blend". In the current implementation "blend" is equivalent to "latency". */ #define GRPC_ARG_OPTIMIZATION_TARGET "grpc.optimization_target" -/** Enables retry functionality. Defaults to false. When enabled, +/** Enables retry functionality. Defaults to true. When enabled, configurable retries are enabled when they are configured via the service config. For details, see: https://github.com/grpc/proposal/blob/master/A6-client-retries.md diff --git a/src/core/ext/filters/client_channel/client_channel.cc b/src/core/ext/filters/client_channel/client_channel.cc index 01e3d948b97..d3e44083815 100644 --- a/src/core/ext/filters/client_channel/client_channel.cc +++ b/src/core/ext/filters/client_channel/client_channel.cc @@ -1516,7 +1516,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() { channel_args_, args_to_add.data(), args_to_add.size()); new_args = config_selector->ModifyChannelArgs(new_args); bool enable_retries = - grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, false); + grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true); // Construct dynamic filter stack. std::vector filters = config_selector->GetFilters(); diff --git a/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc b/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc index c2f83f5376f..da48e6fede8 100644 --- a/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +++ b/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc @@ -242,7 +242,6 @@ class XdsResolver : public Resolver { RouteTable route_table_; std::map> clusters_; std::vector filters_; - bool retry_enabled_ = false; }; void OnListenerUpdate(XdsApi::LdsUpdate listener); @@ -471,7 +470,6 @@ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig( std::vector fields; // Set retry policy if any. if (route.retry_policy.has_value()) { - retry_enabled_ = true; std::vector retry_parts; retry_parts.push_back(absl::StrFormat( "\"retryPolicy\": {\n" @@ -575,18 +573,7 @@ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig( grpc_channel_args* XdsResolver::XdsConfigSelector::ModifyChannelArgs( grpc_channel_args* args) { - // The max number of args to add is 1 so far; when more args need to be added - // we will increase the size of args_to_add accordingly; - absl::InlinedVector args_to_add; - if (retry_enabled_) { - args_to_add.emplace_back(grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1)); - } - if (args_to_add.empty()) return args; - grpc_channel_args* new_args = grpc_channel_args_copy_and_add( - args, args_to_add.data(), args_to_add.size()); - grpc_channel_args_destroy(args); - return new_args; + return args; } void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) { diff --git a/test/core/end2end/tests/retry.cc b/test/core/end2end/tests/retry.cc index 1c82b51b627..5e75494b604 100644 --- a/test/core/end2end/tests/retry.cc +++ b/test/core/end2end/tests/retry.cc @@ -121,8 +121,6 @@ static void test_retry(grpc_end2end_test_config config) { char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_cancel_during_delay.cc b/test/core/end2end/tests/retry_cancel_during_delay.cc index 161b7aa16d9..05d1f941644 100644 --- a/test/core/end2end/tests/retry_cancel_during_delay.cc +++ b/test/core/end2end/tests/retry_cancel_during_delay.cc @@ -120,8 +120,6 @@ static void test_retry_cancel_during_delay(grpc_end2end_test_config config, char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_cancellation.cc b/test/core/end2end/tests/retry_cancellation.cc index c4f1b943ea5..654ad59609c 100644 --- a/test/core/end2end/tests/retry_cancellation.cc +++ b/test/core/end2end/tests/retry_cancellation.cc @@ -122,8 +122,6 @@ static void test_retry_cancellation(grpc_end2end_test_config config, char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_disabled.cc b/test/core/end2end/tests/retry_disabled.cc index dc953db7efe..83deb41113f 100644 --- a/test/core/end2end/tests/retry_disabled.cc +++ b/test/core/end2end/tests/retry_disabled.cc @@ -93,13 +93,11 @@ static void end_test(grpc_end2end_test_fixture* f) { grpc_completion_queue_destroy(f->shutdown_cq); } -// Tests that we don't retry when retries are not enabled via the +// Tests that we don't retry when retries are disabled via the // GRPC_ARG_ENABLE_RETRIES channel arg, even when there is retry // configuration in the service config. // - 1 retry allowed for ABORTED status // - first attempt returns ABORTED but does not retry -// TODO(roth): Update this when we change the default of -// GRPC_ARG_ENABLE_RETRIES to true. static void test_retry_disabled(grpc_end2end_test_config config) { grpc_call* c; grpc_call* s; @@ -123,24 +121,28 @@ static void test_retry_disabled(grpc_end2end_test_config config) { int was_cancelled = 2; char* peer; - grpc_arg arg = grpc_channel_arg_string_create( - const_cast(GRPC_ARG_SERVICE_CONFIG), - const_cast( - "{\n" - " \"methodConfig\": [ {\n" - " \"name\": [\n" - " { \"service\": \"service\", \"method\": \"method\" }\n" - " ],\n" - " \"retryPolicy\": {\n" - " \"maxAttempts\": 2,\n" - " \"initialBackoff\": \"1s\",\n" - " \"maxBackoff\": \"120s\",\n" - " \"backoffMultiplier\": 1.6,\n" - " \"retryableStatusCodes\": [ \"ABORTED\" ]\n" - " }\n" - " } ]\n" - "}")); - grpc_channel_args client_args = {1, &arg}; + grpc_arg args[] = { + grpc_channel_arg_integer_create( + const_cast(GRPC_ARG_ENABLE_RETRIES), 0), + grpc_channel_arg_string_create( + const_cast(GRPC_ARG_SERVICE_CONFIG), + const_cast( + "{\n" + " \"methodConfig\": [ {\n" + " \"name\": [\n" + " { \"service\": \"service\", \"method\": \"method\" }\n" + " ],\n" + " \"retryPolicy\": {\n" + " \"maxAttempts\": 2,\n" + " \"initialBackoff\": \"1s\",\n" + " \"maxBackoff\": \"120s\",\n" + " \"backoffMultiplier\": 1.6,\n" + " \"retryableStatusCodes\": [ \"ABORTED\" ]\n" + " }\n" + " } ]\n" + "}")), + }; + grpc_channel_args client_args = {GPR_ARRAY_SIZE(args), args}; grpc_end2end_test_fixture f = begin_test(config, "retry_disabled", &client_args, nullptr); diff --git a/test/core/end2end/tests/retry_exceeds_buffer_size_in_delay.cc b/test/core/end2end/tests/retry_exceeds_buffer_size_in_delay.cc index 79b03dd1cf7..d515bc46b8b 100644 --- a/test/core/end2end/tests/retry_exceeds_buffer_size_in_delay.cc +++ b/test/core/end2end/tests/retry_exceeds_buffer_size_in_delay.cc @@ -127,8 +127,6 @@ static void test_retry_exceeds_buffer_size_in_delay( char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc b/test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc index 3a7f42b05af..286e81ec29b 100644 --- a/test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc +++ b/test/core/end2end/tests/retry_exceeds_buffer_size_in_initial_batch.cc @@ -124,8 +124,6 @@ static void test_retry_exceeds_buffer_size_in_initial_batch( char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc b/test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc index 7c84297d3d8..6c2abcca565 100644 --- a/test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc +++ b/test/core/end2end/tests/retry_exceeds_buffer_size_in_subsequent_batch.cc @@ -129,8 +129,6 @@ static void test_retry_exceeds_buffer_size_in_subsequent_batch( char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_lb_drop.cc b/test/core/end2end/tests/retry_lb_drop.cc index f42d08ffaa0..ecdc21dfe9d 100644 --- a/test/core/end2end/tests/retry_lb_drop.cc +++ b/test/core/end2end/tests/retry_lb_drop.cc @@ -181,8 +181,6 @@ static void test_retry_lb_drop(grpc_end2end_test_config config) { grpc_core::g_pick_args_vector = &pick_args_seen; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_non_retriable_status.cc b/test/core/end2end/tests/retry_non_retriable_status.cc index 3ad91ea59e2..aeab8772a99 100644 --- a/test/core/end2end/tests/retry_non_retriable_status.cc +++ b/test/core/end2end/tests/retry_non_retriable_status.cc @@ -120,8 +120,6 @@ static void test_retry_non_retriable_status(grpc_end2end_test_config config) { char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc b/test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc index bf7b817080e..64365534392 100644 --- a/test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc +++ b/test/core/end2end/tests/retry_non_retriable_status_before_recv_trailing_metadata_started.cc @@ -123,8 +123,6 @@ test_retry_non_retriable_status_before_recv_trailing_metadata_started( char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_per_attempt_recv_timeout.cc b/test/core/end2end/tests/retry_per_attempt_recv_timeout.cc index 89001edef2c..74a09ba81ae 100644 --- a/test/core/end2end/tests/retry_per_attempt_recv_timeout.cc +++ b/test/core/end2end/tests/retry_per_attempt_recv_timeout.cc @@ -122,8 +122,6 @@ static void test_retry_per_attempt_recv_timeout( char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_integer_create( const_cast(GRPC_ARG_EXPERIMENTAL_ENABLE_HEDGING), 1), grpc_channel_arg_string_create( diff --git a/test/core/end2end/tests/retry_per_attempt_recv_timeout_on_last_attempt.cc b/test/core/end2end/tests/retry_per_attempt_recv_timeout_on_last_attempt.cc index 2dfae4608d5..597b16759ab 100644 --- a/test/core/end2end/tests/retry_per_attempt_recv_timeout_on_last_attempt.cc +++ b/test/core/end2end/tests/retry_per_attempt_recv_timeout_on_last_attempt.cc @@ -118,8 +118,6 @@ static void test_retry_per_attempt_recv_timeout_on_last_attempt( grpc_slice details; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_integer_create( const_cast(GRPC_ARG_EXPERIMENTAL_ENABLE_HEDGING), 1), grpc_channel_arg_string_create( diff --git a/test/core/end2end/tests/retry_recv_initial_metadata.cc b/test/core/end2end/tests/retry_recv_initial_metadata.cc index 791308d7f09..b58b33dbc02 100644 --- a/test/core/end2end/tests/retry_recv_initial_metadata.cc +++ b/test/core/end2end/tests/retry_recv_initial_metadata.cc @@ -125,8 +125,6 @@ static void test_retry_recv_initial_metadata(grpc_end2end_test_config config) { {{nullptr, nullptr, nullptr, nullptr}}}; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_recv_message.cc b/test/core/end2end/tests/retry_recv_message.cc index 24a33e231fe..a6fb07cd6d7 100644 --- a/test/core/end2end/tests/retry_recv_message.cc +++ b/test/core/end2end/tests/retry_recv_message.cc @@ -121,8 +121,6 @@ static void test_retry_recv_message(grpc_end2end_test_config config) { char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_recv_trailing_metadata_error.cc b/test/core/end2end/tests/retry_recv_trailing_metadata_error.cc index 584bcd25166..c91c7c83d68 100644 --- a/test/core/end2end/tests/retry_recv_trailing_metadata_error.cc +++ b/test/core/end2end/tests/retry_recv_trailing_metadata_error.cc @@ -125,8 +125,6 @@ static void test_retry_recv_trailing_metadata_error( char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_send_op_fails.cc b/test/core/end2end/tests/retry_send_op_fails.cc index 8f70e8c0fee..61e6743e213 100644 --- a/test/core/end2end/tests/retry_send_op_fails.cc +++ b/test/core/end2end/tests/retry_send_op_fails.cc @@ -127,8 +127,6 @@ static void test_retry_send_op_fails(grpc_end2end_test_config config) { char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_server_pushback_delay.cc b/test/core/end2end/tests/retry_server_pushback_delay.cc index 4990c6fe1f8..c7d25dacc04 100644 --- a/test/core/end2end/tests/retry_server_pushback_delay.cc +++ b/test/core/end2end/tests/retry_server_pushback_delay.cc @@ -126,8 +126,6 @@ static void test_retry_server_pushback_delay(grpc_end2end_test_config config) { pushback_md.value = grpc_slice_from_static_string("2000"); grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_server_pushback_disabled.cc b/test/core/end2end/tests/retry_server_pushback_disabled.cc index 75744d33cde..580f75aa418 100644 --- a/test/core/end2end/tests/retry_server_pushback_disabled.cc +++ b/test/core/end2end/tests/retry_server_pushback_disabled.cc @@ -127,8 +127,6 @@ static void test_retry_server_pushback_disabled( pushback_md.value = grpc_slice_from_static_string("-1"); grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_streaming.cc b/test/core/end2end/tests/retry_streaming.cc index 3d2e9dc6545..25219102b80 100644 --- a/test/core/end2end/tests/retry_streaming.cc +++ b/test/core/end2end/tests/retry_streaming.cc @@ -137,8 +137,6 @@ static void test_retry_streaming(grpc_end2end_test_config config) { char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_integer_create( const_cast(GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE), 1024 * 8), diff --git a/test/core/end2end/tests/retry_streaming_after_commit.cc b/test/core/end2end/tests/retry_streaming_after_commit.cc index a3ea534ea3f..4fc3aaa26d0 100644 --- a/test/core/end2end/tests/retry_streaming_after_commit.cc +++ b/test/core/end2end/tests/retry_streaming_after_commit.cc @@ -127,8 +127,6 @@ static void test_retry_streaming_after_commit(grpc_end2end_test_config config) { char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc b/test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc index aee927c43ef..f3e90d3a5bb 100644 --- a/test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc +++ b/test/core/end2end/tests/retry_streaming_succeeds_before_replay_finished.cc @@ -128,8 +128,6 @@ static void test_retry_streaming_succeeds_before_replay_finished( char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_throttled.cc b/test/core/end2end/tests/retry_throttled.cc index 91c60fa6a49..1ff6ddaf6ce 100644 --- a/test/core/end2end/tests/retry_throttled.cc +++ b/test/core/end2end/tests/retry_throttled.cc @@ -120,8 +120,6 @@ static void test_retry_throttled(grpc_end2end_test_config config) { char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast( diff --git a/test/core/end2end/tests/retry_too_many_attempts.cc b/test/core/end2end/tests/retry_too_many_attempts.cc index bdb1a67a8e4..15ec44f6980 100644 --- a/test/core/end2end/tests/retry_too_many_attempts.cc +++ b/test/core/end2end/tests/retry_too_many_attempts.cc @@ -121,8 +121,6 @@ static void test_retry_too_many_attempts(grpc_end2end_test_config config) { char* peer; grpc_arg args[] = { - grpc_channel_arg_integer_create( - const_cast(GRPC_ARG_ENABLE_RETRIES), 1), grpc_channel_arg_string_create( const_cast(GRPC_ARG_SERVICE_CONFIG), const_cast(