Skip to content

Releases: reactor/BlockHound

1.0.6.RELEASE

06 Apr 07:22
df4b9f9

Choose a tag to compare

What's Changed

  • Ensure junit-platform has compile dep to blockhound in pom (#189) @simonbasle

1.0.5.RELEASE

30 Mar 07:39
2a9ce0d

Choose a tag to compare

What's Changed

⚠️ Update considerations

  • blockhound-junit-platform's pom.xml declares a dependency to blockhound with runtime scope instead of compile
    • consider adding an explicit dependency to blockhound (using same version number) if it isn't already the case

🚀 Features / Enhancements

  • Deploy releases to SonatypeOSS (staging repo) instead of Bintray (#182) @simonbasle

📖 Documentation

  • Document special name in (dis)allowBlockingCallsInside (#185) @simonbasle

🧹 Housekeeping

📦 Dependency updates

1.0.4.RELEASE

22 Jun 10:06
9707f44

Choose a tag to compare

What's Changed

🚀 Features / Enhancements

  • Whitelist standard streams (System.out/System.err) (#125) @bsideup

🐛 Bug Fixes

📖 Documentation

📦 Dependency updates

1.0.3.RELEASE

26 Mar 13:57
44ea5df

Choose a tag to compare

What's Changed

This release adds Java 14 compatibility.
A smoke test is added to ensure that Java 13+ environment is properly configured (see #33).

🚀 Features / Enhancements

  • Perform a smoke test after instrumenting the classes. (#104) @bsideup

📖 Documentation

  • Add maven installation instructions. (#79) @daggerok
  • Improve example of custom blockingMethodCallback (#81) @lhotari

📦 Dependency updates

1.0.2.RELEASE

07 Feb 13:28

Choose a tag to compare

What's Changed

🚀 Features / Enhancements

  • Add dynamic predicate support (Kotlin, Scala, others) (#72) @bsideup
  • Add new JDK13 calls, fix tests (#73) @bsideup
  • Hide BlockHound's own frame from the Error (#62) @bsideup
  • Throw specific BlockingOperationError instead of Error (#65) @bhchandra
  • Use newly introduced BlockingOperationError in assertions (#67) @bsideup

🐛 Bug Fixes

  • Use getInternalName() instead of getName() (#78) @bsideup

🧹 Housekeeping

1.0.1.RELEASE

22 Oct 20:38
1ba81aa

Choose a tag to compare

What's Changed

🐛 Bug Fixes

  • Shading is the gift that keeps on giving (#61) @bsideup

1.0.0.RELEASE

03 Oct 18:09

Choose a tag to compare

This is a first release of BlockHound 🎉

Changes since 1.0.0.RC1

📃 Docs

🚀 Features / Enhancements

  • Simplify integrations after RC1 refactorings (#54) @bsideup
  • hide BlockHoundRuntime from public API (#53) @bsideup
    ⚠️ note that this is a source (not binary) breaking change (if you were using BlockHoundRuntime class directly), but it was never intended to be used directly, only by instrumentation.

🐛 Bug Fixes

  • Hide BlockHound's constructor (#55) @bsideup
    ⚠️ this is a binary change, but only if you were calling new BlockHound(), which does not make a lot of sense :)

1.0.0.RC1

02 Sep 14:38
312fc5f

Choose a tag to compare

1.0.0.RC1 Pre-release
Pre-release

What's Changed

This this is the first release candidate and it focuses on the performance.

Previous versions were using a native agent (in C++).
But it was problematic due to the complexity of the build plus the performance overhead of the native switch.

This release includes a major rewrite that removes the native code and now only uses the bytecode instrumentation to achieve the same result.

Not only it helped us to reduce the complexity of the project (both build-wise and code-wise, making it easier for potential contributors to submit their changes), but the performance was improved significantly!

Before:

Benchmark                                                 Mode  Cnt  Score   Error  Units
BlockHoundBenchmark.baselineBlockingCallInBlockingThread  avgt    9  0,520 ± 0,028  us/op
BlockHoundBenchmark.measureBlockingCallInBlockingThread   avgt    9  0,853 ± 0,040  us/op
BlockHoundBenchmark.measureAllowedBlockingCall            avgt    9  3,039 ± 0,145  us/op

After:

Benchmark                                                 Mode  Cnt  Score   Error  Units
BlockHoundBenchmark.measureBlockingCallInBlockingThread   avgt    9  0,528 ± 0,025  us/op
BlockHoundBenchmark.measureAllowedBlockingCall            avgt    9  0,538 ± 0,037  us/op

If a blocking call in non-non-blocking thread was previously having an overhead of ~0,320us/op, it is now close to 0,010us/op, which is already a great improvement!

But, there was a case where the implementation detail of BlockHound was adding even more overhead - allowed blocked calls (logging, class loading, etc etc).
And, if before it was ~2,500us/op, it went down to ~0,020us/op 🎉

🚀 Features / Enhancements

  • Replace native agent with ThreadLocal-based API (#46) @bsideup
  • Use ThreadLocal instead of the tags to store the non-blocking marker (#45) @bsideup
  • Add JMH microbenchmarks (#35) @szpak

1.0.0.M5

29 Jul 09:40
88b1e94

Choose a tag to compare

1.0.0.M5 Pre-release
Pre-release

What's Changed

🐛 Bug Fixes

1.0.0.M4

10 Jun 17:36
6766234

Choose a tag to compare

1.0.0.M4 Pre-release
Pre-release

What's Changed

🚀 Features / Enhancements

  • Whitelist ConcurrentHashMap#initTable (#34) @bsideup
  • Return "is blocking" by default if no frames are matched (#32) @bsideup
  • Declare an Java9 JPMS Automatic-Module-Name for agent and junit (#31) @simonbasle

📖 Documentation

  • Fix link to supported_testing_frameworks.md from quick_start.md (#30) @philsttr