faulty 0.8.6 → 0.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +160 -28
- data/README.md +19 -0
- data/lib/faulty/circuit.rb +3 -5
- data/lib/faulty/deprecation.rb +1 -1
- data/lib/faulty/patch/base.rb +2 -2
- data/lib/faulty/patch/redis.rb +2 -4
- data/lib/faulty/status.rb +3 -1
- data/lib/faulty/storage/circuit_proxy.rb +1 -0
- data/lib/faulty/storage/fallback_chain.rb +8 -0
- data/lib/faulty/storage/fault_tolerant_proxy.rb +8 -1
- data/lib/faulty/storage/interface.rb +11 -0
- data/lib/faulty/storage/memory.rb +7 -0
- data/lib/faulty/storage/null.rb +5 -0
- data/lib/faulty/storage/redis.rb +56 -42
- data/lib/faulty/version.rb +1 -1
- data/lib/faulty.rb +23 -0
- metadata +6 -45
- data/.github/workflows/ci.yml +0 -66
- data/.gitignore +0 -11
- data/.rspec +0 -2
- data/.rubocop.yml +0 -97
- data/Gemfile +0 -32
- data/bin/benchmark +0 -75
- data/bin/check-version +0 -14
- data/bin/console +0 -12
- data/bin/rspec +0 -29
- data/bin/rubocop +0 -29
- data/bin/yard +0 -29
- data/bin/yardoc +0 -29
- data/bin/yri +0 -29
- data/faulty.gemspec +0 -36
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3148a3eb0ec2e45213ddb40bef524a3b0fa83e83b467101982d7ced65cbac71a
         | 
| 4 | 
            +
              data.tar.gz: fd9584532fde4f3409720ca1884f825fc4d6eabb4ebe133c80e969bc0131ab9f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 330476d53d625bb22dbd2f5855dd40f4f4849135b1407df72e9ff3849504341f9e67cf6ce5bb0606bd62100a9d11dda2f7d7754be081b40b8c81784d1e25265d
         | 
| 7 | 
            +
              data.tar.gz: 9f8023dbd90ea1d9fb55a1a5c7a9c96a9344b0db43e0735113545406734e0f02ea14bcc1550b8d2b335e1b59bd63591812ed2426f66f097789185531f6d2db51
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,12 +1,46 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            Changelog
         | 
| 2 | 
            +
            ===================
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            All notable changes to this project will be documented in this file.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
         | 
| 7 | 
            +
            and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            [Unreleased]
         | 
| 10 | 
            +
            -------------------
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            [0.8.7] - 2022-08-11
         | 
| 13 | 
            +
            -------------------
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            ### Added
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            * Add a Faulty#clear method to reset all circuits #55 justinhoward
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            ### Fixed
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            * Update rubocop cleanup gemspec #56 justinhoward
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            [0.8.6] - 2022-02-24
         | 
| 24 | 
            +
            -------------------
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            ### Added
         | 
| 2 27 |  | 
| 3 28 | 
             
            * Define an inspect method that represent circuit #50 JuanitoFatas
         | 
| 4 29 |  | 
| 5 | 
            -
             | 
| 30 | 
            +
            [0.8.5] - 2022-02-17
         | 
| 31 | 
            +
            -------------------
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            ### Added
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            * Add granular errors for Elasticsearch patch #48 justinhoward
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            ### Fixed
         | 
| 6 38 |  | 
| 7 39 | 
             
            * Fix yard warnings #49 justinhoward
         | 
| 8 40 | 
             
            * Fix crash in Redis storage backend if opened_at was missing #46 justinhoward
         | 
| 9 | 
            -
             | 
| 41 | 
            +
             | 
| 42 | 
            +
            ### Changed
         | 
| 43 | 
            +
             | 
| 10 44 | 
             
            * Return status conditionally for Storage::Interface#entry #45 justinhoward
         | 
| 11 45 |  | 
| 12 46 | 
             
            ### Deprecations
         | 
| @@ -18,22 +52,35 @@ | |
| 18 52 | 
             
            * The error_module option is deprecated. Patches should use the error_mapper
         | 
| 19 53 | 
             
              option instead. The option will be removed in 0.9
         | 
| 20 54 |  | 
| 55 | 
            +
            [0.8.4] - 2022-01-28
         | 
| 56 | 
            +
            -------------------
         | 
