Database load balancing breaks when no replicas are available
With database load balancing enabled and when there are no replicas available, I'm running into an endless loop of this:
lib/gitlab/logger.rb:18:in `warn'
ee/lib/gitlab/database/load_balancing/load_balancer.rb:68:in `read'
ee/lib/gitlab/database/load_balancing/connection_proxy.rb:69:in `read_using_load_balancer'
ee/lib/gitlab/database/load_balancing/connection_proxy.rb:42:in `select_all'
lib/feature.rb:43:in `persisted_names'
lib/feature.rb:50:in `persisted_name?'
lib/feature.rb:77:in `enabled?'
lib/gitlab/json.rb:76:in `enable_oj?'
lib/gitlab/json.rb:123:in `adapter_dump'
lib/gitlab/json.rb:42:in `dump'
lib/gitlab/json_logger.rb:22:in `format_message'
lib/gitlab/logger.rb:18:in `warn'
ee/lib/gitlab/database/load_balancing/load_balancer.rb:68:in `read'
ee/lib/gitlab/database/load_balancing/connection_proxy.rb:69:in `read_using_load_balancer'
ee/lib/gitlab/database/load_balancing/connection_proxy.rb:42:in `select_all'
lib/feature.rb:43:in `persisted_names'
lib/feature.rb:50:in `persisted_name?'
lib/feature.rb:77:in `enabled?'
lib/gitlab/json.rb:76:in `enable_oj?'
lib/gitlab/json.rb:123:in `adapter_dump'
lib/gitlab/json.rb:42:in `dump'
lib/gitlab/json_logger.rb:22:in `format_message'
lib/gitlab/logger.rb:18:in `warn'
This is because enable_oj?
reaches out to the database itself (a feature flag), which starts the endless recursion. Entry-point for this is here: https://gitlab.com/gitlab-org/gitlab/blob/ab/db-extensions/ee/lib/gitlab/database/load_balancing/load_balancer.rb#L68
The feature flag being checked is:
Feature.enabled?(:oj_json, default_enabled: true)
Edited by Andreas Brandl