Remove retry options from state apis. (#361)

* Removing retry options for state apis.

* getting latest proto from dapr/dapr
This commit is contained in:
Aman Bhardwaj 2020-08-04 14:32:16 -07:00 committed by GitHub
parent fdf17b7dbb
commit b6329539bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 37 additions and 212 deletions

View File

@ -541,29 +541,6 @@ namespace Dapr.Client
stateRequestOptions.Concurrency = GetStateConcurrencyForConcurrencyMode(stateOptions.Concurrency.Value);
}
if (stateOptions.RetryOptions == null)
{
return stateRequestOptions;
}
var retryPolicy = new Autogenerated.StateRetryPolicy();
if (stateOptions.RetryOptions.RetryMode != null)
{
retryPolicy.Pattern = GetRetryPatternForRetryMode(stateOptions.RetryOptions.RetryMode.Value);
}
if (stateOptions.RetryOptions.RetryInterval != null)
{
retryPolicy.Interval = Duration.FromTimeSpan(stateOptions.RetryOptions.RetryInterval.Value);
}
if (stateOptions.RetryOptions.RetryThreshold != null)
{
retryPolicy.Threshold = stateOptions.RetryOptions.RetryThreshold.Value;
}
stateRequestOptions.RetryPolicy = retryPolicy;
return stateRequestOptions;
}
@ -602,16 +579,6 @@ namespace Dapr.Client
_ => throw new ArgumentException($"{concurrencyMode} Concurrency Mode is not supported.")
};
}
private static Autogenerated.StateRetryPolicy.Types.RetryPattern GetRetryPatternForRetryMode(RetryMode retryMode)
{
return retryMode switch
{
RetryMode.Exponential => Autogenerated.StateRetryPolicy.Types.RetryPattern.RetryExponential,
RetryMode.Linear => Autogenerated.StateRetryPolicy.Types.RetryPattern.RetryLinear,
_ => throw new ArgumentException($"{retryMode} Retry Mode is not supported.")
};
}
#endregion Helper Methods
}
}

View File

