rails-archiver 0.2.0 → 0.3.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 +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/rails-archiver/archiver.rb +4 -1
- data/lib/rails-archiver/utils/deadlock_retry.rb +29 -0
- data/rails-archiver.gemspec +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddfcaefd86b70ef668e8ba941e20f68a96a62a704ad9e931fbe72343a6ef7ddb
|
4
|
+
data.tar.gz: d3283d3fbbb8abeafab718a445b7f129cef999f531b7766998af860c22de2c90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a69726e5dff1eb032dcb915c67804cce258f970652045561a52a727a073493844a5879d79e2bb982d6a9427c834f0d33e1873759c29c463765d65894cb19674e
|
7
|
+
data.tar.gz: 34eb78437f58aced9d64fe518e0183f8ecc5dc24e8d24e88194d7d379a5c9ecd138c00bbc46f54f23fef280ea8994acd12b8c9a86decbc0d3fa04d9014896917
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## UNRELEASED
|
9
9
|
|
10
|
+
# [0.3.0] - 2025-05-22
|
11
|
+
- Added retries for delete table operations to handle SQL Timeouts and deadlocks.
|
12
|
+
|
10
13
|
# [0.2.0] - 2025-01-20
|
11
14
|
- Added support for enum columns - should be able to handle both keys and values.
|
12
15
|
- Refactored the `unarchiver` method to more easily subclass `Unarchiver`.
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'tmpdir'
|
2
|
+
require 'rails-archiver/utils/deadlock_retry'
|
2
3
|
# Takes a database model and:
|
3
4
|
# 1) Visits all dependent associations
|
4
5
|
# 2) Saves everything in one giant JSON hash
|
@@ -122,7 +123,9 @@ module RailsArchiver
|
|
122
123
|
delete_query = <<-SQL
|
123
124
|
DELETE FROM `#{table}` WHERE `id` IN (#{group.compact.join(',')})
|
124
125
|
SQL
|
125
|
-
|
126
|
+
RailsArchiver::Utils::DeadlockRetry.wrap do
|
127
|
+
ActiveRecord::Base.connection.delete(delete_query)
|
128
|
+
end
|
126
129
|
end
|
127
130
|
|
128
131
|
@logger.info("Finished deleting from #{table}")
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsArchiver
|
4
|
+
module Utils
|
5
|
+
# Utility module to retry a block of code in case of a deadlock.
|
6
|
+
module DeadlockRetry
|
7
|
+
class << self
|
8
|
+
|
9
|
+
RETRY_COUNT = 2
|
10
|
+
|
11
|
+
def wrap(&block)
|
12
|
+
count = RETRY_COUNT
|
13
|
+
begin
|
14
|
+
ActiveRecord::Base.transaction(&block)
|
15
|
+
rescue ActiveRecord::Deadlocked, ActiveRecord::LockWaitTimeout => e
|
16
|
+
raise if count <= 0
|
17
|
+
|
18
|
+
Rails.logger.error("Error: #{e.message}. Retrying. #{count} attempts remaining")
|
19
|
+
count -= 1
|
20
|
+
|
21
|
+
sleep(Random.rand(5.0) + 0.5)
|
22
|
+
|
23
|
+
retry
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/rails-archiver.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'rails-archiver'
|
3
3
|
s.require_paths = %w(. lib lib/rails-archiver)
|
4
|
-
s.version = '0.
|
5
|
-
s.date = '2025-
|
4
|
+
s.version = '0.3.0'
|
5
|
+
s.date = '2025-05-22'
|
6
6
|
s.summary = 'Fully archive a Rails model'
|
7
7
|
s.description = <<-EOF
|
8
8
|
EOF
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-archiver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Orner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/rails-archiver/transport/in_memory.rb
|
54
54
|
- lib/rails-archiver/transport/s3.rb
|
55
55
|
- lib/rails-archiver/unarchiver.rb
|
56
|
+
- lib/rails-archiver/utils/deadlock_retry.rb
|
56
57
|
- rails-archiver.gemspec
|
57
58
|
homepage: https://github.com/dorner/rails-archiver
|
58
59
|
licenses:
|