semian 0.13.0 → 0.13.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84f862d0b3bcde3015576c4965229c14d188683f16c567256df7cf915c692874
4
- data.tar.gz: e03971099a9f6b605c8dc73abe332f91908467dd24e2cb4bd0ba1f802e3f249d
3
+ metadata.gz: b572c4e4fa4dee4453017187bc759a29890dca1627f8bebea6207223e58e49ba
4
+ data.tar.gz: f8b7f8eda600b096242becc44cb80a10592d9a9b2490349eecb5c11a008c0fe0
5
5
  SHA512:
6
- metadata.gz: a23498d15ccb457f76c4f7afbb858deed86aedc7fb97605b198578714aace1e14390c84be367add408b7b444e3350c7cce117dc608750b413e085ce10c06ed44
7
- data.tar.gz: 47e0f1be5613745ed37a6854ab82979e94eba4e53deb187035678dbdc4f3e781d5db9a97c2e34e7eef0386d6344cba1f34948a03252d058a50f600f7a96a438c
6
+ metadata.gz: 30c39a27e0e57ddcccc794fbe9cc04f1d84c864c1cd2786bb2e4e6e7050b51f152feeba8c66c59d1feae3c195b93a921a76aa1985dc034f00e3394d6b4cb3123
7
+ data.tar.gz: 922ba4aa39b90898b84cb301ee28344e5cfe8f57b523e531db24bba2bee3731d55dda0256bf7dd923fe33175daad960a93a1090addad68a448e6fe384a6a8c42
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Unreleased
2
2
 
