Skip to content

Latest commit

 

History

History
976 lines (699 loc) · 83.4 KB

CHANGELOG.md

File metadata and controls

976 lines (699 loc) · 83.4 KB

Hystrix Releases

Version 1.5.8 (Maven Central, Bintray)

  • Pull 1419 When user has not opted in to letting core/maximum threadpools diverge, ensure dynamic updates to coreSize apply to both
  • Pull 1415 Fix spelling mistake in comments. Thanks @starlight36 !

Version 1.5.7 (Maven Central, Bintray)

  • Pull 1408 Fix Clojure key name for collapsing. Thanks @crimeminister !
  • Pull 1407 Reset percentile snapshot whenever all HystrixRollingPercentile buckets are empty
  • Pull 1397 Javanica: Add option to raise HystrixRuntimeException
  • Pull 1399 Add configuration to make users opt-in to allowing coreSize and maximumSize to diverge. See config [here] (https://github.com/Netflix/Hystrix/wiki/Configuration#allowMaximumSizeToDivergeFromCoreSize)
  • Pull 1396 If command is unsubscribed before any work is done, return Observable.empty().
  • Pull 1393 Javanica: Performance improvement by caching weavingMode boolean. Thanks @ricardoletgo !
  • Pull 1389 Javanica: Send fallback exception to client instead of primary command. Thanks @dmgcodevil !
  • Pull 1385 Bump jmh Gradle plugin to 0.3.1. Thanks @monkey-mas!
  • Pull 1382 Bump jmh to 1.15. Thanks @monkey-mas!
  • Pull 1380 Add jmh test for open-circuit case
  • Pull 1376 Clean up documentation around thread keep-alive. Thanks @bitb !
  • Pull 1375 Remove cancelled tasks from threadpool queue
  • Pull 1371 Allow core and maximum size of threadpools to diverge.

Version 1.5.6 (Maven Central, Bintray)

  • Pull 1368 Upgrade jmh to 1.14.1
  • Pull 1365 Upgrade to Gradle 3.1 / Nebula 3.4.0
  • Pull 1364 Fix backwards-incompatibility introduced in #1356
  • Pull 1363 Fix metrics regression where thread pool objects without any executions were being sent out in metrics streams
  • Pull 1360 Convert command-construction jmh test to single-shot
  • Pull 1356 Add better AppEngine detection mechanism that allows GAE-Flexible to work like any other JVM. Thanks @cadef!
  • Pull 1353 Upgrade to RxJava 1.2.0
  • Pull 1351 Remove histogram object-pooling
  • Pull 1336 Overall Dashboard UX improvements. Thanks @kennedyoliveira !
  • Pull 1320 Adding example of HystrixObservableCollapser. Thanks @zsoltm !
  • Pull 1341 Javanica fix for handling commands with generic types. Thanks @dmgcodevil !
  • Pull 1340 Refactor how commands determine if fallbacks are user-defined

Version 1.5.5 (Maven Central, Bintray)

  • Pull 1323 Remove ReactiveSocket modules and change Jenkins release process back to JDK7

Version 1.5.4 (Maven Central, Bintray)

  • Pull 1308 Update jmh to 1.13
  • Pull 1310 Update nebula.netflixoss Gradle plugin to 3.3.0
  • Pull 1309 Update HdrHistogram to 2.1.9
  • Pull 1307 Update RxJava to 1.1.8
  • Pull 1306 Update Clojure to 1.7.0 and nebula-clojure-plugin to 4.0.1
  • Pull 1305 Update Gradle to 2.14
  • Pull 1304 Make all metrics streams multicast.
  • Pull 1303 Update RxNetty to 0.4.17
  • Pull 1302 Manual merge of #1265. Interrupt execution thread on HystrixCommand#queue()#cancel(true). Thanks @mmanciop!
  • Pull 1300 Update all completion state for scalar command in the onNext handling
  • Pull 1294 Make sure that threadpools shutdown when asked to. Thanks @thesmith!
  • Pull 1297 Fix typo in README. Thanks @ManishMaheshwari!
  • Pull 1295 Fix typo in README. Thanks @C-Otto!
  • Pull 1273 Corrected ignoreExceptions for Observable-returning methods. Thanks @jbojar!
  • Pull 1197 Eureka integration for Hystrix dashboard. Thanks @diegopacheco!
  • Pull 1278 Prevent duplicate arguments from getting into a single collapser RequestBatch
  • Pull 1277 Make HystrixCollapser.toObservable lazy
  • Pull 1276 Make HystrixObservableCollapser.toObservable lazy
  • Pull 1271 Fix race condition in all of the Hystrix*Key.asKey methods. Thanks @daniilguit!
  • Pull 1274 Make AbstractCommand.toObservable lazy
  • Pull 1270 Fix deprecation warnings by upgrading RxJava and Netty usages
  • Pull 1269 Rework hystrix-data-stream module to just include serialization logic
  • Pull 1259 Javanica: added DefaultProperties annotation. Thanks @dmgcodevil!
  • Pull 1261 Add toString() to key implementations. Thanks @mebigfatguy!
  • Pull 1258 Javanica: Change getMethod to recursively search in parent types. Thanks @dmgcodevil!
  • Pull 1255 Introduce intermediate data streams module [LATER REVERTED - SEE #1269 ABOVE]
  • Pull 1254 Allow multiple consumers of sample data to only trigger work once and share data
  • Pull 1251 Fix Dashboard RPS
  • Pull 1247 Call thread pool size setters only when pool size changes. Thanks @yanglifan!
  • Pull 1246 Move HystrixDashboardStream to hystrix-core
  • Pull 1244 Fix handling of invalid weavingMode property. Thanks @mebigfatguy!
  • Pull 1238 Local variable caching fixups. Thanks @mebigfatguy!
  • Pull 1236 ReactiveSocket metrics client/server
  • Pull 1235 Add demo that composes async command executions
  • Pull 1231 Make inner classes static where possible, and remove outer class reference. Thanks @mebigfatguy!
  • Pull 1229 Remove dead Setter class from RequestCollapserFactory. Thanks @mebigfatguy!
  • Pull 1225 Remove unused thunk from HystrixCommandMetrics. Thanks @mebigfatguy!
  • Pull 1224 Remove dead field from RequestCollapserFactory. Thanks @mebigfatguy!
  • Pull 1221 Improve grammar in comments and log messages. Thanks @dysmento !
  • Pull 1211 Add ReactiveSocket metrics stream. Thanks @robertroeser!
  • Pull 1219 Move map lookup outside of loop in collapser code. Thanks @mebigfatguy!

Version 1.5.3 (Maven Central, Bintray)

The largest new feature in this release is that cancellation is now supported. Either calling cancel() on the result of HystrixCommand.queue() or unsubscribe() on the result of HystrixCommand.toObservable().subscribe() will propagate the cancellation to the underlying work.

  • Pull 1218 Fixing unsubscription races by modeling explicit FSMs for command and thread execution state
  • Pull 1217 Remove dead code in RequestEventsStream. Thanks @mebigfatguy!
  • Pull 1214 Fix Servo metric calculation. Bug identified by @AchimWe.
  • Pull 1213 Use parameterized logging. Thanks @mebigfatguy!
  • Pull 1212 Correct logging contexts. Thanks @mebigfatguy!
  • Pull 1210 Javanica: code optimization to fetch parameters only if needed. Thanks @mebigfatguy!
  • Pull 1209 Fixed thread-state cleanup to happen on unsubscribe or terminate
  • Pull 1208 Reorganization of HystrixCollapser/HystrixObservableCollapser logic to support cancellation
  • Pull 1207 Fix command concurrency metric in light of cancellation
  • Pull 1206 Added subscribeOn to HystrixObservableCommand in JMH test to make it async
  • Pull 1204 Reorganization of AbstractCommand logic to support cancellation
  • Pull 1198 Release semaphores upon cancellation.
  • Pull 1194 Improved tests readability a bit by letting exceptions propagate out. Thanks @caarlos0!
  • Pull 1193 More tests using HystrixRequestContext rule. Thanks @caarlos0!
  • Pull 1181 Deprecate getter and setter for unused collapsingEnabled property in Collapser Setter. Thanks @nluchs!
  • Pull 1184 migrating all hystrix-javanica tests to hystrix-junit. Thanks @caarlos0!
  • Pull 1147 Added hystrix-junit. Thanks @caarlos0!

Version 1.4.26 (Maven Central, Bintray)

  • Pull 1169 Javanica: Switch hystrix-javanica to use getExecutionException, which returns Exception object even when command is not executed

Version 1.5.2 (Maven Central, Bintray)

  • Pull 1171 Do all histogram latency summarization upfront to minimize storage/operations on them
  • Pull 1167 Javanica: Switch hystrix-javanica to use getExecutionException, which returns Exception object even when command is not executed
  • Pull 1157 Make HystrixMetricsPoller a daemon thread
  • Pull 1154 Remove more unused methods
  • Pull 1151 Remove unused method in HystrixCollapserProperties
  • Pull 1149 Make queue size of MetricJsonListener configurable
  • Pull 1124 Turning down loglevels of metrics streams
  • Pull 1120 Making the HystrixTimeoutException instance per-command, not static

Version 1.4.25 (Maven Central, Bintray)

  • Pull 1114 Make queue size of MetricsJsonListener configurable
  • Pull 1121 HystrixTimeoutException is non-static for better stacktrace

Artifacts: Maven Central, Bintray

Version 1.5.1 (Maven Central, Bintray)

  • Pull 1118 Revert #1075. Return userThreadLatency to metrics, mostly to maintain format compatibility with data streams from 1.4.x
  • Pull 1116 Fix references to underscore.js over HTTPS
  • Pull 1115 Fix LICENSE reference in README
  • Pull 1111 HystrixRequestContext implements Closeable

Version 1.5.0 (Maven Central, Bintray)

The general premise of this release is to make metrics more flexible within Hystrix. See https://github.com/Netflix/Hystrix/wiki/Metrics-and-Monitoring for a deep dive on the new metrics architecture. The high-level approach is to model metrics directly as a stream, so that Hystrix metrics consumers may aggregate the metrics as they wish. In 1.4.x and prior releases, HystrixRollingNumber and HystrixRollingPercentile were used to store aggregate command counters and command latencies, respectively. These are no longer used.

Instead, new concepts like HystrixCommandCompletionStream are present. These may be consumed by a rolling, summarizing data structure (like HystrixRollingNumber), or they may be consumed without any aggregation at all. This should allow for all metrics processing to move off-box, if you desire to add that piece to your infrastructure.

This version should be backwards-compatible with v1.4.x. If you find otherwise, please submit a Hystrix issue as it was unintentional.

This version also introduces new metric streams: (configuration and Utilization) have been added, along with a request-scoped stream.

Archaius is now a soft-dependency of Hystrix, so you can supply your own configuration mechanism.

Some known semantic changes:

  • Latencies for timeouts and bad-requests are now included in command latency
  • Latency distribution percentiles are now calculated with HdrHistogram library and don't have a max number of elements in the distribution
  • Previously, HealthCounts data allowed reads to see the value in the "hot" bucket. (the one currently being written to). That does not happen anymore - only full read-only buckets are available for reads.
  • Bucket rolling now happens via Rx background threads instead of unlucky Hystrix command threads. This makes command performance more predictable. User-thread latency is now practically indistinguishable from command latency.

Version 1.4.24 (Maven Central, Bintray)

  • Pull 1113 Make HystrixRequestContext implement Closeable
  • Pull 1112 Upgrade to latest Nebula Gradle plugin
  • Pull 1110 Upgrade to RxJava 1.1.1
  • Pull 1108 Javanica HystrixRequestCacheManager should use the concurrency strategy

Version 1.5.0-rc.5 (Maven Central, Bintray)

This version does not have any known bugs, but is not recommended for production use until 1.5.0.

Included changes:

  • Pull 1102 Bugfix to null check on HystrixRequestCache context

Version 1.5.0-rc.4 (Maven Central, Bintray)

This version does not have any known bugs, but is not recommended for production use until 1.5.0.

Included changes:

  • Pull 1099 Bugfix to get Hystrix dashboard operational again

Version 1.5.0-rc.3 (Maven Central, Bintray)

This version does not have any known bugs, but is not recommended for production use until 1.5.0.

A few dependency bumps, but the major change here is that Archaius is now a soft dependency of hystrix-core. Thanks to @agentgt for the PR!. Thanks also to @caarlos0 for the NPE fix in HystrixRequestCache.

Included changes:

  • Pull 1079 Remove dynamic config lookup in HystrixThreadPool
  • Pull 1081 Cleanup hystrix-javanica BadRequest docs
  • Pull 1093 Fix NPE in HystrixRequestCache when HystrixRequestContext not initialized
  • Pull 1083 Made Archaius a soft dependency of hystrix-core. It is now possible to run without Archaius and rely on j.u.l.ServiceLoader or system properties only
  • Pull 1095 Upgrade to Nebula netflixoss 3.2.3
  • Pull 1096 Upgrade to RxJava 1.1.1
  • Pull 1097 Fix POM generation by excluding WAR artifacts

Version 1.5.0-rc.2 (Maven Central, Bintray)

This version does not have any known bugs, but is not recommended for production use until 1.5.0.

This is mostly a new set of features building on top of Release Candidate 1. Specifically, some sample streams (Configuration and Utilization) have been added, along with a request-scoped stream.

Included changes:

  • Pull 1050 Modular command construction
  • Pull 1061 Sample config/utilization streams, and request-scoped streams
  • Pull 1064 Safer enum references in case mismatched Hystrix jars are deployed together
  • Pull 1066 Layer of abstraction on top of ThreadFactory, so AppEngine can run Hystrix
  • Pull 1067 Decouple sample stream JSON from servlets
  • Pull 1067 Decouple request-scoped stream JSON from servlets
  • Pull 1075 Deprecate userThreadLatency, since it is practically identical to executionLatency now

Version 1.5.0-rc.1 (Maven Central, Bintray)

This version does not have any known bugs, but is not recommended for production use until 1.5.0.

The general premise of this release is to make metrics more flexible within Hystrix. See https://github.com/Netflix/Hystrix/wiki/Metrics-and-Monitoring for a deep dive on the new metrics architecture. The high-level view is to make the metrics primitive a stream instead of an aggregate. In 1.4.x and prior releases, HystrixRollingNumber and HystrixRollingPercentile were used to store aggregate command counters and command latencies, respectively. These are no longer used.

Instead, new concepts like HystrixCommandCompletionStream are present. These may be consumed by a rolling, summarizing data structure (like HystrixRollingNumber), or they may be consumed without any aggregation at all. This should allow for all metrics processing to move off-box, if you desire to add that piece to your infrastructure.

This version should be backwards-compatible with v1.4.x. If you find otherwise, please submit a Hystrix issue as it was unintentional.

Some known semantic changes:

  • Latencies for timeouts and bad-requests are now included in command latency
  • Latency distribution percentiles are now calculated with HdrHistogram library and don't have a max number of elements in the distribution
  • Previously, HealthCounts data allowed reads to see the value in the "hot" bucket. (the one currently being written to). That does not happen anymore - only full read-only buckets are available for reads.
  • Bucket rolling now happens via Rx background threads instead of unlucky Hystrix command threads. This makes command performance more predictable. User-thread latency is now practically indistinguishable from command latency.

Artifacts: Maven Central, Bintray

Version 1.4.23 (Maven Central, Bintray)

  • Pull 1032 Make number of timer threads a piece of config (with Archaius integration)
  • Pull 1045 Documentation cleanup in HystrixCommandProperties
  • Pull 1044 Add request context and HystrixObservableCommand to command execution JMH tests
  • Pull 1043 HystrixObservableCollapser emits error to each submitter when batch command encounters error
  • Pull 1039 Use thread-safe data structure for storing list of command keys per-thread
  • Pull 1036 Remove redundant ConcurrentHashMap read when getting name from command class
  • Pull 1035 Rename command execution JMH tests
  • Pull 1034 Remove SHORT_CIRCUITED events from health counts calculation
  • Pull 1027 Fix typo in hystrix-examples-webapp documentation

Version 1.4.22 (Maven Central, Bintray)

Version 1.4.21 (Maven Central, Bintray)

  • Pull 978 Upgrade commons-collections to 3.2.2
  • Pull 959 Support multiple metric streams in hystrix-dashboard
  • Pull 976 Prevent execution observable from running when hook throws an error in onXXXStart
  • Pull 972 Mark servlet-api dependency as 'provided'
  • Pull 968 Add defaultSetter() to properties classes to workaround GROOVY-6286

Version 1.4.20 (Maven Central, Bintray)

  • Pull 965 Upgrade Nebula Gradle plugin
  • Pull 962 Javanica: Support for async commands
  • Pull 960 Avoid Clojure reflection in hystrix-clj
  • Pull 957 Javanica: Fix threadpool properties
  • Pull 956 Upgrade JMH from 1.10.3 to 1.11.1
  • Pull 945 Javanica: Compile-time weaving support
  • Pull 952 Tolerate lack of RequestContext better for custom concurrency strategies
  • Pull 947 Upgrade RxNetty to 0.4.12 for RxNetty metrics stream
  • Pull 946 More extension-friendly Yammer metrics publisher
  • Pull 944 Fix generated POM to include dependencies in 'compile' scope
  • Pull 942 Fix metrics stream fallbackEmit metric
  • Pull 941 Add FALLBACK_MISSING event type and metric

Version 1.4.19 (Maven Central, Bintray)

This version should be the exact same as 1.4.20, but suffered problems during the publishing process. Please use 1.4.20 instead.

Version 1.4.18 (Maven Central, Bintray)

  • Pull 934 Remove duplicate EventSource from dashboard
  • Pull 931 Make HystrixTimeoutException public
  • Pull 930 Support collapser metrics in HystrixMetricPublisher implementations
  • Pull 927 Dashboard fix to isCircuitBreakerOpen

Version 1.4.17 (Maven Central, Bintray)

  • Pull 924 Dashboard protection against XSS
  • Pull 923 Upgrade to RxJava 1.0.14
  • Pull 922 Add DEBUG tag to Servo rolling counter and made it a GaugeMetric

Version 1.4.16 (Maven Central, Bintray)

  • Pull 917 Better version of making servo-metrics-publisher extension-friendly
  • Pull 912 Only look up if HystrixRequestCache is enabled once per HystrixObservableCollapser-invocation
  • Pull 911 Unit test for large threadpool/small queue case in command execution
  • Pull 910 Make servo-metrics-publisher more extension-friendly
  • Pull 905 HystrixObservableCollapser examples
  • Pull 902 Cleanup HystrixObservableCollapser unit tests
  • Pull 900 Remove commons-collections dependency from hystrix-javanica
  • Pull 897 Fix missing null check in hystrix-javanica HystrixCacheKeyGenerator

Version 1.4.15 (Maven Central, Bintray)

  • Pull 890 Allow multiple responses per collapser argument. No semantic change for HystrixCollapser, but a bugfix to HystrixObservableCollapser
  • Pull 892 Cache Setter in MultithreadedMetricsPerfTest
  • Pull 891 Add request context to command JMH tests
  • Pull 889 Replace subscribe() in RequestBatch with unsafeUnsubscribe()
  • Pull 887 Only look up if HystrixRequestCache is enabled once per collapser-invocation
  • Pull 885 Only look up if HystrixRequestCache is enabled once per command-invocation
  • Pull 876 Report BAD_REQUEST to HystrixRequestLog
  • Pull 861 Make hystrix-javanica OSGI-compliant
  • Pull 856 Add missing licenses
  • Pull 855 Save allocation if using a convenience constructor for HystrixCommand
  • Pull 853 Run Travis build in a container
  • Pull 848 Unit tests to demonstrate HystrixRequestLog was not experiencing data races

Version 1.4.14 (Maven Central, Bintray)

Version 1.4.13 (Maven Central, Bintray)

  • Pull 839 Fix typo in hystrix-dashboard js
  • Pull 838 Add back unit tests for Hystrix class and its reset() method in particular
  • Pull 837 Upgrade to RxJava 1.0.13
  • Pull 830 Add validation for rollingCountBadRequest in hystrix-dashboard

Version 1.4.12 (Maven Central, Bintray)

  • Pull 826 Safely handle negative input for delay parameter to metrics stream servlet
  • Pull 825 Only check bucket properties at HystrixRollingNumber construction
  • Pull 824 Only check bucket properties at HystrixRollingPercentile construction
  • Pull 823 Fix half hidden mean metric in Hystrix Dashboard because of container height
  • Pull 818 Only check maxQueueSize value at thread pool construction

Version 1.4.11 (Maven Central, Bintray)

  • Pull 814 Upgrade to RxJava 1.0.12
  • Pull 813 Output something when Hystrix falls back on recoverable java.lang.Error
  • Pull 812 Fixing overload functions in hystrix-clj
  • Pull 808 Update Hystrix Metrics Stream README

Version 1.4.10 (Maven Central, Bintray)

  • Pull 804 Fix memory leak by switching back to AtomicIntegerArray for HystrixRollingPercentile

Version 1.4.9 (Maven Central, Bintray)

  • Pull 799 Fix thread-safety of writes to HystrixRollingPercentile

Version 1.4.8 (Maven Central, Bintray)

  • Pull 797 Move all histogram reads to a single-threaded path.
  • Pull 794 Allow dashboard connection on 'Enter' keypress
  • Pull 787 Reject requests after metrics-event-stream servlet shutdown
  • Pull 785 Update metrics package from com.codahale.metrics to io.dropwizard.metrics

Version 1.4.7 (Maven Central, Bintray)

  • Pull 783 Upgrade to RxJava 1.0.10
  • Pull 781 Shorten collapser stress test to avoid OOM in Travis
  • Pull 780 Allow hooks to throw exceptions and not corrupt internal Hystrix state
  • Pull 779 Use HdrHistogram for capturing latencies
  • Pull 778 Run jmh using more forks and fewer iterations/fork
  • Pull 776 Add Bad requests to Hystrix dashboard
  • Pull 775 Add counters for number of commands, thread pools, groups
  • Pull 774 Add global concurrent Hystrix threads counter

Version 1.4.6 (Maven Central, Bintray)

  • Pull 772 Add try-catch to all hook invocations
  • Pull 773 Move threadPool field to end of metrics stream
  • Pull 770 Fix AbstractCommand.isCircuitBreakerOpen() return value when circuit is forced open or closed
  • Pull 769 Add threadPool to command metrics in event stream
  • Pull 767 JMH upgrade and multithreaded benchmark

Version 1.4.5 (Maven Central, Bintray)

  • Pull 764 Upgrade RxJava from 1.0.7 to 1.0.9
  • Pull 763 Upgrade Jackson for hystrix-metrics-event-stream from 1.9.2 to 2.5.2
  • Pull 760 Set Hystrix-created threads to be daemon
  • Pull 757 Update RxNetty version in hystrix-rx-netty-metrics-stream from 0.3.8 to 0.4.7
  • Pull 755 Improve Javadoc for HystrixThreadPoolProperties.Setter
  • Pull 754 Only fire onFallbackStart/onFallbackError hooks when a user-supplied fallback is invoked
  • Pull 753 Add timeout to dashboard for semaphore commands
  • Pull 750 First pass at jmh performance benchmarking
  • Pull 748 Fix return value of HystrixCircuiBreakerImpl.isOpen when it loses a race to open a circuit
  • Pull 746 Improve Javadoc for HystrixCommandProperties.Setter

Version 1.4.4 (Maven Central, Bintray)

  • Pull 743 Proper Javadoc deprecation for command timeouts being thread-specific
  • Pull 742 Add flag to disable command timeouts
  • Pull 741 Bugfix to java.lang.Error handling
  • Pull 735 (Javanica) BatchHystrixCommand
  • Pull 739 Mark some java.lang.Errors as unrecoverable and never trigger fallback
  • Pull 738 Filter out thread pools with no thread activity from hystrics-metrics-event-stream
  • Pull 732 Comment out flaky unit test

Version 1.4.3 (Maven Central, Bintray)

  • Pull 731 Revert to Java 6
  • Pull 728 Add semaphore-rejected count to dashboard
  • Pull 711 Use Archaius for plugin registration
  • Pull 671 Stop passing Transfer-Encoding header when streaming metrics

Version 1.4.2 (Maven Central, Bintray)

  • Pull 723 Fixed Javanica issue where annotation appeared in superclasses
  • Pull 727 Fixed TravisCI issue by raising timeout in fallback rejection unit test
  • Pull 724 Fixed backwards-incompatibility where using a custom HystrixConcurrencyStrategy forced use of a non-null HystrixRequestContext
  • Pull 717 Added error message to dashboard HTML when connection to metrics source fails

Version 1.4.1 (Maven Central, Bintray)

  • Pull 716 Fixed backwards-incompatibility where .execute(), .queue(), .observe(), .toObservable() were all made final in 1.4.0

Version 1.4.0 (Maven Central, Bintray)

This version adds HystrixObservableCommand and implements both it and HystrixCommand in terms of Observables.

A HystrixObservableCommand allows for fully non-blocking commands that can be composed as part of a larger Observable chain. See the wiki for more details on usage. Here's an example (using Java 8):

public class ObservableHttpCommand extends HystrixObsverableCommand<BackendResponse> {

@Override
protected Observable<BackendResponse> construct() {
    return httpClient.submit(HttpClientRequest.createGet("/mock.json?numItems=" + numItems))
        .flatMap((HttpClientResponse<ByteBuf> r) -> r.getContent()
        .map(b -> BackendResponse.fromJson(new ByteBufInputStream(b))));
    }

@Override
protected Observable<BackendResponse> resumeWithFallback() {
    return Observable.just(new BackendResponse(0, numItems, new String[] {}));
}}

Because an Observable represents a stream of data, your HystrixObservableCommand may now return a stream of data, and supply a stream of data as a fallback. The methods to do so are construct() and resumeWithFallback(), respectively. All other aspects of the Hystrix state machine work the same in a HystrixCommand. See this wiki page for a diagram of this state machine.

The public API of HystrixCommand is unchanged, though the internals have significantly changed. Some bugfixes are now possible that affect Hystrix semantics:

  • Timeouts now apply to semaphore-isolated commands as well as thread-isolated commands. Before 1.4.x, semaphore-isolated commands could not timeout. They now have a timeout registered on another (HystrixTimer) thread, which triggers the timeout flow. If you use semaphore-isolated commands, they will now see timeouts. As all HystrixCommands have a default timeout, this potentially affects all semaphore-isolated commands.
  • Timeouts now fire on HystrixCommand.queue(), even if the caller never calls get() on the resulting Future. Before 1.4.x, only calls to get() triggered the timeout mechanism to take effect.

You can see more in-depth examples of how the new functionality of Hystrix 1.4 is used at Netflix/ReactiveLab.

You can learn more about Observables and RxJava at Netflix/RxJava.

As this was a major refactoring of Hystrix internals, we (Netflix) have run a release candidate of Hystrix 1.4 in canaries and production over the last month to gain confidence.

  • Pull 701 Fix Javadoc warnings
  • Pull 700 Example code for publishing to Graphite

Version 1.4.0 Release Candidate 9 (Maven Central, Bintray)

NOTE: This code is believed to be production worthy. As of now, there are no known bugs preventing this becoming 1.4.0. Please report any design issues/questions, bugs, or any observations about this release to the Issues page.

  • Pull 697 Add execution event for FALLBACK_REJECTION and unit tests
  • Pull 696 Upgrade to RxJava 1.0.7
  • Pull 694 Make execution timeout in HystrixCommandProperties work in the case when classes extend HystrixCommandProperties
  • Pull 693 Hystrix Dashboard sorting issue

Version 1.4.0 Release Candidate 8 (Maven Central, Bintray)

NOTE: This code is believed to be production worthy. As of now, there are no known bugs preventing this becoming 1.4.0. Please report any design issues/questions, bugs, or any observations about this release to the Issues page.

  • Pull 691 HystrixCommandTest test with large number of semaphores
  • Pull 690 Add back ExceptionThreadingUtility
  • Pull 688 Add metrics for EMIT and FALLBACK_EMIT
  • Pull 687 Fixed issue where fallback rejection was also incrementing fallback failure metric
  • Pull 686 HystrixCommandTest Unit test refactoring
  • Pull 683 Add and Deprecate pieces of execution hook API to be more consistent
  • Pull 681 Add cache hit execution hook
  • Pull 680 Add command rejection metrics for HystrixThreadPools

Version 1.4.0 Release Candidate 7 (Maven Central, Bintray)

NOTE: This code is believed to be production worthy. As of now, there are no known bugs preventing this becoming 1.4.0. Please report any design issues/questions, bugs, or any observations about this release to the Issues page

  • Pull 678 Fix current concurrent execution count
  • Pull 676 Add test to confirm that bad requests do not affect circuit breaker's computed error percentage
  • Pull 675 Deprecate method names for executionTimeout that are thread-specific
  • Pull 672 Limit the thread-interrupt behavior to occur only on timeouts
  • Pull 669 Added unit tests to demonstrate non-blocking semaphore timeout
  • Pull 667 Added rolling max counter for command execution
  • Pull 666 Added missing licenses
  • Pull 665 Added comment to HystrixConcurrencyStrategy about non-idempotency of strategy application
  • Pull 647 Tie command property to thread interrupt
  • Pull 645 Remove incorrect reference to async timeout
  • Pull 644 Add RequestCollapser metrics to Yammer Metrics Publisher
  • Pull 643 Stress-test HystrixObservalbeCollapser
  • Pull 642 Fix flakiness of HystrixObservableCommandTest.testRejectedViaSemaphoreIsolation
  • Pull 641 Fix flakiness of testSemaphorePermitsInUse
  • Pull 608 Make HystrixObservableCommand handle both sync and async exceptions
  • Pull 607 Upgrade RxJava from 1.0.4 to 1.0.5
  • Pull 604 Added EMIT and FALLBACK_EMIT event types that get emitted in HystrixObservableCommand
  • Pull 599 Added metrics to HystrixObservableCollapser
  • Pull 596 Fixed HystrixContextScheduler to conform with RxJava Worker contract
  • Pull 583 Style and consistency fixes
  • Pull 582 Add more unit tests for non-blocking HystrixCommand.queue()
  • Pull 580 Unit test to demonstrate fixed non-blocking timeout for HystrixCommand.queue()
  • Pull 579 Remove synchronous timeout
  • Pull 577 Upgrade language level to Java7
  • Pull 576 Add request collapser metrics
  • Pull 573 Fix link to CHANGELOG.md in README.md
  • Pull 572 Add bad request metrics at the command granularity
  • Pull 567 Comment out flaky unit-tests
  • Pull 566 Fix hardcoded groupname in CodaHale metrics publisher
  • Commit 6c08d9 Bumped nebula.netflixoss from 2.2.3 to 2.2.5
  • Pull 562 Build changes to nebula.netflixoss (initially submitted as Pull 469)

Version 1.4.0 Release Candidate 6 (Maven Central)

NOTE: This code is believed to be production worthy but is still a "Release Candidate" until these possible functional or design issues are resolved.

  • Pull 534 Bump RxJava to 1.0.4
  • Pull 532 Hystrix-Clojure: Fix typo
  • Pull 531 Move onThreadStart execution hook after check that wrapping thread timed out
  • Pull 530 Add shutdown hook to metrics servlet for WebSphere
  • Pull 527 Creating a synthetic exception in the semaphore execution and short-circuited case
  • Pull 526 Move onRunSuccess/onRunError and thread-pool book-keeping to Hystrix thread
  • Pull 524 Change calls from getExecutedCommands() to getAllExecutedCommands()
  • Pull 516 Updated HystrixServoMetricsPublisher initalization of singleton
  • Pull 489 Javanica: Request Caching
  • Pull 512 Add execution hook Javadoc
  • Pull 511 Fix missing onComplete hook call when command short-circuits and missing onRunSuccess hook call in thread-timeout case
  • Pull 466 Add unit tests to HystrixCommand and HystrixObservableCommand
  • Pull 465 Handle error in construction of HystrixMetricsPoller
  • Pull 457 Fixing resettability of HystrixMetricsPublisherFactory
  • Pull 451 Removed ExceptionThreadingUtility
  • Pull 366 Added support to get command start time in Nanos
  • Pull 456 Allow hooks to generate HystrixBadRequestExceptions that get handled appropriately
  • Pull 454 Add tests around HystrixRequestLog in HystrixObservableCommand
  • Pull 453 Resettable command and thread pool defaults
  • Pull 452 Make HystrixPlugins resettable
  • Pull 450 Add fallback tests to HystrixObservableCommand
  • Pull 449 Move thread completion bookkeeping to end of chain
  • Pull 447 Synchronous queue fix
  • Pull 376 Javanica README cleanup
  • Pull 378 Exection hook call sequences (based on work submitted in Pull 327)
  • Pull 374 RequestBatch logging
  • Pull 371 Defer creation of IllegalStateException in collapser flow (based on work submitted in Pull 264)
  • Pull 369 Added basic auth to Hystrix Dashboard (based on work submitted in Pull 336)
  • Pull 367 Added thread pool metrics back to execution flow (based on test submitted in Pull 339)
  • Pull 365 Fix Javadoc for HystrixCommand.Setter
  • Pull 364 Upgrade servo to 0.7.5
  • Pull 362 Fixed hystrix-rxnetty-metrics-stream unit tests
  • Pull 359 Fixed Javanica unit tests
  • Pull 361 Race condition when creating HystrixThreadPool (initially submitted as Pull 270)
  • Pull 358 Fixed Clojure unit tests that failed with RxJava 1.0
  • Commit 2edcd5 Upgrade to core-metrics 3.0.2
  • Pull 310 Osgi-ify hystrix-core, hystrix-examples
  • Pull 340 Race condition when creating HystrixThreadPool
  • Pull 343 Added 3 new constructors for common command setup
  • Pull 347 Javanica: Allow for @HystrixCommand to be used on parameterized return type
  • Pull 353 Fixing a hystrix-examples compilation failure
  • Pull 338 API Changes after design review of Issue 321
  • Pull 344 Upgrade to Gradle 1.12
  • Pull 334 Javanica: Hystrix Error Propagation
  • Pull 326 Javanica: Added support for setting threadPoolProperties through @HystrixCommand annotation
  • Pull 318 HystrixAsyncCommand and HystrixObservableCommand
  • Pull 316 Add support for execution.isolation.semaphore.timeoutInMilliseconds

Version 1.3.20 (Maven Central)

Version 1.3.19 (Maven Central)

  • Pull 348 Javanica: Allow for @HystrixCommand to be used on parameterized return type
  • Pull 329 Javanica: allowing configuration of threadPoolProperties through @HystrixCommand annotation

Version 1.4.0 Release Candidate 5 (Maven Central)

NOTE: This code is believed to be production worthy but is still a "Release Candidate" until these possible functional or design issues are resolved.

  • Pull 314 RxJava 0.20 and Remove Deprecated Usage
  • Pull 307 Dashboard: Avoid NPE when 'origin' parameter not present

Version 1.3.18 (Maven Central)

  • Pull 305 Removing deprecated RxJava usage

Version 1.3.17 (Maven Central)

Version 1.4.0 Release Candidate 4 (Maven Central)

NOTE: This code is NOT considered production worthy yet, hence the "Release Candidate" status.

This fixes some bugs and changes the HystrixObservableCollapser signature to support Observable batches.

  • Pull 256 Fix Race Condition on Timeout
  • Pull 261 New signature for HystrixObservableCollapser
  • Pull 254 Remove jsr305 Dependency
  • Pull 260 RxJava 0.18.2
  • Pull 253 Handling InterruptedExceptions in the HystrixMetricsStreamServlet

Version 1.4.0 Release Candidate 3 (Maven Central)

NOTE: This code is NOT considered production worthy yet, hence the "Release Candidate" status.

This adds non-blocking support to the collapser via the HystrixObservableCollapser type, fixes some bugs and upgrades to RxJava 0.18.

  • Pull 245 HystrixObservableCollapser
  • Pull 246 RxJava 0.18
  • Pull 250 Tripped CircuitBreaker Wouldn't Close Under Contention
  • Pull 243 Update servo to 0.6
  • Pull 240 Add missing reset for CommandExecutionHook in HystrixPlugins.UnitTest
  • Pull 244 Javanica: Cleaner error propagation

Version 1.4.0 Release Candidate 2 (Maven Central)

NOTE: This code is NOT considered production worthy yet, hence the "Release Candidate" status.

This fixes a bug found in Release Candidate 1 that caused the semaphore limits to be applied when thread isolation was chosen.

It also stops scheduling callbacks onto new threads and lets the Hystrix threads perform the callbacks.

  • Pull 238 Fix for Semaphore vs Thread Isolation Bug
  • Pull 230 Javanica Module: Added support for Request Cache and Reactive Execution

Version 1.4.0 Release Candidate 1 (Maven Central)

This is the first release candidate of 1.4.0 that includes HystrixObservableCommand (Source) that supports bulkheading asynchronous, non-blocking sources.

NOTE: This code is NOT considered production worthy yet, hence the "Release Candidate" status.

It has run for 1 day on a single machine taking production traffic at Netflix. This is sufficient for us to proceed to a release candidate for official canary testing, but we intend to test for a week or two before doing a final release.

Here is a very basic example using Java 8 to make an HTTP call via Netty and receives a stream of chunks back:

    public static void main(String args[]) {
        HystrixObservableCommand<String> command = bulkheadedNetworkRequest("www.google.com");
        command.toObservable()
                // using BlockingObservable.forEach for demo simplicity
                .toBlockingObservable().forEach(d -> System.out.println(d));
        System.out.println("Time: " + command.getExecutionTimeInMilliseconds() 
                + "  Events: " + command.getExecutionEvents());
    }

    public static HystrixObservableCommand<String> bulkheadedNetworkRequest(final String host) {
        return new HystrixObservableCommand<String>(HystrixCommandGroupKey.Factory.asKey("http")) {

            @Override
            protected Observable<String> run() {
                return directNetworkRequest(host);
            }

            @Override
            protected Observable<String> getFallback() {
                return Observable.just("Error 500");
            }

        };
    }

    public static Observable<String> directNetworkRequest(String host) {
        return RxNetty.createHttpClient(host, 80)
                .submit(HttpClientRequest.createGet("/"))
                .flatMap(response -> response.getContent())
                .map(data -> data.toString(Charset.defaultCharset()));
    }
  • Pull 218 Hystrix 1.4 - Async/Non-Blocking
  • Pull 217 Javanica: Added support for "Reactive Execution" and "Error Propagation"
  • Pull 219 Restore HystrixContext* Constructors without ConcurrencyStrategy

Version 1.3.16 (Maven Central)

  • Pull 258 Skip CachedObservableOriginal when no getCacheKey()
  • Pull 259 Fix #257 with RxJava 0.18.2

Version 1.3.15 (Maven Central)

  • Pull 248 RxJava 0.18 for Hystrix
  • Pull 249 Tripped CircuitBreaker Wouldn't Close Under Contention
  • Pull 229 Javanica: Added support for Request Cache and Reactive Execution
  • Pull 242 Javanica: Cleaner error propagation

Version 1.3.14 (not released)

  • Pull 228 Upgrade 1.3.x to RxJava 0.17.1

Version 1.3.13 (Maven Central)

Version 1.3.12 (Maven Central)

  • Pull 214 HystrixContextCallable/Runnable Constructors

Version 1.3.11 (Maven Central)

  • We'll ignore this release ever happened. Exact same binary as 1.3.10. (It helps to push code to Github before releasing.)

Version 1.3.10 (Maven Central)

  • Pull 211 Update Javassist version to 3.18.1-GA
  • Pull 213 BugFix: Timeout does not propagate request context
  • Pull 204 deploying hystrix dashboard on tomcat, SLF4J complains about a missing implementation
  • Pull 199 Add new module for publishing metrics to Coda Hale Metrics version 3

Version 1.3.9 (Maven Central)

  • Pull 210 HystrixContextScheduler was not wrapping the Inner Scheduler
  • Pull 206 Bugfix ExceptionThreadingUtility
  • Pull 203 Made HystrixTimer initialization thread-safe

Version 1.3.8 (Maven Central)

  • Pull 194 BugFix: Do not overwrite user thread duration in case of timeouts

Version 1.3.7 (Maven Central)

  • Pull 189 BugFix: Race condition between run() and timeout
  • Pull 190 BugFix: ConcurrencyStrategy.wrapCallable was not being used on callbacks

Version 1.3.6 (Maven Central)

  • Pull 181 [hystrix-contrib/hystrix-clj] Making Command keys quantified by namespaces
  • Pull 182 Removing unused Legend component latent. Removed from html templates/css
  • Pull 183 Bugfix to HystrixBadRequestException handling
  • Pull 184 BugFix: queue() BadRequestException Handling on Cached Response
  • Pull 185 BugFix: Observable.observeOn Scheduler Lost RequestContext
  • 0fb0d3d RxJava 0.14

Version 1.3.5 (Maven Central)

Version 1.3.4 (Maven Central)

Version 1.3.3 (Maven Central)

Version 1.3.2 (Maven Central)

  • Pull 173 Fix Exception vs Throwable typo in preparation for RxJava 0.11.0

Version 1.3.1 (Maven Central)

  • Pull 170 Add rx support to hystrix-clj

Version 1.3.0 (Maven Central)

This version integrations Hystrix with RxJava to enable non-blocking reactive execution and functional composition.

Async execution can now be done reactively with the observe() method and it will callback when the value is received:

Observable<String> s = new CommandHelloWorld("World").observe();

A simple example of subscribing to the value (using a Groovy lambda instead of anonymous inner class):

s.subscribe({ value -> println(value) })

A "Hello World" example of reactive execution can be found on the wiki.

More can be learned about RxJava and the composition features at https://github.com/Netflix/RxJava/wiki

This release is a major refactoring of the Hystrix codebase. To assert correctness and performance it was run in production canary servers on the Netflix API several times during development and for over a week during release candidate stages. Prior to this release the 1.3.0.RC1 version has been running in full Netflix API production for several days performing billions of executions a day.

  • Pull 151 Version 1.3 - RxJava Observable Integration
  • Pull 158 Expose current HystrixCommand to fns

Version 1.2.18 (Maven Central)

  • Pull 152 Escape meta-characters to fix dashboard
  • Pull 156 Improve hystrix-clj docs
  • Pull 155 Reset Hystrix after hystrix-clj tests have run

Version 1.2.17 (Maven Central)

  • Pull 138 Eclipse and IDEA Config
  • Pull 141 Upgrade Clojuresque (hystrix-clj builds)
  • Pull 139 Fix dashboard math bug on thread pool rate calculations
  • Pull 149 Allow getFallback to query failure states

Version 1.2.16 (Maven Central)

  • Pull 132 Add with-context macro for conviently wrapping collapsers in thier own context
  • Pull 136 Fixed the mock stream
  • Pull 137 Limit scope of CurrentThreadExecutingCommand

Version 1.2.15 (Maven Central)

This is fixing a bug introduced in the last release that affects semaphore isolated commands that use request caching.

Version 1.2.14 (Maven Central)

  • Issue 116 Mechanism for Auditing Network Access Not Isolated by Hystrix

A new module for instrumenting network access to identify calls not wrapped by Hystrix.

See the module README for more information: https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-network-auditor-agent

Version 1.2.13 (Maven Central)

  • Issue 127 Add destroy() method to MetricsServlet

Version 1.2.12 (Maven Central)

  • Issue 124 NPE if Hystrix.reset() called when it's already shutdown

Version 1.2.11 (Maven Central)

  • Issue 113 IllegalStateException: Future Not Started (on thread pool rejection with response caching)
  • Issue 118 Semaphore counter scope was global instead of per-key
  • Pull 121 Concurrent execution metric for semaphore and thread isolation

Version 1.2.10 (Maven Central)

  • Issue 80 HystrixCollapser Concurrency and Performance Fixes

Version 1.2.9 (Maven Central)

Version 1.2.8 (Maven Central)

  • Issue 102 Hystrix.reset() functionality for clean shutdown and resource cleanup
  • Pull 103 hystrix-clj cleanup
  • Pull 104 javadoc clarification
  • Pull 105 Added IntelliJ IDEA support, cleanup to Eclipse support

Version 1.2.7 (Maven Central)

Version 1.2.6 (Maven Central)

  • Issue 96 Remove 'final' modifiers to allow mocking

Version 1.2.5 (Maven Central)

  • Pull 94 Force character encoding for event stream to utf-8
  • Issue 60 Dashboard: Hover for full name (when shortened with ellipsis)
  • Issue 53 RequestLog: Reduce Chance of Memory Leak

Version 1.2.4 (Maven Central)

  • Pull 91 handle null circuit breaker in HystrixMetricsPoller

Version 1.2.3 (Maven Central)

  • Issue 85 hystrix.stream holds connection open if no metrics
  • Pull 84 include 'provided' dependencies in Eclipse project classpath

Version 1.2.2 (Maven Central)

  • Issue 82 ThreadPool stream should include reportingHosts

Version 1.2.1 (Maven Central)

  • Issue 80 IllegalStateException: Future Not Started
  • Issue 78 Include more info when collapsed requests remain in queue

Version 1.2.0 (Maven Central)

  • Issue 10 HystrixCommand Execution Hooks via Plugin
    • Pull 71 Change Throwable to Exception
    • Pull 71 jettyRun support for running webapps via gradle
  • Issue 15 Property to disable percentile calculations
  • Issue 69 Property to disable fallbacks
  • Pull 73 Make servlet-api a provided dependency
  • Pull 74 Dashboard problem when using Turbine (Stream not flushing)

Version 1.1.7 (Maven Central)

  • Pull 67 Unit tests for request log and checked exceptions
  • Pull 66 Making provided scope transtive
  • Pull 65 Fixed gitignore definition of build output directories
  • Issue 63 Add "throws Exception" to HystrixCommand run() method
  • Pull 62 applying js fixes to threadPool ui
  • Pull 61 Request log with timeouts
  • Issue 55 HysrixRequestLog: Missing Events and Time on Timeouts
  • Issue 20 TotalExecutionTime not tracked on queue()
  • Pull 57 Dashboard js fix
  • Issue 39 HystrixPlugins Bootstrapping Problem - Race Conditions
  • Pull 52 Gradle Build Changes

Version 1.1.6

  • Pull 51 Merging in gradle-template, specifically provided

Version 1.1.5

  • Pull 50 Make javax.servlet-api a 'provided' dependency not 'compile'

Version 1.1.4

  • Pull 49 Cleaner design (for metrics) by injecting listener into constructor.

Version 1.1.3

  • Pull 47 Support pausing/resuming metrics poller
  • Pull 48 Fixing non-deterministic unit test
  • README files added to submodules

Version 1.1.2

Version 1.1.1

  • Issue 24 Yammer Metrics Support
  • Pull 43 Fix the wrong percentile for latencyExecute_percentile_75 in the Servo publisher

Version 1.1.0

  • Pull 32 servo-event-stream module
  • Pull 33 Remove Servo dependency from core, move to submodule
  • Pull 35 Metrics event stream
  • Issue 34 Remove Strategy Injection on HystrixCommand
  • Pull 36 example webapp
  • Pull 37 Migrate metrics stream from org.json.JSONObject to Jackson

Version 1.0.3

  • Pull 4 Contrib request context servlet filters
  • Pull 16 Change logger from info to debug for property changes
  • Issue 12 Use logger.error not logger.debug for fallback failure
  • Issue 8 Capture exception from run() and expose getter
  • Issue 22 Default Collapser scope to REQUEST if using Setter
  • Pull 27 Initialize HealthCounts to non-null value
  • Issue 28 Thread pools lost custom names in opensource refactoring
  • Pull 30 Simplified access to HystrixCommandMetrics
  • Javadoc and README changes

Version 1.0.2

  • Javadoc changes

Version 1.0.0

  • Initial open source release