gitlab-exporter 16.7.0 → 16.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 050c12ce9d7b70227e38e416538371674bccb14e2e5f5f1fc256f290ba462d17
4
- data.tar.gz: ea71b320b31953a3926ae1d9f7674cba9081a836aa3e2435a699e65c3a6b5822
3
+ metadata.gz: 8b320ac3c29627e5bca0700ab6007fb3681a286679032bccae4595af29e764fc
4
+ data.tar.gz: ab52c7b430a87959228fdb4483c2bf3a26f9838c983a5292dd27bb6b72123a8d
5
5
  SHA512:
6
- metadata.gz: 671f76c854145721fdc0597d4c2ab5b889570568de67c2f96670c4fc9cbb9e03cd6f315aee8c6375d3e2b13ecac11778007292e7f622081f63f3b5bf2a608bb1
7
- data.tar.gz: f4072dec64099fbf6d0a7852b07bb7711db2d887471d570cffa25dfbeaa13736d409f1c06beadb61dfae897479983c0a33f862fc7f2fdc64bb1cb94a389d0b46
6
+ metadata.gz: dbd696eb2e666142c275e46aff04eb9beda6739863fe505249f0074d1d8d1145fe6b41573e0f3521feee2bcde7dd2ad33e8fc76b1abc3f75e34e23d95d94258f
7
+ data.tar.gz: 2d426ce702f2d360b5aa8cc5ae51f4924295e717615c6da3adbd9ef1e46c241ed40e151082918fa7c963c7367c857730e1fafb41ffc328bc6b3d14879615abcf
data/Gemfile.lock CHANGED
@@ -1,12 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-exporter (16.7.0)
4
+ gitlab-exporter (16.8.0)
5
5
  connection_pool (= 2.5.5)
6
6
  deep_merge (~> 1.2.2)
7
7
  faraday (= 2.14.1)
8
8
  pg (= 1.6.3)
9
- puma (= 7.2.0)
9
+ puma (= 8.0.1)
10
10
  quantile (= 0.2.1)
11
11
  redis (= 4.8.1)
12
12
  redis-namespace (= 1.11.0)
@@ -40,7 +40,7 @@ GEM
40
40
  racc
41
41
  pg (1.6.3)
42
42
  prism (1.9.0)
43
- puma (7.2.0)
43
+ puma (8.0.1)
44
44
  nio4r (~> 2.0)
45
45
  quantile (0.2.1)
46
46
  racc (1.8.1)
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_runtime_dependency "deep_merge", "~> 1.2.2"
27
27
  s.add_runtime_dependency "faraday", "2.14.1"
28
28
  s.add_runtime_dependency "pg", "1.6.3"
29
- s.add_runtime_dependency "puma", "7.2.0"
29
+ s.add_runtime_dependency "puma", "8.0.1"
30
30
  s.add_runtime_dependency "quantile", "0.2.1"
31
31
  s.add_runtime_dependency "redis", "4.8.1"
32
32
  s.add_runtime_dependency "redis-namespace", "1.11.0"
@@ -62,13 +62,26 @@ module GitLab
62
62
  LIMIT 1
63
63
  SQL
64
64
 
65
+ # unclaimed_storage_bytes and storage_percent_used are not real columns on
66
+ # zoekt_nodes; they are derived in Search::Zoekt::Node. We compute them in SQL
67
+ # here to avoid loading every row through ActiveRecord.
65
68
  ZOEKT_NODE_STORAGE_QUERY = <<~SQL.freeze
66
69
  SELECT
67
- id,
68
- metadata ->> 'name' AS node_name,
69
- unclaimed_storage_bytes,
70
- storage_percent_used
71
- FROM zoekt_nodes
70
+ zn.id,
71
+ zn.metadata ->> 'name' AS node_name,
72
+ (zn.usable_storage_bytes - COALESCE(zi.reserved_total, 0))::bigint
73
+ AS unclaimed_storage_bytes,
74
+ CASE
75
+ WHEN zn.total_bytes > 0
76
+ THEN zn.used_bytes::float8 / zn.total_bytes::float8
77
+ ELSE 0
78
+ END AS storage_percent_used
79
+ FROM zoekt_nodes zn
80
+ LEFT JOIN (
81
+ SELECT zoekt_node_id, SUM(reserved_storage_bytes) AS reserved_total
82
+ FROM zoekt_indices
83
+ GROUP BY zoekt_node_id
84
+ ) zi ON zi.zoekt_node_id = zn.id
72
85
  SQL
73
86
 
74
87
  ZOEKT_REPOSITORIES_STATE_QUERY = <<~SQL.freeze
@@ -163,7 +176,8 @@ module GitLab
163
176
  with_connection_pool do |conn|
164
177
  conn.exec_params(query, params)
165
178
  end
166
- rescue PG::UndefinedTable, PG::UndefinedColumn
179
+ rescue PG::UndefinedTable, PG::UndefinedColumn => e
180
+ @logger&.warn("ZoektCollector query failed: #{e.class}: #{e.message.lines.first&.strip}")
167
181
  nil
168
182
  end
169
183
  end
@@ -1,5 +1,5 @@
1
1
  module GitLab
2
2
  module Exporter
3
- VERSION = "16.7.0".freeze
3
+ VERSION = "16.8.0".freeze
4
4
  end
5
5
  end
@@ -174,6 +174,33 @@ describe GitLab::Exporter::Database::ZoektCollector do
174
174
  end
175
175
  end
176
176
 
177
+ describe "ZOEKT_NODE_STORAGE_QUERY" do
178
+ subject(:query) { described_class::ZOEKT_NODE_STORAGE_QUERY }
179
+
180
+ it "selects the unclaimed_storage_bytes and storage_percent_used aliases" do
181
+ expect(query).to match(/AS unclaimed_storage_bytes/)
182
+ expect(query).to match(/AS storage_percent_used/)
183
+ end
184
+
185
+ it "computes unclaimed_storage_bytes from real columns rather than referencing a non-existent column" do
186
+ # zoekt_nodes does not have an unclaimed_storage_bytes column; it must be derived
187
+ # from usable_storage_bytes minus the SUM of zoekt_indices.reserved_storage_bytes.
188
+ expect(query).to include("usable_storage_bytes")
189
+ expect(query).to include("reserved_storage_bytes")
190
+ expect(query).to include("zoekt_indices")
191
+ expect(query).not_to match(/^\s*unclaimed_storage_bytes\b/)
192
+ end
193
+
194
+ it "computes storage_percent_used from used_bytes / total_bytes with a guard" do
195
+ # zoekt_nodes does not have a storage_percent_used column; it must be derived
196
+ # from used_bytes / total_bytes (with a divide-by-zero guard).
197
+ expect(query).to include("used_bytes")
198
+ expect(query).to include("total_bytes")
199
+ expect(query).to match(/total_bytes\s*>\s*0/)
200
+ expect(query).not_to match(/^\s*storage_percent_used\b/)
201
+ end
202
+ end
203
+
177
204
  describe "#zoekt_indexing_enabled?" do
178
205
  it "returns true when zoekt is enabled" do
179
206
  expect(connection).to receive(:exec)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-exporter
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.7.0
4
+ version: 16.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Carranza
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 7.2.0
75
+ version: 8.0.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 7.2.0
82
+ version: 8.0.1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: quantile
85
85
  requirement: !ruby/object:Gem::Requirement