Skip to content

Commit 2022a41

Browse files
authored
Merge pull request #280 from splattael/perf-inc
Optimize incrementing values in DirectFileStore adapter
2 parents db756a1 + 3ee337e commit 2022a41

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

lib/prometheus/client/data_stores/direct_file_store.rb

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,7 @@ def increment(labels:, by: 1)
114114

115115
key = store_key(labels)
116116
in_process_sync do
117-
value = internal_store.read_value(key)
118-
internal_store.write_value(key, value + by.to_f)
117+
internal_store.increment_value(key, by.to_f)
119118
end
120119
end
121120

@@ -286,6 +285,21 @@ def write_value(key, value)
286285
@f.flush
287286
end
288287

288+
def increment_value(key, by)
289+
if !@positions.has_key?(key)
290+
init_value(key)
291+
end
292+
293+
pos = @positions[key]
294+
@f.seek(pos)
295+
value = @f.read(8).unpack('d')[0]
296+
297+
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
298+
@f.seek(-8, :CUR)
299+
@f.write([value + by, now].pack('dd'))
300+
@f.flush
301+
end
302+
289303
def close
290304
@f.close
291305
end

0 commit comments

Comments
 (0)