active_partition 0.3.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/bin/console +24 -0
- data/lib/active_partition/version.rb +1 -1
- data/lib/active_partition.rb +39 -35
- 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: 9c038362292769cc7d68786d177c845429a6e15a3bac8c6b1de166e976a27d26
|
4
|
+
data.tar.gz: 84a4f14e03c642cd562caae6e93fd9aaee1a4bf2bb7e4bb50f284860a809e2fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d15088d3d42bb257b854e7f04ed265400ae810831692b5fda3f5ef8ae2d7e3582bf09e7703393e2cbdf67cdf388b74a6b1dd77624a74a38706f9face93ac3d1
|
7
|
+
data.tar.gz: 0a58ffcebd2c11bc4e26faefe7106928ef58fa435c7d8c7e441b11b06487f018298cfcceec3fb8d924ac80a62f1d4a844f8c381a736930f6a583bcc9f334d30d
|
data/Gemfile.lock
CHANGED
data/bin/console
CHANGED
@@ -30,7 +30,31 @@ class OutgoingEvent < ActiveRecord::Base
|
|
30
30
|
self.retention_partition_count = 3
|
31
31
|
end
|
32
32
|
|
33
|
+
class OutgoingEventsWebhook < ActiveRecord::Base
|
34
|
+
include ActivePartition::Partitionable
|
35
|
+
self.primary_key = "id"
|
36
|
+
self.partitioned_by = "created_at"
|
37
|
+
self.partition_range = 1.hour
|
38
|
+
|
39
|
+
# You can choose 1 of the following 2 options
|
40
|
+
self.retention_period = 1.day
|
41
|
+
self.retention_partition_count = 3
|
42
|
+
end
|
43
|
+
|
33
44
|
OutgoingEvent.establish_connection(ENV["DATABASE_URL"])
|
45
|
+
OutgoingEventsWebhook.establish_connection(ENV["DATABASE_URL"])
|
46
|
+
|
47
|
+
if OutgoingEventsWebhook.partition_adapter == OutgoingEvent.partition_adapter
|
48
|
+
puts "Violate the partition adapter constraint", OutgoingEventsWebhook.partition_adapter == OutgoingEvent.partition_adapter
|
49
|
+
puts OutgoingEventsWebhook.partition_adapter
|
50
|
+
puts OutgoingEvent.partition_adapter
|
51
|
+
end
|
52
|
+
|
53
|
+
if OutgoingEventsWebhook.partition_manager == OutgoingEvent.partition_manager
|
54
|
+
puts "Violate the partition manager constraint"
|
55
|
+
puts OutgoingEventsWebhook.partition_manager
|
56
|
+
puts OutgoingEvent.partition_manager
|
57
|
+
end
|
34
58
|
|
35
59
|
require "irb"
|
36
60
|
IRB.start(__FILE__)
|
data/lib/active_partition.rb
CHANGED
@@ -13,6 +13,7 @@ module ActivePartition
|
|
13
13
|
module Partitionable
|
14
14
|
extend ActiveSupport::Concern
|
15
15
|
|
16
|
+
# rubocop:disable Metrics
|
16
17
|
included do
|
17
18
|
# when partitioned column change, create partition if needed
|
18
19
|
# before_validation will be called with create, update, save, and create! methods
|
@@ -30,47 +31,50 @@ module ActivePartition
|
|
30
31
|
partitioned_value = attributes[self.class.partitioned_by.to_s]
|
31
32
|
self.class.prepare_partition(partitioned_value, self.class.partition_range)
|
32
33
|
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# rubocop:disable Metrics
|
36
|
-
class_methods do
|
37
|
-
# The range of each partition. You can change this value over time.
|
38
|
-
# example: 1.month, 2.weeks, 3.hours
|
39
|
-
attr_accessor :partition_range
|
40
|
-
# The column name to partition the table by
|
41
|
-
attr_accessor :partitioned_by
|
42
|
-
# Retains partitions until the specified time [Choose one of retention_period or retention_partition_count]
|
43
|
-
# For example: 1.month (1 month from now), 2.weeks (2 weeks from now), 3.hours (3 hours from now)
|
44
|
-
attr_accessor :retention_period
|
45
|
-
# Retains the specified number of partitions [Choose one of retention_period or retention_partition_count]
|
46
|
-
attr_accessor :retention_partition_count
|
47
34
|
|
48
|
-
|
49
|
-
|
50
|
-
|
35
|
+
class << self
|
36
|
+
def partition_adapter
|
37
|
+
@partition_adapter ||= ActivePartition::Adapters::PostgresqlAdapter.new(connection, table_name)
|
38
|
+
end
|
51
39
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
40
|
+
def partition_manager
|
41
|
+
@partition_manager ||= case columns_hash[partitioned_by.to_s].type.to_s
|
42
|
+
when "datetime"
|
43
|
+
ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name)
|
44
|
+
else
|
45
|
+
ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name)
|
46
|
+
end
|
58
47
|
end
|
59
|
-
end
|
60
48
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
49
|
+
# The range of each partition. You can change this value over time.
|
50
|
+
# example: 1.month, 2.weeks, 3.hours
|
51
|
+
attr_accessor :partition_range
|
52
|
+
# The column name to partition the table by
|
53
|
+
attr_accessor :partitioned_by
|
54
|
+
# Retains partitions until the specified time [Choose one of retention_period or retention_partition_count]
|
55
|
+
# For example: 1.month (1 month from now), 2.weeks (2 weeks from now), 3.hours (3 hours from now)
|
56
|
+
attr_accessor :retention_period
|
57
|
+
# Retains the specified number of partitions [Choose one of retention_period or retention_partition_count]
|
58
|
+
attr_accessor :retention_partition_count
|
59
|
+
|
60
|
+
def delete_expired_partitions
|
61
|
+
if retention_period && retention_period.is_a?(ActiveSupport::Duration)
|
62
|
+
partition_manager.retain_by_time(retention_period.ago)
|
63
|
+
elsif retention_partition_count
|
64
|
+
partition_manager.retain_by_partition_count(retention_partition_count)
|
65
|
+
end
|
66
66
|
end
|
67
|
-
end
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
delegate :premake, :latest_partition_coverage_time, to: :partition_manager
|
69
|
+
delegate :retain, :retain_by_time, :retain_by_partition_count, to: :partition_manager
|
70
|
+
delegate :prepare_partition, "active_partitions_cover?", to: :partition_manager
|
71
|
+
delegate :get_all_supported_partition_tables, to: :partition_adapter
|
72
|
+
delegate :drop_partition, to: :partition_adapter
|
73
|
+
end
|
74
74
|
end
|
75
|
+
|
76
|
+
# rubocop:disable Metrics
|
77
|
+
# class_methods do
|
78
|
+
# end
|
75
79
|
end
|
76
80
|
end
|
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.5.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-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|