2020import org .elasticsearch .common .xcontent .NamedXContentRegistry ;
2121import org .elasticsearch .common .xcontent .XContentParser ;
2222import org .elasticsearch .common .xcontent .json .JsonXContent ;
23+ import org .elasticsearch .core .Tuple ;
2324import org .elasticsearch .search .sort .SortOrder ;
2425import org .elasticsearch .snapshots .AbstractSnapshotIntegTestCase ;
2526import org .elasticsearch .snapshots .SnapshotInfo ;
@@ -64,8 +65,7 @@ public void testSortOrder() throws Exception {
6465 }
6566
6667 private void doTestSortOrder (String repoName , Collection <String > allSnapshotNames , SortOrder order ) throws IOException {
67- final List <SnapshotInfo > defaultSorting =
68- clusterAdmin ().prepareGetSnapshots (repoName ).setOrder (order ).get ().getSnapshots ();
68+ final List <SnapshotInfo > defaultSorting = clusterAdmin ().prepareGetSnapshots (repoName ).setOrder (order ).get ().getSnapshots ();
6969 assertSnapshotListSorted (defaultSorting , null , order );
7070 assertSnapshotListSorted (
7171 allSnapshotsSorted (allSnapshotNames , repoName , GetSnapshotsRequest .SortBy .NAME , order ),
@@ -106,24 +106,31 @@ private void doTestPagination(String repoName,
106106 GetSnapshotsRequest .SortBy sort ,
107107 SortOrder order ) throws IOException {
108108 final List <SnapshotInfo > allSnapshotsSorted = allSnapshotsSorted (names , repoName , sort , order );
109- final List <SnapshotInfo > batch1 = sortedWithLimit (repoName , sort , 2 , order );
110- assertEquals (batch1 , allSnapshotsSorted .subList (0 , 2 ));
111- final List <SnapshotInfo > batch2 = sortedWithLimit (repoName , sort , batch1 .get (1 ), 2 , order );
112- assertEquals (batch2 , allSnapshotsSorted .subList (2 , 4 ));
113- final int lastBatch = names .size () - batch1 .size () - batch2 .size ();
114- final List <SnapshotInfo > batch3 = sortedWithLimit (repoName , sort , batch2 .get (1 ), lastBatch , order );
115- assertEquals (batch3 , allSnapshotsSorted .subList (batch1 .size () + batch2 .size (), names .size ()));
116- final List <SnapshotInfo > batch3NoLimit =
117- sortedWithLimit (repoName , sort , batch2 .get (1 ), GetSnapshotsRequest .NO_LIMIT , order );
118- assertEquals (batch3 , batch3NoLimit );
119- final List <SnapshotInfo > batch3LargeLimit = sortedWithLimit (
109+ final Tuple <String , List <SnapshotInfo >> batch1 = sortedWithLimit (repoName , sort , null , 2 , order );
110+ assertEquals (allSnapshotsSorted .subList (0 , 2 ), batch1 .v2 ());
111+ final Tuple <String , List <SnapshotInfo >> batch2 = sortedWithLimit (repoName , sort , batch1 .v1 (), 2 , order );
112+ assertEquals (allSnapshotsSorted .subList (2 , 4 ), batch2 .v2 ());
113+ final int lastBatch = names .size () - batch1 .v2 ().size () - batch2 .v2 ().size ();
114+ final Tuple <String , List <SnapshotInfo >> batch3 = sortedWithLimit (repoName , sort , batch2 .v1 (), lastBatch , order );
115+ assertEquals (batch3 .v2 (), allSnapshotsSorted .subList (batch1 .v2 ().size () + batch2 .v2 ().size (), names .size ()));
116+ final Tuple <String , List <SnapshotInfo >> batch3NoLimit = sortedWithLimit (
120117 repoName ,
121118 sort ,
122- batch2 .get (1 ),
119+ batch2 .v1 (),
120+ GetSnapshotsRequest .NO_LIMIT ,
121+ order
122+ );
123+ assertNull (batch3NoLimit .v1 ());
124+ assertEquals (batch3 .v2 (), batch3NoLimit .v2 ());
125+ final Tuple <String , List <SnapshotInfo >> batch3LargeLimit = sortedWithLimit (
126+ repoName ,
127+ sort ,
128+ batch2 .v1 (),
123129 lastBatch + randomIntBetween (1 , 100 ),
124130 order
125131 );
126- assertEquals (batch3 , batch3LargeLimit );
132+ assertEquals (batch3 .v2 (), batch3LargeLimit .v2 ());
133+ assertNull (batch3LargeLimit .v1 ());
127134 }
128135
129136 public void testSortAndPaginateWithInProgress () throws Exception {
@@ -173,14 +180,15 @@ private static void assertStablePagination(String repoName,
173180 final List <SnapshotInfo > allSorted = allSnapshotsSorted (allSnapshotNames , repoName , sort , order );
174181
175182 for (int i = 1 ; i <= allSnapshotNames .size (); i ++) {
176- final List <SnapshotInfo > subsetSorted = sortedWithLimit (repoName , sort , i , order );
183+ final List <SnapshotInfo > subsetSorted = sortedWithLimit (repoName , sort , null , i , order ). v2 ( );
177184 assertEquals (subsetSorted , allSorted .subList (0 , i ));
178185 }
179186
180187 for (int j = 0 ; j < allSnapshotNames .size (); j ++) {
181188 final SnapshotInfo after = allSorted .get (j );
182189 for (int i = 1 ; i < allSnapshotNames .size () - j ; i ++) {
183- final List <SnapshotInfo > subsetSorted = sortedWithLimit (repoName , sort , after , i , order );
190+ final List <SnapshotInfo > subsetSorted = sortedWithLimit (
191+ repoName , sort , GetSnapshotsRequest .After .from (after , sort ).asQueryParam (), i , order ).v2 ();
184192 assertEquals (subsetSorted , allSorted .subList (j + 1 , j + i + 1 ));
185193 }
186194 }
@@ -196,7 +204,7 @@ private static List<SnapshotInfo> allSnapshotsSorted(Collection<String> allSnaps
196204 request .addParameter ("order" , order .toString ());
197205 }
198206 final Response response = getRestClient ().performRequest (request );
199- final List <SnapshotInfo > snapshotInfos = readSnapshotInfos (response );
207+ final List <SnapshotInfo > snapshotInfos = readSnapshotInfos (response ). v2 () ;
200208 assertEquals (snapshotInfos .size (), allSnapshotNames .size ());
201209 for (SnapshotInfo snapshotInfo : snapshotInfos ) {
202210 assertThat (snapshotInfo .snapshotId ().getName (), is (in (allSnapshotNames )));
@@ -208,42 +216,27 @@ private static Request baseGetSnapshotsRequest(String repoName) {
208216 return new Request (HttpGet .METHOD_NAME , "/_snapshot/" + repoName + "/*" );
209217 }
210218
211- private static List <SnapshotInfo > sortedWithLimit (String repoName ,
212- GetSnapshotsRequest .SortBy sortBy ,
213- int size ,
214- SortOrder order ) throws IOException {
215- final Request request = baseGetSnapshotsRequest (repoName );
216- request .addParameter ("sort" , sortBy .toString ());
217- if (order == SortOrder .DESC || randomBoolean ()) {
218- request .addParameter ("order" , order .toString ());
219- }
220- request .addParameter ("size" , String .valueOf (size ));
221- final Response response = getRestClient ().performRequest (request );
222- return readSnapshotInfos (response );
223- }
224-
225- private static List <SnapshotInfo > readSnapshotInfos (Response response ) throws IOException {
226- final List <SnapshotInfo > snapshotInfos ;
219+ private static Tuple <String , List <SnapshotInfo >> readSnapshotInfos (Response response ) throws IOException {
227220 try (InputStream input = response .getEntity ().getContent ();
228221 XContentParser parser = JsonXContent .jsonXContent .createParser (
229222 NamedXContentRegistry .EMPTY , DeprecationHandler .THROW_UNSUPPORTED_OPERATION , input )) {
230- snapshotInfos = GetSnapshotsResponse .fromXContent (parser ).getSnapshots ();
223+ final GetSnapshotsResponse getSnapshotsResponse = GetSnapshotsResponse .fromXContent (parser );
224+ return Tuple .tuple (getSnapshotsResponse .next (), getSnapshotsResponse .getSnapshots ());
231225 }
232- return snapshotInfos ;
233226 }
234227
235- private static List <SnapshotInfo > sortedWithLimit (String repoName ,
236- GetSnapshotsRequest .SortBy sortBy ,
237- SnapshotInfo after ,
238- int size ,
239- SortOrder order ) throws IOException {
228+ private static Tuple < String , List <SnapshotInfo > > sortedWithLimit (String repoName ,
229+ GetSnapshotsRequest .SortBy sortBy ,
230+ String after ,
231+ int size ,
232+ SortOrder order ) throws IOException {
240233 final Request request = baseGetSnapshotsRequest (repoName );
241234 request .addParameter ("sort" , sortBy .toString ());
242235 if (size != GetSnapshotsRequest .NO_LIMIT || randomBoolean ()) {
243236 request .addParameter ("size" , String .valueOf (size ));
244237 }
245238 if (after != null ) {
246- request .addParameter ("after" , GetSnapshotsRequest . After . from ( after , sortBy ). value () + "," + after . snapshotId (). getName () );
239+ request .addParameter ("after" , after );
247240 }
248241 if (order == SortOrder .DESC || randomBoolean ()) {
249242 request .addParameter ("order" , order .toString ());
0 commit comments