| 21 57 |  | 
| 22 | 
            -
             | 
| 58 | 
            +
            ### Added
         | 
| 23 59 |  | 
| 24 60 | 
             
            * Add Elasticsearch client patch #44 justinhoward
         | 
| 25 61 |  | 
| 26 | 
            -
             | 
| 62 | 
            +
            [0.8.2] - 2021-10-18
         | 
| 63 | 
            +
            -------------------
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            ### Fixed
         | 
| 27 66 |  | 
| 28 67 | 
             
            * Fix crash for older versions of concurrent-ruby #42 justinhoward
         | 
| 29 68 |  | 
| 30 | 
            -
             | 
| 69 | 
            +
            [0.8.1] - 2021-09-22
         | 
| 70 | 
            +
            -------------------
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            ### Changed
         | 
| 31 73 |  | 
| 32 74 | 
             
            * Add cause message to CircuitTrippedError #40 justinhoward
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            ### Fixed
         | 
| 77 | 
            +
             | 
| 33 78 | 
             
            * Record failures for cache hits #41 justinhoward
         | 
| 34 79 |  | 
| 80 | 
            +
            [0.8.0] - 2021-09-14
         | 
| 81 | 
            +
            -------------------
         | 
| 35 82 |  | 
| 36 | 
            -
             | 
| 83 | 
            +
            ### Added
         | 
| 37 84 |  | 
| 38 85 | 
             
            * Store circuit options in the backend when run #34 justinhoward
         | 
| 39 86 |  | 
| @@ -52,16 +99,28 @@ | |
| 52 99 | 
             
              instances, so likely this will not be a breaking change for most
         | 
| 53 100 | 
             
              cases.
         | 
| 54 101 |  | 
| 55 | 
            -
             | 
| 102 | 
            +
            [0.7.2] - 2021-09-02
         | 
| 103 | 
            +
            -------------------
         | 
| 104 | 
            +
             | 
| 105 | 
            +
            ### Added
         | 
| 56 106 |  | 
| 57 107 | 
             
            * Add Faulty.disable! for disabling globally #38 justinhoward
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            ### Changed
         | 
| 110 | 
            +
             | 
| 58 111 | 
             
            * Suppress circuit_success for proxy circuits #39 justinhoward
         | 
| 59 112 |  | 
| 60 | 
            -
             | 
| 113 | 
            +
            [0.7.1] - 2021-09-02
         | 
| 114 | 
            +
            -------------------
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            ### Fixed
         | 
| 61 117 |  | 
| 62 118 | 
             
            * Fix success event crash in log listener #37 justinhoward
         | 
| 63 119 |  | 
| 64 | 
            -
             | 
| 120 | 
            +
            [0.7.0] - 2021-09-02
         | 
| 121 | 
            +
            -------------------
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            ### Added
         | 
| 65 124 |  | 
| 66 125 | 
             
            * Add initial benchmarks and performance improvements #36 justinhoward
         | 
| 67 126 |  | 
| @@ -70,22 +129,37 @@ | |
| 70 129 | 
             
            The `circuit_success` event no longer contains the status value. Computing this
         | 
| 71 130 | 
             
            value was causing performance problems.
         | 
| 72 131 |  | 
| 73 | 
            -
             | 
| 132 | 
            +
            [0.6.0] - 2021-06-10
         | 
| 133 | 
            +
            -------------------
         | 
| 134 | 
            +
             | 
| 135 | 
            +
            ### Added
         | 
| 136 | 
            +
             | 
| 137 | 
            +
            * Capture an error for BUSY redis backend when patched #30 justinhoward
         | 
| 138 | 
            +
            * Add a patch for mysql2 #28 justinhoward
         | 
| 139 | 
            +
             | 
| 140 | 
            +
            ### Fixed
         | 
| 74 141 |  | 
| 75 142 | 
             
            * docs, use correct state in description for skipped event #27 senny
         | 
| 76 143 | 
             
            * Fix CI to set REDIS_VERSION correctly #31 justinhoward
         | 
| 77 144 | 
             
            * Fix a potential memory leak in patches #32 justinhoward
         | 
| 78 | 
            -
            * Capture an error for BUSY redis backend when patched #30 justinhoward
         | 
| 79 | 
            -
            * Add a patch for mysql2 #28 justinhoward
         | 
| 80 145 |  | 
| 81 | 
            -
             | 
