Skip to content

Commit feaca41

Browse files
committed
Modify SLM execute lifecycle to use POST method as opposed to PUT (#4246)
1 parent a468eaa commit feaca41

File tree

6 files changed

+32
-10
lines changed

6 files changed

+32
-10
lines changed

src/CodeGeneration/ApiGenerator/Generator/ApiEndpointFactory.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,21 @@ private static void PatchOfficialSpec(JObject original, string jsonFile)
9494

9595
if (pathsOverride != null) original.SelectToken("*.url.paths").Replace(pathsOverride);
9696

97+
var methodsOverride = patchedJson.SelectToken("*.methods");
98+
if (methodsOverride != null)
99+
{
100+
original.SelectToken("*.methods").Replace(methodsOverride);
101+
}
102+
103+
var paramsOverride = patchedJson.SelectToken("*.params");
104+
var originalParams = original.SelectToken("*.url.params") as JObject;
105+
originalParams?.Merge(paramsOverride, new JsonMergeSettings
106+
{
107+
MergeArrayHandling = MergeArrayHandling.Union
108+
});
109+
110+
if (paramsOverride != null) originalParams?.Replace(originalParams);
111+
97112
void ReplaceOptions(string path)
98113
{
99114
var optionsOverrides = patchedJson.SelectToken(path);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"slm.execute_lifecycle": {
3+
"methods": [
4+
"POST", "PUT"
5+
]
6+
}
7+
}

src/Elasticsearch.Net/Api/RequestParameters/RequestParameters.SnapshotLifecycleManagement.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class DeleteSnapshotLifecycleRequestParameters : RequestParameters<Delete
3434
///<summary>Request options for ExecuteSnapshotLifecycle <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</para></summary>
3535
public class ExecuteSnapshotLifecycleRequestParameters : RequestParameters<ExecuteSnapshotLifecycleRequestParameters>
3636
{
37-
public override HttpMethod DefaultHttpMethod => HttpMethod.PUT;
37+
public override HttpMethod DefaultHttpMethod => HttpMethod.POST;
3838
public override bool SupportsBody => false;
3939
}
4040

src/Elasticsearch.Net/ElasticLowLevelClient.SnapshotLifecycleManagement.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,17 @@ public TResponse DeleteSnapshotLifecycle<TResponse>(string policyId, DeleteSnaps
5454
[MapsApi("slm.delete_lifecycle", "policy_id")]
5555
public Task<TResponse> DeleteSnapshotLifecycleAsync<TResponse>(string policyId, DeleteSnapshotLifecycleRequestParameters requestParameters = null, CancellationToken ctx = default)
5656
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(DELETE, Url($"_slm/policy/{policyId:policyId}"), ctx, null, RequestParams(requestParameters));
57-
///<summary>PUT on /_slm/policy/{policy_id}/_execute <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</para></summary>
57+
///<summary>POST on /_slm/policy/{policy_id}/_execute <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</para></summary>
5858
///<param name = "policyId">The id of the snapshot lifecycle policy to be executed</param>
5959
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
6060
public TResponse ExecuteSnapshotLifecycle<TResponse>(string policyId, ExecuteSnapshotLifecycleRequestParameters requestParameters = null)
61-
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(PUT, Url($"_slm/policy/{policyId:policyId}/_execute"), null, RequestParams(requestParameters));
62-
///<summary>PUT on /_slm/policy/{policy_id}/_execute <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</para></summary>
61+
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(POST, Url($"_slm/policy/{policyId:policyId}/_execute"), null, RequestParams(requestParameters));
62+
///<summary>POST on /_slm/policy/{policy_id}/_execute <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</para></summary>
6363
///<param name = "policyId">The id of the snapshot lifecycle policy to be executed</param>
6464
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
6565
[MapsApi("slm.execute_lifecycle", "policy_id")]
6666
public Task<TResponse> ExecuteSnapshotLifecycleAsync<TResponse>(string policyId, ExecuteSnapshotLifecycleRequestParameters requestParameters = null, CancellationToken ctx = default)
67-
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(PUT, Url($"_slm/policy/{policyId:policyId}/_execute"), ctx, null, RequestParams(requestParameters));
67+
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(POST, Url($"_slm/policy/{policyId:policyId}/_execute"), ctx, null, RequestParams(requestParameters));
6868
///<summary>GET on /_slm/policy/{policy_id} <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-get.html</para></summary>
6969
///<param name = "policyId">Comma-separated list of snapshot lifecycle policies to retrieve</param>
7070
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>

src/Nest/ElasticClient.SnapshotLifecycleManagement.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,25 +61,25 @@ internal SnapshotLifecycleManagementNamespace(ElasticClient client): base(client
6161
/// </summary>
6262
public Task<DeleteSnapshotLifecycleResponse> DeleteSnapshotLifecycleAsync(IDeleteSnapshotLifecycleRequest request, CancellationToken ct = default) => DoRequestAsync<IDeleteSnapshotLifecycleRequest, DeleteSnapshotLifecycleResponse>(request, request.RequestParameters, ct);
6363
/// <summary>
64-
/// <c>PUT</c> request to the <c>slm.execute_lifecycle</c> API, read more about this API online:
64+
/// <c>POST</c> request to the <c>slm.execute_lifecycle</c> API, read more about this API online:
6565
/// <para></para>
6666
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</a>
6767
/// </summary>
6868
public ExecuteSnapshotLifecycleResponse ExecuteSnapshotLifecycle(Id policyId, Func<ExecuteSnapshotLifecycleDescriptor, IExecuteSnapshotLifecycleRequest> selector = null) => ExecuteSnapshotLifecycle(selector.InvokeOrDefault(new ExecuteSnapshotLifecycleDescriptor(policyId: policyId)));
6969
/// <summary>
70-
/// <c>PUT</c> request to the <c>slm.execute_lifecycle</c> API, read more about this API online:
70+
/// <c>POST</c> request to the <c>slm.execute_lifecycle</c> API, read more about this API online:
7171
/// <para></para>
7272
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</a>
7373
/// </summary>
7474
public Task<ExecuteSnapshotLifecycleResponse> ExecuteSnapshotLifecycleAsync(Id policyId, Func<ExecuteSnapshotLifecycleDescriptor, IExecuteSnapshotLifecycleRequest> selector = null, CancellationToken ct = default) => ExecuteSnapshotLifecycleAsync(selector.InvokeOrDefault(new ExecuteSnapshotLifecycleDescriptor(policyId: policyId)), ct);
7575
/// <summary>
76-
/// <c>PUT</c> request to the <c>slm.execute_lifecycle</c> API, read more about this API online:
76+
/// <c>POST</c> request to the <c>slm.execute_lifecycle</c> API, read more about this API online:
7777
/// <para></para>
7878
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</a>
7979
/// </summary>
8080
public ExecuteSnapshotLifecycleResponse ExecuteSnapshotLifecycle(IExecuteSnapshotLifecycleRequest request) => DoRequest<IExecuteSnapshotLifecycleRequest, ExecuteSnapshotLifecycleResponse>(request, request.RequestParameters);
8181
/// <summary>
82-
/// <c>PUT</c> request to the <c>slm.execute_lifecycle</c> API, read more about this API online:
82+
/// <c>POST</c> request to the <c>slm.execute_lifecycle</c> API, read more about this API online:
8383
/// <para></para>
8484
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</a>
8585
/// </summary>

src/Tests/Tests/XPack/Slm/ExecuteLifecycle/ExecuteLifecycleUrlTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Tests.XPack.Slm.ExecuteLifecycle
99
public class ExecuteLifecycleUrlTests : UrlTestsBase
1010
{
1111
[U] public override async Task Urls() =>
12-
await PUT("/_slm/policy/policy_id/_execute")
12+
await POST("/_slm/policy/policy_id/_execute")
1313
.Fluent(c => c.SnapshotLifecycleManagement.ExecuteSnapshotLifecycle("policy_id"))
1414
.Request(c => c.SnapshotLifecycleManagement.ExecuteSnapshotLifecycle(new ExecuteSnapshotLifecycleRequest("policy_id")))
1515
.FluentAsync(c => c.SnapshotLifecycleManagement.ExecuteSnapshotLifecycleAsync("policy_id"))

0 commit comments

Comments
 (0)