@@ -215,21 +215,42 @@ public void onResponse(List<BlobMetadata> blobMetadata) {
215215 logger .debug (() -> "generationsToBeDeleted = " + generationsToBeDeleted );
216216 if (generationsToBeDeleted .isEmpty () == false ) {
217217 // 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+ }
223234 } else {
224235 remoteGenerationDeletionPermits .release ();
225236 }
226237
227238 if (metadataFilesToBeDeleted .isEmpty () == false ) {
228239 // 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+ }
233254
234255 // Update cache to keep only those metadata files that are not getting deleted
235256 oldFormatMetadataFileGenerationMap .keySet ().retainAll (metadataFilesNotToBeDeleted );
@@ -240,7 +261,12 @@ public void onResponse(List<BlobMetadata> blobMetadata) {
240261 remoteGenerationDeletionPermits .release ();
241262 }
242263 } catch (Exception e ) {
264+ logger .error ("Exception in trimUnreferencedReaders" , e );
243265 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 ;
244270 }
245271 }
246272
@@ -441,7 +467,8 @@ protected static void deleteStaleRemotePrimaryTerms(
441467 }
442468 Optional <Long > minPrimaryTermFromMetadataFiles = metadataFilesNotToBeDeleted .stream ().map (file -> {
443469 try {
444- return getMinMaxPrimaryTermFromMetadataFile (file , translogTransferManager , oldFormatMetadataFilePrimaryTermMap ).v1 ();
470+ return getMinMaxPrimaryTermFromMetadataFile (file , translogTransferManager , oldFormatMetadataFilePrimaryTermMap , logger )
471+ .v1 ();
445472 } catch (IOException e ) {
446473 return Long .MIN_VALUE ;
447474 }
@@ -482,7 +509,8 @@ protected static Long getMinPrimaryTermInRemote(
482509 protected static Tuple <Long , Long > getMinMaxPrimaryTermFromMetadataFile (
483510 String metadataFile ,
484511 TranslogTransferManager translogTransferManager ,
485- Map <String , Tuple <Long , Long >> oldFormatMetadataFilePrimaryTermMap
512+ Map <String , Tuple <Long , Long >> oldFormatMetadataFilePrimaryTermMap ,
513+ Logger logger
486514 ) throws IOException {
487515 Tuple <Long , Long > minMaxPrimaryTermFromFileName = TranslogTransferMetadata .getMinMaxPrimaryTermFromFilename (metadataFile );
488516 if (minMaxPrimaryTermFromFileName != null ) {
@@ -504,6 +532,8 @@ protected static Tuple<Long, Long> getMinMaxPrimaryTermFromMetadataFile(
504532 if (primaryTerm .isPresent ()) {
505533 minPrimaryTem = primaryTerm .get ();
506534 }
535+ } else {
536+ logger .warn ("No primary term found from GenerationToPrimaryTermMap for file [{}]" , metadataFile );
507537 }
508538 Tuple <Long , Long > minMaxPrimaryTermTuple = new Tuple <>(minPrimaryTem , maxPrimaryTem );
509539 oldFormatMetadataFilePrimaryTermMap .put (metadataFile , minMaxPrimaryTermTuple );
0 commit comments