Commit 2390284a authored by Stan Hu's avatar Stan Hu

Merge branch 'ab/iid-unnecessary-locks' into 'master'

Avoid unnecessary locks on internal_ids (remove feature flag)

Closes #30515

See merge request gitlab-org/gitlab!18328
parents cd151e26 98db5766
...@@ -57,8 +57,7 @@ module AtomicInternalId ...@@ -57,8 +57,7 @@ module AtomicInternalId
end end
define_method("track_#{scope}_#{column}!") do define_method("track_#{scope}_#{column}!") do
iid_always_track = Feature.enabled?(:iid_always_track, default_enabled: true) return unless @internal_id_needs_tracking
return unless @internal_id_needs_tracking || iid_always_track
scope_value = internal_id_read_scope(scope) scope_value = internal_id_read_scope(scope)
return unless scope_value return unless scope_value
......
...@@ -54,7 +54,7 @@ class InternalId < ApplicationRecord ...@@ -54,7 +54,7 @@ class InternalId < ApplicationRecord
last_value last_value
end end
# Temporary instrumentation to track for-update locks # Instrumentation to track for-update locks
def update_and_save_counter def update_and_save_counter
strong_memoize(:update_and_save_counter) do strong_memoize(:update_and_save_counter) do
Gitlab::Metrics.counter(:gitlab_internal_id_for_update_lock, 'Number of ROW SHARE (FOR UPDATE) locks on individual records from internal_ids') Gitlab::Metrics.counter(:gitlab_internal_id_for_update_lock, 'Number of ROW SHARE (FOR UPDATE) locks on individual records from internal_ids')
......
---
title: Avoid unnecessary locks on internal_ids
merge_request: 18328
author:
type: performance
...@@ -22,41 +22,22 @@ describe AtomicInternalId do ...@@ -22,41 +22,22 @@ describe AtomicInternalId do
end end
context 'when value is set by ensure_project_iid!' do context 'when value is set by ensure_project_iid!' do
context 'with iid_always_track false' do it 'does not track the value' do
before do expect(InternalId).not_to receive(:track_greatest)
stub_feature_flags(iid_always_track: false)
end
it 'does not track the value' do milestone.ensure_project_iid!
expect(InternalId).not_to receive(:track_greatest) subject
milestone.ensure_project_iid!
subject
end
it 'tracks the iid for the scope that is actually present' do
milestone.iid = external_iid
expect(InternalId).to receive(:track_greatest).once.with(milestone, scope_attrs, usage, external_iid, anything)
expect(InternalId).not_to receive(:generate_next)
# group scope is not present here, the milestone does not have a group
milestone.track_group_iid!
subject
end
end end
context 'with iid_always_track enabled' do it 'tracks the iid for the scope that is actually present' do
before do milestone.iid = external_iid
stub_feature_flags(iid_always_track: true)
end
it 'does not track the value' do expect(InternalId).to receive(:track_greatest).once.with(milestone, scope_attrs, usage, external_iid, anything)
expect(InternalId).to receive(:track_greatest) expect(InternalId).not_to receive(:generate_next)
milestone.ensure_project_iid! # group scope is not present here, the milestone does not have a group
subject milestone.track_group_iid!
end subject
end end
end end
end end
......
...@@ -47,10 +47,6 @@ shared_examples_for 'AtomicInternalId' do |validate_presence: true| ...@@ -47,10 +47,6 @@ shared_examples_for 'AtomicInternalId' do |validate_presence: true|
end end
describe 'internal id generation' do describe 'internal id generation' do
before do
stub_feature_flags(iid_always_track: false)
end
subject { instance.save! } subject { instance.save! }
it 'calls InternalId.generate_next and sets internal id attribute' do it 'calls InternalId.generate_next and sets internal id attribute' do
......
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