Class: Gitlab::Database::Partitioning::MonthlyStrategy
- Inherits:
-
Object
- Object
- Gitlab::Database::Partitioning::MonthlyStrategy
- Defined in:
- lib/gitlab/database/partitioning/monthly_strategy.rb
Constant Summary collapse
- HEADROOM =
We create this many partitions in the future
6.months
Instance Attribute Summary collapse
-
#analyze_interval ⇒ Object
readonly
Returns the value of attribute analyze_interval.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
-
#partitioning_key ⇒ Object
readonly
Returns the value of attribute partitioning_key.
-
#retain_for ⇒ Object
readonly
Returns the value of attribute retain_for.
-
#retain_non_empty_partitions ⇒ Object
readonly
Returns the value of attribute retain_non_empty_partitions.
Instance Method Summary collapse
- #after_adding_partitions ⇒ Object
- #current_partitions ⇒ Object
- #extra_partitions ⇒ Object
-
#initialize(model, partitioning_key, retain_for: nil, retain_non_empty_partitions: false, analyze_interval: nil) ⇒ MonthlyStrategy
constructor
A new instance of MonthlyStrategy.
-
#missing_partitions ⇒ Object
Check the currently existing partitions and determine which ones are missing.
- #validate_and_fix ⇒ Object
Constructor Details
#initialize(model, partitioning_key, retain_for: nil, retain_non_empty_partitions: false, analyze_interval: nil) ⇒ MonthlyStrategy
Returns a new instance of MonthlyStrategy.
14 15 16 17 18 19 20 21 22 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 14 def initialize( model, partitioning_key, retain_for: nil, retain_non_empty_partitions: false, analyze_interval: nil) @model = model @partitioning_key = partitioning_key @retain_for = retain_for @retain_non_empty_partitions = retain_non_empty_partitions @analyze_interval = analyze_interval end |
Instance Attribute Details
#analyze_interval ⇒ Object (readonly)
Returns the value of attribute analyze_interval.
7 8 9 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 7 def analyze_interval @analyze_interval end |
#model ⇒ Object (readonly)
Returns the value of attribute model.
7 8 9 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 7 def model @model end |
#partitioning_key ⇒ Object (readonly)
Returns the value of attribute partitioning_key.
7 8 9 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 7 def partitioning_key @partitioning_key end |
#retain_for ⇒ Object (readonly)
Returns the value of attribute retain_for.
7 8 9 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 7 def retain_for @retain_for end |
#retain_non_empty_partitions ⇒ Object (readonly)
Returns the value of attribute retain_non_empty_partitions.
7 8 9 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 7 def retain_non_empty_partitions @retain_non_empty_partitions end |
Instance Method Details
#after_adding_partitions ⇒ Object
42 43 44 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 42 def after_adding_partitions # No-op, required by the partition manager end |
#current_partitions ⇒ Object
24 25 26 27 28 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 24 def current_partitions Gitlab::Database::PostgresPartition.for_parent_table(table_name).map do |partition| TimePartition.from_sql(table_name, partition.name, partition.condition) end end |
#extra_partitions ⇒ Object
35 36 37 38 39 40 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 35 def extra_partitions partitions = current_partitions - desired_partitions partitions.reject!(&:holds_data?) if retain_non_empty_partitions partitions end |
#missing_partitions ⇒ Object
Check the currently existing partitions and determine which ones are missing
31 32 33 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 31 def missing_partitions desired_partitions - current_partitions end |
#validate_and_fix ⇒ Object
46 47 48 |
# File 'lib/gitlab/database/partitioning/monthly_strategy.rb', line 46 def validate_and_fix # No-op, required by the partition manager end |