activerecord-retry-reads 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 107348efac31c4aa59343edc97e421b2d67f065998e70e3c10c31880a7dd5ecd
4
+ data.tar.gz: 44e13abff494439827baeb1b19a9c32f2e6052c410b07c0ac4f1a81ed896132b
5
+ SHA512:
6
+ metadata.gz: 2f00ca6ff861653defcdcf929aadfbf8fa5a0237006e0daede320c0e67d6d1292bd5517452049281dc9d0c988ad56ede2e6a0fe835df8f6d0ef566431573a899
7
+ data.tar.gz: 79d8f13f5c2bcca8e5e4d19b5935a32c18373052dbc87b837c758581a9830fbe5071be5810f9d80e8a524ac20ddc7efd8727a4c68b225338abbdc347cbea7cc0
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # activerecord-retry-reads
2
+
3
+ Automatically retry read queries.
4
+
5
+ Supports Rails 7.1+ and the `mysql2`, `postgresql`, `sqlite3`, or `trilogy` adapters.
6
+
7
+ ## Installation
8
+ In your Gemfile:
9
+
10
+ ```
11
+ gem 'activerecord-mysql-reconnect'
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ There is currently no configuration for this gem.
17
+
18
+ ## Why this gem?
19
+
20
+ Historically, gems like [activerecord-mysql-reconnect](https://github.com/planningcenter/activerecord-mysql-reconnect) have been used to automatically reconnect and retry queries after a disconnect from MySQL. They are not compatible with Rails >= 7.1.
21
+
22
+ Rails 7.1 added native reconnect and retry functionality, but it is _extremely_ conservative about what queries are automatically retried. In almost every Rails app any _read_ query is idempotent and safe to retry. If this is not true in your app, do not use this gem!
23
+
24
+ This gem expands the automatic retry functionality added in Rails 7.1 to enable retries for every _read_ query.
25
+
26
+ ## Testing
27
+
28
+ Run tests with:
29
+
30
+ ```
31
+ bundle exec appraisal install
32
+ bundle exec appraisal rake test
33
+ ```
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ module ActiveRecord
3
+ module ConnectionAdapters
4
+ module AutoRetryAllReads
5
+ def raw_execute(sql, name, **kwargs)
6
+ kwargs[:allow_retry] = true if !write_query?(sql)
7
+ super(sql, name, **kwargs)
8
+ end
9
+ end
10
+
11
+ ActiveSupport.on_load(:active_record_mysql2adapter) do
12
+ Mysql2::DatabaseStatements.prepend(AutoRetryAllReads)
13
+ end
14
+ ActiveSupport.on_load(:active_record_postgresqladapter) do
15
+ PostgreSQL::DatabaseStatements.prepend(AutoRetryAllReads)
16
+ end
17
+ ActiveSupport.on_load(:active_record_sqlite3adapter) do
18
+ Sqlite3::DatabaseStatements.prepend(AutoRetryAllReads)
19
+ end
20
+ ActiveSupport.on_load(:active_record_trilogyadapter) do
21
+ Trilogy::DatabaseStatements.prepend(AutoRetryAllReads)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ module ActiverecordRetryReads
3
+ VERSION = "1.0.0"
4
+ end
@@ -0,0 +1,2 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'activerecord/connection_adapters/auto_retry_all_reads'
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord-retry-reads
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - ben@planningcenter.com
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-03-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 7.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 7.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: appraisal
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Retry read queries automatically when disconnected from the database
70
+ email:
71
+ - ben@planningcenter.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - README.md
77
+ - lib/activerecord-retry-reads.rb
78
+ - lib/activerecord-retry-reads/version.rb
79
+ - lib/activerecord/connection_adapters/auto_retry_all_reads.rb
80
+ homepage: https://github.com/planningcenter/activerecord-retry-reads
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubygems_version: 3.5.3
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: Retry read queries automatically when disconnected from the database
103
+ test_files: []