| 146 | 
            +
            [0.5.1] - 2021-05-28
         | 
| 147 | 
            +
            -------------------
         | 
| 148 | 
            +
             | 
| 149 | 
            +
            ### Fixed
         | 
| 82 150 |  | 
| 83 151 | 
             
            * Fix Storage::FaultTolerantProxy to return empty history on entries fail #26 justinhoward
         | 
| 84 152 |  | 
| 85 | 
            -
             | 
| 153 | 
            +
            [0.5.0] - 2021-05-28
         | 
| 154 | 
            +
            -------------------
         | 
| 155 | 
            +
             | 
| 156 | 
            +
            ### Added
         | 
| 86 157 |  | 
| 87 158 | 
             
            * Allow creating a new Faulty instance in Faulty#register #24 justinhoward
         | 
| 88 159 | 
             
            * Add support for patches to core dependencies starting with redis #14 justinhoward
         | 
| 160 | 
            +
             | 
| 161 | 
            +
            ### Fixed
         | 
| 162 | 
            +
             | 
| 89 163 | 
             
            * Improve storage #entries performance by returning entries #23 justinhoward
         | 
| 90 164 |  | 
| 91 165 | 
             
            ### Breaking Changes
         | 
| @@ -95,23 +169,35 @@ value was causing performance problems. | |
| 95 169 | 
             
            * Faulty::Storage::Interface must now return a history array instead of a
         | 
| 96 170 | 
             
              circuit status object. Custom storage backends must be updated.
         | 
| 97 171 |  | 
| 98 | 
            -
             | 
| 172 | 
            +
            [0.4.0] - 2021-02-19
         | 
| 173 | 
            +
            -------------------
         | 
| 174 | 
            +
             | 
| 175 | 
            +
            ### Added
         | 
| 99 176 |  | 
| 100 | 
            -
            * Switch from Travis CI to GitHub actions #11 justinhoward
         | 
| 101 | 
            -
            * Only run rubocop for Ruby 2.7 in CI #12 justinhoward
         | 
| 102 177 | 
             
            * Explicitly add support for Redis 3 and 4 #15 justinhoward
         | 
| 103 178 | 
             
            * Allow setting default circuit options on Faulty instances #16 justinhoward
         | 
| 179 | 
            +
             | 
| 180 | 
            +
            ### Changed
         | 
| 181 | 
            +
             | 
| 182 | 
            +
            * Switch from Travis CI to GitHub actions #11 justinhoward
         | 
| 183 | 
            +
            * Only run rubocop for Ruby 2.7 in CI #12 justinhoward
         | 
| 104 184 | 
             
            * Switch to codacy for quality metrics #17 justinhoward
         | 
| 185 | 
            +
            * Allow passing custom circuit to AutoWire #22 justinhoward
         | 
| 186 | 
            +
             | 
| 187 | 
            +
            ### Fixed
         | 
| 188 | 
            +
             | 
| 105 189 | 
             
            * Small logic fix to README #19 silasb
         | 
| 106 190 | 
             
            * Fix Redis storage dependency on ConnectionPool #21 justinhoward
         | 
| 107 | 
            -
            * Allow passing custom circuit to AutoWire #22 justinhoward
         | 
| 108 191 |  | 
| 109 192 | 
             
            ### Breaking Changes
         | 
| 110 193 |  | 
| 111 194 | 
             
            AutoWire.new is replaced with AutoWire.wrap and no longer creates an instance
         | 
| 112 195 | 
             
            of AutoWire.
         | 
| 113 196 |  | 
| 114 | 
            -
             | 
| 197 | 
            +
            [0.3.0] - 2020-10-24
         | 
| 198 | 
            +
            -------------------
         | 
| 199 | 
            +
             | 
| 200 | 
            +
            ### Added
         | 
| 115 201 |  | 
| 116 202 | 
             
            * Add tools for backend fault-tolerance #10
         | 
| 117 203 | 
             
              * CircuitProxy for wrapping storage in an internal circuit
         | 
| @@ -120,7 +206,10 @@ of AutoWire. | |
| 120 206 | 
             
              * AutoWire wrappers for automatically configuring storage and cache
         | 
| 121 207 | 
             
              * Better documentation for fault-tolerance
         | 
| 122 208 |  | 
| 123 | 
            -
             | 
| 209 | 
            +
            [0.2.0] - 2020-10-18
         | 
| 210 | 
            +
            -------------------
         | 
| 211 | 
            +
             | 
| 212 | 
            +
            ### Changed
         | 
| 124 213 |  | 
| 125 214 | 
             
            * Remove Scopes and replace them with Faulty instances #9
         | 
| 126 215 |  | 
| @@ -129,28 +218,71 @@ of AutoWire. | |
| 129 218 | 
             
            * `Faulty::Scope` has been removed. Use `Faulty.new` instead.
         | 
| 130 219 | 
             
            * `Faulty` is now a class, not a module
         | 
| 131 220 |  | 
| 132 | 
            -
             | 
| 221 | 
            +
            [0.1.5] - 2020-10-18
         | 
| 222 | 
            +
            -------------------
         | 
| 223 | 
            +
             | 
| 224 | 
            +
            ### Fixed
         | 
| 133 225 |  | 
| 134 226 | 
             
            * Fix redis storage to expire state key when using CAS #8
         | 
| 135 227 |  | 
| 136 | 
            -
             | 
| 228 | 
            +
            [0.1.4] - 2020-10-18
         | 
| 229 | 
            +
            -------------------
         | 
| 230 | 
            +
             | 
| 231 | 
            +
            ### Fixed
         | 
| 137 232 |  | 
| 138 233 | 
             
            * Improve spec coverage for supporting classes #6
         | 
| 139 234 | 
             
            * Fix redis bug where concurrent CAS requests could crash #7
         | 
| 140 235 |  | 
| 141 | 
            -
             | 
| 236 | 
            +
            [0.1.3] - 2020-09-29
         | 
| 237 | 
            +
            -------------------
         | 
| 238 | 
            +
             | 
| 239 | 
            +
            ### Added
         | 
| 142 240 |  | 
| 143 | 
            -
            * Fix bug where memory storage would delete the newest entries #5
         | 
| 144 241 | 
             
            * Add HoneybadgerListener for error reporting #4
         | 
| 145 242 |  | 
| 146 | 
            -
             | 
| 243 | 
            +
            ### Fixed
         | 
| 244 | 
            +
             | 
| 245 | 
            +
            * Fix bug where memory storage would delete the newest entries #5
         | 
| 246 | 
            +
             | 
| 247 | 
            +
            [0.1.2] - 2020-08-28
         | 
| 248 | 
            +
            -------------------
         | 
| 249 | 
            +
             | 
| 250 | 
            +
            ### Fixed
         | 
| 147 251 |  | 
| 148 252 | 
             
            * Fix Storage::FaultTolerantProxy open and reopen methods #2
         | 
| 149 253 |  | 
| 150 | 
            -
             | 
| 254 | 
            +
            [0.1.1] - 2020-08-28
         | 
| 255 | 
            +
            -------------------
         | 
| 256 | 
            +
             | 
| 257 | 
            +
            ### Fixed
         | 
| 151 258 |  | 
| 152 259 | 
             
            * Fix a crash when Storage::FaultTolerantProxy created a status stub #1
         | 
| 153 260 |  | 
| 154 | 
            -
             | 
| 261 | 
            +
            [0.1.0] - 2020-08-27
         | 
| 262 | 
            +
            -------------------
         | 
| 155 263 |  | 
| 156 264 | 
             
            Initial public release
         | 
| 265 | 
            +
             | 
| 266 | 
            +
            [Unreleased]: https://github.com/ParentSquare/faulty/compare/v0.5.0...HEAD
         | 
| 267 | 
            +
            [0.8.6]: https://github.com/ParentSquare/faulty/compare/v0.8.5...v0.8.6
         | 
| 268 | 
            +
            [0.8.5]: https://github.com/ParentSquare/faulty/compare/v0.8.4...v0.8.5
         | 
| 269 | 
            +
            [0.8.4]: https://github.com/ParentSquare/faulty/compare/v0.8.3...v0.8.4
         | 
| 270 | 
            +
            [0.8.3]: https://github.com/ParentSquare/faulty/compare/v0.8.2...v0.8.3
         | 
| 271 | 
            +
            [0.8.2]: https://github.com/ParentSquare/faulty/compare/v0.8.1...v0.8.2
         | 
| 272 | 
            +
            [0.8.1]: https://github.com/ParentSquare/faulty/compare/v0.8.0...v0.8.1
         | 
