2018-05-15 05:35:00 -04:00
module Gitlab
module HashedStorage
module RakeHelper
def self . batch_size
ENV . fetch ( 'BATCH' , 200 ) . to_i
end
2018-05-21 12:40:27 -04:00
def self . listing_limit
ENV . fetch ( 'LIMIT' , 500 ) . to_i
end
2018-06-07 11:40:44 -04:00
def self . range_from
ENV [ 'ID_FROM' ]
end
def self . range_to
ENV [ 'ID_TO' ]
end
def self . range_single_item?
! range_from . nil? && range_from == range_to
end
2018-05-15 05:35:00 -04:00
def self . project_id_batches ( & block )
2018-06-07 11:40:44 -04:00
Project . with_unmigrated_storage . in_batches ( of : batch_size , start : range_from , finish : range_to ) do | relation | # rubocop: disable Cop/InBatches
2018-05-15 05:35:00 -04:00
ids = relation . pluck ( :id )
yield ids . min , ids . max
end
end
def self . legacy_attachments_relation
Upload . joins ( << ~ SQL ) . where ( 'projects.storage_version < :version OR projects.storage_version IS NULL' , version : Project :: HASHED_STORAGE_FEATURES [ :attachments ] )
2018-05-21 12:40:27 -04:00
JOIN projects
ON ( uploads . model_type = 'Project' AND uploads . model_id = projects . id )
2018-05-15 05:35:00 -04:00
SQL
end
def self . hashed_attachments_relation
Upload . joins ( << ~ SQL ) . where ( 'projects.storage_version >= :version' , version : Project :: HASHED_STORAGE_FEATURES [ :attachments ] )
2018-05-21 12:40:27 -04:00
JOIN projects
ON ( uploads . model_type = 'Project' AND uploads . model_id = projects . id )
2018-05-15 05:35:00 -04:00
SQL
end
def self . relation_summary ( relation_name , relation )
relation_count = relation . count
$stdout . puts " * Found #{ relation_count } #{ relation_name } " . color ( :green )
relation_count
end
def self . projects_list ( relation_name , relation )
2018-05-21 22:14:27 -04:00
listing ( relation_name , relation . with_route ) do | project |
2018-05-21 12:40:27 -04:00
$stdout . puts " - #{ project . full_path } (id: #{ project . id } ) " . color ( :red )
2018-05-15 05:35:00 -04:00
end
end
def self . attachments_list ( relation_name , relation )
2018-05-21 22:14:27 -04:00
listing ( relation_name , relation ) do | upload |
$stdout . puts " - #{ upload . path } (id: #{ upload . id } ) " . color ( :red )
end
end
def self . listing ( relation_name , relation )
2018-05-15 05:35:00 -04:00
relation_count = relation_summary ( relation_name , relation )
return unless relation_count > 0
2018-05-21 12:40:27 -04:00
limit = listing_limit
2018-05-15 05:35:00 -04:00
2018-05-21 22:14:27 -04:00
if relation_count > limit
$stdout . puts " ! Displaying first #{ limit } #{ relation_name } ... "
end
2018-05-15 05:35:00 -04:00
2018-05-21 22:14:27 -04:00
relation . find_each ( batch_size : batch_size ) . with_index do | element , index |
yield element
2018-05-15 05:35:00 -04:00
2018-05-21 12:40:27 -04:00
break if index + 1 > = limit
2018-05-15 05:35:00 -04:00
end
end
end
end
end