class PgDice::PartitionManager
PartitionManager
is a class used to fulfill high-level tasks for partitioning
Attributes
approved_tables[R]
batch_size[R]
current_date_provider[R]
logger[R]
partition_adder[R]
partition_dropper[R]
partition_lister[R]
validation[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/pgdice/partition_manager.rb, line 12 def initialize(opts = {}) @logger = opts.fetch(:logger) @batch_size = opts.fetch(:batch_size) @validation = opts.fetch(:validation) @approved_tables = opts.fetch(:approved_tables) @partition_adder = opts.fetch(:partition_adder) @partition_lister = opts.fetch(:partition_lister) @partition_dropper = opts.fetch(:partition_dropper) @current_date_provider = opts.fetch(:current_date_provider, proc { Time.now.utc.to_date }) end
Public Instance Methods
add_new_partitions(table_name, params = {})
click to toggle source
# File lib/pgdice/partition_manager.rb, line 23 def add_new_partitions(table_name, params = {}) all_params = approved_tables.smash(table_name, params) logger.debug { "add_new_partitions has been called with params: #{all_params}" } validation.validate_parameters(all_params) partition_adder.call(all_params) end
drop_old_partitions(table_name, params = {})
click to toggle source
# File lib/pgdice/partition_manager.rb, line 30 def drop_old_partitions(table_name, params = {}) all_params = approved_tables.smash(table_name, params) all_params[:older_than] = current_date_provider.call logger.debug { "drop_old_partitions has been called with params: #{all_params}" } validation.validate_parameters(all_params) drop_partitions(all_params) end
list_droppable_partitions(table_name, params = {})
click to toggle source
# File lib/pgdice/partition_manager.rb, line 46 def list_droppable_partitions(table_name, params = {}) all_params = approved_tables.smash(table_name, params) validation.validate_parameters(all_params) droppable_partitions(all_params) end
list_droppable_partitions_by_batch_size(table_name, params = {})
click to toggle source
# File lib/pgdice/partition_manager.rb, line 52 def list_droppable_partitions_by_batch_size(table_name, params = {}) all_params = approved_tables.smash(table_name, params) validation.validate_parameters(all_params) droppable_tables = batched_droppable_partitions(all_params) logger.debug { "Batched partitions eligible for dropping are: #{droppable_tables}" } droppable_tables end
list_partitions(table_name, params = {})
click to toggle source
Grabs only tables that start with the base_table_name and end in numbers
# File lib/pgdice/partition_manager.rb, line 40 def list_partitions(table_name, params = {}) all_params = approved_tables.smash(table_name, params) validation.validate_parameters(all_params) partitions(all_params) end
Private Instance Methods
batched_droppable_partitions(all_params)
click to toggle source
# File lib/pgdice/partition_manager.rb, line 79 def batched_droppable_partitions(all_params) max_tables_to_drop_at_once = all_params.fetch(:batch_size, batch_size) selected_partitions = droppable_partitions(all_params) batched_tables(selected_partitions, max_tables_to_drop_at_once) end
drop_partitions(all_params)
click to toggle source
# File lib/pgdice/partition_manager.rb, line 85 def drop_partitions(all_params) old_partitions = batched_droppable_partitions(all_params) partition_dropper.call(old_partitions) end
droppable_partitions(all_params)
click to toggle source
# File lib/pgdice/partition_manager.rb, line 67 def droppable_partitions(all_params) older_than = current_date_provider.call minimum_tables = all_params.fetch(:past) period = all_params.fetch(:period) eligible_partitions = partitions(all_params) droppable_tables = find_droppable_partitions(eligible_partitions, older_than, minimum_tables, period) logger.debug { "Partitions eligible for dropping older than: #{older_than} are: #{droppable_tables}" } droppable_tables end
partitions(all_params)
click to toggle source
# File lib/pgdice/partition_manager.rb, line 62 def partitions(all_params) logger.info { "Fetching partition tables with params: #{all_params}" } partition_lister.call(all_params) end