datasource: retry policy for remote data source (#9463)

Implement a retry policy for remote data sources.

Risk Level: Low
Testing: Unit test
Docs Changes: N/A
Release Notes: added
Fixes: #9438

Signed-off-by: Yan Xue <yxyan@google.com>

Mirrored from https://github.com/envoyproxy/envoy @ bd7c97858556c2851589d7fb73a25e99b8687df3
master-ci-test
data-plane-api(CircleCI) 5 years ago
parent 648c8dc4ea
commit e75ca13ea1
  1. 33
      envoy/api/v2/core/backoff.proto
  2. 17
      envoy/api/v2/core/base.proto
  3. 35
      envoy/config/core/v3/backoff.proto
  4. 19
      envoy/config/core/v3/base.proto

@ -0,0 +1,33 @@
syntax = "proto3";
package envoy.api.v2.core;
import "google/protobuf/duration.proto";
import "udpa/annotations/migrate.proto";
import "validate/validate.proto";
option java_package = "io.envoyproxy.envoy.api.v2.core";
option java_outer_classname = "BackoffProto";
option java_multiple_files = true;
option (udpa.annotations.file_migrate).move_to_package = "envoy.config.core.v3";
// [#protodoc-title: Backoff Strategy]
// Configuration defining a jittered exponential back off strategy.
message BackoffStrategy {
// The base interval to be used for the next back off computation. It should
// be greater than zero and less than or equal to :ref:`max_interval
// <envoy_api_field_core.BackoffStrategy.max_interval>`.
google.protobuf.Duration base_interval = 1 [(validate.rules).duration = {
required: true
gte {nanos: 1000000}
}];
// Specifies the maximum interval between retries. This parameter is optional,
// but must be greater than or equal to the :ref:`base_interval
// <envoy_api_field_core.BackoffStrategy.base_interval>` if set. The default
// is 10 times the :ref:`base_interval
// <envoy_api_field_core.BackoffStrategy.base_interval>`.
google.protobuf.Duration max_interval = 2 [(validate.rules).duration = {gt {}}];
}

@ -2,11 +2,13 @@ syntax = "proto3";
package envoy.api.v2.core; package envoy.api.v2.core;
import "envoy/api/v2/core/backoff.proto";
import "envoy/api/v2/core/http_uri.proto"; import "envoy/api/v2/core/http_uri.proto";
import "envoy/type/percent.proto"; import "envoy/type/percent.proto";
import "envoy/type/semantic_version.proto"; import "envoy/type/semantic_version.proto";
import "google/protobuf/any.proto"; import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/struct.proto"; import "google/protobuf/struct.proto";
import "google/protobuf/wrappers.proto"; import "google/protobuf/wrappers.proto";
@ -277,6 +279,18 @@ message DataSource {
} }
} }
// The message specifies the retry policy of remote data source when fetching fails.
message RetryPolicy {
// Specifies parameters that control :ref:`retry backoff strategy <envoy_api_msg_core.BackoffStrategy>`.
// This parameter is optional, in which case the default base interval is 1000 milliseconds. The
// default maximum interval is 10 times the base interval.
BackoffStrategy retry_back_off = 1;
// Specifies the allowed number of retries. This parameter is optional and
// defaults to 1.
google.protobuf.UInt32Value num_retries = 2;
}
// The message specifies how to fetch data from remote and how to verify it. // The message specifies how to fetch data from remote and how to verify it.
message RemoteDataSource { message RemoteDataSource {
// The HTTP URI to fetch the remote data. // The HTTP URI to fetch the remote data.
@ -284,6 +298,9 @@ message RemoteDataSource {
// SHA256 string for verifying data. // SHA256 string for verifying data.
string sha256 = 2 [(validate.rules).string = {min_bytes: 1}]; string sha256 = 2 [(validate.rules).string = {min_bytes: 1}];
// Retry policy for fetching remote data.
RetryPolicy retry_policy = 3;
} }
// Async data source which support async data fetch. // Async data source which support async data fetch.

@ -0,0 +1,35 @@
syntax = "proto3";
package envoy.config.core.v3;
import "google/protobuf/duration.proto";
import "udpa/annotations/versioning.proto";
import "validate/validate.proto";
option java_package = "io.envoyproxy.envoy.config.core.v3";
option java_outer_classname = "BackoffProto";
option java_multiple_files = true;
// [#protodoc-title: Backoff Strategy]
// Configuration defining a jittered exponential back off strategy.
message BackoffStrategy {
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.BackoffStrategy";
// The base interval to be used for the next back off computation. It should
// be greater than zero and less than or equal to :ref:`max_interval
// <envoy_api_field_config.core.v3.BackoffStrategy.max_interval>`.
google.protobuf.Duration base_interval = 1 [(validate.rules).duration = {
required: true
gte {nanos: 1000000}
}];
// Specifies the maximum interval between retries. This parameter is optional,
// but must be greater than or equal to the :ref:`base_interval
// <envoy_api_field_config.core.v3.BackoffStrategy.base_interval>` if set. The default
// is 10 times the :ref:`base_interval
// <envoy_api_field_config.core.v3.BackoffStrategy.base_interval>`.
google.protobuf.Duration max_interval = 2 [(validate.rules).duration = {gt {}}];
}

@ -2,11 +2,13 @@ syntax = "proto3";
package envoy.config.core.v3; package envoy.config.core.v3;
import "envoy/config/core/v3/backoff.proto";
import "envoy/config/core/v3/http_uri.proto"; import "envoy/config/core/v3/http_uri.proto";
import "envoy/type/v3/percent.proto"; import "envoy/type/v3/percent.proto";
import "envoy/type/v3/semantic_version.proto"; import "envoy/type/v3/semantic_version.proto";
import "google/protobuf/any.proto"; import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/struct.proto"; import "google/protobuf/struct.proto";
import "google/protobuf/wrappers.proto"; import "google/protobuf/wrappers.proto";
@ -299,6 +301,20 @@ message DataSource {
} }
} }
// The message specifies the retry policy of remote data source when fetching fails.
message RetryPolicy {
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.RetryPolicy";
// Specifies parameters that control :ref:`retry backoff strategy <envoy_api_msg_config.core.v3.BackoffStrategy>`.
// This parameter is optional, in which case the default base interval is 1000 milliseconds. The
// default maximum interval is 10 times the base interval.
BackoffStrategy retry_back_off = 1;
// Specifies the allowed number of retries. This parameter is optional and
// defaults to 1.
google.protobuf.UInt32Value num_retries = 2;
}
// The message specifies how to fetch data from remote and how to verify it. // The message specifies how to fetch data from remote and how to verify it.
message RemoteDataSource { message RemoteDataSource {
option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.RemoteDataSource"; option (udpa.annotations.versioning).previous_message_type = "envoy.api.v2.core.RemoteDataSource";
@ -308,6 +324,9 @@ message RemoteDataSource {
// SHA256 string for verifying data. // SHA256 string for verifying data.
string sha256 = 2 [(validate.rules).string = {min_bytes: 1}]; string sha256 = 2 [(validate.rules).string = {min_bytes: 1}];
// Retry policy for fetching remote data.
RetryPolicy retry_policy = 3;
} }
// Async data source which support async data fetch. // Async data source which support async data fetch.

Loading…
Cancel
Save