From 480d57d2f72eb2b1ce2e5a45ac2989ead031775a Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Thu, 4 Apr 2019 22:18:37 +1300 Subject: [PATCH 1/2] Do not inherit when calling const_get Otherwise we will get really confusing behavior in development environment (where eager_load is false) where it attempts to load `Prometheus::Queries::EnvironmentQuery` when query_class_name is `Gitlab::Prometheus::Queries::EnvironmentQuery`, the `Prometheus` module is loaded from a gem but not anything in `Gitlab::Prometheus`. --- app/models/concerns/prometheus_adapter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/concerns/prometheus_adapter.rb b/app/models/concerns/prometheus_adapter.rb index a29e80fe0c1..ae6cf88231b 100644 --- a/app/models/concerns/prometheus_adapter.rb +++ b/app/models/concerns/prometheus_adapter.rb @@ -36,7 +36,7 @@ module PrometheusAdapter def calculate_reactive_cache(query_class_name, *args) return unless prometheus_client - data = Kernel.const_get(query_class_name).new(prometheus_client_wrapper).query(*args) + data = Kernel.const_get(query_class_name, false).new(prometheus_client_wrapper).query(*args) { success: true, data: data, From 85c94725e56ef90bdfd0c22cbf96a27110483707 Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Fri, 5 Apr 2019 10:25:01 +1300 Subject: [PATCH 2/2] Switch to Object.const_get As we get error with Kernel.const_get(..., false) ``` uninitialized constant Kernel::Gitlab ``` Kernel is included into Object. I guess top level constants are loaded into Object and not the Kernel module. --- app/models/concerns/prometheus_adapter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/concerns/prometheus_adapter.rb b/app/models/concerns/prometheus_adapter.rb index ae6cf88231b..231faa2b6c4 100644 --- a/app/models/concerns/prometheus_adapter.rb +++ b/app/models/concerns/prometheus_adapter.rb @@ -36,7 +36,7 @@ module PrometheusAdapter def calculate_reactive_cache(query_class_name, *args) return unless prometheus_client - data = Kernel.const_get(query_class_name, false).new(prometheus_client_wrapper).query(*args) + data = Object.const_get(query_class_name, false).new(prometheus_client_wrapper).query(*args) { success: true, data: data,