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