in src/library/Client/ServiceClients/ExceptionStrategies/KubernetesRestClientExceptionStrategy.cs [49:133]
public async Task<T> RunWithHandlingAsync<T>(Func<Task<T>> func, FailureConfig failureConfig)
{
if (failureConfig == null)
{
throw new ArgumentNullException(nameof(failureConfig));
}
try
{
return await func();
}
catch (OperationCanceledException e)
{
var args = new FailureConfig.RecognizedExceptionArgs(e, _log);
failureConfig.RecognizedExceptionCallback?.Invoke(args);
_log.ExceptionAsWarning(e);
if (args.Handled)
{
return default(T);
}
throw;
}
catch (InvalidOperationException e)
{
var args = new FailureConfig.RecognizedExceptionArgs(e, _log);
failureConfig.RecognizedExceptionCallback?.Invoke(args);
_log.Warning(failureConfig.FailureFormat, failureConfig.FailureMessageArgs);
string validationMessage = e.Message;
if (!string.IsNullOrEmpty(failureConfig.ValidationFailureFormat))
{
validationMessage = $"{failureConfig.ValidationFailureFormat} - {e.Message}";
}
var newEx = new ValidationException(_operationContext, e, validationMessage, failureConfig.ValidationFailureArgs);
_log.ExceptionAsWarning(newEx);
if (args.Handled)
{
return default(T);
}
throw newEx;
}
catch (InvalidKubeConfigFileException e)
{
var args = new FailureConfig.RecognizedExceptionArgs(e, _log);
failureConfig.RecognizedExceptionCallback?.Invoke(args);
_log.Warning(failureConfig.FailureFormat, failureConfig.FailureMessageArgs);
string validationMessage = e.Message;
if (!string.IsNullOrEmpty(failureConfig.ValidationFailureFormat))
{
validationMessage = $"{failureConfig.ValidationFailureFormat} - {e.Message}";
}
var newEx = new ValidationException(_operationContext, e, validationMessage, failureConfig.ValidationFailureArgs);
_log.ExceptionAsWarning(newEx);
if (args.Handled)
{
return default(T);
}
throw newEx;
}
catch (Exception e) when (e is IUserVisibleExceptionReporter)
{
var args = new FailureConfig.RecognizedExceptionArgs(e, _log);
failureConfig.RecognizedExceptionCallback?.Invoke(args);
_log.Warning(failureConfig.FailureFormat, failureConfig.FailureMessageArgs);
_log.ExceptionAsWarning(e);
if (args.Handled)
{
return default(T);
}
throw;
}
catch (Exception e)
{
// Unrecognized exception
failureConfig.UnhandledExceptionCallback?.Invoke(e);
_log.Error(failureConfig.FailureFormat, failureConfig.FailureMessageArgs);
_log.Exception(e);
throw;
}
}