BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
6ecf16b8
Commit
6ecf16b8
authored
May 05, 2017
by
James Lopez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor code based on feedback
parent
ce418036
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
34 additions
and
47 deletions
+34
-47
services_controller.rb
app/controllers/admin/services_controller.rb
+1
-1
propagate_service_template.rb
app/services/projects/propagate_service_template.rb
+15
-6
propagate_service_template_worker.rb
app/workers/propagate_service_template_worker.rb
+3
-3
sidekiq_queues.yml
config/sidekiq_queues.yml
+1
-1
bulk_insert.rb
lib/gitlab/sql/bulk_insert.rb
+0
-21
services_controller_spec.rb
spec/controllers/admin/services_controller_spec.rb
+4
-4
propagate_service_template_spec.rb
spec/services/projects/propagate_service_template_spec.rb
+8
-9
propagate_service_template_worker_spec.rb
spec/workers/propagate_service_template_worker_spec.rb
+2
-2
No files found.
app/controllers/admin/services_controller.rb
View file @
6ecf16b8
...
...
@@ -16,7 +16,7 @@ class Admin::ServicesController < Admin::ApplicationController
def
update
if
service
.
update_attributes
(
service_params
[
:service
])
Propagate
ProjectServic
eWorker
.
perform_async
(
service
.
id
)
if
service
.
active?
Propagate
ServiceTemplat
eWorker
.
perform_async
(
service
.
id
)
if
service
.
active?
redirect_to
admin_application_settings_services_path
,
notice:
'Application settings saved successfully'
...
...
app/services/projects/propagate_service.rb
→
app/services/projects/propagate_service
_template
.rb
View file @
6ecf16b8
module
Projects
class
PropagateService
class
PropagateService
Template
BATCH_SIZE
=
100
def
self
.
propagate
(
*
args
)
...
...
@@ -36,9 +36,7 @@ module Projects
end
Project
.
transaction
do
Gitlab
::
SQL
::
BulkInsert
.
new
(
service_hash
.
keys
+
[
'project_id'
],
service_list
,
'services'
).
execute
bulk_insert_services
(
service_hash
.
keys
+
[
'project_id'
],
service_list
)
run_callbacks
(
batch
)
end
end
...
...
@@ -54,11 +52,22 @@ module Projects
WHERE services.project_id = projects.id
AND services.type = '
#{
@template
.
type
}
'
)
AND projects.pending_delete = false
AND projects.archived = false
LIMIT
#{
BATCH_SIZE
}
SQL
)
end
def
bulk_insert_services
(
columns
,
values_array
)
ActiveRecord
::
Base
.
connection
.
execute
(
<<-
SQL
.
strip_heredoc
INSERT INTO services (
#{
columns
.
join
(
', '
)
}
)
VALUES
#{
values_array
.
map
{
|
tuple
|
"(
#{
tuple
.
join
(
', '
)
}
)"
}
.join(', ')}
SQL
)
end
def
service_hash
@service_hash
||=
begin
...
...
@@ -84,11 +93,11 @@ module Projects
end
def
active_external_issue_tracker?
@template
[
'category'
]
==
'issue_tracker'
&&
@template
[
'active'
]
&&
!
@template
[
'default'
]
@template
.
category
==
:issue_tracker
&&
!
@template
.
default
end
def
active_external_wiki?
@template
[
'type'
]
==
'ExternalWikiService'
&&
@template
[
'active'
]
@template
.
type
==
'ExternalWikiService'
end
end
end
app/workers/propagate_
project_servic
e_worker.rb
→
app/workers/propagate_
service_templat
e_worker.rb
View file @
6ecf16b8
# Worker for updating any project specific caches.
class
Propagate
ProjectServic
eWorker
class
Propagate
ServiceTemplat
eWorker
include
Sidekiq
::
Worker
include
DedicatedSidekiqQueue
...
...
@@ -10,14 +10,14 @@ class PropagateProjectServiceWorker
def
perform
(
template_id
)
return
unless
try_obtain_lease_for
(
template_id
)
Projects
::
PropagateService
.
propagate
(
Service
.
find_by
(
id:
template_id
))
Projects
::
PropagateService
Template
.
propagate
(
Service
.
find_by
(
id:
template_id
))
end
private
def
try_obtain_lease_for
(
template_id
)
Gitlab
::
ExclusiveLease
.
new
(
"propagate_
project_servic
e_worker:
#{
template_id
}
"
,
timeout:
LEASE_TIMEOUT
).
new
(
"propagate_
service_templat
e_worker:
#{
template_id
}
"
,
timeout:
LEASE_TIMEOUT
).
try_obtain
end
end
config/sidekiq_queues.yml
View file @
6ecf16b8
...
...
@@ -53,4 +53,4 @@
-
[
pages
,
1
]
-
[
system_hook_push
,
1
]
-
[
update_user_activity
,
1
]
-
[
propagate_
project_servic
e
,
1
]
-
[
propagate_
service_templat
e
,
1
]
lib/gitlab/sql/bulk_insert.rb
deleted
100644 → 0
View file @
ce418036
module
Gitlab
module
SQL
# Class for building SQL bulk inserts
class
BulkInsert
def
initialize
(
columns
,
values_array
,
table
)
@columns
=
columns
@values_array
=
values_array
@table
=
table
end
def
execute
ActiveRecord
::
Base
.
connection
.
execute
(
<<-
SQL
.
strip_heredoc
INSERT INTO
#{
@table
}
(
#{
@columns
.
join
(
', '
)
}
)
VALUES
#{
@values_array
.
map
{
|
tuple
|
"(
#{
tuple
.
join
(
', '
)
}
)"
}
.join(', ')}
SQL
)
end
end
end
end
spec/controllers/admin/services_controller_spec.rb
View file @
6ecf16b8
...
...
@@ -39,16 +39,16 @@ describe Admin::ServicesController do
)
end
it
'
updates the service params successfully and calls the propagation worker
'
do
expect
(
Propagate
ProjectServic
eWorker
).
to
receive
(
:perform_async
).
with
(
service
.
id
)
it
'
calls the propagation worker when service is active
'
do
expect
(
Propagate
ServiceTemplat
eWorker
).
to
receive
(
:perform_async
).
with
(
service
.
id
)
put
:update
,
id:
service
.
id
,
service:
{
active:
true
}
expect
(
response
).
to
have_http_status
(
302
)
end
it
'
updates the service params successfully
'
do
expect
(
Propagate
ProjectServic
eWorker
).
not_to
receive
(
:perform_async
)
it
'
does not call the propagation worker when service is not active
'
do
expect
(
Propagate
ServiceTemplat
eWorker
).
not_to
receive
(
:perform_async
)
put
:update
,
id:
service
.
id
,
service:
{
properties:
{}
}
...
...
spec/services/projects/propagate_service_spec.rb
→
spec/services/projects/propagate_service_
template_
spec.rb
View file @
6ecf16b8
require
'spec_helper'
describe
Projects
::
PropagateService
,
services:
true
do
describe
'.propagate
!
'
do
describe
Projects
::
PropagateService
Template
,
services:
true
do
describe
'.propagate'
do
let!
(
:service_template
)
do
PushoverService
.
create
(
template:
true
,
...
...
@@ -23,9 +23,10 @@ describe Projects::PropagateService, services: true do
end
it
'creates services for a project that has another service'
do
other_service
=
BambooService
.
create
(
BambooService
.
create
(
template:
true
,
active:
true
,
project:
project
,
properties:
{
bamboo_url:
'http://gitlab.com'
,
username:
'mic'
,
...
...
@@ -34,8 +35,6 @@ describe Projects::PropagateService, services: true do
}
)
Service
.
build_from_template
(
project
.
id
,
other_service
).
save!
expect
{
described_class
.
propagate
(
service_template
)
}.
to
change
{
Service
.
count
}.
by
(
1
)
end
...
...
@@ -62,7 +61,7 @@ describe Projects::PropagateService, services: true do
it
'creates the service containing the template attributes'
do
described_class
.
propagate
(
service_template
)
service
=
Service
.
find_by
(
type:
service_template
.
type
,
template:
false
)
service
=
Service
.
find_by
!
(
type:
service_template
.
type
,
template:
false
)
expect
(
service
.
properties
).
to
eq
(
service_template
.
properties
)
end
...
...
@@ -70,7 +69,7 @@ describe Projects::PropagateService, services: true do
describe
'bulk update'
do
it
'creates services for all projects'
do
project_total
=
5
stub_const
'Projects::PropagateService::BATCH_SIZE'
,
3
stub_const
'Projects::PropagateService
Template
::BATCH_SIZE'
,
3
project_total
.
times
{
create
(
:empty_project
)
}
...
...
@@ -81,7 +80,7 @@ describe Projects::PropagateService, services: true do
describe
'external tracker'
do
it
'updates the project external tracker'
do
service_template
.
update
(
category:
'issue_tracker'
,
default:
false
)
service_template
.
update
!
(
category:
'issue_tracker'
,
default:
false
)
expect
{
described_class
.
propagate
(
service_template
)
}.
to
change
{
project
.
reload
.
has_external_issue_tracker
}.
to
(
true
)
...
...
@@ -90,7 +89,7 @@ describe Projects::PropagateService, services: true do
describe
'external wiki'
do
it
'updates the project external tracker'
do
service_template
.
update
(
type:
'ExternalWikiService'
)
service_template
.
update
!
(
type:
'ExternalWikiService'
)
expect
{
described_class
.
propagate
(
service_template
)
}.
to
change
{
project
.
reload
.
has_external_wiki
}.
to
(
true
)
...
...
spec/workers/propagate_
project_servic
e_worker_spec.rb
→
spec/workers/propagate_
service_templat
e_worker_spec.rb
View file @
6ecf16b8
require
'spec_helper'
describe
Propagate
ProjectServic
eWorker
do
describe
Propagate
ServiceTemplat
eWorker
do
let!
(
:service_template
)
do
PushoverService
.
create
(
template:
true
,
...
...
@@ -21,7 +21,7 @@ describe PropagateProjectServiceWorker do
describe
'#perform'
do
it
'calls the propagate service with the template'
do
expect
(
Projects
::
PropagateService
).
to
receive
(
:propagate
).
with
(
service_template
)
expect
(
Projects
::
PropagateService
Template
).
to
receive
(
:propagate
).
with
(
service_template
)
subject
.
perform
(
service_template
.
id
)
end
...
...
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