Skip to content

Commit c5e867d

Browse files
authored
Modify SLM execute lifecycle to use POST method as opposed to PUT. (#4246)
Local patch for implementation in elastic/elasticsearch#47061 and subsequent PR elastic/elasticsearch#49233
1 parent 16ba44e commit c5e867d

File tree

6 files changed

+23
-11
lines changed

6 files changed

+23
-11
lines changed

src/CodeGeneration/ApiGenerator/Generator/ApiEndpointFactory.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,13 @@ private static void PatchOfficialSpec(JObject original, string jsonFile)
9494

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

97-
var paramsOverride = patchedJson.SelectToken("*.params");
97+
var methodsOverride = patchedJson.SelectToken("*.methods");
98+
if (methodsOverride != null)
99+
{
100+
original.SelectToken("*.methods").Replace(methodsOverride);
101+
}
98102

103+
var paramsOverride = patchedJson.SelectToken("*.params");
99104
var originalParams = original.SelectToken("*.url.params") as JObject;
100105
originalParams?.Merge(paramsOverride, new JsonMergeSettings
101106
{
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
@@ -33,7 +33,7 @@ public class DeleteSnapshotLifecycleRequestParameters : RequestParameters<Delete
3333
///<summary>Request options for ExecuteSnapshotLifecycle <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-execute.html</para></summary>
3434
public class ExecuteSnapshotLifecycleRequestParameters : RequestParameters<ExecuteSnapshotLifecycleRequestParameters>
3535
{
36-
public override HttpMethod DefaultHttpMethod => HttpMethod.PUT;
36+
public override HttpMethod DefaultHttpMethod => HttpMethod.POST;
3737
}
3838

3939
///<summary>Request options for GetSnapshotLifecycle <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-get.html</para></summary>

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)