3
+ # v0.13.3
4
+
5
+ * Add a warning message about redis 5.x. (#386)
6
+
7
+ # v0.13.2
8
+
9
+ * Fix: Update AbstractAdapter patch to accomodate recent Rails changes. (#364)
10
+
11
+ # v0.13.1
12
+
13
+ * Fix: Raise `Redis::OutOfMemoryError` for messages that match `OOM command not allowed when used memory > 'maxmemory'` rather than checking `start_with?("OOM ")`. (#367)
14
+
3
15
  # v0.13.0
4
16
 
5
17
  * Refactor: Replace Time.now with CLOCK_MONOTONIC in MockServer (#318)
data/lib/semian/mysql2.rb CHANGED
@@ -43,16 +43,18 @@ module Semian
43
43
  %r{\A(?:/\*.*?\*/)?\s*RELEASE\s+SAVEPOINT}i,
44
44
  )
45
45
 
46
- # The naked methods are exposed as `raw_query` and `raw_connect` for instrumentation purpose
47
- def self.included(base)
48
- base.send(:alias_method, :raw_query, :query)
49
- base.send(:remove_method, :query)
46
+ class << self
47
+ # The naked methods are exposed as `raw_query` and `raw_connect` for instrumentation purpose
48
+ def included(base)
49
+ base.send(:alias_method, :raw_query, :query)
50
+ base.send(:remove_method, :query)
50
51
 
51
- base.send(:alias_method, :raw_connect, :connect)
52
- base.send(:remove_method, :connect)
52
+ base.send(:alias_method, :raw_connect, :connect)
53
+ base.send(:remove_method, :connect)
53
54
 
54
- base.send(:alias_method, :raw_ping, :ping)
55
- base.send(:remove_method, :ping)
55
+ base.send(:alias_method, :raw_ping, :ping)
56
+ base.send(:remove_method, :ping)
57
+ end
56
58
  end
57
59
 
58
60
  def semian_identifier
data/lib/semian/rails.rb CHANGED
@@ -2,14 +2,35 @@
2
2
 
3
3
  require "active_record/connection_adapters/abstract_adapter"
4
4
 
5
- module ActiveRecord
6
- module ConnectionAdapters
7
- class AbstractAdapter
8
- def semian_resource
9
- # support for https://github.com/rails/rails/commit/d86fd6415c0dfce6fadb77e74696cf728e5eb76b
10
- connection = instance_variable_defined?(:@raw_connection) ? @raw_connection : @connection
11
- connection.semian_resource
5
+ module Semian
6
+ module Rails
7
+ def semian_resource
8
+ @semian_resource ||= client_connection.semian_resource
9
+ end
10
+
11
+ def reconnect
12
+ @semian_resource = nil
13
+ super
14
+ end
15
+
16
+ private
17
+
18
+ # client_connection is an instance of a Mysql2::Client
19
+ #
20
+ # The conditionals here support multiple Rails versions.
21
+ # - valid_raw_connection is for 7.1.x and above
22
+ # - @raw_connection is for 7.0.x
23
+ # - @connection is for versions below 6.1.x and below
24
+ def client_connection
25
+ if respond_to?(:valid_raw_connection)
26
+ valid_raw_connection
27
+ elsif instance_variable_defined?(:@raw_connection)
28
+ @raw_connection
29
+ else
30
+ @connection
12
31
  end
13
32
  end
14
33
  end
15
34
  end
35
+
36
+ ActiveRecord::ConnectionAdapters::AbstractAdapter.prepend(Semian::Rails)
data/lib/semian/redis.rb CHANGED
@@ -3,6 +3,11 @@
3
3
  require "semian/adapter"
4
4
  require "redis"
5
5
 
6
+ if Redis::VERSION >= "5.0.0"
7
+ Semian.logger.warn("NOTE: Semian is not compatible with Redis 5.x")
8
+ return
9
+ end
10
+
6
11
  class Redis
7
12
  Redis::BaseConnectionError.include(::Semian::AdapterError)
8
13
  ::Errno::EINVAL.include(::Semian::AdapterError)
@@ -65,13 +70,15 @@ module Semian
65
70
  CircuitOpenError = ::Redis::CircuitOpenError
66
71
  ResolveError = ::Redis::ResolveError
67
72
 
68
- # The naked methods are exposed as `raw_query` and `raw_connect` for instrumentation purpose
69
- def self.included(base)
70
- base.send(:alias_method, :raw_io, :io)
71
- base.send(:remove_method, :io)
73
+ class << self
74
+ # The naked methods are exposed as `raw_query` and `raw_connect` for instrumentation purpose
75
+ def included(base)
76
+ base.send(:alias_method, :raw_io, :io)
77
+ base.send(:remove_method, :io)
72
78
 
73
- base.send(:alias_method, :raw_connect, :connect)
74
- base.send(:remove_method, :connect)
79
+ base.send(:alias_method, :raw_connect, :connect)
80
+ base.send(:remove_method, :connect)
81
+ end
75
82
  end
76
83
 
77
84
  def semian_identifier
@@ -139,7 +146,7 @@ module Semian
139
146
 
140
147
  def raise_if_out_of_memory(reply)
141
148
  return unless reply.is_a?(::Redis::CommandError)
142
- return unless reply.message.start_with?("OOM ")
149
+ return unless reply.message =~ /OOM command not allowed when used memory > 'maxmemory'/
143
150
 
144
151
  raise ::Redis::OutOfMemoryError, reply.message
145
152
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Semian
4
- VERSION = "0.13.0"
4
+ VERSION = "0.13.3"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.13.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Francis
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-06-27 00:00:00.000000000 Z
13
+ date: 2022-09-02 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: |2
16
16
  A Ruby C extention that is used to control access to shared resources
@@ -61,7 +61,17 @@ metadata:
61
61
  bug_tracker_uri: https://github.com/Shopify/semian/issues
62
62
  changelog_uri: https://github.com/Shopify/semian/blob/master/CHANGELOG.md
63
63
  source_code_uri: https://github.com/Shopify/semian
64
- post_install_message:
64
+ post_install_message: |2+
65
+
66
+ ==============================================================================
67
+
68
+ semians is not compatible with redis 5.x.
69
+ Update Gemfile to use older redis version:
70
+
71
+ gem "redis", "~> 4.8"
72
+
73
+ ==============================================================================
74
+
65
75
  rdoc_options: []
66
76
  require_paths:
67
77
  - lib