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
63307438
Commit
63307438
authored
Apr 04, 2018
by
Michael Kozono
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Track missing on primary counts in GeoNodeStatus
And as a result, these are added as metrics.
parent
6b5787f4
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
649 additions
and
61 deletions
+649
-61
ee/app/finders/geo/attachment_registry_finder.rb
ee/app/finders/geo/attachment_registry_finder.rb
+20
-0
ee/app/finders/geo/job_artifact_registry_finder.rb
ee/app/finders/geo/job_artifact_registry_finder.rb
+8
-0
ee/app/finders/geo/lfs_object_registry_finder.rb
ee/app/finders/geo/lfs_object_registry_finder.rb
+30
-2
ee/app/models/geo_node_status.rb
ee/app/models/geo_node_status.rb
+6
-0
ee/db/migrate/20180329230151_add_missing_on_primary_counts_to_geo_node_statuses.rb
...151_add_missing_on_primary_counts_to_geo_node_statuses.rb
+14
-0
ee/lib/ee/api/entities.rb
ee/lib/ee/api/entities.rb
+3
-0
ee/spec/factories/geo_node_statuses.rb
ee/spec/factories/geo_node_statuses.rb
+3
-0
ee/spec/finders/geo/attachment_registry_finder_spec.rb
ee/spec/finders/geo/attachment_registry_finder_spec.rb
+241
-0
ee/spec/finders/geo/job_artifact_registry_finder_spec.rb
ee/spec/finders/geo/job_artifact_registry_finder_spec.rb
+100
-36
ee/spec/finders/geo/lfs_object_registry_finder_spec.rb
ee/spec/finders/geo/lfs_object_registry_finder_spec.rb
+143
-14
ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json
...c/fixtures/api/schemas/public_api/v4/geo_node_status.json
+6
-0
ee/spec/models/geo_node_status_spec.rb
ee/spec/models/geo_node_status_spec.rb
+69
-9
ee/spec/services/geo/metrics_update_service_spec.rb
ee/spec/services/geo/metrics_update_service_spec.rb
+6
-0
No files found.
ee/app/finders/geo/attachment_registry_finder.rb
View file @
63307438
...
...
@@ -32,6 +32,14 @@ module Geo
end
end
def
count_synced_missing_on_primary_attachments
if
aggregate_pushdown_supported?
&&
!
use_legacy_queries?
fdw_find_synced_missing_on_primary_attachments
.
count
else
legacy_find_synced_missing_on_primary_attachments
.
count
end
end
def
count_registry_attachments
Geo
::
FileRegistry
.
attachments
.
count
end
...
...
@@ -154,6 +162,10 @@ module Geo
.
where
.
not
(
id:
except_file_ids
)
end
def
fdw_find_synced_missing_on_primary_attachments
fdw_find_synced_attachments
.
merge
(
Geo
::
FileRegistry
.
missing_on_primary
)
end
def
fdw_attachments
if
selective_sync?
Geo
::
Fdw
::
Upload
.
where
(
group_uploads
.
or
(
project_uploads
).
or
(
other_uploads
))
...
...
@@ -212,5 +224,13 @@ module Geo
Upload
)
end
def
legacy_find_synced_missing_on_primary_attachments
legacy_inner_join_registry_ids
(
local_attachments
,
Geo
::
FileRegistry
.
attachments
.
synced
.
missing_on_primary
.
pluck
(
:file_id
),
Upload
)
end
end
end
ee/app/finders/geo/job_artifact_registry_finder.rb
View file @
63307438
...
...
@@ -20,6 +20,14 @@ module Geo
end
end
def
count_synced_missing_on_primary_job_artifacts
if
aggregate_pushdown_supported?
find_synced_missing_on_primary_job_artifacts
.
count
else
legacy_find_synced_missing_on_primary_job_artifacts
.
count
end
end
def
count_registry_job_artifacts
Geo
::
JobArtifactRegistry
.
count
end
...
...
ee/app/finders/geo/lfs_object_registry_finder.rb
View file @
63307438
...
...
@@ -20,6 +20,14 @@ module Geo
end
end
def
count_synced_missing_on_primary_lfs_objects
if
aggregate_pushdown_supported?
&&
!
use_legacy_queries?
fdw_find_synced_missing_on_primary_lfs_objects
.
count
else
legacy_find_synced_missing_on_primary_lfs_objects
.
count
end
end
def
count_registry_lfs_objects
Geo
::
FileRegistry
.
lfs_objects
.
count
end
...
...
@@ -82,7 +90,7 @@ module Geo
if
use_legacy_queries?
legacy_find_synced_lfs_objects
else
fdw_find_
lfs_objects
.
merge
(
Geo
::
FileRegistry
.
synced
)
fdw_find_
synced_lfs_objects
end
end
...
...
@@ -90,7 +98,7 @@ module Geo
if
use_legacy_queries?
legacy_find_failed_lfs_objects
else
fdw_find_
lfs_objects
.
merge
(
Geo
::
FileRegistry
.
failed
)
fdw_find_
failed_lfs_objects
end
end
...
...
@@ -120,6 +128,18 @@ module Geo
.
merge
(
Geo
::
FileRegistry
.
lfs_objects
)
end
def
fdw_find_synced_lfs_objects
fdw_find_lfs_objects
.
merge
(
Geo
::
FileRegistry
.
synced
)
end
def
fdw_find_synced_missing_on_primary_lfs_objects
fdw_find_lfs_objects
.
merge
(
Geo
::
FileRegistry
.
synced
.
missing_on_primary
)
end
def
fdw_find_failed_lfs_objects
fdw_find_lfs_objects
.
merge
(
Geo
::
FileRegistry
.
failed
)
end
def
fdw_lfs_objects
if
selective_sync?
Geo
::
Fdw
::
LfsObject
.
joins
(
:project
).
where
(
projects:
{
id:
current_node
.
projects
})
...
...
@@ -171,5 +191,13 @@ module Geo
LfsObject
)
end
def
legacy_find_synced_missing_on_primary_lfs_objects
legacy_inner_join_registry_ids
(
local_lfs_objects
,
Geo
::
FileRegistry
.
lfs_objects
.
synced
.
missing_on_primary
.
pluck
(
:file_id
),
LfsObject
)
end
end
end
ee/app/models/geo_node_status.rb
View file @
63307438
...
...
@@ -37,14 +37,17 @@ class GeoNodeStatus < ActiveRecord::Base
lfs_objects_synced_count:
'Number of local LFS objects synced on secondary'
,
lfs_objects_failed_count:
'Number of local LFS objects failed to sync on secondary'
,
lfs_objects_registry_count:
'Number of LFS objects in the registry'
,
lfs_objects_synced_missing_on_primary_count:
'Number of LFS objects marked as synced due to the file missing on the primary'
,
job_artifacts_count:
'Total number of local job artifacts available on primary'
,
job_artifacts_synced_count:
'Number of local job artifacts synced on secondary'
,
job_artifacts_failed_count:
'Number of local job artifacts failed to sync on secondary'
,
job_artifacts_registry_count:
'Number of job artifacts in the registry'
,
job_artifacts_synced_missing_on_primary_count:
'Number of job artifacts marked as synced due to the file missing on the primary'
,
attachments_count:
'Total number of local file attachments available on primary'
,
attachments_synced_count:
'Number of local file attachments synced on secondary'
,
attachments_failed_count:
'Number of local file attachments failed to sync on secondary'
,
attachments_registry_count:
'Number of attachments in the registry'
,
attachments_synced_missing_on_primary_count:
'Number of attachments marked as synced due to the file missing on the primary'
,
replication_slots_count:
'Total number of replication slots on the primary'
,
replication_slots_used_count:
'Number of replication slots in use on the primary'
,
replication_slots_max_retained_wal_bytes:
'Maximum number of bytes retained in the WAL on the primary'
,
...
...
@@ -168,12 +171,15 @@ class GeoNodeStatus < ActiveRecord::Base
self
.
lfs_objects_synced_count
=
lfs_objects_finder
.
count_synced_lfs_objects
self
.
lfs_objects_failed_count
=
lfs_objects_finder
.
count_failed_lfs_objects
self
.
lfs_objects_registry_count
=
lfs_objects_finder
.
count_registry_lfs_objects
self
.
lfs_objects_synced_missing_on_primary_count
=
lfs_objects_finder
.
count_synced_missing_on_primary_lfs_objects
self
.
job_artifacts_synced_count
=
job_artifacts_finder
.
count_synced_job_artifacts
self
.
job_artifacts_failed_count
=
job_artifacts_finder
.
count_failed_job_artifacts
self
.
job_artifacts_registry_count
=
job_artifacts_finder
.
count_registry_job_artifacts
self
.
job_artifacts_synced_missing_on_primary_count
=
job_artifacts_finder
.
count_synced_missing_on_primary_job_artifacts
self
.
attachments_synced_count
=
attachments_finder
.
count_synced_attachments
self
.
attachments_failed_count
=
attachments_finder
.
count_failed_attachments
self
.
attachments_registry_count
=
attachments_finder
.
count_registry_attachments
self
.
attachments_synced_missing_on_primary_count
=
attachments_finder
.
count_synced_missing_on_primary_attachments
end
end
...
...
ee/db/migrate/20180329230151_add_missing_on_primary_counts_to_geo_node_statuses.rb
0 → 100644
View file @
63307438
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class
AddMissingOnPrimaryCountsToGeoNodeStatuses
<
ActiveRecord
::
Migration
include
Gitlab
::
Database
::
MigrationHelpers
DOWNTIME
=
false
def
change
add_column
:geo_node_statuses
,
:lfs_objects_synced_missing_on_primary_count
,
:integer
add_column
:geo_node_statuses
,
:job_artifacts_synced_missing_on_primary_count
,
:integer
add_column
:geo_node_statuses
,
:attachments_synced_missing_on_primary_count
,
:integer
end
end
ee/lib/ee/api/entities.rb
View file @
63307438
...
...
@@ -260,6 +260,7 @@ module EE
expose
:attachments_count
expose
:attachments_synced_count
expose
:attachments_failed_count
expose
:attachments_synced_missing_on_primary_count
expose
:attachments_synced_in_percentage
do
|
node
|
number_to_percentage
(
node
.
attachments_synced_in_percentage
,
precision:
2
)
end
...
...
@@ -269,6 +270,7 @@ module EE
expose
:lfs_objects_count
expose
:lfs_objects_synced_count
expose
:lfs_objects_failed_count
expose
:lfs_objects_synced_missing_on_primary_count
expose
:lfs_objects_synced_in_percentage
do
|
node
|
number_to_percentage
(
node
.
lfs_objects_synced_in_percentage
,
precision:
2
)
end
...
...
@@ -276,6 +278,7 @@ module EE
expose
:job_artifacts_count
expose
:job_artifacts_synced_count
expose
:job_artifacts_failed_count
expose
:job_artifacts_synced_missing_on_primary_count
expose
:job_artifacts_synced_in_percentage
do
|
node
|
number_to_percentage
(
node
.
job_artifacts_synced_in_percentage
,
precision:
2
)
end
...
...
ee/spec/factories/geo_node_statuses.rb
View file @
63307438
...
...
@@ -8,12 +8,15 @@ FactoryBot.define do
attachments_count
329
attachments_failed_count
13
attachments_synced_count
141
attachments_synced_missing_on_primary_count
89
lfs_objects_count
256
lfs_objects_failed_count
12
lfs_objects_synced_count
123
lfs_objects_synced_missing_on_primary_count
90
job_artifacts_count
580
job_artifacts_failed_count
3
job_artifacts_synced_count
577
job_artifacts_synced_missing_on_primary_count
91
repositories_count
10
repositories_synced_count
5
repositories_failed_count
0
...
...
ee/spec/finders/geo/attachment_registry_finder_spec.rb
View file @
63307438
This diff is collapsed.
Click to expand it.
ee/spec/finders/geo/job_artifact_registry_finder_spec.rb
View file @
63307438
...
...
@@ -22,42 +22,6 @@ describe Geo::JobArtifactRegistryFinder, :geo do
stub_artifacts_object_storage
end
describe
'#count_synced_job_artifacts'
do
it
'delegates to #legacy_find_synced_job_artifacts'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:legacy_find_synced_job_artifacts
).
and_call_original
subject
.
count_synced_job_artifacts
end
it
'delegates to #find_synced_job_artifacts for PostgreSQL 10'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
true
)
expect
(
subject
).
to
receive
(
:find_synced_job_artifacts
).
and_call_original
subject
.
count_synced_job_artifacts
end
end
describe
'#count_failed_job_artifacts'
do
it
'delegates to #legacy_find_failed_job_artifacts'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:legacy_find_failed_job_artifacts
).
and_call_original
subject
.
count_failed_job_artifacts
end
it
'delegates to #find_failed_job_artifacts'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
true
)
expect
(
subject
).
to
receive
(
:find_failed_job_artifacts
).
and_call_original
subject
.
count_failed_job_artifacts
end
end
shared_examples
'counts all the things'
do
describe
'#count_local_job_artifacts'
do
before
do
...
...
@@ -95,6 +59,22 @@ describe Geo::JobArtifactRegistryFinder, :geo do
end
describe
'#count_synced_job_artifacts'
do
it
'delegates to #legacy_find_synced_job_artifacts'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:legacy_find_synced_job_artifacts
).
and_call_original
subject
.
count_synced_job_artifacts
end
it
'delegates to #find_synced_job_artifacts for PostgreSQL 10'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
true
)
expect
(
subject
).
to
receive
(
:find_synced_job_artifacts
).
and_call_original
subject
.
count_synced_job_artifacts
end
it
'counts job artifacts that have been synced'
do
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_1
.
id
,
success:
false
)
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_2
.
id
)
...
...
@@ -141,6 +121,22 @@ describe Geo::JobArtifactRegistryFinder, :geo do
end
describe
'#count_failed_job_artifacts'
do
it
'delegates to #legacy_find_failed_job_artifacts'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:legacy_find_failed_job_artifacts
).
and_call_original
subject
.
count_failed_job_artifacts
end
it
'delegates to #find_failed_job_artifacts'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
true
)
expect
(
subject
).
to
receive
(
:find_failed_job_artifacts
).
and_call_original
subject
.
count_failed_job_artifacts
end
it
'counts job artifacts that sync has failed'
do
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_1
.
id
,
success:
false
)
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_2
.
id
)
...
...
@@ -191,6 +187,74 @@ describe Geo::JobArtifactRegistryFinder, :geo do
end
end
end
describe
'#count_synced_missing_on_primary_job_artifacts'
do
it
'delegates to #legacy_find_synced_missing_on_primary_job_artifacts'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:legacy_find_synced_missing_on_primary_job_artifacts
).
and_call_original
subject
.
count_synced_missing_on_primary_job_artifacts
end
it
'delegates to #find_synced_missing_on_primary_job_artifacts for PostgreSQL 10'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
true
)
expect
(
subject
).
to
receive
(
:find_synced_missing_on_primary_job_artifacts
).
and_call_original
subject
.
count_synced_missing_on_primary_job_artifacts
end
it
'counts job artifacts that have been synced and are missing on the primary'
do
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_1
.
id
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_job_artifacts
).
to
eq
1
end
it
'excludes job artifacts that are not missing on the primary'
do
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_1
.
id
)
expect
(
subject
.
count_synced_missing_on_primary_job_artifacts
).
to
eq
0
end
it
'excludes job artifacts that are not synced'
do
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_1
.
id
,
success:
false
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_job_artifacts
).
to
eq
0
end
it
'ignores remote job artifacts'
do
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_remote_1
.
id
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_job_artifacts
).
to
eq
0
end
context
'with selective sync'
do
before
do
secondary
.
update!
(
selective_sync_type:
'namespaces'
,
namespaces:
[
synced_group
])
end
it
'delegates to #legacy_find_synced_missing_on_primary_job_artifacts'
do
expect
(
subject
).
to
receive
(
:legacy_find_synced_missing_on_primary_job_artifacts
).
and_call_original
subject
.
count_synced_missing_on_primary_job_artifacts
end
it
'counts job artifacts that has been synced'
do
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_1
.
id
,
missing_on_primary:
true
)
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_2
.
id
,
missing_on_primary:
true
)
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_3
.
id
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_job_artifacts
).
to
eq
2
end
it
'ignores remote job artifacts'
do
create
(
:geo_job_artifact_registry
,
artifact_id:
job_artifact_remote_1
.
id
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_job_artifacts
).
to
eq
0
end
end
end
end
shared_examples
'finds all the things'
do
...
...
ee/spec/finders/geo/lfs_object_registry_finder_spec.rb
View file @
63307438
...
...
@@ -22,30 +22,66 @@ describe Geo::LfsObjectRegistryFinder, :geo do
stub_lfs_object_storage
end
context
'aggregate pushdown not supported'
do
before
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
shared_examples
'counts all the things'
do
describe
'#count_local_lfs_objects'
do
before
do
lfs_object_1
lfs_object_2
lfs_object_3
lfs_object_4
end
it
'counts LFS objects'
do
expect
(
subject
.
count_local_lfs_objects
).
to
eq
4
end
it
'ignores remote LFS objects'
do
lfs_object_1
.
update_column
(
:file_store
,
ObjectStorage
::
Store
::
REMOTE
)
expect
(
subject
.
count_local_lfs_objects
).
to
eq
3
end
context
'with selective sync'
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
)
secondary
.
update!
(
selective_sync_type:
'namespaces'
,
namespaces:
[
synced_group
])
end
it
'counts LFS objects'
do
expect
(
subject
.
count_local_lfs_objects
).
to
eq
2
end
it
'ignores remote LFS objects'
do
lfs_object_1
.
update_column
(
:file_store
,
ObjectStorage
::
Store
::
REMOTE
)
expect
(
subject
.
count_local_lfs_objects
).
to
eq
1
end
end
end
describe
'#count_synced_lfs_objects'
do
it
'delegates to #legacy_find_synced_lfs_objects'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:legacy_find_synced_lfs_objects
).
and_call_original
subject
.
count_synced_lfs_objects
end
end
describe
'#count_failed_lfs_objects
'
do
it
'delegates to #legacy_find_failed_lfs_objects'
do
expect
(
subject
).
to
receive
(
:legacy_find_failed_lfs_objects
).
and_call_original
it
'delegates to #fdw_find_synced_lfs_objects for PostgreSQL 10
'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
true
)
allow
(
subject
).
to
receive
(
:use_legacy_queries?
).
and_return
(
false
)
subject
.
count_failed_lfs_objects
expect
(
subject
).
to
receive
(
:fdw_find_synced_lfs_objects
).
and_return
(
double
(
count:
1
))
subject
.
count_synced_lfs_objects
end
end
end
shared_examples
'counts all the things'
do
describe
'#count_synced_lfs_objects'
do
it
'counts LFS objects that has been synced'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_1
.
id
,
success:
false
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_2
.
id
)
...
...
@@ -88,9 +124,10 @@ describe Geo::LfsObjectRegistryFinder, :geo do
end
it
'ignores remote LFS objects'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_
remote_
1
.
id
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_1
.
id
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_2
.
id
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_3
.
id
)
lfs_object_1
.
update_column
(
:file_store
,
ObjectStorage
::
Store
::
REMOTE
)
expect
(
subject
.
count_synced_lfs_objects
).
to
eq
1
end
...
...
@@ -98,6 +135,22 @@ describe Geo::LfsObjectRegistryFinder, :geo do
end
describe
'#count_failed_lfs_objects'
do
it
'delegates to #legacy_find_failed_lfs_objects'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:legacy_find_failed_lfs_objects
).
and_call_original
subject
.
count_failed_lfs_objects
end
it
'delegates to #find_failed_lfs_objects'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
true
)
expect
(
subject
).
to
receive
(
:find_failed_lfs_objects
).
and_call_original
subject
.
count_failed_lfs_objects
end
it
'counts LFS objects that sync has failed'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_1
.
id
,
success:
false
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_2
.
id
)
...
...
@@ -140,14 +193,90 @@ describe Geo::LfsObjectRegistryFinder, :geo do
end
it
'ignores remote LFS objects'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_
remote_
1
.
id
,
success:
false
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_1
.
id
,
success:
false
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_2
.
id
,
success:
false
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_3
.
id
,
success:
false
)
lfs_object_1
.
update_column
(
:file_store
,
ObjectStorage
::
Store
::
REMOTE
)
expect
(
subject
.
count_failed_lfs_objects
).
to
eq
1
end
end
end
describe
'#count_synced_missing_on_primary_lfs_objects'
do
it
'delegates to #legacy_find_synced_missing_on_primary_lfs_objects'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:legacy_find_synced_missing_on_primary_lfs_objects
).
and_call_original
subject
.
count_synced_missing_on_primary_lfs_objects
end
it
'delegates to #fdw_find_synced_missing_on_primary_lfs_objects for PostgreSQL 10'
do
allow
(
subject
).
to
receive
(
:aggregate_pushdown_supported?
).
and_return
(
true
)
allow
(
subject
).
to
receive
(
:use_legacy_queries?
).
and_return
(
false
)
expect
(
subject
).
to
receive
(
:fdw_find_synced_missing_on_primary_lfs_objects
).
and_return
(
double
(
count:
1
))
subject
.
count_synced_missing_on_primary_lfs_objects
end
it
'counts LFS objects that have been synced and are missing on the primary'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_1
.
id
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_lfs_objects
).
to
eq
1
end
it
'excludes LFS objects that are not missing on the primary'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_1
.
id
)
expect
(
subject
.
count_synced_missing_on_primary_lfs_objects
).
to
eq
0
end
it
'excludes LFS objects that are not synced'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_1
.
id
,
success:
false
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_lfs_objects
).
to
eq
0
end
it
'ignores remote LFS objects'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_remote_1
.
id
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_lfs_objects
).
to
eq
0
end
context
'with selective sync'
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
)
secondary
.
update!
(
selective_sync_type:
'namespaces'
,
namespaces:
[
synced_group
])
end
it
'delegates to #legacy_find_synced_missing_on_primary_lfs_objects'
do
expect
(
subject
).
to
receive
(
:legacy_find_synced_missing_on_primary_lfs_objects
).
and_call_original
subject
.
count_synced_missing_on_primary_lfs_objects
end
it
'counts LFS objects that has been synced'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_1
.
id
,
missing_on_primary:
true
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_2
.
id
,
missing_on_primary:
true
)
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_3
.
id
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_lfs_objects
).
to
eq
2
end
it
'ignores remote LFS objects'
do
create
(
:geo_file_registry
,
:lfs
,
file_id:
lfs_object_remote_1
.
id
,
missing_on_primary:
true
)
expect
(
subject
.
count_synced_missing_on_primary_lfs_objects
).
to
eq
0
end
end
end
end
shared_examples
'finds all the things'
do
...
...
ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json
View file @
63307438
...
...
@@ -9,12 +9,15 @@
"attachments_count"
,
"attachments_failed_count"
,
"attachments_synced_count"
,
"attachments_synced_missing_on_primary_count"
,
"lfs_objects_count"
,
"lfs_objects_failed_count"
,
"lfs_objects_synced_count"
,
"lfs_objects_synced_missing_on_primary_count"
,
"job_artifacts_count"
,
"job_artifacts_failed_count"
,
"job_artifacts_synced_count"
,
"job_artifacts_synced_missing_on_primary_count"
,
"db_replication_lag_seconds"
,
"repositories_count"
,
"repositories_failed_count"
,
...
...
@@ -53,15 +56,18 @@
"attachments_count"
:
{
"type"
:
"integer"
},
"attachments_failed_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"attachments_synced_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"attachments_synced_missing_on_primary_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"attachments_synced_in_percentage"
:
{
"type"
:
"string"
},
"db_replication_lag_seconds"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"lfs_objects_count"
:
{
"type"
:
"integer"
},
"lfs_objects_failed_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"lfs_objects_synced_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"lfs_objects_synced_missing_on_primary_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"lfs_objects_synced_in_percentage"
:
{
"type"
:
"string"
},
"job_artifacts_count"
:
{
"type"
:
"integer"
},
"job_artifacts_failed_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"job_artifacts_synced_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"job_artifacts_synced_missing_on_primary_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
"job_artifacts_synced_in_percentage"
:
{
"type"
:
"string"
},
"repositories_count"
:
{
"type"
:
"integer"
},
"repositories_failed_count"
:
{
"type"
:
[
"integer"
,
"null"
]
},
...
...
ee/spec/models/geo_node_status_spec.rb
View file @
63307438
...
...
@@ -95,6 +95,21 @@ describe GeoNodeStatus, :geo do
end
end
# Disable transactions via :delete method because a foreign table
# can't see changes inside a transaction of a different connection.
describe
'#attachments_synced_missing_on_primary_count'
,
:delete
do
it
'only counts successful syncs'
do
create_list
(
:user
,
3
,
avatar:
fixture_file_upload
(
Rails
.
root
+
'spec/fixtures/dk.png'
,
'image/png'
))
uploads
=
Upload
.
all
.
pluck
(
:id
)
create
(
:geo_file_registry
,
:avatar
,
file_id:
uploads
[
0
],
missing_on_primary:
true
)
create
(
:geo_file_registry
,
:avatar
,
file_id:
uploads
[
1
])
create
(
:geo_file_registry
,
:avatar
,
file_id:
uploads
[
2
],
success:
false
)
expect
(
subject
.
attachments_synced_missing_on_primary_count
).
to
eq
(
1
)
end
end
describe
'#attachments_failed_count'
,
:delete
do
it
'counts failed avatars, attachment, personal snippets and files'
do
# These two should be ignored
...
...
@@ -158,7 +173,39 @@ describe GeoNodeStatus, :geo do
# Disable transactions via :delete method because a foreign table
# can't see changes inside a transaction of a different connection.
describe
'#lfs_objects_failed'
,
:delete
do
describe
'#lfs_objects_synced_count'
,
:delete
do
it
'counts synced LFS objects'
do
# These four should be ignored
create
(
:geo_file_registry
,
success:
false
)
create
(
:geo_file_registry
,
:avatar
)
create
(
:geo_file_registry
,
file_type: :attachment
)
create
(
:geo_file_registry
,
:lfs
,
:with_file
,
success:
false
)
create
(
:geo_file_registry
,
:lfs
,
:with_file
,
success:
true
)
expect
(
subject
.
lfs_objects_synced_count
).
to
eq
(
1
)
end
end
# Disable transactions via :delete method because a foreign table
# can't see changes inside a transaction of a different connection.
describe
'#lfs_objects_synced_missing_on_primary_count'
,
:delete
do
it
'counts LFS objects marked as synced due to file missing on the primary'
do
# These four should be ignored
create
(
:geo_file_registry
,
success:
false
)
create
(
:geo_file_registry
,
:avatar
,
missing_on_primary:
true
)
create
(
:geo_file_registry
,
file_type: :attachment
,
missing_on_primary:
true
)
create
(
:geo_file_registry
,
:lfs
,
:with_file
,
success:
false
)
create
(
:geo_file_registry
,
:lfs
,
:with_file
,
success:
true
,
missing_on_primary:
true
)
expect
(
subject
.
lfs_objects_synced_missing_on_primary_count
).
to
eq
(
1
)
end
end
# Disable transactions via :delete method because a foreign table
# can't see changes inside a transaction of a different connection.
describe
'#lfs_objects_failed_count'
,
:delete
do
it
'counts failed LFS objects'
do
# These four should be ignored
create
(
:geo_file_registry
,
success:
false
)
...
...
@@ -207,17 +254,29 @@ describe GeoNodeStatus, :geo do
describe
'#job_artifacts_synced_count'
,
:delete
do
it
'counts synced job artifacts'
do
# These should be ignored
create
(
:geo_file_registry
,
success:
false
)
create
(
:geo_file_registry
,
:avatar
,
success:
false
)
create
(
:geo_file_registry
,
file_type: :attachment
,
success:
true
)
create
(
:geo_file_registry
,
:lfs
,
:with_file
,
success:
true
)
create
(
:geo_file_registry
,
success:
true
)
create
(
:geo_job_artifact_registry
,
:with_artifact
,
success:
false
)
create
(
:geo_job_artifact_registry
,
:with_artifact
,
success:
true
)
expect
(
subject
.
job_artifacts_synced_count
).
to
eq
(
1
)
end
end
# Disable transactions via :delete method because a foreign table
# can't see changes inside a transaction of a different connection.
describe
'#job_artifacts_synced_missing_on_primary_count'
,
:delete
do
it
'counts job artifacts marked as synced due to file missing on the primary'
do
# These should be ignored
create
(
:geo_file_registry
,
success:
true
,
missing_on_primary:
true
)
create
(
:geo_job_artifact_registry
,
:with_artifact
,
success:
true
)
create
(
:geo_job_artifact_registry
,
:with_artifact
,
success:
true
,
missing_on_primary:
true
)
expect
(
subject
.
job_artifacts_synced_missing_on_primary_count
).
to
eq
(
1
)
end
end
# Disable transactions via :delete method because a foreign table
# can't see changes inside a transaction of a different connection.
describe
'#job_artifacts_failed_count'
,
:delete
do
...
...
@@ -227,16 +286,17 @@ describe GeoNodeStatus, :geo do
create
(
:geo_file_registry
,
:avatar
,
success:
false
)
create
(
:geo_file_registry
,
file_type: :attachment
,
success:
false
)
create
(
:geo_job_artifact_registry
,
:with_artifact
,
success:
true
)
create
(
:geo_job_artifact_registry
,
:with_artifact
,
success:
false
)
expect
(
subject
.
job_artifacts_failed_count
).
to
eq
(
1
)
end
end
describe
'#job_artifacts_synced_in_percentage'
do
# Disable transactions via :delete method because a foreign table
# can't see changes inside a transaction of a different connection.
context
'when artifacts are available'
,
:delete
do
# Disable transactions via :delete method because a foreign table
# can't see changes inside a transaction of a different connection.
describe
'#job_artifacts_synced_in_percentage'
,
:delete
do
context
'when artifacts are available'
do
before
do
[
project_1
,
project_2
,
project_3
,
project_4
].
each_with_index
do
|
project
,
index
|
build
=
create
(
:ci_build
,
project:
project
)
...
...
ee/spec/services/geo/metrics_update_service_spec.rb
View file @
63307438
...
...
@@ -25,12 +25,15 @@ describe Geo::MetricsUpdateService, :geo do
lfs_objects_count:
100
,
lfs_objects_synced_count:
50
,
lfs_objects_failed_count:
12
,
lfs_objects_synced_missing_on_primary_count:
4
,
job_artifacts_count:
100
,
job_artifacts_synced_count:
50
,
job_artifacts_failed_count:
12
,
job_artifacts_synced_missing_on_primary_count:
5
,
attachments_count:
30
,
attachments_synced_count:
30
,
attachments_failed_count:
25
,
attachments_synced_missing_on_primary_count:
6
,
last_event_id:
2
,
last_event_date:
event_date
,
cursor_last_event_id:
1
,
...
...
@@ -143,12 +146,15 @@ describe Geo::MetricsUpdateService, :geo do
expect
(
metric_value
(
:geo_lfs_objects
)).
to
eq
(
100
)
expect
(
metric_value
(
:geo_lfs_objects_synced
)).
to
eq
(
50
)
expect
(
metric_value
(
:geo_lfs_objects_failed
)).
to
eq
(
12
)
expect
(
metric_value
(
:geo_lfs_objects_synced_missing_on_primary
)).
to
eq
(
4
)
expect
(
metric_value
(
:geo_job_artifacts
)).
to
eq
(
100
)
expect
(
metric_value
(
:geo_job_artifacts_synced
)).
to
eq
(
50
)
expect
(
metric_value
(
:geo_job_artifacts_failed
)).
to
eq
(
12
)
expect
(
metric_value
(
:geo_job_artifacts_synced_missing_on_primary
)).
to
eq
(
5
)
expect
(
metric_value
(
:geo_attachments
)).
to
eq
(
30
)
expect
(
metric_value
(
:geo_attachments_synced
)).
to
eq
(
30
)
expect
(
metric_value
(
:geo_attachments_failed
)).
to
eq
(
25
)
expect
(
metric_value
(
:geo_attachments_synced_missing_on_primary
)).
to
eq
(
6
)
expect
(
metric_value
(
:geo_last_event_id
)).
to
eq
(
2
)
expect
(
metric_value
(
:geo_last_event_timestamp
)).
to
eq
(
event_date
.
to_i
)
expect
(
metric_value
(
:geo_cursor_last_event_id
)).
to
eq
(
1
)
...
...
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