| 273 | 
            +
            [0.8.0]: https://github.com/ParentSquare/faulty/compare/v0.7.2...v0.8.0
         | 
| 274 | 
            +
            [0.7.2]: https://github.com/ParentSquare/faulty/compare/v0.7.1...v0.7.2
         | 
| 275 | 
            +
            [0.7.1]: https://github.com/ParentSquare/faulty/compare/v0.7.0...v0.7.1
         | 
| 276 | 
            +
            [0.7.0]: https://github.com/ParentSquare/faulty/compare/v0.6.0...v0.7.0
         | 
| 277 | 
            +
            [0.6.0]: https://github.com/ParentSquare/faulty/compare/v0.5.1...v0.5.0
         | 
| 278 | 
            +
            [0.5.1]: https://github.com/ParentSquare/faulty/compare/v0.5.0...v0.5.1
         | 
| 279 | 
            +
            [0.5.0]: https://github.com/ParentSquare/faulty/compare/v0.4.0...v0.5.0
         | 
| 280 | 
            +
            [0.4.0]: https://github.com/ParentSquare/faulty/compare/v0.3.0...v0.4.0
         | 
| 281 | 
            +
            [0.3.0]: https://github.com/ParentSquare/faulty/compare/v0.2.0...v0.3.0
         | 
| 282 | 
            +
            [0.2.0]: https://github.com/ParentSquare/faulty/compare/v0.1.5...v0.2.0
         | 
| 283 | 
            +
            [0.1.5]: https://github.com/ParentSquare/faulty/releases/tag/v0.1.4...v0.1.5
         | 
| 284 | 
            +
            [0.1.4]: https://github.com/ParentSquare/faulty/releases/tag/v0.1.3...v0.1.4
         | 
| 285 | 
            +
            [0.1.3]: https://github.com/ParentSquare/faulty/releases/tag/v0.1.2...v0.1.3
         | 
| 286 | 
            +
            [0.1.2]: https://github.com/ParentSquare/faulty/releases/tag/v0.1.1...v0.1.2
         | 
| 287 | 
            +
            [0.1.1]: https://github.com/ParentSquare/faulty/releases/tag/v0.1.0...v0.1.1
         | 
| 288 | 
            +
            [0.1.0]: https://github.com/ParentSquare/faulty/releases/tag/v0.1.0
         | 
    
        data/README.md
    CHANGED
    
    | @@ -90,6 +90,7 @@ Also see "Release It!: Design and Deploy Production-Ready Software" by | |
