active_partition 0.5.0 → 0.6.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/Gemfile.lock +1 -1
- data/README.md +7 -0
- data/bin/console +2 -1
- data/lib/active_partition/partition_managers/time_range.rb +6 -2
- data/lib/active_partition/version.rb +1 -1
- data/lib/active_partition.rb +4 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 942bdda1651b12d3dac2b0137a8d4ec024746bc6a494d7873d6328d1e5166ddc
|
4
|
+
data.tar.gz: 1f5770064c39d828a6d7fb4b7d89e4d1f49711bfb8fb304c8ad73430032e29f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18119f845f143524abedfe280c09cfdd4cca5591a56aa4428413ee19cf3bb9f035e951ad3d1c7100a12e80fefc81037dc82f613b50b549497a1586ec655192b2
|
7
|
+
data.tar.gz: b56f0432c0c6fd7a42c8916547a97cd793be170e759f88b409ff9b2ec773f8a95c330997dfe111b4f37ac66137e52bd7ed3e105fdd547e8d5a92477ae3a78f2e
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -38,6 +38,13 @@ class Event < ActiveRecord::Base
|
|
38
38
|
self.retention_period = 1.month
|
39
39
|
# Keep last n partitions
|
40
40
|
self.retention_partition_count = 3
|
41
|
+
# The start time of the partition range, default is Time.current.beginning_of_hour.utc
|
42
|
+
# For example, if today is July 31, and you create a new record.
|
43
|
+
# if the partition_start_from is 2021-01-01, the new partition should cover [2024-07-01 00:00:00 UTC...2024-08-01 00:00:00 UTC]
|
44
|
+
# if the partition_start_from is nil, the coverage can be [2024-07-31 08:00:00 UTC...2024-08-31 08:00:00 UTC]
|
45
|
+
# This configuration help us to sync partition ranges of all partitioned tables.
|
46
|
+
# Therefore, you can easy to join/drop/manage related partitioned tables.
|
47
|
+
self.partition_start_from = DateTime.new(2021, 1, 1)
|
41
48
|
end
|
42
49
|
|
43
50
|
# auto create a new partition if needed.
|
data/bin/console
CHANGED
@@ -5,7 +5,7 @@ require "bundler/setup"
|
|
5
5
|
require "active_partition"
|
6
6
|
require "active_record"
|
7
7
|
require "byebug"
|
8
|
-
|
8
|
+
require "rails"
|
9
9
|
def reload!
|
10
10
|
files = $LOADED_FEATURES.select { |feat| feat =~ /\/active_partition\// }
|
11
11
|
files.each { |file| load file }
|
@@ -35,6 +35,7 @@ class OutgoingEventsWebhook < ActiveRecord::Base
|
|
35
35
|
self.primary_key = "id"
|
36
36
|
self.partitioned_by = "created_at"
|
37
37
|
self.partition_range = 1.hour
|
38
|
+
self.partition_start_from = DateTime.new(2021, 1, 1)
|
38
39
|
|
39
40
|
# You can choose 1 of the following 2 options
|
40
41
|
self.retention_period = 1.day
|
@@ -2,9 +2,10 @@
|
|
2
2
|
|
3
3
|
module ActivePartition::PartitionManagers
|
4
4
|
class TimeRange
|
5
|
-
def initialize(partition_adapter, table_name)
|
5
|
+
def initialize(partition_adapter, table_name, partition_start_from = nil)
|
6
6
|
@partition_adapter = partition_adapter
|
7
7
|
@table_name = table_name
|
8
|
+
@partition_start_from = partition_start_from
|
8
9
|
end
|
9
10
|
|
10
11
|
# Retrieves the active ranges from the partition adapter.
|
@@ -15,6 +16,9 @@ module ActivePartition::PartitionManagers
|
|
15
16
|
#
|
16
17
|
# @return [Array] The array of active ranges.
|
17
18
|
def active_ranges
|
19
|
+
# in test environment, the partition table is not actually created. Therefore, return empty array
|
20
|
+
return [] if defined?(Rails) && Rails.env.test?
|
21
|
+
|
18
22
|
@active_ranges ||= reload_active_ranges(@partition_adapter.get_all_supported_partition_tables)
|
19
23
|
end
|
20
24
|
|
@@ -128,7 +132,7 @@ module ActivePartition::PartitionManagers
|
|
128
132
|
def latest_partition_coverage_time
|
129
133
|
partition_tables = @partition_adapter.get_all_supported_partition_tables
|
130
134
|
reload_active_ranges(partition_tables)
|
131
|
-
return Time.current.beginning_of_hour.utc if partition_tables.empty?
|
135
|
+
return (@partition_start_from || Time.current.beginning_of_hour.utc) if partition_tables.empty?
|
132
136
|
|
133
137
|
latest_partition_table = partition_tables.sort_by { |p_name| p_name.split("_").last.to_i }.last
|
134
138
|
@latest_coverage_at = Time.at(latest_partition_table.split("_").last.to_i).utc
|
data/lib/active_partition.rb
CHANGED
@@ -40,9 +40,9 @@ module ActivePartition
|
|
40
40
|
def partition_manager
|
41
41
|
@partition_manager ||= case columns_hash[partitioned_by.to_s].type.to_s
|
42
42
|
when "datetime"
|
43
|
-
ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name)
|
43
|
+
ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name, partition_start_from)
|
44
44
|
else
|
45
|
-
ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name)
|
45
|
+
ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name, partition_start_from)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -56,6 +56,8 @@ module ActivePartition
|
|
56
56
|
attr_accessor :retention_period
|
57
57
|
# Retains the specified number of partitions [Choose one of retention_period or retention_partition_count]
|
58
58
|
attr_accessor :retention_partition_count
|
59
|
+
# The start time of the partition range, default is Time.current
|
60
|
+
attr_accessor :partition_start_from
|
59
61
|
|
60
62
|
def delete_expired_partitions
|
61
63
|
if retention_period && retention_period.is_a?(ActiveSupport::Duration)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_partition
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thien Tran
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-07-
|
11
|
+
date: 2024-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|