Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
757137a3
Commit
757137a3
authored
Jul 13, 2020
by
Douglas Barbosa Alexandre
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move find_registry_differences to the finder class
We are using the method in the model as a proxy.
parent
975e22d6
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
183 additions
and
175 deletions
+183
-175
ee/app/finders/geo/design_registry_finder.rb
ee/app/finders/geo/design_registry_finder.rb
+10
-0
ee/app/models/geo/design_registry.rb
ee/app/models/geo/design_registry.rb
+5
-7
ee/spec/finders/geo/design_registry_finder_spec.rb
ee/spec/finders/geo/design_registry_finder_spec.rb
+168
-0
ee/spec/models/geo/design_registry_spec.rb
ee/spec/models/geo/design_registry_spec.rb
+0
-168
No files found.
ee/app/finders/geo/design_registry_finder.rb
View file @
757137a3
...
...
@@ -18,6 +18,16 @@ module Geo
registries
.
count
end
def
find_registry_differences
(
range
)
source_ids
=
Gitlab
::
Geo
.
current_node
.
designs
.
id_in
(
range
).
pluck_primary_key
tracked_ids
=
Geo
::
DesignRegistry
.
pluck_model_ids_in_range
(
range
)
untracked_ids
=
source_ids
-
tracked_ids
unused_tracked_ids
=
tracked_ids
-
source_ids
[
untracked_ids
,
unused_tracked_ids
]
end
# Returns Geo::DesignRegistry records that have never been synced.
#
# Does not care about selective sync, because it considers the Registry
...
...
ee/app/models/geo/design_registry.rb
View file @
757137a3
...
...
@@ -54,14 +54,12 @@ class Geo::DesignRegistry < Geo::BaseRegistry
project_ids
end
def
self
.
find_registry_differences
(
range
)
source_ids
=
Gitlab
::
Geo
.
current_node
.
designs
.
id_in
(
range
).
pluck_primary_key
tracked_ids
=
self
.
pluck_model_ids_in_range
(
range
)
untracked_ids
=
source_ids
-
tracked_ids
unused_tracked_ids
=
tracked_ids
-
source_ids
def
self
.
finder_class
::
Geo
::
DesignRegistryFinder
end
[
untracked_ids
,
unused_tracked_ids
]
def
self
.
find_registry_differences
(
range
)
finder_class
.
new
(
current_node_id:
Gitlab
::
Geo
.
current_node
.
id
).
find_registry_differences
(
range
)
end
# Search for a list of projects associated with registries,
...
...
ee/spec/finders/geo/design_registry_finder_spec.rb
View file @
757137a3
...
...
@@ -2,6 +2,8 @@
require
'spec_helper'
RSpec
.
describe
Geo
::
DesignRegistryFinder
,
:geo
do
include
::
EE
::
GeoHelpers
let
(
:secondary
)
{
create
(
:geo_node
)
}
let
(
:project_1
)
{
create
(
:project
)
}
let
(
:project_2
)
{
create
(
:project
)
}
...
...
@@ -142,6 +144,172 @@ RSpec.describe Geo::DesignRegistryFinder, :geo do
end
end
describe
'#find_registry_differences'
do
let_it_be
(
:secondary
)
{
create
(
:geo_node
)
}
let_it_be
(
:synced_group
)
{
create
(
:group
)
}
let_it_be
(
:nested_group
)
{
create
(
:group
,
parent:
synced_group
)
}
let_it_be
(
:project_1
)
{
create
(
:project
,
group:
synced_group
)
}
let_it_be
(
:project_2
)
{
create
(
:project
,
group:
nested_group
)
}
let_it_be
(
:project_3
)
{
create
(
:project
)
}
let_it_be
(
:project_4
)
{
create
(
:project
)
}
let_it_be
(
:project_5
)
{
create
(
:project
,
:broken_storage
)
}
let_it_be
(
:project_6
)
{
create
(
:project
,
:broken_storage
)
}
let_it_be
(
:project_7
)
{
create
(
:project
)
}
before_all
do
create
(
:design
,
project:
project_1
)
create
(
:design
,
project:
project_2
)
create
(
:design
,
project:
project_3
)
create
(
:design
,
project:
project_4
)
create
(
:design
,
project:
project_5
)
create
(
:design
,
project:
project_6
)
end
before
do
stub_current_geo_node
(
secondary
)
end
context
'untracked IDs'
do
before
do
create
(
:geo_design_registry
,
project_id:
project_1
.
id
)
create
(
:geo_design_registry
,
:sync_failed
,
project_id:
project_3
.
id
)
create
(
:geo_design_registry
,
project_id:
project_5
.
id
)
end
it
'includes project IDs without an entry on the tracking database'
do
range
=
Project
.
minimum
(
:id
)
..
Project
.
maximum
(
:id
)
untracked_ids
,
_
=
subject
.
find_registry_differences
(
range
)
expect
(
untracked_ids
).
to
match_array
([
project_2
.
id
,
project_4
.
id
,
project_6
.
id
])
end
it
'excludes projects outside the ID range'
do
untracked_ids
,
_
=
subject
.
find_registry_differences
(
project_4
.
id
..
project_6
.
id
)
expect
(
untracked_ids
).
to
match_array
([
project_4
.
id
,
project_6
.
id
])
end
it
'excludes projects without designs'
do
range
=
Project
.
minimum
(
:id
)
..
Project
.
maximum
(
:id
)
untracked_ids
,
_
=
subject
.
find_registry_differences
(
range
)
expect
(
untracked_ids
).
not_to
include
([
project_7
])
end
context
'with selective sync by namespace'
do
let
(
:secondary
)
{
create
(
:geo_node
,
selective_sync_type:
'namespaces'
,
namespaces:
[
synced_group
])
}
it
'excludes project IDs that are not in selectively synced projects'
do
range
=
Project
.
minimum
(
:id
)
..
Project
.
maximum
(
:id
)
untracked_ids
,
_
=
subject
.
find_registry_differences
(
range
)
expect
(
untracked_ids
).
to
match_array
([
project_2
.
id
])
end
end
context
'with selective sync by shard'
do
let
(
:secondary
)
{
create
(
:geo_node
,
selective_sync_type:
'shards'
,
selective_sync_shards:
[
'broken'
])
}
it
'excludes project IDs that are not in selectively synced projects'
do
range
=
Project
.
minimum
(
:id
)
..
Project
.
maximum
(
:id
)
untracked_ids
,
_
=
subject
.
find_registry_differences
(
range
)
expect
(
untracked_ids
).
to
match_array
([
project_6
.
id
])
end
end
end
context
'unused tracked IDs'
do
context
'with an orphaned registry'
do
let!
(
:orphaned
)
{
create
(
:geo_design_registry
,
project_id:
project_1
.
id
)
}
before
do
project_1
.
delete
end
it
'includes tracked IDs that do not exist in the model table'
do
range
=
project_1
.
id
..
project_1
.
id
_
,
unused_tracked_ids
=
subject
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
match_array
([
project_1
.
id
])
end
it
'excludes IDs outside the ID range'
do
range
=
(
project_1
.
id
+
1
)
..
Project
.
maximum
(
:id
)
_
,
unused_tracked_ids
=
subject
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
be_empty
end
end
context
'with selective sync by namespace'
do
let
(
:secondary
)
{
create
(
:geo_node
,
selective_sync_type:
'namespaces'
,
namespaces:
[
synced_group
])
}
context
'with a tracked project'
do
context
'excluded from selective sync'
do
let!
(
:registry_entry
)
{
create
(
:geo_design_registry
,
project_id:
project_3
.
id
)
}
it
'includes tracked project IDs that exist but are not in a selectively synced project'
do
range
=
project_3
.
id
..
project_3
.
id
_
,
unused_tracked_ids
=
subject
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
match_array
([
project_3
.
id
])
end
end
context
'included in selective sync'
do
let!
(
:registry_entry
)
{
create
(
:geo_design_registry
,
project_id:
project_1
.
id
)
}
it
'excludes tracked project IDs that are in selectively synced projects'
do
range
=
project_1
.
id
..
project_1
.
id
_
,
unused_tracked_ids
=
subject
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
be_empty
end
end
end
end
context
'with selective sync by shard'
do
let
(
:secondary
)
{
create
(
:geo_node
,
selective_sync_type:
'shards'
,
selective_sync_shards:
[
'broken'
])
}
context
'with a tracked project'
do
let!
(
:registry_entry
)
{
create
(
:geo_design_registry
,
project_id:
project_1
.
id
)
}
context
'excluded from selective sync'
do
it
'includes tracked project IDs that exist but are not in a selectively synced project'
do
range
=
project_1
.
id
..
project_1
.
id
_
,
unused_tracked_ids
=
subject
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
match_array
([
project_1
.
id
])
end
end
context
'included in selective sync'
do
let!
(
:registry_entry
)
{
create
(
:geo_design_registry
,
project_id:
project_5
.
id
)
}
it
'excludes tracked project IDs that are in selectively synced projects'
do
range
=
project_5
.
id
..
project_5
.
id
_
,
unused_tracked_ids
=
subject
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
be_empty
end
end
end
end
end
end
describe
'#find_never_synced_registries'
do
let!
(
:registry_project_1
)
{
create
(
:geo_design_registry
,
:synced
,
project_id:
project_1
.
id
)
}
let!
(
:registry_project_2
)
{
create
(
:geo_design_registry
,
:sync_failed
,
project_id:
project_2
.
id
)
}
...
...
ee/spec/models/geo/design_registry_spec.rb
View file @
757137a3
...
...
@@ -3,8 +3,6 @@
require
'spec_helper'
RSpec
.
describe
Geo
::
DesignRegistry
,
:geo
do
include
::
EE
::
GeoHelpers
it_behaves_like
'a BulkInsertSafe model'
,
Geo
::
DesignRegistry
do
let
(
:valid_items_for_bulk_insertion
)
{
build_list
(
:geo_design_registry
,
10
,
created_at:
Time
.
zone
.
now
)
}
let
(
:invalid_items_for_bulk_insertion
)
{
[]
}
# class does not have any validations defined
...
...
@@ -18,172 +16,6 @@ RSpec.describe Geo::DesignRegistry, :geo do
let
(
:registry
)
{
create
(
:geo_design_registry
)
}
end
describe
'.find_registry_differences'
do
let_it_be
(
:secondary
)
{
create
(
:geo_node
)
}
let_it_be
(
:synced_group
)
{
create
(
:group
)
}
let_it_be
(
:nested_group
)
{
create
(
:group
,
parent:
synced_group
)
}
let_it_be
(
:project_1
)
{
create
(
:project
,
group:
synced_group
)
}
let_it_be
(
:project_2
)
{
create
(
:project
,
group:
nested_group
)
}
let_it_be
(
:project_3
)
{
create
(
:project
)
}
let_it_be
(
:project_4
)
{
create
(
:project
)
}
let_it_be
(
:project_5
)
{
create
(
:project
,
:broken_storage
)
}
let_it_be
(
:project_6
)
{
create
(
:project
,
:broken_storage
)
}
let_it_be
(
:project_7
)
{
create
(
:project
)
}
before_all
do
create
(
:design
,
project:
project_1
)
create
(
:design
,
project:
project_2
)
create
(
:design
,
project:
project_3
)
create
(
:design
,
project:
project_4
)
create
(
:design
,
project:
project_5
)
create
(
:design
,
project:
project_6
)
end
before
do
stub_current_geo_node
(
secondary
)
end
context
'untracked IDs'
do
before
do
create
(
:geo_design_registry
,
project_id:
project_1
.
id
)
create
(
:geo_design_registry
,
:sync_failed
,
project_id:
project_3
.
id
)
create
(
:geo_design_registry
,
project_id:
project_5
.
id
)
end
it
'includes project IDs without an entry on the tracking database'
do
range
=
Project
.
minimum
(
:id
)
..
Project
.
maximum
(
:id
)
untracked_ids
,
_
=
described_class
.
find_registry_differences
(
range
)
expect
(
untracked_ids
).
to
match_array
([
project_2
.
id
,
project_4
.
id
,
project_6
.
id
])
end
it
'excludes projects outside the ID range'
do
untracked_ids
,
_
=
described_class
.
find_registry_differences
(
project_4
.
id
..
project_6
.
id
)
expect
(
untracked_ids
).
to
match_array
([
project_4
.
id
,
project_6
.
id
])
end
it
'excludes projects without designs'
do
range
=
Project
.
minimum
(
:id
)
..
Project
.
maximum
(
:id
)
untracked_ids
,
_
=
described_class
.
find_registry_differences
(
range
)
expect
(
untracked_ids
).
not_to
include
([
project_7
])
end
context
'with selective sync by namespace'
do
let
(
:secondary
)
{
create
(
:geo_node
,
selective_sync_type:
'namespaces'
,
namespaces:
[
synced_group
])
}
it
'excludes project IDs that are not in selectively synced projects'
do
range
=
Project
.
minimum
(
:id
)
..
Project
.
maximum
(
:id
)
untracked_ids
,
_
=
described_class
.
find_registry_differences
(
range
)
expect
(
untracked_ids
).
to
match_array
([
project_2
.
id
])
end
end
context
'with selective sync by shard'
do
let
(
:secondary
)
{
create
(
:geo_node
,
selective_sync_type:
'shards'
,
selective_sync_shards:
[
'broken'
])
}
it
'excludes project IDs that are not in selectively synced projects'
do
range
=
Project
.
minimum
(
:id
)
..
Project
.
maximum
(
:id
)
untracked_ids
,
_
=
described_class
.
find_registry_differences
(
range
)
expect
(
untracked_ids
).
to
match_array
([
project_6
.
id
])
end
end
end
context
'unused tracked IDs'
do
context
'with an orphaned registry'
do
let!
(
:orphaned
)
{
create
(
:geo_design_registry
,
project_id:
project_1
.
id
)
}
before
do
project_1
.
delete
end
it
'includes tracked IDs that do not exist in the model table'
do
range
=
project_1
.
id
..
project_1
.
id
_
,
unused_tracked_ids
=
described_class
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
match_array
([
project_1
.
id
])
end
it
'excludes IDs outside the ID range'
do
range
=
(
project_1
.
id
+
1
)
..
Project
.
maximum
(
:id
)
_
,
unused_tracked_ids
=
described_class
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
be_empty
end
end
context
'with selective sync by namespace'
do
let
(
:secondary
)
{
create
(
:geo_node
,
selective_sync_type:
'namespaces'
,
namespaces:
[
synced_group
])
}
context
'with a tracked project'
do
context
'excluded from selective sync'
do
let!
(
:registry_entry
)
{
create
(
:geo_design_registry
,
project_id:
project_3
.
id
)
}
it
'includes tracked project IDs that exist but are not in a selectively synced project'
do
range
=
project_3
.
id
..
project_3
.
id
_
,
unused_tracked_ids
=
described_class
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
match_array
([
project_3
.
id
])
end
end
context
'included in selective sync'
do
let!
(
:registry_entry
)
{
create
(
:geo_design_registry
,
project_id:
project_1
.
id
)
}
it
'excludes tracked project IDs that are in selectively synced projects'
do
range
=
project_1
.
id
..
project_1
.
id
_
,
unused_tracked_ids
=
described_class
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
be_empty
end
end
end
end
context
'with selective sync by shard'
do
let
(
:secondary
)
{
create
(
:geo_node
,
selective_sync_type:
'shards'
,
selective_sync_shards:
[
'broken'
])
}
context
'with a tracked project'
do
let!
(
:registry_entry
)
{
create
(
:geo_design_registry
,
project_id:
project_1
.
id
)
}
context
'excluded from selective sync'
do
it
'includes tracked project IDs that exist but are not in a selectively synced project'
do
range
=
project_1
.
id
..
project_1
.
id
_
,
unused_tracked_ids
=
described_class
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
match_array
([
project_1
.
id
])
end
end
context
'included in selective sync'
do
let!
(
:registry_entry
)
{
create
(
:geo_design_registry
,
project_id:
project_5
.
id
)
}
it
'excludes tracked project IDs that are in selectively synced projects'
do
range
=
project_5
.
id
..
project_5
.
id
_
,
unused_tracked_ids
=
described_class
.
find_registry_differences
(
range
)
expect
(
unused_tracked_ids
).
to
be_empty
end
end
end
end
end
end
describe
'#search'
,
:geo_fdw
do
let!
(
:design_registry
)
{
create
(
:geo_design_registry
)
}
let!
(
:failed_registry
)
{
create
(
:geo_design_registry
,
:sync_failed
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment