From 20036077bbbfcb34629c559f2014957192599a9c Mon Sep 17 00:00:00 2001 From: Russ Cam Date: Fri, 15 Mar 2019 18:21:45 +1000 Subject: [PATCH] Update by query API (#3597) (cherry picked from commit 04f09fb8ea4f69d0bd47265aa6510fe42ac23615) --- .../ApiGenerator/CodeConfiguration.cs | 1 - .../RequestParameters.Generated.cs | 7 ++ .../ElasticLowLevelClient.Generated.cs | 10 ++ .../IElasticLowLevelClient.Generated.cs | 8 ++ .../ListTasks/ListTasksResponse.cs | 7 ++ .../ElasticClient-UpdateByQueryRethrottle.cs | 62 ++++++++++ .../UpdateByQueryRethrottleRequest.cs | 9 ++ src/Nest/_Generated/_Descriptors.generated.cs | 17 +++ .../_Generated/_LowLevelDispatch.generated.cs | 22 ++++ src/Nest/_Generated/_Requests.generated.cs | 25 ++++ .../CodeStandards/NamingConventions.doc.cs | 3 +- .../UpdateByQueryRethrottleApiTests.cs | 109 ++++++++++++++++++ .../UpdateByQueryRethrottleUrlTests.cs | 19 +++ 13 files changed, 297 insertions(+), 2 deletions(-) create mode 100644 src/Nest/Document/Multiple/UpdateByQueryRethrottle/ElasticClient-UpdateByQueryRethrottle.cs create mode 100644 src/Nest/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleRequest.cs create mode 100644 src/Tests/Tests/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleApiTests.cs create mode 100644 src/Tests/Tests/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleUrlTests.cs diff --git a/src/CodeGeneration/ApiGenerator/CodeConfiguration.cs b/src/CodeGeneration/ApiGenerator/CodeConfiguration.cs index ce18abae5a5..c5cffb428c8 100644 --- a/src/CodeGeneration/ApiGenerator/CodeConfiguration.cs +++ b/src/CodeGeneration/ApiGenerator/CodeConfiguration.cs @@ -38,7 +38,6 @@ public static class CodeConfiguration "ml.find_file_structure.json", "monitoring.bulk.json", "delete_by_query_rethrottle.json", - "update_by_query_rethrottle.json", "security.delete_privileges.json", "security.get_privileges.json", diff --git a/src/Elasticsearch.Net/Domain/RequestParameters/RequestParameters.Generated.cs b/src/Elasticsearch.Net/Domain/RequestParameters/RequestParameters.Generated.cs index ca230deed28..7e6091732be 100644 --- a/src/Elasticsearch.Net/Domain/RequestParameters/RequestParameters.Generated.cs +++ b/src/Elasticsearch.Net/Domain/RequestParameters/RequestParameters.Generated.cs @@ -2213,6 +2213,13 @@ public class UpdateByQueryRequestParameters : RequestParametersThe number of slices this task should be divided into. Defaults to 1 meaning the task isn't sliced into subtasks. public long? Slices { get => Q("slices"); set => Q("slices", value); } } + ///Request options for UpdateByQueryRethrottle
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html
+ public class UpdateByQueryRethrottleRequestParameters : RequestParameters + { + public override HttpMethod DefaultHttpMethod => HttpMethod.POST; + ///The throttle to set on this request in floating sub-requests per second. -1 means set no throttle. + public long? RequestsPerSecond { get => Q("requests_per_second"); set => Q("requests_per_second", value); } + } ///Request options for CcrDeleteAutoFollowPattern
https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-delete-auto-follow-pattern.html
public class DeleteAutoFollowPatternRequestParameters : RequestParameters { diff --git a/src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs b/src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs index 0f83434bf39..21149fe9d95 100644 --- a/src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs +++ b/src/Elasticsearch.Net/ElasticLowLevelClient.Generated.cs @@ -2532,6 +2532,16 @@ public TResponse UpdateByQuery(string index, PostData body, UpdateByQ ///A func that allows you to describe the querystring parameters & request specific connection settings. public Task UpdateByQueryAsync(string index, PostData body, UpdateByQueryRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync(POST, Url($"{index.NotNull("index")}/_update_by_query"), ctx, body, _params(requestParameters)); + ///POST on /_update_by_query/{task_id}/_rethrottle https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html + ///The task id to rethrottle + ///A func that allows you to describe the querystring parameters & request specific connection settings. + public TResponse UpdateByQueryRethrottle(string task_id, UpdateByQueryRethrottleRequestParameters requestParameters = null) + where TResponse : class, IElasticsearchResponse, new() => this.DoRequest(POST, Url($"_update_by_query/{task_id.NotNull("task_id")}/_rethrottle"), null, _params(requestParameters)); + ///POST on /_update_by_query/{task_id}/_rethrottle https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html + ///The task id to rethrottle + ///A func that allows you to describe the querystring parameters & request specific connection settings. + public Task UpdateByQueryRethrottleAsync(string task_id, UpdateByQueryRethrottleRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) + where TResponse : class, IElasticsearchResponse, new() => this.DoRequestAsync(POST, Url($"_update_by_query/{task_id.NotNull("task_id")}/_rethrottle"), ctx, null, _params(requestParameters)); ///DELETE on /_ccr/auto_follow/{name} https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-delete-auto-follow-pattern.html ///The name of the auto follow pattern. ///A func that allows you to describe the querystring parameters & request specific connection settings. diff --git a/src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs b/src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs index acf4e5c6ca0..a1f8e072882 100644 --- a/src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs +++ b/src/Elasticsearch.Net/IElasticLowLevelClient.Generated.cs @@ -2034,6 +2034,14 @@ public partial interface IElasticLowLevelClient ///The search definition using the Query DSL ///A func that allows you to describe the querystring parameters & request specific connection settings. Task UpdateByQueryAsync(string index, PostData body, UpdateByQueryRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new(); + ///POST on /_update_by_query/{task_id}/_rethrottle https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html + ///The task id to rethrottle + ///A func that allows you to describe the querystring parameters & request specific connection settings. + TResponse UpdateByQueryRethrottle(string task_id, UpdateByQueryRethrottleRequestParameters requestParameters = null) where TResponse : class, IElasticsearchResponse, new(); + ///POST on /_update_by_query/{task_id}/_rethrottle https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html + ///The task id to rethrottle + ///A func that allows you to describe the querystring parameters & request specific connection settings. + Task UpdateByQueryRethrottleAsync(string task_id, UpdateByQueryRethrottleRequestParameters requestParameters = null, CancellationToken ctx = default(CancellationToken)) where TResponse : class, IElasticsearchResponse, new(); ///DELETE on /_ccr/auto_follow/{name} https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-delete-auto-follow-pattern.html ///The name of the auto follow pattern. ///A func that allows you to describe the querystring parameters & request specific connection settings. diff --git a/src/Nest/Cluster/TaskManagement/ListTasks/ListTasksResponse.cs b/src/Nest/Cluster/TaskManagement/ListTasks/ListTasksResponse.cs index fbd89e73eda..10f7532f89a 100644 --- a/src/Nest/Cluster/TaskManagement/ListTasks/ListTasksResponse.cs +++ b/src/Nest/Cluster/TaskManagement/ListTasks/ListTasksResponse.cs @@ -24,6 +24,10 @@ public class ListTasksResponse : ResponseBase, IListTasksResponse public class TaskExecutingNode { + [DataMember(Name = "attributes")] + [JsonFormatter(typeof(VerbatimInterfaceReadOnlyDictionaryKeysFormatter))] + public IReadOnlyDictionary Attributes { get; internal set; } = EmptyReadOnly.Dictionary; + [DataMember(Name = "host")] public string Host { get; internal set; } @@ -33,6 +37,9 @@ public class TaskExecutingNode [DataMember(Name = "name")] public string Name { get; internal set; } + [DataMember(Name = "roles")] + public IEnumerable Roles { get; internal set; } + [DataMember(Name = "tasks")] public IReadOnlyDictionary Tasks { get; internal set; } = EmptyReadOnly.Dictionary; diff --git a/src/Nest/Document/Multiple/UpdateByQueryRethrottle/ElasticClient-UpdateByQueryRethrottle.cs b/src/Nest/Document/Multiple/UpdateByQueryRethrottle/ElasticClient-UpdateByQueryRethrottle.cs new file mode 100644 index 00000000000..08e0b2a9462 --- /dev/null +++ b/src/Nest/Document/Multiple/UpdateByQueryRethrottle/ElasticClient-UpdateByQueryRethrottle.cs @@ -0,0 +1,62 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Elasticsearch.Net; + +namespace Nest +{ + public partial interface IElasticClient + { + /// + /// Rethrottles a running update by query. Rethrottling that speeds up the query takes effect immediately + /// but rethrotting that slows down the query will take effect after completing the current batch. This prevents scroll timeouts. + /// + /// https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html#docs-update-by-query-rethrottle + /// + IListTasksResponse UpdateByQueryRethrottle(TaskId taskId, Func selector = null); + + /// + IListTasksResponse UpdateByQueryRethrottle(IUpdateByQueryRethrottleRequest request); + + /// + Task UpdateByQueryRethrottleAsync(TaskId taskId, + Func selector = null, + CancellationToken cancellationToken = default(CancellationToken) + ); + + /// + Task UpdateByQueryRethrottleAsync(IUpdateByQueryRethrottleRequest request, + CancellationToken cancellationToken = default(CancellationToken) + ); + } + + public partial class ElasticClient + { + /// + public IListTasksResponse UpdateByQueryRethrottle(TaskId taskId, Func selector = null) => + UpdateByQueryRethrottle(selector.InvokeOrDefault(new UpdateByQueryRethrottleDescriptor(taskId))); + + /// + public IListTasksResponse UpdateByQueryRethrottle(IUpdateByQueryRethrottleRequest request) => + Dispatcher.Dispatch( + request, + (p, d) => LowLevelDispatch.UpdateByQueryRethrottleDispatch(p) + ); + + /// + public Task UpdateByQueryRethrottleAsync(TaskId taskId, Func selector = null, + CancellationToken cancellationToken = default(CancellationToken) + ) => + UpdateByQueryRethrottleAsync(selector.InvokeOrDefault(new UpdateByQueryRethrottleDescriptor(taskId)), cancellationToken); + + /// + public Task UpdateByQueryRethrottleAsync(IUpdateByQueryRethrottleRequest request, + CancellationToken cancellationToken = default(CancellationToken) + ) => + Dispatcher.DispatchAsync( + request, + cancellationToken, + (p, d, c) => LowLevelDispatch.UpdateByQueryRethrottleDispatchAsync(p, c) + ); + } +} diff --git a/src/Nest/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleRequest.cs b/src/Nest/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleRequest.cs new file mode 100644 index 00000000000..d541070eeb7 --- /dev/null +++ b/src/Nest/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleRequest.cs @@ -0,0 +1,9 @@ +namespace Nest +{ + [MapsApi("update_by_query_rethrottle")] + public partial interface IUpdateByQueryRethrottleRequest { } + + public partial class UpdateByQueryRethrottleRequest : IUpdateByQueryRethrottleRequest { } + + public partial class UpdateByQueryRethrottleDescriptor : IUpdateByQueryRethrottleRequest { } +} diff --git a/src/Nest/_Generated/_Descriptors.generated.cs b/src/Nest/_Generated/_Descriptors.generated.cs index 72b278944c9..0dd7a439fd4 100644 --- a/src/Nest/_Generated/_Descriptors.generated.cs +++ b/src/Nest/_Generated/_Descriptors.generated.cs @@ -4024,6 +4024,23 @@ public UpdateByQueryDescriptor() : this(typeof(T)){} ///The number of slices this task should be divided into. Defaults to 1 meaning the task isn't sliced into subtasks. public UpdateByQueryDescriptor Slices(long? slices) => Qs("slices", slices); } + ///descriptor for UpdateByQueryRethrottle
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html
+ public partial class UpdateByQueryRethrottleDescriptor : RequestDescriptorBase, IUpdateByQueryRethrottleRequest + { + ////_update_by_query/{task_id}/_rethrottle + ///this parameter is required + public UpdateByQueryRethrottleDescriptor(TaskId task_id) : base(r => r.Required("task_id", task_id)){} + ///Used for serialization purposes, making sure we have a parameterless constructor + [SerializationConstructor] + internal UpdateByQueryRethrottleDescriptor() : base(){} + // values part of the url path + TaskId IUpdateByQueryRethrottleRequest.TaskId => Self.RouteValues.Get("task_id"); + + // Request parameters + + ///The throttle to set on this request in floating sub-requests per second. -1 means set no throttle. + public UpdateByQueryRethrottleDescriptor RequestsPerSecond(long? requestsPerSecond) => Qs("requests_per_second", requestsPerSecond); + } ///descriptor for CcrDeleteAutoFollowPattern
https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-delete-auto-follow-pattern.html
public partial class DeleteAutoFollowPatternDescriptor : RequestDescriptorBase, IDeleteAutoFollowPatternRequest { diff --git a/src/Nest/_Generated/_LowLevelDispatch.generated.cs b/src/Nest/_Generated/_LowLevelDispatch.generated.cs index f91ed87898e..4a14893c8b3 100644 --- a/src/Nest/_Generated/_LowLevelDispatch.generated.cs +++ b/src/Nest/_Generated/_LowLevelDispatch.generated.cs @@ -2866,6 +2866,28 @@ internal partial class LowLevelDispatch throw InvalidDispatch("UpdateByQuery", p, new [] { POST }, "/{index}/_update_by_query"); } + internal TResponse UpdateByQueryRethrottleDispatch(IRequest p) where TResponse : class, IElasticsearchResponse, new() + { + switch(p.HttpMethod) + { + case POST: + if (AllSetNoFallback(p.RouteValues.TaskId)) return _lowLevel.UpdateByQueryRethrottle(p.RouteValues.TaskId,p.RequestParameters); + break; + } + throw InvalidDispatch("UpdateByQueryRethrottle", p, new [] { POST }, "/_update_by_query/{task_id}/_rethrottle"); + } + + internal Task UpdateByQueryRethrottleDispatchAsync(IRequest p, CancellationToken ct) where TResponse : class, IElasticsearchResponse, new() + { + switch(p.HttpMethod) + { + case POST: + if (AllSetNoFallback(p.RouteValues.TaskId)) return _lowLevel.UpdateByQueryRethrottleAsync(p.RouteValues.TaskId,p.RequestParameters,ct); + break; + } + throw InvalidDispatch("UpdateByQueryRethrottle", p, new [] { POST }, "/_update_by_query/{task_id}/_rethrottle"); + } + internal TResponse CcrDeleteAutoFollowPatternDispatch(IRequest p) where TResponse : class, IElasticsearchResponse, new() { switch(p.HttpMethod) diff --git a/src/Nest/_Generated/_Requests.generated.cs b/src/Nest/_Generated/_Requests.generated.cs index ca5e5da28dc..aeab60a4d12 100644 --- a/src/Nest/_Generated/_Requests.generated.cs +++ b/src/Nest/_Generated/_Requests.generated.cs @@ -6609,6 +6609,31 @@ public UpdateByQueryRequest(Indices index) : base(index){} public UpdateByQueryRequest() : base(typeof(T)){} } + [InterfaceDataContract] + public partial interface IUpdateByQueryRethrottleRequest : IRequest + { + [IgnoreDataMember] + TaskId TaskId { get; } + } + + ///Request parameters for UpdateByQueryRethrottle
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html
+ public partial class UpdateByQueryRethrottleRequest : PlainRequestBase, IUpdateByQueryRethrottleRequest + { + protected IUpdateByQueryRethrottleRequest Self => this; + ////_update_by_query/{task_id}/_rethrottle + ///this parameter is required + public UpdateByQueryRethrottleRequest(TaskId task_id) : base(r => r.Required("task_id", task_id)){} + ///Used for serialization purposes, making sure we have a parameterless constructor + [SerializationConstructor] + internal UpdateByQueryRethrottleRequest() : base(){} + // values part of the url path + [IgnoreDataMember] + TaskId IUpdateByQueryRethrottleRequest.TaskId => Self.RouteValues.Get("task_id"); + + // Request parameters + ///The throttle to set on this request in floating sub-requests per second. -1 means set no throttle. + public long? RequestsPerSecond { get => Q("requests_per_second"); set => Q("requests_per_second", value); } + } [InterfaceDataContract] public partial interface IUpdateDatafeedRequest : IRequest { diff --git a/src/Tests/Tests/CodeStandards/NamingConventions.doc.cs b/src/Tests/Tests/CodeStandards/NamingConventions.doc.cs index 88f75498208..61901c167b3 100644 --- a/src/Tests/Tests/CodeStandards/NamingConventions.doc.cs +++ b/src/Tests/Tests/CodeStandards/NamingConventions.doc.cs @@ -125,7 +125,8 @@ public void ParityBetweenRequestsAndResponses() typeof(IndicesShardStoresRequest), typeof(RenderSearchTemplateRequest), typeof(MultiSearchTemplateRequest), - typeof(CreateRequest<>) + typeof(CreateRequest<>), + typeof(UpdateByQueryRethrottleRequest) // uses ListTasksResponse }; var types = typeof(IRequest).Assembly.GetTypes(); diff --git a/src/Tests/Tests/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleApiTests.cs b/src/Tests/Tests/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleApiTests.cs new file mode 100644 index 00000000000..02fa225cd80 --- /dev/null +++ b/src/Tests/Tests/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleApiTests.cs @@ -0,0 +1,109 @@ +using System; +using System.Linq; +using Elasticsearch.Net; +using FluentAssertions; +using Nest; +using Tests.Document.Multiple.Reindex; +using Tests.Domain; +using Tests.Framework; +using Tests.Framework.Integration; +using Tests.Core.Extensions; + +namespace Tests.Document.Multiple.UpdateByQueryRethrottle +{ + public class UpdateByQueryRethrottleApiTests + : ApiIntegrationTestBase + { + protected const string TaskIdKey = "taskId"; + + public UpdateByQueryRethrottleApiTests(ReindexCluster cluster, EndpointUsage usage) : base(cluster, usage) { } + + protected override bool ExpectIsValid => true; + protected override object ExpectJson => null; + protected override int ExpectStatusCode => 200; + + protected override Func Fluent => d => d + .RequestsPerSecond(-1); + + protected override HttpMethod HttpMethod => HttpMethod.POST; + + protected override UpdateByQueryRethrottleRequest Initializer => new UpdateByQueryRethrottleRequest(TaskId) + { + RequestsPerSecond = -1 + }; + + protected override bool SupportsDeserialization => false; + protected TaskId TaskId => RanIntegrationSetup ? ExtendedValue(TaskIdKey) : "foo:1"; + + protected override string UrlPath => $"/_update_by_query/{TaskId.NodeId}%3A{TaskId.TaskNumber}/_rethrottle?requests_per_second=-1"; + + protected override UpdateByQueryRethrottleDescriptor NewDescriptor() => new UpdateByQueryRethrottleDescriptor(TaskId); + + protected override void IntegrationSetup(IElasticClient client, CallUniqueValues values) + { + foreach (var callUniqueValue in values) + { + client.IndexMany(Project.Projects, callUniqueValue.Value); + client.Refresh(callUniqueValue.Value); + } + } + + protected override LazyResponses ClientUsage() => Calls( + (client, f) => client.UpdateByQueryRethrottle(TaskId, f), + (client, f) => client.UpdateByQueryRethrottleAsync(TaskId, f), + (client, r) => client.UpdateByQueryRethrottle(r), + (client, r) => client.UpdateByQueryRethrottleAsync(r) + ); + + protected override void OnBeforeCall(IElasticClient client) + { + client.IndexMany(Project.Projects, CallIsolatedValue); + client.Refresh(CallIsolatedValue); + + var updateByQuery = client.UpdateByQuery(u => u + .Index(CallIsolatedValue) + .Conflicts(Conflicts.Proceed) + .Query(q => q.MatchAll()) + .Script(s => s.Source("ctx._source.numberOfCommits+=10")) + .Refresh() + .RequestsPerSecond(1) + .WaitForCompletion(false) + ); + + updateByQuery.ShouldBeValid(); + ExtendedValue(TaskIdKey, updateByQuery.Task); + } + + protected override void ExpectResponse(IListTasksResponse response) + { + response.ShouldBeValid(); + + response.Nodes.Should().NotBeEmpty().And.HaveCount(1); + var node = response.Nodes.First().Value; + + node.Name.Should().NotBeNullOrEmpty(); + node.TransportAddress.Should().NotBeNullOrEmpty(); + node.Host.Should().NotBeNullOrEmpty(); + node.Ip.Should().NotBeNullOrEmpty(); + node.Roles.Should().NotBeEmpty(); + node.Attributes.Should().NotBeEmpty(); + + node.Tasks.Should().NotBeEmpty().And.HaveCount(1); + node.Tasks.First().Key.Should().Be(TaskId); + + var task = node.Tasks.First().Value; + + task.Node.Should().NotBeNullOrEmpty().And.Be(TaskId.NodeId); + task.Id.Should().Be(TaskId.TaskNumber); + task.Type.Should().NotBeNullOrEmpty(); + task.Action.Should().NotBeNullOrEmpty(); + + task.Status.RequestsPerSecond.Should().Be(-1); + + task.StartTimeInMilliseconds.Should().BeGreaterThan(0); + task.RunningTimeInNanoSeconds.Should().BeGreaterThan(0); + task.Cancellable.Should().BeTrue(); + } + } +} diff --git a/src/Tests/Tests/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleUrlTests.cs b/src/Tests/Tests/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleUrlTests.cs new file mode 100644 index 00000000000..7673d541c8d --- /dev/null +++ b/src/Tests/Tests/Document/Multiple/UpdateByQueryRethrottle/UpdateByQueryRethrottleUrlTests.cs @@ -0,0 +1,19 @@ +using System.Threading.Tasks; +using Elastic.Xunit.XunitPlumbing; +using Nest; +using Tests.Framework; + +namespace Tests.Document.Multiple.UpdateByQueryRethrottle +{ + public class UpdateByQueryRethrottleUrlTests : UrlTestsBase + { + private readonly TaskId _taskId = "rhtoNesNR4aXVIY2bRR4GQ:13056"; + + [U] public override async Task Urls() => + await UrlTester.POST($"/_update_by_query/{UrlTester.EscapeUriString(_taskId.ToString())}/_rethrottle") + .Fluent(c => c.UpdateByQueryRethrottle(_taskId)) + .Request(c => c.UpdateByQueryRethrottle(new UpdateByQueryRethrottleRequest(_taskId))) + .FluentAsync(c => c.UpdateByQueryRethrottleAsync(_taskId)) + .RequestAsync(c => c.UpdateByQueryRethrottleAsync(new UpdateByQueryRethrottleRequest(_taskId))); + } +}