Average number of approval metrics failing in Service Ping for Gitlab.com

Problem

One of the metrics introduced with !90089 (merged) is failing in the Service Ping generated for GitLab.com for %15.2:

  • usage_activity_by_stage_monthly.release.protected_environments_average_required_approvals

Below is the error stacktrace:

Traceback (most recent call last):
       16: from lib/gitlab/usage/service_ping/instrumented_payload.rb:18:in `map'
       15: from lib/gitlab/usage/service_ping/instrumented_payload.rb:19:in `block in build'
       14: from lib/gitlab/usage/service_ping/instrumented_payload.rb:36:in `compute_instrumental_value'
       13: from lib/gitlab/usage/service_ping/instrumented_payload.rb:36:in `call'
       12: from lib/gitlab/usage/metric.rb:21:in `with_value'
       11: from lib/gitlab/usage/metric.rb:37:in `with_availability'
       10: from lib/gitlab/usage/metric.rb:21:in `block in with_value'
        9: from lib/gitlab/usage/metrics/instrumentations/database_metric.rb:68:in `value'
        8: from lib/gitlab/usage/metrics/instrumentations/database_metric.rb:68:in `call'
        7: from lib/gitlab/utils/usage_data.rb:108:in `average'
        6: from lib/gitlab/utils/usage_data.rb:48:in `with_duration'
        5: from lib/gitlab/utils/usage_data.rb:109:in `block in average'
        4: from lib/gitlab/database/batch_count.rb:47:in `batch_average'
        3: from lib/gitlab/database/batch_counter.rb:57:in `count'
        2: from lib/gitlab/database/batch_counter.rb:85:in `merge_results'
        1: from lib/gitlab/database/batch_counter.rb:85:in `+'
TypeError (nil can't be coerced into BigDecimal)

Looking at the error, it seems that the SQL executed by average operation (passed here to the merge_results method) is returning nil, which results in an error because nil cannot be coerced into a BigDecimal for the addition taking place in line #85.

See this, and this for more information about the failure.

Proposal

Update the batch counter class to handle nil value for object in merge_results method without throwing errors. Additionally, it might be worth investigating why the SQL query had returned a nil result to begin with.

Edited Jul 15, 2022 by Ahmed Hemdan
Assignee Loading
Time tracking Loading