Remove legacy query to find unsynced LFS objects

This commit removes the legacy queries to find unsynced
LFS objects since we made Foreign Data Wrapper (FDW) a
hard requirement for Geo on GitLab 12.0.
parent 3f10877a
...@@ -6,16 +6,6 @@ module Geo ...@@ -6,16 +6,6 @@ module Geo
current_node.lfs_objects.syncable current_node.lfs_objects.syncable
end end
def lfs_objects_unsynced(except_file_ids:)
registry_file_ids = Geo::FileRegistry.lfs_objects.pluck_file_key | except_file_ids
legacy_left_outer_join_registry_ids(
syncable,
registry_file_ids,
LfsObject
)
end
def lfs_objects_migrated_local(except_file_ids:) def lfs_objects_migrated_local(except_file_ids:)
legacy_inner_join_registry_ids( legacy_inner_join_registry_ids(
current_node.lfs_objects.with_files_stored_remotely, current_node.lfs_objects.with_files_stored_remotely,
......
...@@ -37,21 +37,11 @@ module Geo ...@@ -37,21 +37,11 @@ module Geo
# You can pass a list with `except_file_ids:` so you can exclude items you # You can pass a list with `except_file_ids:` so you can exclude items you
# already scheduled but haven't finished and aren't persisted to the database yet # already scheduled but haven't finished and aren't persisted to the database yet
# #
# TODO: Alternative here is to use some sort of window function with a cursor instead
# of simply limiting the query and passing a list of items we don't want
#
# @param [Integer] batch_size used to limit the results returned # @param [Integer] batch_size used to limit the results returned
# @param [Array<Integer>] except_file_ids ids that will be ignored from the query # @param [Array<Integer>] except_file_ids ids that will be ignored from the query
# rubocop:disable CodeReuse/ActiveRecord # rubocop:disable CodeReuse/ActiveRecord
def find_unsynced(batch_size:, except_file_ids: []) def find_unsynced(batch_size:, except_file_ids: [])
relation = lfs_objects_unsynced(except_file_ids: except_file_ids).limit(batch_size)
if use_legacy_queries_for_selective_sync?
legacy_finder.lfs_objects_unsynced(except_file_ids: except_file_ids)
else
lfs_objects_unsynced(except_file_ids: except_file_ids)
end
relation.limit(batch_size)
end end
# rubocop:enable CodeReuse/ActiveRecord # rubocop:enable CodeReuse/ActiveRecord
......
...@@ -797,86 +797,6 @@ describe Geo::LfsObjectRegistryFinder, :geo do ...@@ -797,86 +797,6 @@ describe Geo::LfsObjectRegistryFinder, :geo do
end end
end end
describe '#find_unsynced' do
it 'returns LFS objects without an entry on the tracking database' do
create(:geo_file_registry, :lfs, file_id: lfs_object_1.id)
create(:geo_file_registry, :lfs, :failed, file_id: lfs_object_3.id)
lfs_objects = subject.find_unsynced(batch_size: 10)
expect(lfs_objects).to match_ids(lfs_object_2, lfs_object_4, lfs_object_5)
end
it 'excludes LFS objects without an entry on the tracking database' do
create(:geo_file_registry, :lfs, file_id: lfs_object_1.id)
create(:geo_file_registry, :lfs, :failed, file_id: lfs_object_3.id)
lfs_objects = subject.find_unsynced(batch_size: 10, except_file_ids: [lfs_object_2.id])
expect(lfs_objects).to match_ids(lfs_object_4, lfs_object_5)
end
context 'with selective sync by namespace' do
before do
allow_any_instance_of(LfsObjectsProject).to receive(:update_project_statistics).and_return(nil)
create(:lfs_objects_project, project: synced_project, lfs_object: lfs_object_1)
create(:lfs_objects_project, project: synced_project_in_nested_group, lfs_object: lfs_object_2)
create(:lfs_objects_project, project: synced_project_in_nested_group, lfs_object: lfs_object_3)
create(:lfs_objects_project, project: unsynced_project, lfs_object: lfs_object_4)
secondary.update!(selective_sync_type: 'namespaces', namespaces: [synced_group])
end
it 'returns LFS objects without an entry on the tracking database' do
create(:geo_file_registry, :lfs, file_id: lfs_object_2.id)
lfs_objects = subject.find_unsynced(batch_size: 10)
expect(lfs_objects).to match_ids(lfs_object_1, lfs_object_3)
end
it 'ignores remote LFS objects' do
create(:geo_file_registry, :lfs, file_id: lfs_object_2.id)
lfs_object_1.update_column(:file_store, ObjectStorage::Store::REMOTE)
lfs_objects = subject.find_unsynced(batch_size: 10)
expect(lfs_objects).to match_ids(lfs_object_3)
end
end
context 'with selective sync by shard' do
before do
allow_any_instance_of(LfsObjectsProject).to receive(:update_project_statistics).and_return(nil)
create(:lfs_objects_project, project: synced_project, lfs_object: lfs_object_1)
create(:lfs_objects_project, project: synced_project, lfs_object: lfs_object_2)
create(:lfs_objects_project, project: unsynced_project, lfs_object: lfs_object_3)
create(:lfs_objects_project, project: project_broken_storage, lfs_object: lfs_object_4)
create(:lfs_objects_project, project: project_broken_storage, lfs_object: lfs_object_5)
secondary.update!(selective_sync_type: 'shards', selective_sync_shards: ['broken'])
end
it 'counts LFS objects that sync has failed' do
create(:geo_file_registry, :lfs, file_id: lfs_object_4.id)
lfs_objects = subject.find_unsynced(batch_size: 10)
expect(lfs_objects).to match_ids(lfs_object_5)
end
it 'ignores remote LFS objects' do
lfs_object_5.update_column(:file_store, ObjectStorage::Store::REMOTE)
lfs_objects = subject.find_unsynced(batch_size: 10)
expect(lfs_objects).to match_ids(lfs_object_4)
end
end
end
describe '#find_migrated_local' do describe '#find_migrated_local' do
it 'returns LFS objects remotely and successfully synced locally' do it 'returns LFS objects remotely and successfully synced locally' do
create(:geo_file_registry, :lfs, file_id: lfs_object_remote_1.id) create(:geo_file_registry, :lfs, file_id: lfs_object_remote_1.id)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment