com.netflix.hystrix.strategy.executionhook.HystrixCommandExecutionHook Maven / Gradle / Ivy
Show all versions of hystrix-core Show documentation
/**
* Copyright 2013 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.netflix.hystrix.strategy.executionhook;
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy;
import com.netflix.hystrix.HystrixInvokable;
import com.netflix.hystrix.HystrixObservableCommand;
import com.netflix.hystrix.exception.HystrixRuntimeException;
import com.netflix.hystrix.exception.HystrixRuntimeException.FailureType;
import com.netflix.hystrix.strategy.HystrixPlugins;
/**
* Abstract ExecutionHook with invocations at different lifecycle points of {@link HystrixCommand}
* and {@link HystrixObservableCommand} execution with default no-op implementations.
*
* See {@link HystrixPlugins} or the Hystrix GitHub Wiki for information on configuring plugins: https://github.com/Netflix/Hystrix/wiki/Plugins.
*
* Note on thread-safety and performance
*
* A single implementation of this class will be used globally so methods on this class will be invoked concurrently from multiple threads so all functionality must be thread-safe.
*
* Methods are also invoked synchronously and will add to execution time of the commands so all behavior should be fast. If anything time-consuming is to be done it should be spawned asynchronously
* onto separate worker threads.
*
* @since 1.2
* */
public abstract class HystrixCommandExecutionHook {
/**
* Invoked before {@link HystrixInvokable} begins executing.
*
* @param commandInstance The executing HystrixInvokable instance.
*
* @since 1.2
*/
public void onStart(HystrixInvokable commandInstance) {
//do nothing by default
}
/**
* Invoked when {@link HystrixInvokable} emits a value.
*
* @param commandInstance The executing HystrixInvokable instance.
* @param value value emitted
*
* @since 1.4
*/
public T onEmit(HystrixInvokable commandInstance, T value) {
return value; //by default, just pass through
}
/**
* Invoked when {@link HystrixInvokable} fails with an Exception.
*
* @param commandInstance The executing HystrixInvokable instance.
* @param failureType {@link FailureType} enum representing which type of error
* @param e exception object
*
* @since 1.2
*/
public Exception onError(HystrixInvokable commandInstance, FailureType failureType, Exception e) {
return e; //by default, just pass through
}
/**
* Invoked when {@link HystrixInvokable} finishes a successful execution.
*
* @param commandInstance The executing HystrixInvokable instance.
*
* @since 1.4
*/
public void onSuccess(HystrixInvokable commandInstance) {
//do nothing by default
}
/**
* Invoked at start of thread execution when {@link HystrixCommand} is executed using {@link ExecutionIsolationStrategy#THREAD}.
*
* @param commandInstance The executing HystrixCommand instance.
*
* @since 1.2
*/
public void onThreadStart(HystrixInvokable commandInstance) {
//do nothing by default
}
/**
* Invoked at completion of thread execution when {@link HystrixCommand} is executed using {@link ExecutionIsolationStrategy#THREAD}.
* This will get invoked whenever the Hystrix thread is done executing, regardless of whether the thread finished
* naturally, or was unsubscribed externally
*
* @param commandInstance The executing HystrixCommand instance.
*
* @since 1.2
*/
public void onThreadComplete(HystrixInvokable commandInstance) {
// do nothing by default
}
/**
* Invoked when the user-defined execution method in {@link HystrixInvokable} starts.
*
* @param commandInstance The executing HystrixInvokable instance.
*
* @since 1.4
*/
public void onExecutionStart(HystrixInvokable commandInstance) {
//do nothing by default
}
/**
* Invoked when the user-defined execution method in {@link HystrixInvokable} emits a value.
*
* @param commandInstance The executing HystrixInvokable instance.
* @param value value emitted
*
* @since 1.4
*/
public T onExecutionEmit(HystrixInvokable commandInstance, T value) {
return value; //by default, just pass through
}
/**
* Invoked when the user-defined execution method in {@link HystrixInvokable} fails with an Exception.
*
* @param commandInstance The executing HystrixInvokable instance.
* @param e exception object
*
* @since 1.4
*/
public Exception onExecutionError(HystrixInvokable commandInstance, Exception e) {
return e; //by default, just pass through
}
/**
* Invoked when the user-defined execution method in {@link HystrixInvokable} completes successfully.
*
* @param commandInstance The executing HystrixInvokable instance.
*
* @since 1.4
*/
public void onExecutionSuccess(HystrixInvokable commandInstance) {
//do nothing by default
}
/**
* Invoked when the fallback method in {@link HystrixInvokable} starts.
*
* @param commandInstance The executing HystrixInvokable instance.
*
* @since 1.2
*/
public void onFallbackStart(HystrixInvokable commandInstance) {
//do nothing by default
}
/**
* Invoked when the fallback method in {@link HystrixInvokable} emits a value.
*
* @param commandInstance The executing HystrixInvokable instance.
* @param value value emitted
*
* @since 1.4
*/
public T onFallbackEmit(HystrixInvokable commandInstance, T value) {
return value; //by default, just pass through
}
/**
* Invoked when the fallback method in {@link HystrixInvokable} fails with an Exception.
*
* @param commandInstance The executing HystrixInvokable instance.
* @param e exception object
*
* @since 1.2
*/
public Exception onFallbackError(HystrixInvokable commandInstance, Exception e) {
//by default, just pass through
return e;
}
/**
* Invoked when the user-defined execution method in {@link HystrixInvokable} completes successfully.
*
* @param commandInstance The executing HystrixInvokable instance.
*
* @since 1.4
*/
public void onFallbackSuccess(HystrixInvokable commandInstance) {
//do nothing by default
}
/**
* Invoked when the command response is found in the {@link com.netflix.hystrix.HystrixRequestCache}.
*
* @param commandInstance The executing HystrixCommand
*
* @since 1.4
*/
public void onCacheHit(HystrixInvokable commandInstance) {
//do nothing by default
}
/**
* DEPRECATED: Change usages of this to {@link #onExecutionStart}.
*
* Invoked before {@link HystrixCommand#run()} is about to be executed.
*
* @param commandInstance
* The executing HystrixCommand instance.
*
* @since 1.2
*/
@Deprecated
public void onRunStart(HystrixCommand commandInstance) {
// do nothing by default
}
/**
* DEPRECATED: Change usages of this to {@link #onExecutionStart}.
*
* Invoked before {@link HystrixCommand#run()} is about to be executed.
*
* @param commandInstance
* The executing HystrixCommand instance.
*
* @since 1.2
*/
@Deprecated
public void onRunStart(HystrixInvokable commandInstance) {
// do nothing by default
}
/**
* DEPRECATED: Change usages of this to {@link #onExecutionEmit} if you want to add a hook for each value emitted by the command
* or to {@link #onExecutionSuccess} if you want to add a hook when the command successfully executes
*
* Invoked after successful execution of {@link HystrixCommand#run()} with response value.
* In a {@link HystrixCommand} using {@link ExecutionIsolationStrategy#THREAD}, this will get invoked if the Hystrix thread
* successfully runs, regardless of whether the calling thread encountered a timeout.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param response
* from {@link HystrixCommand#run()}
* @return T response object that can be modified, decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public T onRunSuccess(HystrixCommand commandInstance, T response) {
// pass-thru by default
return response;
}
/**
* DEPRECATED: Change usages of this to {@link #onExecutionEmit} if you want to add a hook for each value emitted by the command
* or to {@link #onExecutionSuccess} if you want to add a hook when the command successfully executes
*
* Invoked after successful execution of {@link HystrixCommand#run()} with response value.
* In a {@link HystrixCommand} using {@link ExecutionIsolationStrategy#THREAD}, this will get invoked if the Hystrix thread
* successfully runs, regardless of whether the calling thread encountered a timeout.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param response
* from {@link HystrixCommand#run()}
* @return T response object that can be modified, decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public T onRunSuccess(HystrixInvokable commandInstance, T response) {
// pass-thru by default
return response;
}
/**
* DEPRECATED: Change usages of this to {@link #onExecutionError}
*
* Invoked after failed execution of {@link HystrixCommand#run()} with thrown Exception.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param e
* Exception thrown by {@link HystrixCommand#run()}
* @return Exception that can be decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public Exception onRunError(HystrixCommand commandInstance, Exception e) {
// pass-thru by default
return e;
}
/**
* DEPRECATED: Change usages of this to {@link #onExecutionError}
*
* Invoked after failed execution of {@link HystrixCommand#run()} with thrown Exception.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param e
* Exception thrown by {@link HystrixCommand#run()}
* @return Exception that can be decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public Exception onRunError(HystrixInvokable commandInstance, Exception e) {
// pass-thru by default
return e;
}
/**
* DEPRECATED: Change usages of this to {@link #onFallbackStart}
*
* Invoked before {@link HystrixCommand#getFallback()} is about to be executed.
*
* @param commandInstance
* The executing HystrixCommand instance.
*
* @since 1.2
*/
@Deprecated
public void onFallbackStart(HystrixCommand commandInstance) {
// do nothing by default
}
/**
* DEPRECATED: Change usages of this to {@link #onFallbackEmit} if you want to write a hook that handles each emitted fallback value
* or to {@link #onFallbackSuccess} if you want to write a hook that handles success of the fallback method
*
* Invoked after successful execution of {@link HystrixCommand#getFallback()} with response value.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param fallbackResponse
* from {@link HystrixCommand#getFallback()}
* @return T response object that can be modified, decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public T onFallbackSuccess(HystrixCommand commandInstance, T fallbackResponse) {
// pass-thru by default
return fallbackResponse;
}
/**
* DEPRECATED: Change usages of this to {@link #onFallbackEmit} if you want to write a hook that handles each emitted fallback value
* or to {@link #onFallbackSuccess} if you want to write a hook that handles success of the fallback method
*
* Invoked after successful execution of {@link HystrixCommand#getFallback()} with response value.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param fallbackResponse
* from {@link HystrixCommand#getFallback()}
* @return T response object that can be modified, decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public T onFallbackSuccess(HystrixInvokable commandInstance, T fallbackResponse) {
// pass-thru by default
return fallbackResponse;
}
/**
* DEPRECATED: Change usages of this to {@link #onFallbackError}.
*
* Invoked after failed execution of {@link HystrixCommand#getFallback()} with thrown exception.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param e
* Exception thrown by {@link HystrixCommand#getFallback()}
* @return Exception that can be decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public Exception onFallbackError(HystrixCommand commandInstance, Exception e) {
// pass-thru by default
return e;
}
/**
* DEPRECATED: Change usages of this to {@link #onStart}.
*
* Invoked before {@link HystrixCommand} executes.
*
* @param commandInstance
* The executing HystrixCommand instance.
*
* @since 1.2
*/
@Deprecated
public void onStart(HystrixCommand commandInstance) {
// do nothing by default
}
/**
* DEPRECATED: Change usages of this to {@link #onEmit} if you want to write a hook that handles each emitted command value
* or to {@link #onSuccess} if you want to write a hook that handles success of the command
*
* Invoked after completion of {@link HystrixCommand} execution that results in a response.
*
* The response can come either from {@link HystrixCommand#run()} or {@link HystrixCommand#getFallback()}.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param response
* from {@link HystrixCommand#run()} or {@link HystrixCommand#getFallback()}.
* @return T response object that can be modified, decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public T onComplete(HystrixCommand commandInstance, T response) {
// pass-thru by default
return response;
}
/**
* DEPRECATED: Change usages of this to {@link #onEmit} if you want to write a hook that handles each emitted command value
* or to {@link #onSuccess} if you want to write a hook that handles success of the command
*
* Invoked after completion of {@link HystrixCommand} execution that results in a response.
*
* The response can come either from {@link HystrixCommand#run()} or {@link HystrixCommand#getFallback()}.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param response
* from {@link HystrixCommand#run()} or {@link HystrixCommand#getFallback()}.
* @return T response object that can be modified, decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public T onComplete(HystrixInvokable commandInstance, T response) {
// pass-thru by default
return response;
}
/**
* DEPRECATED: Change usages of this to {@link #onError}.
*
* Invoked after failed completion of {@link HystrixCommand} execution.
*
* @param commandInstance
* The executing HystrixCommand instance.
* @param failureType
* {@link FailureType} representing the type of failure that occurred.
*
* See {@link HystrixRuntimeException} for more information.
* @param e
* Exception thrown by {@link HystrixCommand}
* @return Exception that can be decorated, replaced or just returned as a pass-thru.
*
* @since 1.2
*/
@Deprecated
public Exception onError(HystrixCommand commandInstance, FailureType failureType, Exception e) {
// pass-thru by default
return e;
}
/**
* DEPRECATED: Change usages of this to {@link #onThreadStart}.
*
* Invoked at start of thread execution when {@link HystrixCommand} is executed using {@link ExecutionIsolationStrategy#THREAD}.
*
* @param commandInstance
* The executing HystrixCommand instance.
*
* @since 1.2
*/
@Deprecated
public void onThreadStart(HystrixCommand commandInstance) {
// do nothing by default
}
/**
* DEPRECATED: Change usages of this to {@link #onThreadComplete}.
*
* Invoked at completion of thread execution when {@link HystrixCommand} is executed using {@link ExecutionIsolationStrategy#THREAD}.
* This will get invoked if the Hystrix thread successfully executes, regardless of whether the calling thread
* encountered a timeout.
*
* @param commandInstance
* The executing HystrixCommand instance.
*
* @since 1.2
*/
@Deprecated
public void onThreadComplete(HystrixCommand commandInstance) {
// do nothing by default
}
}