Skip to content
This repository was archived by the owner on Aug 2, 2022. It is now read-only.

Commit 5b40097

Browse files
authored
Accept request parameters in RestGetRollupAction and fix flakey tests (#353)
* Add option to take in request params for RestGetRollupAction * Add GetRollupAction test and fix flakey test when getting all rollup jobs * Fix flakey test when calling _stop API for a finished rollup job
1 parent e721e59 commit 5b40097

File tree

4 files changed

+59
-7
lines changed

4 files changed

+59
-7
lines changed

src/main/kotlin/com/amazon/opendistroforelasticsearch/indexmanagement/rollup/action/get/GetRollupsRequest.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,13 @@ class GetRollupsRequest : ActionRequest {
2929
val size: Int
3030
val sortField: String
3131
val sortDirection: String
32+
3233
constructor(
33-
searchString: String = "",
34-
from: Int = 0,
35-
size: Int = 20,
36-
sortField: String = "${Rollup.ROLLUP_TYPE}.${Rollup.ROLLUP_ID_FIELD}.keyword",
37-
sortDirection: String = "asc"
34+
searchString: String = DEFAULT_SEARCH_STRING,
35+
from: Int = DEFAULT_FROM,
36+
size: Int = DEFAULT_SIZE,
37+
sortField: String = DEFAULT_SORT_FIELD,
38+
sortDirection: String = DEFAULT_SORT_DIRECTION
3839
) : super() {
3940
this.searchString = searchString
4041
this.from = from
@@ -62,4 +63,12 @@ class GetRollupsRequest : ActionRequest {
6263
out.writeString(sortField)
6364
out.writeString(sortDirection)
6465
}
66+
67+
companion object {
68+
const val DEFAULT_SEARCH_STRING = ""
69+
const val DEFAULT_FROM = 0
70+
const val DEFAULT_SIZE = 20
71+
const val DEFAULT_SORT_FIELD = "${Rollup.ROLLUP_TYPE}.${Rollup.ROLLUP_ID_FIELD}.keyword"
72+
const val DEFAULT_SORT_DIRECTION = "asc"
73+
}
6574
}

src/main/kotlin/com/amazon/opendistroforelasticsearch/indexmanagement/rollup/resthandler/RestGetRollupAction.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.G
2020
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupRequest
2121
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupsAction
2222
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupsRequest
23+
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupsRequest.Companion.DEFAULT_FROM
24+
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupsRequest.Companion.DEFAULT_SEARCH_STRING
25+
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupsRequest.Companion.DEFAULT_SIZE
26+
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupsRequest.Companion.DEFAULT_SORT_DIRECTION
27+
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupsRequest.Companion.DEFAULT_SORT_FIELD
2328
import org.elasticsearch.client.node.NodeClient
2429
import org.elasticsearch.rest.BaseRestHandler
2530
import org.elasticsearch.rest.RestHandler.Route
@@ -45,9 +50,21 @@ class RestGetRollupAction : BaseRestHandler() {
4550

4651
override fun prepareRequest(request: RestRequest, client: NodeClient): RestChannelConsumer {
4752
val rollupID = request.param("rollupID")
53+
val searchString = request.param("search", DEFAULT_SEARCH_STRING)
54+
val from = request.paramAsInt("from", DEFAULT_FROM)
55+
val size = request.paramAsInt("size", DEFAULT_SIZE)
56+
val sortField = request.param("sortField", DEFAULT_SORT_FIELD)
57+
val sortDirection = request.param("sortDirection", DEFAULT_SORT_DIRECTION)
4858
return RestChannelConsumer { channel ->
4959
if (rollupID == null || rollupID.isEmpty()) {
50-
client.execute(GetRollupsAction.INSTANCE, GetRollupsRequest(), RestToXContentListener(channel))
60+
val req = GetRollupsRequest(
61+
searchString,
62+
from,
63+
size,
64+
sortField,
65+
sortDirection
66+
)
67+
client.execute(GetRollupsAction.INSTANCE, req, RestToXContentListener(channel))
5168
} else {
5269
val req = GetRollupRequest(rollupID, if (request.method() == HEAD) FetchSourceContext.DO_NOT_FETCH_SOURCE else null)
5370
client.execute(GetRollupAction.INSTANCE, req, RestToXContentListener(channel))

src/test/kotlin/com/amazon/opendistroforelasticsearch/indexmanagement/rollup/resthandler/RestGetRollupActionIT.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.amazon.opendistroforelasticsearch.indexmanagement.rollup.resthandler
1818
import com.amazon.opendistroforelasticsearch.indexmanagement.IndexManagementPlugin.Companion.ROLLUP_JOBS_BASE_URI
1919
import com.amazon.opendistroforelasticsearch.indexmanagement.makeRequest
2020
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.RollupRestTestCase
21+
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.action.get.GetRollupsRequest.Companion.DEFAULT_SIZE
2122
import com.amazon.opendistroforelasticsearch.indexmanagement.rollup.randomRollup
2223
import org.elasticsearch.client.ResponseException
2324
import org.elasticsearch.rest.RestStatus
@@ -55,7 +56,8 @@ class RestGetRollupActionIT : RollupRestTestCase() {
5556
fun `test getting all rollups`() {
5657
val rollups = randomList(1, 15) { createRollup(randomRollup()) }
5758

58-
val res = client().makeRequest("GET", ROLLUP_JOBS_BASE_URI)
59+
// Using a larger response size than the default in case leftover rollups prevent the ones created in this test from being returned
60+
val res = client().makeRequest("GET", "$ROLLUP_JOBS_BASE_URI?size=100")
5961
val map = res.asMap()
6062
val totalRollups = map["total_rollups"] as Int
6163
val resRollups = map["rollups"] as List<Map<String, Any?>>
@@ -90,6 +92,28 @@ class RestGetRollupActionIT : RollupRestTestCase() {
9092
}
9193
}
9294

95+
@Throws(Exception::class)
96+
fun `test changing response size when getting rollups`() {
97+
// Ensure at least more rollup jobs than the default (20) exists
98+
val rollupCount = 25
99+
repeat(rollupCount) { createRollup(randomRollup()) }
100+
101+
// The default response size is 20, so even though 25 rollup jobs were made, at most 20 will be returned
102+
var res = client().makeRequest("GET", ROLLUP_JOBS_BASE_URI)
103+
var map = res.asMap()
104+
var resRollups = map["rollups"] as List<Map<String, Any?>>
105+
106+
assertEquals("Get rollups response returned an unexpected number of jobs", DEFAULT_SIZE, resRollups.size)
107+
108+
// Get rollups with a larger response size
109+
res = client().makeRequest("GET", "$ROLLUP_JOBS_BASE_URI?size=$rollupCount")
110+
map = res.asMap()
111+
resRollups = map["rollups"] as List<Map<String, Any?>>
112+
113+
// There can be leftover rollups from previous tests, so we will have at least rollupCount or more
114+
assertEquals("Total rollups was not the same", rollupCount, resRollups.size)
115+
}
116+
93117
@Throws(Exception::class)
94118
fun `test checking if a rollup exists`() {
95119
val rollup = createRandomRollup()

src/test/kotlin/com/amazon/opendistroforelasticsearch/indexmanagement/rollup/resthandler/RestStopRollupActionIT.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ class RestStopRollupActionIT : RollupRestTestCase() {
9393
val updatedRollup = getRollup(rollup.id)
9494
val metadata = getRollupMetadata(updatedRollup.metadataID!!)
9595
assertEquals("Rollup never finished", RollupMetadata.Status.FINISHED, metadata.status)
96+
// Waiting for job to be disabled here to avoid version conflict exceptions later on
97+
assertFalse("Job was not disabled", updatedRollup.enabled)
9698
}
9799

98100
// Try to stop a finished rollup

0 commit comments

Comments
 (0)