|  | @@ -134,12 +134,12 @@ public class RecoveryTarget extends AbstractComponent implements IndexEventListe
 | 
	
		
			
				|  |  |          logger.trace("will retry recovery with id [{}] in [{}]", reason, recoveryStatus.recoveryId(), retryAfter);
 | 
	
		
			
				|  |  |          retryRecovery(recoveryStatus, retryAfter, currentRequest);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      protected void retryRecovery(final RecoveryStatus recoveryStatus, final String reason, TimeValue retryAfter, final StartRecoveryRequest currentRequest) {
 | 
	
		
			
				|  |  |          logger.trace("will retry recovery with id [{}] in [{}] (reason [{}])", recoveryStatus.recoveryId(), retryAfter, reason);
 | 
	
		
			
				|  |  |          retryRecovery(recoveryStatus, retryAfter, currentRequest);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      private void retryRecovery(final RecoveryStatus recoveryStatus, TimeValue retryAfter, final StartRecoveryRequest currentRequest) {
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              recoveryStatus.resetRecovery();
 | 
	
	
		
			
				|  | @@ -208,11 +208,15 @@ public class RecoveryTarget extends AbstractComponent implements IndexEventListe
 | 
	
		
			
				|  |  |          } catch (CancellableThreads.ExecutionCancelledException e) {
 | 
	
		
			
				|  |  |              logger.trace("recovery cancelled", e);
 | 
	
		
			
				|  |  |          } catch (Throwable e) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              if (logger.isTraceEnabled()) {
 | 
	
		
			
				|  |  |                  logger.trace("[{}][{}] Got exception on recovery", e, request.shardId().index().name(), request.shardId().id());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              Throwable cause = ExceptionsHelper.unwrapCause(e);
 | 
	
		
			
				|  |  | +            if (cause instanceof CancellableThreads.ExecutionCancelledException) {
 | 
	
		
			
				|  |  | +                // this can also come from the source wrapped in a RemoteTransportException
 | 
	
		
			
				|  |  | +                onGoingRecoveries.failRecovery(recoveryStatus.recoveryId(), new RecoveryFailedException(request, "source has canceled the recovery", cause), false);
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              if (cause instanceof RecoveryEngineException) {
 | 
	
		
			
				|  |  |                  // unwrap an exception that was thrown as part of the recovery
 | 
	
		
			
				|  |  |                  cause = cause.getCause();
 |