39
39
import org .elasticsearch .index .query .BoolQueryBuilder ;
40
40
import org .elasticsearch .index .query .QueryBuilder ;
41
41
import org .elasticsearch .index .query .QueryBuilders ;
42
+ import org .elasticsearch .index .reindex .AbstractBulkByScrollRequest ;
42
43
import org .elasticsearch .index .reindex .BulkByScrollResponse ;
43
44
import org .elasticsearch .index .reindex .DeleteByQueryAction ;
44
45
import org .elasticsearch .index .reindex .DeleteByQueryRequest ;
63
64
import java .util .List ;
64
65
import java .util .Set ;
65
66
67
+ import static org .elasticsearch .index .mapper .MapperService .SINGLE_MAPPING_NAME ;
66
68
import static org .elasticsearch .xpack .core .ClientHelper .TRANSFORM_ORIGIN ;
67
69
import static org .elasticsearch .xpack .core .ClientHelper .executeAsyncWithOrigin ;
68
70
@@ -146,16 +148,18 @@ public void updateTransformConfiguration(
146
148
147
149
@ Override
148
150
public void deleteOldTransformConfigurations (String transformId , ActionListener <Boolean > listener ) {
149
- DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest (
151
+ DeleteByQueryRequest deleteByQueryRequest = createDeleteByQueryRequest ();
152
+ deleteByQueryRequest .indices (
150
153
TransformInternalIndexConstants .INDEX_NAME_PATTERN ,
151
154
TransformInternalIndexConstants .INDEX_NAME_PATTERN_DEPRECATED
152
- ).setQuery (
155
+ );
156
+ deleteByQueryRequest .setQuery (
153
157
QueryBuilders .constantScoreQuery (
154
158
QueryBuilders .boolQuery ()
155
159
.mustNot (QueryBuilders .termQuery ("_index" , TransformInternalIndexConstants .LATEST_INDEX_NAME ))
156
160
.filter (QueryBuilders .termQuery ("_id" , TransformConfig .documentId (transformId )))
157
161
)
158
- ). setIndicesOptions ( IndicesOptions . lenientExpandOpen ()) ;
162
+ );
159
163
160
164
executeAsyncWithOrigin (
161
165
client ,
@@ -177,17 +181,18 @@ public void deleteOldTransformConfigurations(String transformId, ActionListener<
177
181
178
182
@ Override
179
183
public void deleteOldTransformStoredDocuments (String transformId , ActionListener <Boolean > listener ) {
180
- DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest (
184
+ DeleteByQueryRequest deleteByQueryRequest = createDeleteByQueryRequest ();
185
+ deleteByQueryRequest .indices (
181
186
TransformInternalIndexConstants .INDEX_NAME_PATTERN ,
182
187
TransformInternalIndexConstants .INDEX_NAME_PATTERN_DEPRECATED
183
- ).setQuery (
188
+ );
189
+ deleteByQueryRequest .setQuery (
184
190
QueryBuilders .constantScoreQuery (
185
191
QueryBuilders .boolQuery ()
186
192
.mustNot (QueryBuilders .termQuery ("_index" , TransformInternalIndexConstants .LATEST_INDEX_NAME ))
187
193
.filter (QueryBuilders .termQuery ("_id" , TransformStoredDoc .documentId (transformId )))
188
194
)
189
- ).setIndicesOptions (IndicesOptions .lenientExpandOpen ());
190
-
195
+ );
191
196
executeAsyncWithOrigin (
192
197
client ,
193
198
TRANSFORM_ORIGIN ,
@@ -206,6 +211,41 @@ public void deleteOldTransformStoredDocuments(String transformId, ActionListener
206
211
);
207
212
}
208
213
214
+ @ Override
215
+ public void deleteOldCheckpoints (String transformId , long deleteCheckpointsBelow , long deleteOlderThan , ActionListener <Long > listener ) {
216
+ DeleteByQueryRequest deleteByQueryRequest = createDeleteByQueryRequest ();
217
+ deleteByQueryRequest .indices (
218
+ TransformInternalIndexConstants .INDEX_NAME_PATTERN ,
219
+ TransformInternalIndexConstants .INDEX_NAME_PATTERN_DEPRECATED
220
+ );
221
+ deleteByQueryRequest .setQuery (
222
+ QueryBuilders .boolQuery ()
223
+ .filter (QueryBuilders .termQuery (TransformField .ID .getPreferredName (), transformId ))
224
+ .filter (QueryBuilders .termQuery (TransformField .INDEX_DOC_TYPE .getPreferredName (), TransformCheckpoint .NAME ))
225
+ .filter (QueryBuilders .rangeQuery (TransformCheckpoint .CHECKPOINT .getPreferredName ()).lt (deleteCheckpointsBelow ))
226
+ .filter (
227
+ QueryBuilders .rangeQuery (TransformField .TIMESTAMP_MILLIS .getPreferredName ()).lt (deleteOlderThan ).format ("epoch_millis" )
228
+ )
229
+ );
230
+ logger .debug ("Deleting old checkpoints using {}" , deleteByQueryRequest .getSearchRequest ());
231
+ executeAsyncWithOrigin (
232
+ client ,
233
+ TRANSFORM_ORIGIN ,
234
+ DeleteByQueryAction .INSTANCE ,
235
+ deleteByQueryRequest ,
236
+ ActionListener .wrap (response -> {
237
+ if ((response .getBulkFailures ().isEmpty () && response .getSearchFailures ().isEmpty ()) == false ) {
238
+ Tuple <RestStatus , Throwable > statusAndReason = getStatusAndReason (response );
239
+ listener .onFailure (
240
+ new ElasticsearchStatusException (statusAndReason .v2 ().getMessage (), statusAndReason .v1 (), statusAndReason .v2 ())
241
+ );
242
+ return ;
243
+ }
244
+ listener .onResponse (response .getDeleted ());
245
+ }, listener ::onFailure )
246
+ );
247
+ }
248
+
209
249
private void putTransformConfiguration (
210
250
TransformConfig transformConfig ,
211
251
DocWriteRequest .OpType optType ,
@@ -419,9 +459,7 @@ public void expandTransformIds(
419
459
420
460
@ Override
421
461
public void deleteTransform (String transformId , ActionListener <Boolean > listener ) {
422
- DeleteByQueryRequest request = new DeleteByQueryRequest ().setAbortOnVersionConflict (false ); // since these documents are not
423
- // updated, a conflict just means it was
424
- // deleted previously
462
+ DeleteByQueryRequest request = createDeleteByQueryRequest ();
425
463
426
464
request .indices (TransformInternalIndexConstants .INDEX_NAME_PATTERN , TransformInternalIndexConstants .INDEX_NAME_PATTERN_DEPRECATED );
427
465
QueryBuilder query = QueryBuilders .termQuery (TransformField .ID .getPreferredName (), transformId );
@@ -675,4 +713,22 @@ private static Tuple<RestStatus, Throwable> getStatusAndReason(final BulkByScrol
675
713
}
676
714
return new Tuple <>(status , reason );
677
715
}
716
+
717
+ /**
718
+ * Create DBQ request with good defaults
719
+ *
720
+ * @return new DeleteByQueryRequest with some defaults set
721
+ */
722
+ private static DeleteByQueryRequest createDeleteByQueryRequest () {
723
+
724
+ DeleteByQueryRequest deleteByQuery = new DeleteByQueryRequest ();
725
+
726
+ deleteByQuery .setAbortOnVersionConflict (false )
727
+ .setSlices (AbstractBulkByScrollRequest .AUTO_SLICES )
728
+ .setIndicesOptions (IndicesOptions .lenientExpandOpen ());
729
+
730
+ // disable scoring by using index order
731
+ deleteByQuery .getSearchRequest ().source ().sort (SINGLE_MAPPING_NAME );
732
+ return deleteByQuery ;
733
+ }
678
734
}
0 commit comments