tartarus-rb 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +4 -0
- data/Gemfile.lock +2 -2
- data/README.md +2 -1
- data/lib/tartarus.rb +1 -0
- data/lib/tartarus/archivable_collection_repository.rb +1 -0
- data/lib/tartarus/archivable_item.rb +8 -2
- data/lib/tartarus/archive_strategy.rb +3 -1
- data/lib/tartarus/archive_strategy/delete_all_using_limit_in_batches.rb +20 -0
- data/lib/tartarus/rb/version.rb +1 -1
- 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: f1336e4444881135833d1d1784514a523a9abce37fe911683398b3f2b2bac0c6
|
4
|
+
data.tar.gz: 82ec19e8f7ea7bde9df2d8d9c75c218f152832bfb977963489e07e3ffbff6cb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13139b7f8b5d5397cd0bd5d7104ed676c26345197875824eab50b7eebd3a50a4a983e44c73788da33490c2f5ba610422b643104c55e23b004817a016c4d56f44
|
7
|
+
data.tar.gz: 4622b5a42e74f7802e27f8bcb48959f9d6957a334ec7647f184b85bc09736718fc1e653da2a416d5c8d08417372eebeb89f869b099bb732085fffaa86fbb9506
|
data/Changelog.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tartarus-rb (0.
|
4
|
+
tartarus-rb (0.3.0)
|
5
5
|
sidekiq (>= 5)
|
6
6
|
sidekiq-cron (~> 1)
|
7
7
|
|
@@ -24,7 +24,7 @@ GEM
|
|
24
24
|
diff-lcs (1.4.4)
|
25
25
|
et-orbi (1.2.4)
|
26
26
|
tzinfo
|
27
|
-
fugit (1.4.
|
27
|
+
fugit (1.4.1)
|
28
28
|
et-orbi (~> 1.1, >= 1.1.8)
|
29
29
|
raabro (~> 1.4)
|
30
30
|
i18n (1.8.5)
|
data/README.md
CHANGED
@@ -78,7 +78,8 @@ You can use the following config params:
|
|
78
78
|
- `tenant_id_field` - required when using tenant_value_source/tenant_value_source. It's a DB column that will be used for scoping records by a tenant. For example, here it would be: `ModelThatYouWantToArchive.where(account_uuid: value_of_uuid_from_some_active_account)`
|
79
79
|
- `archive_items_older_than` - required, for defining retention policy
|
80
80
|
- `timestamp_field` - required, used for performing a query using the value from `archive_items_older_than`
|
81
|
-
- `archive_with` - optional (defaults to `delete_all`). Could be `delete_all`, `destroy_all`, `delete_all_without_batches`, `destroy_all_without_batches`
|
81
|
+
- `archive_with` - optional (defaults to `delete_all`). Could be `delete_all`, `destroy_all`, `delete_all_without_batches`, `destroy_all_without_batches`, `delete_all_using_limit_in_batches`
|
82
|
+
- `batch_size` - optional (defaults to `10_000`, used with `delete_all_using_limit_in_batches` strategy)
|
82
83
|
|
83
84
|
### Testing before actually using it
|
84
85
|
|
data/lib/tartarus.rb
CHANGED
@@ -4,6 +4,7 @@ require "tartarus/archivable_item/sidekiq_cron_job_serializer"
|
|
4
4
|
require "tartarus/archive_strategy"
|
5
5
|
require "tartarus/archive_strategy/delete_all"
|
6
6
|
require "tartarus/archive_strategy/delete_all_without_batches"
|
7
|
+
require "tartarus/archive_strategy/delete_all_using_limit_in_batches"
|
7
8
|
require "tartarus/archive_strategy/destroy_all"
|
8
9
|
require "tartarus/archive_strategy/destroy_all_without_batches"
|
9
10
|
require "tartarus/archive_strategy/extract_batch"
|
@@ -13,6 +13,7 @@ class Tartarus
|
|
13
13
|
ensure_column_exists(collection, model_name, tenant_id_field)
|
14
14
|
|
15
15
|
collection.where("#{timestamp_field} < ?", timestamp).where(tenant_id_field => tenant_id)
|
16
|
+
.order(tenant_id_field, timestamp_field)
|
16
17
|
end
|
17
18
|
|
18
19
|
def items_older_than(model_name, timestamp_field, timestamp)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Tartarus::ArchivableItem
|
2
2
|
REQUIRED_ATTRIBUTES_NAMES = %i(model cron queue archive_items_older_than timestamp_field active_job
|
3
3
|
archive_with tenant_value_source).freeze
|
4
|
-
OPTIONAL_ATTRIBUTES_NAMES = %i(tenants_range tenant_id_field).freeze
|
4
|
+
OPTIONAL_ATTRIBUTES_NAMES = %i(tenants_range tenant_id_field batch_size).freeze
|
5
5
|
|
6
6
|
attr_accessor *(REQUIRED_ATTRIBUTES_NAMES + OPTIONAL_ATTRIBUTES_NAMES)
|
7
7
|
|
@@ -45,6 +45,12 @@ class Tartarus::ArchivableItem
|
|
45
45
|
@archive_with ||= :delete_all
|
46
46
|
end
|
47
47
|
|
48
|
+
def batch_size
|
49
|
+
return @batch_size if defined?(@batch_size)
|
50
|
+
|
51
|
+
@batch_size ||= 10_000
|
52
|
+
end
|
53
|
+
|
48
54
|
def validate!
|
49
55
|
validate_presence
|
50
56
|
end
|
@@ -54,7 +60,7 @@ class Tartarus::ArchivableItem
|
|
54
60
|
end
|
55
61
|
|
56
62
|
def archive_strategy(factory: Tartarus::ArchiveStrategy.new)
|
57
|
-
factory.for(archive_with)
|
63
|
+
factory.for(archive_with, batch_size: batch_size)
|
58
64
|
end
|
59
65
|
|
60
66
|
def for_model?(provided_model_name)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Tartarus::ArchiveStrategy
|
2
|
-
def for(strategy_name)
|
2
|
+
def for(strategy_name, batch_size: 0)
|
3
3
|
case strategy_name.to_sym
|
4
4
|
when :delete_all
|
5
5
|
Tartarus::ArchiveStrategy::DeleteAll.new
|
@@ -9,6 +9,8 @@ class Tartarus::ArchiveStrategy
|
|
9
9
|
Tartarus::ArchiveStrategy::DeleteAllWithoutBatches.new
|
10
10
|
when :destroy_all_without_batches
|
11
11
|
Tartarus::ArchiveStrategy::DestroyAllWithoutBatches.new
|
12
|
+
when :delete_all_using_limit_in_batches
|
13
|
+
Tartarus::ArchiveStrategy::DeleteAllUsingLimitInBatches.new(batch_size: batch_size)
|
12
14
|
else
|
13
15
|
raise "unknown strategy: #{strategy_name}"
|
14
16
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Tartarus
|
2
|
+
class ArchiveStrategy
|
3
|
+
class DeleteAllUsingLimitInBatches
|
4
|
+
attr_reader :batch_size
|
5
|
+
private :batch_size
|
6
|
+
|
7
|
+
def initialize(batch_size:)
|
8
|
+
@batch_size = batch_size
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(collection)
|
12
|
+
num = 1
|
13
|
+
|
14
|
+
while num > 0
|
15
|
+
num = collection.limit(batch_size).delete_all
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/tartarus/rb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tartarus-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karol Galanciak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/tartarus/archive_model_without_tenant.rb
|
137
137
|
- lib/tartarus/archive_strategy.rb
|
138
138
|
- lib/tartarus/archive_strategy/delete_all.rb
|
139
|
+
- lib/tartarus/archive_strategy/delete_all_using_limit_in_batches.rb
|
139
140
|
- lib/tartarus/archive_strategy/delete_all_without_batches.rb
|
140
141
|
- lib/tartarus/archive_strategy/destroy_all.rb
|
141
142
|
- lib/tartarus/archive_strategy/destroy_all_without_batches.rb
|