Fix Sidekiq crash when gitlab.yml contains UTF-8 characters
What does this MR do and why?
This backports !121782 (merged) to the 16-0-stable-ee
branch.
In GitLab 16.0, we migrated away from Settingslogic
in
!113040 (merged) and
started using ActiveSupport::ConfigurationFile.parse
.
However, if GitLab Omnibus were configured with non-ASCII characters, such as German Umlauts, Sidekiq would fail to start up due to:
incompatible character encodings: US-ASCII and UTF-8
This happened because:
- Ruby sets the default encoding based on the
LANG
environment. - When Omnibus GitLab starts Sidekiq,
LANG
is blank. As a result, Ruby'sEncoding.default_external
returnsUS-ASCII
. - When
ActiveSupport::ConfigurationFile.parse
runs, it attempts to scan for certain UTF-8 characters, but this fails in GitLab 16.0 since the file is read asUS-ASCII
. - Just by calling
require 'rails'
, Rails sets the encoding to UTF-8. - However,
sidekiq-cluster
doesn't attempt torequire 'rails'
before it attempts to load the settings, and so it will crash if non-ASCII characters are present.
To fix this, set the encodings inside the GitlabSettings::Settings
class to ensure configuration files are parsed as UTF-8.
Relates to #412767 (closed)
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
This MR is backporting a bug fix, documentation update, or spec fix, previously merged in the default branch. -
The original MR has been deployed to GitLab.com (not applicable for documentation or spec changes). -
This MR has a severity label assigned (if applicable). -
This MR has been approved by a maintainer (only one approval is required). -
Ensure the e2e:package-and-test-ee
job has either succeeded or been approved by a Software Engineer in Test.
Note to the merge request author and maintainer
If you have questions about the patch release process, please:
- Refer to the patch release runbook for engineers and maintainers for guidance.
- Ask questions on the
#releases
Slack channel (internal only).
Edited by Stan Hu