| 90 90 | 
             
              + [Other Built-in Listeners](#other-built-in-listeners)
         | 
| 91 91 | 
             
              + [Custom Listeners](#custom-listeners)
         | 
| 92 92 | 
             
            * [Disabling Faulty Globally](#disabling-faulty-globally)
         | 
| 93 | 
            +
            * [Testing with Faulty](#testing-with-faulty)
         | 
| 93 94 | 
             
            * [How it Works](#how-it-works)
         | 
| 94 95 | 
             
              + [Caching](#caching)
         | 
| 95 96 | 
             
              + [Fault Tolerance](#fault-tolerance)
         | 
| @@ -1173,6 +1174,24 @@ not affect the stored state of circuits. | |
| 1173 1174 | 
             
            Faulty will **still use the cache** even when disabled. If you also want to
         | 
| 1174 1175 | 
             
            disable the cache, configure Faulty to use a `Faulty::Cache::Null` cache.
         | 
| 1175 1176 |  | 
| 1177 | 
            +
            ## Testing with Faulty
         | 
| 1178 | 
            +
             | 
| 1179 | 
            +
            Depending on your application, you could choose to
         | 
| 1180 | 
            +
            [disable Faulty globally](#disabling-faulty-globally), but sometimes you may
         | 
| 1181 | 
            +
            want to test your application's behavior in a failure scenario.
         | 
| 1182 | 
            +
             | 
| 1183 | 
            +
            If you have such tests, you will want to prevent failures in one test from
         | 
| 1184 | 
            +
            affecting other tests. To clear all circuit states between tests, use `#clear!`.
         | 
| 1185 | 
            +
            For example, with rspec:
         | 
| 1186 | 
            +
             | 
| 1187 | 
            +
            ```ruby
         | 
| 1188 | 
            +
            RSpec.configure do |config|
         | 
| 1189 | 
            +
              config.after do
         | 
| 1190 | 
            +
                Faulty.clear!
         | 
| 1191 | 
            +
              end
         | 
| 1192 | 
            +
            end
         | 
| 1193 | 
            +
            ```
         | 
| 1194 | 
            +
             | 
| 1176 1195 | 
             
            ## How it Works
         | 
| 1177 1196 |  | 
| 1178 1197 | 
             
            Faulty implements a version of circuit breakers inspired by "Release It!: Design
         | 
    
        data/lib/faulty/circuit.rb
    CHANGED
    
    | @@ -23,7 +23,7 @@ class Faulty | |
| 23 23 | 
             
              # write your own code to periodically check how long it has been running.
         | 
| 24 24 | 
             
              # If you're sure you want ruby's generic Timeout, you can apply it yourself
         | 
| 25 25 | 
             
              # inside the circuit run block.
         | 
| 26 | 
            -
              class Circuit | 
| 26 | 
            +
              class Circuit
         | 
| 27 27 | 
             
                CACHE_REFRESH_SUFFIX = '.faulty_refresh'
         | 
| 28 28 |  | 
| 29 29 | 
             
                attr_reader :name
         | 
| @@ -462,15 +462,13 @@ class Faulty | |
| 462 462 | 
             
                  end
         | 
| 463 463 | 
             
                  options.notifier.notify(:circuit_failure, circuit: self, status: status, error: error)
         | 
| 464 464 |  | 
| 465 | 
            -
                   | 
| 465 | 
            +
                  if status.half_open?
         | 
| 466 466 | 
             
                    reopen!(error, status.opened_at)
         | 
| 467 467 | 
             
                  elsif status.fails_threshold?
         | 
| 468 468 | 
             
                    open!(error)
         | 
| 469 469 | 
             
                  else
         | 
| 470 470 | 
             
                    false
         | 
| 471 471 | 
             
                  end
         | 
| 472 | 
            -
             | 
| 473 | 
            -
                  opened
         | 
| 474 472 | 
             
                end
         | 
| 475 473 |  | 
| 476 474 | 
             
                def deprecated_entry?
         | 
| @@ -550,7 +548,7 @@ class Faulty | |
| 550 548 | 
             
                # @return [Boolean] true if the cache should be refreshed
         | 
| 551 549 | 
             
                def cache_should_refresh?(key)
         | 
| 552 550 | 
             
                  time = options.cache.read(cache_refresh_key(key.to_s)).to_i
         | 
| 553 | 
            -
                  time + (rand * 2 - 1) * options.cache_refresh_jitter < Faulty.current_time
         | 
| 551 | 
            +
                  time + (((rand * 2) - 1) * options.cache_refresh_jitter) < Faulty.current_time
         | 
| 554 552 | 
             
                end
         | 
| 555 553 |  | 
| 556 554 | 
             
                # Get the next time to refresh the cache when writing to it
         | 
    
        data/lib/faulty/deprecation.rb
    CHANGED
    
    | @@ -5,7 +5,7 @@ class Faulty | |
| 5 5 | 
             
              module Deprecation
         | 
| 6 6 | 
             
                class << self
         | 
| 7 7 | 
             
                  # Call to raise errors instead of logging warnings for Faulty deprecations
         | 
| 8 | 
            -
                  def raise_errors!(enabled = true)
         | 
| 8 | 
            +
                  def raise_errors!(enabled = true) # rubocop:disable Style/OptionalBooleanParameter
         | 
| 9 9 | 
             
                    @raise_errors = (enabled == true)
         | 
| 10 10 | 
             
                  end
         | 
| 11 11 |  | 
    
        data/lib/faulty/patch/base.rb
    CHANGED
    
    | @@ -31,13 +31,13 @@ class Faulty | |
| 31 31 | 
             
                  #
         | 
| 32 32 | 
             
                  # @yield A block to run inside the circuit
         | 
| 33 33 | 
             
                  # @return The block return value
         | 
| 34 | 
            -
                  def faulty_run
         | 
| 34 | 
            +
                  def faulty_run(&block)
         | 
| 35 35 | 
             
                    faulty_running_key = "faulty_running_#{object_id}"
         | 
| 36 36 | 
             
                    return yield unless @faulty_circuit
         | 
| 37 37 | 
             
                    return yield if Thread.current[faulty_running_key]
         | 
| 38 38 |  | 
| 39 39 | 
             
                    Thread.current[faulty_running_key] = true
         | 
| 40 | 
            -
                    @faulty_circuit.run | 
| 40 | 
            +
                    @faulty_circuit.run(&block)
         | 
| 41 41 | 
             
                  ensure
         | 
| 42 42 | 
             
                    Thread.current[faulty_running_key] = nil
         | 
| 43 43 | 
             
                  end
         | 
    
        data/lib/faulty/patch/redis.rb
    CHANGED
    
    | @@ -81,10 +81,8 @@ class Faulty | |
| 81 81 | 
             
                    return super unless @faulty_circuit
         | 
| 82 82 |  | 
| 83 83 | 
             
                    reply = super
         | 
| 84 | 
            -
                    if reply.is_a?(::Redis::CommandError)
         | 
| 85 | 
            -
                       | 
| 86 | 
            -
                        reply = BusyError.new(reply.message)
         | 
| 87 | 
            -
                      end
         | 
| 84 | 
            +
                    if reply.is_a?(::Redis::CommandError) && reply.message.start_with?('BUSY')
         | 
| 85 | 
            +
                      reply = BusyError.new(reply.message)
         | 
| 88 86 | 
             
                    end
         | 
| 89 87 |  | 
| 90 88 | 
             
                    reply
         | 
    
        data/lib/faulty/status.rb
    CHANGED
    
    
| @@ -159,6 +159,14 @@ class Faulty | |
| 159 159 | 
             
                    end
         | 
| 160 160 | 
             
                  end
         | 
| 161 161 |  | 
| 162 | 
            +
                  # Clears circuits in all storage backends
         | 
| 163 | 
            +
                  #
         | 
| 164 | 
            +
                  # @param (see Interface#clear)
         | 
| 165 | 
            +
                  # @return (see Interface#clear)
         | 
| 166 | 
            +
                  def clear
         | 
| 167 | 
            +
                    send_all(:clear)
         | 
| 168 | 
            +
                  end
         | 
| 169 | 
            +
             | 
| 162 170 | 
             
                  # This is fault tolerant if any of the available backends are fault tolerant
         | 
| 163 171 | 
             
                  #
         | 
| 164 172 | 
             
                  # @param (see Interface#fault_tolerant?)
         | 
| @@ -81,7 +81,14 @@ class Faulty | |
| 81 81 | 
             
                  #   @see Interface#list
         | 
| 82 82 | 
             
                  #   @param (see Interface#list)
         | 
| 83 83 | 
             
                  #   @return (see Interface#list)
         | 
| 84 | 
            -
                   | 
| 84 | 
            +
                  #
         | 
| 85 | 
            +
                  # @!method clear
         | 
| 86 | 
            +
                  #   Clear is not called in normal operation, so it doesn't capture errors
         | 
| 87 | 
            +
                  #
         | 
| 88 | 
            +
                  #   @see Interface#list
         | 
| 89 | 
            +
                  #   @param (see Interface#list)
         | 
| 90 | 
            +
                  #   @return (see Interface#list)
         | 
| 91 | 
            +
                  def_delegators :@storage, :lock, :unlock, :reset, :history, :list, :clear
         | 
| 85 92 |  | 
| 86 93 | 
             
                  # Get circuit options safely
         | 
| 87 94 | 
             
                  #
         | 
| @@ -172,6 +172,17 @@ class Faulty | |
| 172 172 | 
             
                    raise NotImplementedError
         | 
| 173 173 | 
             
                  end
         | 
| 174 174 |  | 
| 175 | 
            +
                  # Reset all circuits
         | 
| 176 | 
            +
                  #
         | 
| 177 | 
            +
                  # Some implementions may clear circuits on a best-effort basis since
         | 
| 178 | 
            +
                  # all circuits may not be known.
         | 
| 179 | 
            +
                  #
         | 
| 180 | 
            +
                  # @raise NotImplementedError If the storage backend does not support clearing.
         | 
| 181 | 
            +
                  # @return [void]
         | 
| 182 | 
            +
                  def clear
         | 
| 183 | 
            +
                    raise NotImplementedError
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
             | 
| 175 186 | 
             
                  # Can this storage backend raise an error?
         | 
| 176 187 | 
             
                  #
         | 
| 177 188 | 
             
                  # If the storage backend returns false from this method, it will be wrapped
         |