Class: LooseForeignKeys::DeletedRecord
Constant Summary
collapse
- PARTITION_DURATION =
1.day
Class Method Summary
collapse
connection, #connection_db_config, connection_pool, using_connection
Class Method Details
.increment_attempts(records) ⇒ Object
74
75
76
77
78
79
|
# File 'app/models/loose_foreign_keys/deleted_record.rb', line 74
def self.increment_attempts(records)
update_by_partition(records) do |partitioned_scope|
partitioned_scope.update_all('cleanup_attempts = cleanup_attempts + 1')
end
end
|
.load_batch_for_table(table, batch_size) ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'app/models/loose_foreign_keys/deleted_record.rb', line 41
def self.load_batch_for_table(table, batch_size)
partition_names = Gitlab::Database::PostgresPartitionedTable.each_partition(table_name).map(&:name)
unions = partition_names.map do |partition_name|
partition_number = partition_name[/\d+/].to_i
select(arel_table[Arel.star], arel_table[:partition].as('partition_number'))
.from("#{Gitlab::Database::DYNAMIC_PARTITIONS_SCHEMA}.#{partition_name} AS #{table_name}")
.for_table(table)
.where(partition: partition_number)
.status_pending
.consume_order
.limit(batch_size)
end
select(arel_table[Arel.star])
.from_union(unions, remove_duplicates: false, remove_order: false)
.limit(batch_size)
.to_a
end
|
.mark_records_processed(records) ⇒ Object
62
63
64
65
66
|
# File 'app/models/loose_foreign_keys/deleted_record.rb', line 62
def self.mark_records_processed(records)
update_by_partition(records) do |partitioned_scope|
partitioned_scope.update_all(status: :processed)
end
end
|
.reschedule(records, consume_after) ⇒ Object
68
69
70
71
72
|
# File 'app/models/loose_foreign_keys/deleted_record.rb', line 68
def self.reschedule(records, consume_after)
update_by_partition(records) do |partitioned_scope|
partitioned_scope.update_all(consume_after: consume_after, cleanup_attempts: 0)
end
end
|