| ... | ... | @@ -16,6 +16,8 @@ |
|
|
|
# * Add `usage` value to enum
|
|
|
|
# * (Optionally) add columns to `internal_ids` if needed for scope.
|
|
|
|
class InternalId < ApplicationRecord
|
|
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
|
|
|
|
belongs_to :project
|
|
|
|
belongs_to :namespace
|
|
|
|
|
| ... | ... | @@ -47,10 +49,18 @@ class InternalId < ApplicationRecord |
|
|
|
def update_and_save(&block)
|
|
|
|
lock!
|
|
|
|
yield
|
|
|
|
update_and_save_counter.increment(usage: usage, changed: last_value_changed?)
|
|
|
|
save!
|
|
|
|
last_value
|
|
|
|
end
|
|
|
|
|
|
|
|
# Temporary instrumentation to track for-update locks
|
|
|
|
def update_and_save_counter
|
|
|
|
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')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class << self
|
|
|
|
def track_greatest(subject, scope, usage, new_value, init)
|
|
|
|
return new_value unless available?
|
| ... | ... | |
| ... | ... | |