Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions lib/semian.rb
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,14 @@ def to_s
end
end

module AdapterResourceBusyError
include AdapterError
end

module AdapterCircuitOpenError
include AdapterError
end

attr_accessor :logger

self.logger = Logger.new($stderr)
Expand Down
4 changes: 2 additions & 2 deletions lib/semian/activerecord_postgresql_adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ def initialize(semian_identifier, *args)
end
end

ResourceBusyError = Class.new(SemianError)
CircuitOpenError = Class.new(SemianError)
ResourceBusyError = Class.new(SemianError) { include ::Semian::AdapterResourceBusyError }
CircuitOpenError = Class.new(SemianError) { include ::Semian::AdapterCircuitOpenError }
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/semian/activerecord_trilogy_adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ def initialize(semian_identifier, *args)
end
end

ResourceBusyError = Class.new(SemianError)
CircuitOpenError = Class.new(SemianError)
ResourceBusyError = Class.new(SemianError) { include ::Semian::AdapterResourceBusyError }
CircuitOpenError = Class.new(SemianError) { include ::Semian::AdapterCircuitOpenError }
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/semian/grpc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ def initialize(semian_identifier, *args)
end
end

ResourceBusyError = Class.new(SemianError)
CircuitOpenError = Class.new(SemianError)
ResourceBusyError = Class.new(SemianError) { include ::Semian::AdapterResourceBusyError }
CircuitOpenError = Class.new(SemianError) { include ::Semian::AdapterCircuitOpenError }
end

module Semian
Expand Down
4 changes: 2 additions & 2 deletions lib/semian/mysql2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ def initialize(semian_identifier, *args)
end
end

ResourceBusyError = Class.new(SemianError)
CircuitOpenError = Class.new(SemianError)
ResourceBusyError = Class.new(SemianError) { include ::Semian::AdapterResourceBusyError }
CircuitOpenError = Class.new(SemianError) { include ::Semian::AdapterCircuitOpenError }
end

module Semian
Expand Down
4 changes: 2 additions & 2 deletions lib/semian/net_http.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ def initialize(semian_identifier, *args)
end
end

ResourceBusyError = Class.new(SemianError)
CircuitOpenError = Class.new(SemianError)
ResourceBusyError = Class.new(SemianError) { include ::Semian::AdapterResourceBusyError }
CircuitOpenError = Class.new(SemianError) { include ::Semian::AdapterCircuitOpenError }
end

module Semian
Expand Down
4 changes: 2 additions & 2 deletions lib/semian/redis.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ def marks_semian_circuits?
end
end

ResourceBusyError = Class.new(SemianError)
CircuitOpenError = Class.new(SemianError)
ResourceBusyError = Class.new(SemianError) { include ::Semian::AdapterResourceBusyError }
CircuitOpenError = Class.new(SemianError) { include ::Semian::AdapterCircuitOpenError }
ResolveError = Class.new(SemianError)

alias_method :_original_initialize, :initialize
Expand Down
4 changes: 2 additions & 2 deletions lib/semian/redis/v5.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ def initialize(semian_identifier, *args)
end
end

ResourceBusyError = Class.new(SemianError)
CircuitOpenError = Class.new(SemianError)
ResourceBusyError = Class.new(SemianError) { include ::Semian::AdapterResourceBusyError }
CircuitOpenError = Class.new(SemianError) { include ::Semian::AdapterCircuitOpenError }

Client::ERROR_MAPPING.merge!(
RedisClient::CircuitOpenError => Redis::CircuitOpenError,
Expand Down
4 changes: 2 additions & 2 deletions lib/semian/redis_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ def initialize(semian_identifier, *args)
end
end

ResourceBusyError = Class.new(SemianError)
CircuitOpenError = Class.new(SemianError)
ResourceBusyError = Class.new(SemianError) { include ::Semian::AdapterResourceBusyError }
CircuitOpenError = Class.new(SemianError) { include ::Semian::AdapterCircuitOpenError }

module SemianConfig
def initialize(semian: nil, **kwargs)
Expand Down
38 changes: 38 additions & 0 deletions test/error_modules_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# frozen_string_literal: true

require "test_helper"
require "semian/activerecord_trilogy_adapter"
require "semian/activerecord_postgresql_adapter"
require "semian/net_http"
require "semian/grpc"
require "semian/redis"
require "semian/redis_client"
require "semian/mysql2"

class ErrorModulesTest < Minitest::Test
ERRORS = [
ActiveRecord::ConnectionAdapters::TrilogyAdapter,
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter,
Net,
GRPC,
Redis,
RedisClient,
Mysql2,
].map { |mod| [mod.const_get(:ResourceBusyError), mod.const_get(:CircuitOpenError)] }

def test_adapter_errors_rescue
ERRORS.each do |busy_error, circuit_error|
assert_kind_of(busy_error.new, Semian::AdapterResourceBusyError)
assert_kind_of(circuit_error.new, Semian::AdapterCircuitOpenError)
end
end

def test_markers_do_not_match_unrelated_activerecord_errors
[ActiveRecord::RecordNotFound, ActiveRecord::StatementInvalid, ActiveRecord::AdapterTimeout].each do |record_error|
error = record_error.new

refute_kind_of(error.is_a?(Semian::AdapterResourceBusyError))
refute_kind_of(error.is_a?(Semian::AdapterCircuitOpenError))
end
end
end
Loading