Class: Gitlab::Database::TruncatePartition

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/database/truncate_partition.rb

Instance Method Summary collapse

Constructor Details

#initialize(partition_name, target_database: nil, logger: Logger.new($stdout)) ⇒ TruncatePartition

Returns a new instance of TruncatePartition.



6
7
8
9
10
# File 'lib/gitlab/database/truncate_partition.rb', line 6

def initialize(partition_name, target_database: nil, logger: Logger.new($stdout))
  @partition_name = partition_name
  @target_database = target_database
  @logger = logger
end

Instance Method Details

#executeObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/gitlab/database/truncate_partition.rb', line 12

def execute
  unless allowed_partition?
    log("#{partition_name} is not listed as one of the allowed partitions, " \
      "only #{allowed_partitions.keys.join(', ')} allowed")
    return false
  end

  success = true

  EachDatabase.each_connection(only: target_database) do |connection, database_name|
    partition_data = TaskHelpers.get_partition_info(partition_name, connection)

    if partition_data.nil?
      log("Partition #{partition_name} not present on #{database_name}")
      next
    end

    if partition_data['is_attached']
      log("Partition #{partition_name} is still attached on #{database_name}. Detach before truncating.")
      success = false
      next
    end

    truncate(connection, partition_data, database_name)
  end

  success
end