@ -8,7 +8,6 @@ syntax = "proto3";
package dapr.proto.common.v1;
import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";
option csharp_namespace = "Dapr.Client.Autogen.Grpc.v1";
option java_outer_classname = "CommonProtos";
@ -95,11 +94,11 @@ message StateItem {
// The metadata which will be passed to state store component.
map<string,string> metadata = 4;
// Options for concurrency, consistency, and retry_policy to save the state.
// Options for concurrency and consistency to save the state.
StateOptions options = 5;
}
// StateOptions configures concurrency, consistency, and retry policy for state operations
// StateOptions configures concurrency and consistency for state operations
message StateOptions {
// Enum describing the supported concurrency for state.
enum StateConcurrency {
@ -117,24 +116,4 @@ message StateOptions {
StateConcurrency concurrency = 1;
StateConsistency consistency = 2;
StateRetryPolicy retry_policy = 3;
}
// StateRetryPolicy represents retry policy to set and delete state operations.
message StateRetryPolicy {
// Enum describing the support retry pattern
enum RetryPattern {
RETRY_UNSPECIFIED = 0;
RETRY_LINEAR = 1;
RETRY_EXPONENTIAL = 2;
}
// Maximum number of retries.
int32 threshold = 1;
// Retry pattern.
RetryPattern pattern = 2;
// Initial delay between retries.
google.protobuf.Duration interval = 3;
}

View File

@ -26,7 +26,7 @@ service AppCallback {
rpc ListTopicSubscriptions(google.protobuf.Empty) returns (ListTopicSubscriptionsResponse) {}
// Subscribes events from Pubsub
rpc OnTopicEvent(TopicEventRequest) returns (google.protobuf.Empty) {}
rpc OnTopicEvent(TopicEventRequest) returns (TopicEventResponse) {}
// Lists all input bindings subscribed by this app.
rpc ListInputBindings(google.protobuf.Empty) returns (ListInputBindingsResponse) {}
@ -41,9 +41,9 @@ service AppCallback {
// TopicEventRequest message is compatiable with CloudEvent spec v1.0
// https://github.com/cloudevents/spec/blob/v1.0/spec.md
message TopicEventRequest {
// id identifies the event. Producers MUST ensure that source + id
// id identifies the event. Producers MUST ensure that source + id
// is unique for each distinct event. If a duplicate event is re-sent
// (e.g. due to a network error) it MAY have the same id.
// (e.g. due to a network error) it MAY have the same id.
string id = 1;
// source identifies the context in which an event happened.
@ -53,10 +53,10 @@ message TopicEventRequest {
// the data encoded in the URI is defined by the event producer.
string source = 2;
// The type of event related to the originating occurrence.
// The type of event related to the originating occurrence.
string type = 3;
// The version of the CloudEvents specification.
// The version of the CloudEvents specification.
string spec_version = 4;
// The content type of data value.
@ -69,6 +69,10 @@ message TopicEventRequest {
string topic = 6;
}
// TopicEventResponse is response from app on published message
message TopicEventResponse {
}
// BindingEventRequest represents input bindings event.
message BindingEventRequest {
// Requried. The name of the input binding component.
@ -90,7 +94,7 @@ message BindingEventResponse {
// The state key values which will be stored in store_name.
repeated common.v1.StateItem states = 2;
// BindingEventConcurrency is the kind of concurrency
// BindingEventConcurrency is the kind of concurrency
enum BindingEventConcurrency {
// SEQUENTIAL sends data to output bindings specified in "to" sequentially.
SEQUENTIAL = 0;
@ -128,4 +132,4 @@ message TopicSubscription {
message ListInputBindingsResponse {
// The list of input bindings.
repeated string bindings = 1;
}
}

View File

@ -1,23 +0,0 @@
// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// ------------------------------------------------------------
namespace Dapr.Client
{
/// <summary>
/// Represents the delay between retries. See https://github.com/dapr/docs/blob/master/reference/api/state.md#retry-policy
/// </summary>
public enum RetryMode
{
/// <summary>
/// The delay between retries is constant.
/// </summary>
Linear,
/// <summary>
/// The delay between retries doubles each time.
/// </summary>
Exponential,
}
}

View File

@ -1,36 +0,0 @@
// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// ------------------------------------------------------------
namespace Dapr.Client
{
using System;
using System.Collections.Generic;
using System.Text;
/// <summary>
/// Operation retry options when perfroming operations with Dapr.
/// </summary>
public class RetryOptions
{
/// <summary>
/// Initial delay between retries, in milliseconds.
/// </summary>
/// <remarks>
/// The interval remains constant for <see cref="RetryMode.Linear"/>.
/// The interval is doubled after each retry for <see cref="RetryMode.Exponential"/>. So, for exponential pattern, the delay after attempt n will be interval*2^(n-1).
/// </remarks>
public TimeSpan? RetryInterval { get; set; }
/// <summary>
/// Retry pattern, can be either linear or exponential.
/// </summary>
public RetryMode? RetryMode { get; set; }
/// <summary>
/// Maximum number of retries.
/// </summary>
public int? RetryThreshold { get; set; }
}
}

View File

@ -23,10 +23,5 @@ namespace Dapr.Client
/// Concurrency mode for state operations with Dapr.
/// </summary>
public ConcurrencyMode? Concurrency { get; set; }
/// <summary>
/// Retry options when perfroming operations with Dapr.
/// </summary>
public RetryOptions RetryOptions {get; set;}
}
}

View File

@ -17,7 +17,6 @@ namespace Dapr.Client.Test
using System.Collections.Generic;
using StateConsistency = Dapr.Client.Autogen.Grpc.v1.StateOptions.Types.StateConsistency;
using StateConcurrency = Dapr.Client.Autogen.Grpc.v1.StateOptions.Types.StateConcurrency;
using RetryPattern = Dapr.Client.Autogen.Grpc.v1.StateRetryPolicy.Types.RetryPattern;
using Google.Protobuf;
public class StateApiTest
@ -352,21 +351,15 @@ namespace Dapr.Client.Test
}
[Theory]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, RetryMode.Exponential, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, RetryMode.Linear, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, RetryMode.Exponential, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, RetryMode.Linear, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, RetryMode.Exponential, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, RetryMode.Linear, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, RetryMode.Exponential, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, RetryMode.Linear, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite)]
public async Task SaveStateAsync_ValidateOptions(
ConsistencyMode consistencyMode,
ConcurrencyMode concurrencyMode,
RetryMode retryMode,
StateConsistency expectedConsistency,
StateConcurrency expectedConcurrency,
RetryPattern expectedRetryMode)
StateConcurrency expectedConcurrency)
{
// Configure Client
var httpClient = new TestHttpClient();
@ -378,13 +371,7 @@ namespace Dapr.Client.Test
var stateOptions = new StateOptions
{
Concurrency = concurrencyMode,
Consistency = consistencyMode,
RetryOptions = new RetryOptions
{
RetryInterval = TimeSpan.FromSeconds(5),
RetryMode = retryMode,
RetryThreshold = 10
}
Consistency = consistencyMode
};
var metadata = new Dictionary<string, string>();
@ -406,9 +393,6 @@ namespace Dapr.Client.Test
state.Metadata["key2"].Should().Be("value2");
state.Options.Concurrency.Should().Be(expectedConcurrency);
state.Options.Consistency.Should().Be(expectedConsistency);
state.Options.RetryPolicy.Pattern.Should().Be(expectedRetryMode);
state.Options.RetryPolicy.Threshold.Should().Be(10);
state.Options.RetryPolicy.Interval.Seconds.Should().Be(5);
var stateJson = state.Value.ToStringUtf8();
var stateFromRequest = JsonSerializer.Deserialize<Widget>(stateJson);
@ -417,21 +401,15 @@ namespace Dapr.Client.Test
}
[Theory]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, RetryMode.Exponential, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, RetryMode.Linear, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, RetryMode.Exponential, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, RetryMode.Linear, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, RetryMode.Exponential, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, RetryMode.Linear, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, RetryMode.Exponential, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, RetryMode.Linear, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite)]
public async Task TrySaveStateAsync_ValidateOptions(
ConsistencyMode consistencyMode,
ConcurrencyMode concurrencyMode,
RetryMode retryMode,
StateConsistency expectedConsistency,
StateConcurrency expectedConcurrency,
RetryPattern expectedRetryMode)
StateConcurrency expectedConcurrency)
{
// Configure Client
var httpClient = new TestHttpClient();
@ -443,13 +421,7 @@ namespace Dapr.Client.Test
var stateOptions = new StateOptions
{
Concurrency = concurrencyMode,
Consistency = consistencyMode,
RetryOptions = new RetryOptions
{
RetryInterval = TimeSpan.FromSeconds(5),
RetryMode = retryMode,
RetryThreshold = 10
}
Consistency = consistencyMode
};
var metadata = new Dictionary<string, string>();
@ -472,9 +444,6 @@ namespace Dapr.Client.Test
state.Metadata["key2"].Should().Be("value2");
state.Options.Concurrency.Should().Be(expectedConcurrency);
state.Options.Consistency.Should().Be(expectedConsistency);
state.Options.RetryPolicy.Pattern.Should().Be(expectedRetryMode);
state.Options.RetryPolicy.Threshold.Should().Be(10);
state.Options.RetryPolicy.Interval.Seconds.Should().Be(5);
var stateJson = state.Value.ToStringUtf8();
var stateFromRequest = JsonSerializer.Deserialize<Widget>(stateJson);
@ -483,21 +452,15 @@ namespace Dapr.Client.Test
}
[Theory]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, RetryMode.Exponential, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, RetryMode.Linear, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, RetryMode.Exponential, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, RetryMode.Linear, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, RetryMode.Exponential, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, RetryMode.Linear, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, RetryMode.Exponential, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, RetryMode.Linear, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite)]
public async Task DeleteStateAsync_ValidateOptions(
ConsistencyMode consistencyMode,
ConcurrencyMode concurrencyMode,
RetryMode retryMode,
StateConsistency expectedConsistency,
StateConcurrency expectedConcurrency,
RetryPattern expectedRetryMode)
StateConcurrency expectedConcurrency)
{
// Configure Client
var httpClient = new TestHttpClient();
@ -508,13 +471,7 @@ namespace Dapr.Client.Test
var stateOptions = new StateOptions
{
Concurrency = concurrencyMode,
Consistency = consistencyMode,
RetryOptions = new RetryOptions
{
RetryInterval = TimeSpan.FromSeconds(5),
RetryMode = retryMode,
RetryThreshold = 10
}
Consistency = consistencyMode
};
var task = daprClient.DeleteStateAsync("testStore", "test", stateOptions);
@ -526,27 +483,18 @@ namespace Dapr.Client.Test
request.Key.Should().Be("test");
request.Options.Concurrency.Should().Be(expectedConcurrency);
request.Options.Consistency.Should().Be(expectedConsistency);
request.Options.RetryPolicy.Pattern.Should().Be(expectedRetryMode);
request.Options.RetryPolicy.Threshold.Should().Be(10);
request.Options.RetryPolicy.Interval.Seconds.Should().Be(5);
}
[Theory]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, RetryMode.Exponential, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, RetryMode.Linear, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, RetryMode.Exponential, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, RetryMode.Linear, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, RetryMode.Exponential, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, RetryMode.Linear, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, RetryMode.Exponential, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryExponential)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, RetryMode.Linear, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite, RetryPattern.RetryLinear)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.FirstWrite, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyFirstWrite)]
[InlineData(ConsistencyMode.Eventual, ConcurrencyMode.LastWrite, StateConsistency.ConsistencyEventual, StateConcurrency.ConcurrencyLastWrite)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.FirstWrite, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyFirstWrite)]
[InlineData(ConsistencyMode.Strong, ConcurrencyMode.LastWrite, StateConsistency.ConsistencyStrong, StateConcurrency.ConcurrencyLastWrite)]
public async Task TryDeleteStateAsync_ValidateOptions(
ConsistencyMode consistencyMode,
ConcurrencyMode concurrencyMode,
RetryMode retryMode,
StateConsistency expectedConsistency,
StateConcurrency expectedConcurrency,
RetryPattern expectedRetryMode)
StateConcurrency expectedConcurrency)
{
// Configure Client
var httpClient = new TestHttpClient();
@ -557,13 +505,7 @@ namespace Dapr.Client.Test
var stateOptions = new StateOptions
{
Concurrency = concurrencyMode,
Consistency = consistencyMode,
RetryOptions = new RetryOptions
{
RetryInterval = TimeSpan.FromSeconds(5),
RetryMode = retryMode,
RetryThreshold = 10
}
Consistency = consistencyMode
};
var task = daprClient.TryDeleteStateAsync("testStore", "test", "Test_Etag", stateOptions);
@ -576,9 +518,6 @@ namespace Dapr.Client.Test
request.Etag.Should().Be("Test_Etag");
request.Options.Concurrency.Should().Be(expectedConcurrency);
request.Options.Consistency.Should().Be(expectedConsistency);
request.Options.RetryPolicy.Pattern.Should().Be(expectedRetryMode);
request.Options.RetryPolicy.Threshold.Should().Be(10);
request.Options.RetryPolicy.Interval.Seconds.Should().Be(5);
}
private async void SendResponseWithState<T>(T state, TestHttpClient.Entry entry, string etag = null)