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
0
Merge Requests
0
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
Jérome Perrin
gitlab-ce
Commits
b752ee8a
Commit
b752ee8a
authored
Aug 21, 2014
by
Jacob Vosmaer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add rake task to drop a project's PostReceive jobs
parent
3ed8fbce
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
47 additions
and
0 deletions
+47
-0
lib/tasks/gitlab/sidekiq.rake
lib/tasks/gitlab/sidekiq.rake
+47
-0
No files found.
lib/tasks/gitlab/sidekiq.rake
0 → 100644
View file @
b752ee8a
namespace
:gitlab
do
namespace
:sidekiq
do
QUEUE
=
'queue:post_receive'
desc
'Drop all Sidekiq PostReceive jobs for a given project'
task
:drop_post_receive
,
[
:project
]
=>
:environment
do
|
t
,
args
|
unless
args
.
project
.
present?
abort
"Please specify the project you want to drop PostReceive jobs for:
\n
rake gitlab:sidekiq:drop_post_receive[group/project]"
end
project_path
=
Project
.
find_with_namespace
(
args
.
project
).
repository
.
path_to_repo
Sidekiq
.
redis
do
|
redis
|
unless
redis
.
exists
(
QUEUE
)
abort
"Queue
#{
QUEUE
}
is empty"
end
temp_queue
=
"
#{
QUEUE
}
_
#{
Time
.
now
.
to_i
}
"
redis
.
rename
(
QUEUE
,
temp_queue
)
# At this point, then post_receive queue is empty. It may be receiving
# new jobs already. We will repopulate it with the old jobs, skipping the
# ones we want to drop.
dropped
=
0
while
(
job
=
redis
.
lpop
(
temp_queue
))
do
if
repo_path
(
job
)
==
project_path
dropped
+=
1
else
redis
.
rpush
(
QUEUE
,
job
)
end
end
# The temp_queue will delete itself after we have popped all elements
# from it
puts
"Dropped
#{
dropped
}
jobs containing
#{
project_path
}
from
#{
QUEUE
}
"
end
end
def
repo_path
(
job
)
job_args
=
JSON
.
parse
(
job
)[
'args'
]
if
job_args
job_args
.
first
else
nil
end
end
end
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