Commit 08af9e6a authored by Igor Drozdov's avatar Igor Drozdov

Merge branch 'osw-mark-process-commit-worker-as-idempotent' into 'master'

Mark ProcessCommitWorker as idempotent

See merge request gitlab-org/gitlab!30419
parents 17ae344e e3abc1c7
......@@ -1234,7 +1234,7 @@
:urgency: :high
:resource_boundary: :unknown
:weight: 3
:idempotent:
:idempotent: true
- :name: project_cache
:feature_category: :source_code_management
:has_external_dependencies:
......
......@@ -7,13 +7,15 @@
# result of this the workload of this worker should be kept to a bare minimum.
# Consider using an extra worker if you need to add any extra (and potentially
# slow) processing of commits.
class ProcessCommitWorker # rubocop:disable Scalability/IdempotentWorker
class ProcessCommitWorker
include ApplicationWorker
feature_category :source_code_management
urgency :high
weight 3
idempotent!
# project_id - The ID of the project this commit belongs to.
# user_id - The ID of the user that pushed the commit.
# commit_hash - Hash containing commit details to use for constructing a
......
......@@ -291,7 +291,7 @@ describe Git::BranchPushService, services: true do
execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
it "defaults to the pushing user if the commit's author is not known", :sidekiq_might_not_need_inline do
it "defaults to the pushing user if the commit's author is not known", :sidekiq_inline, :use_clean_rails_redis_caching do
allow(commit).to receive_messages(
author_name: 'unknown name',
author_email: 'unknown@email.com'
......@@ -336,7 +336,7 @@ describe Git::BranchPushService, services: true do
end
context "while saving the 'first_mentioned_in_commit_at' metric for an issue" do
it 'sets the metric for referenced issues', :sidekiq_might_not_need_inline do
it 'sets the metric for referenced issues', :sidekiq_inline, :use_clean_rails_redis_caching do
execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
expect(issue.reload.metrics.first_mentioned_in_commit_at).to be_like_time(commit_time)
......@@ -397,7 +397,7 @@ describe Git::BranchPushService, services: true do
allow(project).to receive(:default_branch).and_return('not-master')
end
it "creates cross-reference notes", :sidekiq_might_not_need_inline do
it "creates cross-reference notes", :sidekiq_inline, :use_clean_rails_redis_caching do
expect(SystemNoteService).to receive(:cross_reference).with(issue, closing_commit, commit_author)
execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
end
......@@ -438,7 +438,7 @@ describe Git::BranchPushService, services: true do
context "mentioning an issue" do
let(:message) { "this is some work.\n\nrelated to JIRA-1" }
it "initiates one api call to jira server to mention the issue", :sidekiq_might_not_need_inline do
it "initiates one api call to jira server to mention the issue", :sidekiq_inline, :use_clean_rails_redis_caching do
execute_service(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
expect(WebMock).to have_requested(:post, jira_api_comment_url('JIRA-1')).with(
......
......@@ -22,16 +22,26 @@ describe ProcessCommitWorker do
worker.perform(project.id, -1, commit.to_hash)
end
include_examples 'an idempotent worker' do
subject do
perform_multiple([project.id, user.id, commit.to_hash], worker: worker)
end
it 'processes the commit message' do
expect(worker).to receive(:process_commit_message).and_call_original
expect(worker).to receive(:process_commit_message)
.exactly(IdempotentWorkerHelper::WORKER_EXEC_TIMES)
.and_call_original
worker.perform(project.id, user.id, commit.to_hash)
subject
end
it 'updates the issue metrics' do
expect(worker).to receive(:update_issue_metrics).and_call_original
expect(worker).to receive(:update_issue_metrics)
.exactly(IdempotentWorkerHelper::WORKER_EXEC_TIMES)
.and_call_original
worker.perform(project.id, user.id, commit.to_hash)
subject
end
end
end
......
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