From 135fffb32ed863bb2ae645c414e11030a8f71bbe Mon Sep 17 00:00:00 2001 From: "ankit.panchal" Date: Wed, 23 Jul 2025 15:55:25 +0530 Subject: [PATCH] Fix unique_instance_id uniqueness by using system machine_id with fallback --- lib/gitlab/global_anonymous_id.rb | 25 +++++++++++++++++++++++++ lib/gitlab/tracking/standard_context.rb | 1 + 2 files changed, 26 insertions(+) diff --git a/lib/gitlab/global_anonymous_id.rb b/lib/gitlab/global_anonymous_id.rb index b28d6fc1b33fa5..7cc5c39850baba 100644 --- a/lib/gitlab/global_anonymous_id.rb +++ b/lib/gitlab/global_anonymous_id.rb @@ -23,5 +23,30 @@ def self.instance_uuid def self.instance_id ::Gitlab::CurrentSettings.uuid.presence || GITLAB_INSTANCE_UUID_NOT_SET end + + def self.system_id + system_identifiers = [] + + machine_id = read_system_file('/etc/machine-id') + system_identifiers << machine_id if machine_id + + boot_id = read_system_file('/proc/sys/kernel/random/boot_id') + system_identifiers << boot_id if boot_id + + if system_identifiers.any? + combined = system_identifiers.join(':') + ":#{instance_uuid}" + Gitlab::CryptoHelper.sha256(combined) + else + instance_uuid + end + end + + def self.read_system_file(path) + return unless File.exist?(path) && File.readable?(path) + + File.read(path).strip + rescue StandardError + nil + end end end diff --git a/lib/gitlab/tracking/standard_context.rb b/lib/gitlab/tracking/standard_context.rb index 5b6127ae551ffd..2eaaca378fd137 100644 --- a/lib/gitlab/tracking/standard_context.rb +++ b/lib/gitlab/tracking/standard_context.rb @@ -71,6 +71,7 @@ def to_h realm: realm, instance_id: ::Gitlab::GlobalAnonymousId.instance_id, unique_instance_id: Gitlab::GlobalAnonymousId.instance_uuid, + system_id: Gitlab::GlobalAnonymousId.system_id, host_name: Gitlab.config.gitlab.host, instance_version: Gitlab.version_info.to_s, context_generated_at: Time.current -- GitLab