lib/prometheus/client/helper/mmaped_file.rb in prometheus-client-mmap-0.7.0.beta17 vs lib/prometheus/client/helper/mmaped_file.rb in prometheus-client-mmap-0.7.0.beta18
- old
+ new
@@ -27,18 +27,14 @@
ensure
m.close
end
def ensure_process_exclusive_file(file_prefix = 'mmaped_file')
- path = nil
- filename_number = 0
- until path && Helper::MmapedFile.lock_to_process(path)
- filename = "#{file_prefix}_#{Prometheus::Client.pid}-#{filename_number}.db"
- path = File.join(Prometheus::Client.configuration.multiprocess_files_dir, filename)
- filename_number += 1
- end
- path
+ (0..Float::INFINITY).lazy
+ .map { |f_num| "#{file_prefix}_#{Prometheus::Client.pid}-#{f_num}.db" }
+ .map { |filename| File.join(Prometheus::Client.configuration.multiprocess_files_dir, filename) }
+ .find { |path| Helper::MmapedFile.lock_to_process(path) }
end
def open_process_exclusive_file(file_prefix = 'mmaped_file')
filename = Helper::MmapedFile.ensure_process_exclusive_file(file_prefix)
open(filename)
@@ -100,14 +96,10 @@
return unless lock_owner?
self.pid = 0
end
- def initial_mmap_file_size
- Prometheus::Client.configuration.initial_mmap_file_size
- end
-
def entries
return Enumerator.new {} if used.zero?
Enumerator.new do |yielder|
used_ = used # cache used to avoid unnecessary unpack operations
@@ -116,14 +108,15 @@
while pos < used_
data = slice(pos..-1)
encoded_len, = data.unpack('l')
padding_len = 8 - (encoded_len + 4) % 8
value_offset = 4 + encoded_len + padding_len
+ pos += value_offset
- yielder.yield data, encoded_len, value_offset
+ yielder.yield data, encoded_len, value_offset, pos
- pos += value_offset + 8
+ pos += 8
end
end
end
def add_entry(data, value)
@@ -147,9 +140,13 @@
def close
munmap
end
private
+
+ def initial_mmap_file_size
+ Prometheus::Client.configuration.initial_mmap_file_size
+ end
def pid_alive?(pid)
begin
Process.getpgid(pid)
true