@@ -215,21 +215,42 @@ public void onResponse(List<BlobMetadata> blobMetadata) {
215
215
logger .debug (() -> "generationsToBeDeleted = " + generationsToBeDeleted );
216
216
if (generationsToBeDeleted .isEmpty () == false ) {
217
217
// Delete stale generations
218
- translogTransferManager .deleteGenerationAsync (
219
- primaryTermSupplier .getAsLong (),
220
- generationsToBeDeleted ,
221
- remoteGenerationDeletionPermits ::release
222
- );
218
+ try {
219
+ translogTransferManager .deleteGenerationAsync (
220
+ primaryTermSupplier .getAsLong (),
221
+ generationsToBeDeleted ,
222
+ remoteGenerationDeletionPermits ::release
223
+ );
224
+ } catch (Exception e ) {
225
+ logger .error ("Exception in delete generations flow" , e );
226
+ // Release permit that is meant for metadata files and return
227
+ remoteGenerationDeletionPermits .release ();
228
+ assert remoteGenerationDeletionPermits .availablePermits () == REMOTE_DELETION_PERMITS : "Available permits "
229
+ + remoteGenerationDeletionPermits .availablePermits ()
230
+ + " is not equal to "
231
+ + REMOTE_DELETION_PERMITS ;
232
+ return ;
233
+ }
223
234
} else {
224
235
remoteGenerationDeletionPermits .release ();
225
236
}
226
237
227
238
if (metadataFilesToBeDeleted .isEmpty () == false ) {
228
239
// Delete stale metadata files
229
- translogTransferManager .deleteMetadataFilesAsync (
230
- metadataFilesToBeDeleted ,
231
- remoteGenerationDeletionPermits ::release
232
- );
240
+ try {
241
+ translogTransferManager .deleteMetadataFilesAsync (
242
+ metadataFilesToBeDeleted ,
243
+ remoteGenerationDeletionPermits ::release
244
+ );
245
+ } catch (Exception e ) {
246
+ logger .error ("Exception in delete metadata files flow" , e );
247
+ // Permits is already released by deleteMetadataFilesAsync
248
+ assert remoteGenerationDeletionPermits .availablePermits () == REMOTE_DELETION_PERMITS : "Available permits "
249
+ + remoteGenerationDeletionPermits .availablePermits ()
250
+ + " is not equal to "
251
+ + REMOTE_DELETION_PERMITS ;
252
+ return ;
253
+ }
233
254
234
255
// Update cache to keep only those metadata files that are not getting deleted
235
256
oldFormatMetadataFileGenerationMap .keySet ().retainAll (metadataFilesNotToBeDeleted );
@@ -240,7 +261,12 @@ public void onResponse(List<BlobMetadata> blobMetadata) {
240
261
remoteGenerationDeletionPermits .release ();
241
262
}
242
263
} catch (Exception e ) {
264
+ logger .error ("Exception in trimUnreferencedReaders" , e );
243
265
remoteGenerationDeletionPermits .release (REMOTE_DELETION_PERMITS );
266
+ assert remoteGenerationDeletionPermits .availablePermits () == REMOTE_DELETION_PERMITS : "Available permits "
267
+ + remoteGenerationDeletionPermits .availablePermits ()
268
+ + " is not equal to "
269
+ + REMOTE_DELETION_PERMITS ;
244
270
}
245
271
}
246
272
@@ -441,7 +467,8 @@ protected static void deleteStaleRemotePrimaryTerms(
441
467
}
442
468
Optional <Long > minPrimaryTermFromMetadataFiles = metadataFilesNotToBeDeleted .stream ().map (file -> {
443
469
try {
444
- return getMinMaxPrimaryTermFromMetadataFile (file , translogTransferManager , oldFormatMetadataFilePrimaryTermMap ).v1 ();
470
+ return getMinMaxPrimaryTermFromMetadataFile (file , translogTransferManager , oldFormatMetadataFilePrimaryTermMap , logger )
471
+ .v1 ();
445
472
} catch (IOException e ) {
446
473
return Long .MIN_VALUE ;
447
474
}
@@ -482,7 +509,8 @@ protected static Long getMinPrimaryTermInRemote(
482
509
protected static Tuple <Long , Long > getMinMaxPrimaryTermFromMetadataFile (
483
510
String metadataFile ,
484
511
TranslogTransferManager translogTransferManager ,
485
- Map <String , Tuple <Long , Long >> oldFormatMetadataFilePrimaryTermMap
512
+ Map <String , Tuple <Long , Long >> oldFormatMetadataFilePrimaryTermMap ,
513
+ Logger logger
486
514
) throws IOException {
487
515
Tuple <Long , Long > minMaxPrimaryTermFromFileName = TranslogTransferMetadata .getMinMaxPrimaryTermFromFilename (metadataFile );
488
516
if (minMaxPrimaryTermFromFileName != null ) {
@@ -504,6 +532,8 @@ protected static Tuple<Long, Long> getMinMaxPrimaryTermFromMetadataFile(
504
532
if (primaryTerm .isPresent ()) {
505
533
minPrimaryTem = primaryTerm .get ();
506
534
}
535
+ } else {
536
+ logger .warn ("No primary term found from GenerationToPrimaryTermMap for file [{}]" , metadataFile );
507
537
}
508
538
Tuple <Long , Long > minMaxPrimaryTermTuple = new Tuple <>(minPrimaryTem , maxPrimaryTem );
509
539
oldFormatMetadataFilePrimaryTermMap .put (metadataFile , minMaxPrimaryTermTuple );
0 commit comments