Visitar URL original
semian/CHANGELOG.md at main · Shopify/semian · GitHub
Skip to content

Latest commit

 

History

History
411 lines (256 loc) · 13.2 KB

CHANGELOG.md

File metadata and controls

411 lines (256 loc) · 13.2 KB

v0.28.4

  • Clear the re-entrancy guard instead of restoring its previous value
  • Document that an adapter instance represents one resource

v0.28.3

  • Make sure PG adapter correctly handles PG::ConnectionBad errors. rails/rails@e61b5e24 rescues these and converts them to ActiveRecord::ConnectionNotEstablished, but that is only on edge. Now that we are also testing on 8.1 it exposed that we are not handling the 8.1 behaviour which is to raise a PG::ConnectionBad.
  • Improve testing matrix for this gem.
  • Execute_intent no longe raises errors. We need to check the error stored on the query intent and raise it to trip the circuit breaker, then rescue and allow Rails to continue execution.
  • Bump rails to latest for testing

v0.28.2

  • Fix Semian resource allocator pairing
  • pin github actions to SHAs

v0.28.1

  • remove accidentally added @name variable in PIDControllerThread (#1039)

v0.28.0

  • Add adaptive circuit breaker (experimental feature), and a dual circuit breaker to allow switching between it and classic circuit breaker (#760)
  • Pass scope/adapter to notification (#1035)

v0.27.1

  • Add exponential_backoff_error_timeout feature (#861)
  • Use API-based commits for verification (#1002)

v0.27.0

  • Add semian/activerecord_postgresql_adapter for Active Record's PostgreSQL adapter (#889)
  • Add open_circuit_on_oom option for Redis adapters to control whether OOM errors open the circuit breaker (defaults to true for backward compatibility) (#940)
  • Support Active Record 8.2's QueryIntent API in trilogy adapter (#904)

v0.26.6

  • Remove force_config_validation spammy log

v0.26.5

  • Made consumers and resources fields private in Semian (#795)

v0.25.5

  • Fixed thread safety issues (#566)
  • Added experimental resource for experimentation

v0.25.4

  • Remove redundant semian resource name from OpenCircuitError and ResourceBusyError

v0.25.3

  • Fix unbound growth of consumers WeakRef Array
  • Add semian resource name to semian exception logs

v0.25.2

  • Stop bulkhead config validation if sysv_semaphores are not enabled

v0.25.1

  • Fix log level for initial boot-up message for configuration validation to info, and modify message for correctness.

v0.25.0

  • Feature: Add logging for invalid configurations, and raise an exception if force_config_validation is set to true (#646)

v0.24.0

  • Feature: Add lumping_interval option that allows lumping errors within a timeframe as a single error (#606)

v0.23.0

  • Change: Attempt acquiring semaphore before releasing GVL (#573)
  • Support only Ruby 3.2 and onward (572)

v0.22.1

  • Change: Enable thread_safety rubocop
  • Change: Freeze constants and remove unused accessor (@exceptions) from Semian::GRPC

v0.22.0

  • Change: semians will trigger on ER_PROXYSQL_MAX_CONN_TIMEOUT with mysql2 (#522)
  • Change: added support for dynamic semian_configurations to the Semian Redis adapter
  • New: Semian.disable_bulkheads_for_thread disables bulkheads for the given thread

v0.21.3

  • Fix: Trilogy ActiveRecord adapter to be compatible with latest Rails edge.

v0.21.2

  • Change: Trilogy ActiveRecord adapter will not bypass "SAVEPOINT RELEASE" unless it uses the ActiveRecord default name and only 2 levels of nesting
  • Change: The bypass for COMMIT/ROLLBACK statements assumes current ActiveRecord behaviour, that is no blank spaces or ";" chracter at the end of the statement

v0.21.1

  • Fix valid_raw_connection check

v0.21.0

  • Fixed compatibility with redis-rb 5.0.7+

v0.20.1

  • More efficient activerecord_trilogy_adapter and mysql2_adapter regex. (#508, #510)

v0.20.0

  • Ensure Active Record Trilogy adapter handles AdapterTimeout and ConnectionFailed exceptions. (#497)
  • Allow passing --with-openssl-dir for a custom OpenSSL installation. (#499)
  • Use ActiveRecord::ConnectionNotEstablished as base error for TrilogyAdapter. (#496)
  • Fix Mysql2 connection error regular expressions. (#506)

v0.19.1

  • Active Record Trilogy adapter needs to patch #raw_execute instead of #execute for queries. (#494)

v0.19.0

  • Redis Readonly errors won't trigger semian open circuit. (#489)
  • New dynamic options, allowing a per-request resource configuration with the HTTP adapter. (#485)

v0.18.1

  • Remove dependency on activerecord-trilogy-adapter in Trilogy adapter for Semian. (#486)
  • Fix: Change in method signature for Trilogy adapter's #execute_method. (#491)

v0.18.0

  • Support Active Record Trilogy adapter. (#468)

v0.17.0

  • Avoid prepending the same prefix twice to errors messages. (#423) This mostly happens with the redis-rb 5+ gem as it translate redis-client errors.
  • Fix running tests in DEBUG mode to test missing semaphores resources. (#430)
  • Semian.register returns UnprotectedResource when environment variable SEMIAN_DISABLED is set. (#427) Introduces environment variables SEMIAN_CIRCUIT_BREAKER_DISABLED to disable only circuit_breaker and SEMIAN_BULKHEAD_DISABLED only bulkhead.
  • Refactor: Replace Time.now with CLOCK_MONOTONIC in Resource updated_at field. (#443) Replace Timecop.travel for tests with custom mock solution to support monotonic clocks.
  • Refactor: Replace Time.now with CLOCK_MONOTONIC in CircuitBreaker. (#441)
  • Support Ruby 3.2.0. (#463)
  • Enable write barrier protection on Resource. (#469)

v0.16.0

  • Typo in error message for missing option :tickets. (#412)
  • Add process id in DEBUG message for bulkheading/resource. (#416)
  • Feature: Add ability to turn off window based circuit eviction (#418)

v0.15.0

  • Pinging a closed connection shouldn't be considered a failure. (#396)
  • Fix: Patch new_client for Rails apps so that the OpenCircuitError makes it through. (#395)

v0.14.0

  • Compatible with Redis 5 (#388, #392)

v0.13.3

  • Add a warning message about redis 5.x. (#386)

v0.13.2

  • Fix: Update AbstractAdapter patch to accomodate recent Rails changes. (#364)

v0.13.1

  • Fix: Raise Redis::OutOfMemoryError for messages that match OOM command not allowed when used memory > 'maxmemory' rather than checking start_with?("OOM "). (#367)

v0.13.0

  • Refactor: Replace Time.now with CLOCK_MONOTONIC in MockServer (#318)
  • Fix: Circuit not open for GRPC::ActiveCall::Operation failures (#348)

v0.12.0

  • Feature: Add support for the redis-client gem (#314)

v0.11.8

  • Feature: Add error_threshold_timeout configuration parameter (#299)

v0.11.7

  • Fix: ECONNRESET won't trigger circuit open for redis (#306)

v0.11.6

  • Fix: pass disable flag by patching new singleton method (#303)

v0.11.5

  • Feature: Add disable flag to http adapter (#301)

v0.11.4

  • Fix: Add extern to global variable declarations for gcc 10 (#288)

v0.11.3

  • Feature: Log last error message on circuit breaker state transition (#285)
  • Fix: Update README and docs to resolve common misconception about error_threshold (#283)

v0.11.2

  • Fix: Remove MySQL client is not connected error from mysql2 adapter

v0.11.1

  • Feature: Add Semian.namespace to globally prefix all the semaphore names. (#280)

v0.11.0

  • Feature: Add Semian.default_permissions to globally change the default semaphore permissions. (#279)

v0.10.6

  • Fix: Match whitelisted SQL queries when Marginalia is prepended (#276)

v0.10.5

  • Fix: Compatibility with GC.compact

v0.10.4

  • Fix: Revert the changes in v0.10.3. (#270)

v0.10.3

  • Fix: Positional/Keyword arguments deprecations warning for Ruby 2.7 in the grpc adapter. (#269)

v0.10.2

  • Fix: Positional/Keyword arguments deprecations warning for Ruby 2.7.

v0.10.1

  • Fix: thread safety bug on Ruby 2.7. (#263)

v0.10.0

  • Feature: Support half open resource timeout for redis.

v0.9.1

  • Fix: Compatibility with MRI 2.3

v0.9.0

  • Feature: Add a LRU to garbage collect old resources. (#193)

v0.8.9

  • Fix: Recursion issue in MySQL2 adapter causing circuits breakers to stay open much longer than they should. (#250)
  • Fix: Better handle DNS resolutions exceptions in Redis adapter. (#230)

v0.8.8

  • Feature: Introduce the GRPC adapter (#200)

v0.8.7

  • Fix: Instrument success for acquire_circuit_breaker (#209)

v0.8.6

  • Feature: If an error instance responds to #marks_semian_circuits? don't mark the circuit if it returns false (#210)

v0.8.5

  • Fix: Redis adapter using hiredis is resilient to DNS resolution failures (#205)

v0.8.4

  • Feature: Introduce half_open_resource_timeout which changes the resource timeout when the circuit is in a half-open state for the Net::HTTP adapter. (#198)
  • Feature: Add the cause of the last error when a circuit opens (#197)
  • Fix: Reset successes when transitioning to the half open state (#192)

v0.8.1

  • Fix: Expose half_open? when the circuit state has not transitioned but will. This allows consumers further up the stack to know if the circuit is half open.

v0.8.0

  • Feature: Introduce half_open_resource_timeout which changes the resource timeout when the circuit is in a half-open state (#188)

v0.7.8

  • Feature: More informative error messages when initializing Semian with missing arguments (#182)
  • Fix: Redis adapter is now resilient to DNS resolution failures (#184)

v0.7.5

  • Fix: Repaired compatibility with dependent Redis library

v0.7.4

  • Fix: Protect internal semaphore when adjusting resource count (#164)
  • Feature: Use prepend when monkey-patching Net::HTTP. (#157)
  • Feature: Include time spend waiting for bulkhead in notification (#154)

v0.7.1

  • Feature: Add the behaviour to enable open circuiting on 5xxs conditionally (#149)
  • Refactor: Configurable hosts for Semian's development dependencies (#152)

v0.7.0

This change introduced a series of changes to support a new "dynamic quota" ticket allocation strategy. This code primarily affects bulkheads (protected resources).

Rather than statically setting a ticket count, workers (in their own process) now register themselves. By specifying 'quota' instead of 'tickets', the bulkhead threshold will now be computed dynamically as a ratio of the number of registered workers, eliminating the need to continuously readjust ticket counts, and supporting environments with non-uniform worker distribution between machines.

  • Feature: Support quota based allocation strategy (#120)
  • Feature: Add ability to manually unregister workers (#130)
  • Feature: Add ability to clear resources from adapters and unregister all resources (#134)
  • Feature: Allow sysV IPC key to be accessed in ruby (#136)
  • Feature: Expose registered worker count to ruby (#137)
  • Refactor: Allow registered worker count to be accessed through bulkhead (#138)
  • Bug fix: Register all workers (#128)
  • Bug fix: Lazy instantiate redis clien on first I/O (#132)
  • Bug fix: New mysql error (#131)
  • Bug fix: Prevent race conditions when unregistering (#141)
  • Refactor/Feature: Break coupling between resource and circuit breaker (#123)
  • Refactor: Use generic max_sem_val (#117)
  • Refactor: Fix header syntax (#118)
  • Refactor: Always acquire semaphore without_gvl (#121)
  • Thread-safety for circuit breakers by default (#150)
  • Fix bug where calling name on a protected resource without a semaphore would fail (#151)

v0.6.2

  • Refactor: Refactor semian ticket management into its own files (#116)
  • Refactor: Create sem_meta_lock and sem_meta_unlock (#115)
  • Refactor: Refactor semaphore operations (#114)

v0.6.1

  • Refactor: Generate a unique semaphore key by including size of semaphore set
  • Refactor: Refactor semian_resource related C functions
  • Fix: Don't require sudo for travis (#110)
  • Refactor: Refactor semian.c includes and types into header files
  • Fix: Use glob instead of git for gemspec file list
  • Fix: Fix travis CI for ruby 2.3.0 installing rainbows
  • Refactor: Switch to enumerated type for tracking semaphore indices
  • Docs: readme: explain co-operation between cbs and bulkheads
  • Docs: readme: add section about server limits

v0.6.0

  • Feature: Load semian/rails automatically if necessary
  • Feature: Implement AR::AbstractAdapter#semian_resource

v0.5.4

  • Fix: Also let "Too many connections" be a first class conn error

v0.5.3

  • Fix: mysql: protect pings
  • Fix: mysql: match more lost conn queries

v0.5.2

  • Fix: Make request_allowed? thread safe
  • Fix: Fix CI connect errors on HTTP requests by using 127.0.0.1 for host

v0.5.1

  • Fix: Assert Resource#initialize_semaphore contract on Resource init
  • Fix: Lock on older thin version for pre MRI 2.2 compatibility

v0.5.0

  • Fix: Only issue unsupported or disabled semaphores warnings when the first resource is instanciated
  • Refactor: Cleanup requires
  • Maintenance: Use published version of the toxiproxy gem
  • Fix: Fix minitest deprecation warnings
  • Maintenance: Update bundler on travis
  • Maintenance: Update supported MRI versions on travis

v0.4.3

  • Fix: Fix lazy aliasing of Redis#semian_resource
  • Fix: Workaround rubocop parser limitations

v0.4.2

  • Fix: Fix for TimeoutError is deprecated in Ruby 2.3.0
  • Feature: Include Ruby 2.3 in Travis builds

v0.4.1

  • Fix: resource: cast float ticket count to fixnum #75

v0.4.0

  • Feature: net/http: add adapter for net/http #58
  • Refactor: circuit_breaker: split circuit breaker into three data structures to allow for alternative implementations in the future #62
  • Fix: mysql: don't prevent rollbacks on transactions #60
  • Fix: core: fix initialization bug when the resource is accessed before the options are set #65