prometheus-client-mmap 0.7.0.beta16 → 0.7.0.beta17
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 +4 -4
- data/lib/prometheus/client/helper/mmaped_file.rb +48 -37
- data/lib/prometheus/client/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a830232952d5753fc160f570cc962602f35b219b
|
4
|
+
data.tar.gz: 33183db099150ced78e22ff071cbde0730a1f993
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2f6b8fba44ce2760d0dd44a271718024b622cb21387590316c2de0590b895d4ce120c86b2e98ada39ceb2e3c3eb7fccacc96ceeb867ab21de4364e5db92faaa
|
7
|
+
data.tar.gz: c024e67d7f75e52a45b00791a481bb2ee5f99aa5f4b52b73b27f4e57ee54ae25cae35e3f6c6ebab84ceb4da0532cbddf921f551f18e5161489e483659e8df70c
|
@@ -5,6 +5,46 @@ module Prometheus
|
|
5
5
|
module Client
|
6
6
|
module Helper
|
7
7
|
class MmapedFile < Mmap
|
8
|
+
class << self
|
9
|
+
def open_readonly(filepath)
|
10
|
+
MmapedFile.new(filepath, 'r', Mmap::MAP_PRIVATE)
|
11
|
+
end
|
12
|
+
|
13
|
+
def open(filepath)
|
14
|
+
MmapedFile.new(filepath, 'rw', Mmap::MAP_SHARED)
|
15
|
+
end
|
16
|
+
|
17
|
+
def lock_to_process(filepath)
|
18
|
+
m = open(filepath)
|
19
|
+
if m.lock_to_process
|
20
|
+
Kernel.at_exit do
|
21
|
+
open(filepath).unlock
|
22
|
+
end
|
23
|
+
true
|
24
|
+
else
|
25
|
+
false
|
26
|
+
end
|
27
|
+
ensure
|
28
|
+
m.close
|
29
|
+
end
|
30
|
+
|
31
|
+
def ensure_process_exclusive_file(file_prefix = 'mmaped_file')
|
32
|
+
path = nil
|
33
|
+
filename_number = 0
|
34
|
+
until path && Helper::MmapedFile.lock_to_process(path)
|
35
|
+
filename = "#{file_prefix}_#{Prometheus::Client.pid}-#{filename_number}.db"
|
36
|
+
path = File.join(Prometheus::Client.configuration.multiprocess_files_dir, filename)
|
37
|
+
filename_number += 1
|
38
|
+
end
|
39
|
+
path
|
40
|
+
end
|
41
|
+
|
42
|
+
def open_process_exclusive_file(file_prefix = 'mmaped_file')
|
43
|
+
filename = Helper::MmapedFile.ensure_process_exclusive_file(file_prefix)
|
44
|
+
open(filename)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
8
48
|
MINIMUM_SIZE = 8
|
9
49
|
attr_reader :filepath, :size
|
10
50
|
|
@@ -36,7 +76,7 @@ module Prometheus
|
|
36
76
|
end
|
37
77
|
|
38
78
|
def locked_to_process?
|
39
|
-
pid > 0
|
79
|
+
pid > 0 && pid_alive?(pid)
|
40
80
|
end
|
41
81
|
|
42
82
|
def lock_owner?
|
@@ -108,43 +148,14 @@ module Prometheus
|
|
108
148
|
munmap
|
109
149
|
end
|
110
150
|
|
111
|
-
|
112
|
-
def open_readonly(filepath)
|
113
|
-
MmapedFile.new(filepath, 'r', Mmap::MAP_PRIVATE)
|
114
|
-
end
|
115
|
-
|
116
|
-
def open(filepath)
|
117
|
-
MmapedFile.new(filepath, 'rw', Mmap::MAP_SHARED)
|
118
|
-
end
|
119
|
-
|
120
|
-
def lock_to_process(filepath)
|
121
|
-
m = open(filepath)
|
122
|
-
if m.lock_to_process
|
123
|
-
Kernel.at_exit do
|
124
|
-
open(filepath).unlock
|
125
|
-
end
|
126
|
-
true
|
127
|
-
else
|
128
|
-
false
|
129
|
-
end
|
130
|
-
ensure
|
131
|
-
m.close
|
132
|
-
end
|
133
|
-
|
134
|
-
def ensure_process_exclusive_file(file_prefix = 'mmaped_file')
|
135
|
-
path = nil
|
136
|
-
filename_number = 0
|
137
|
-
until path && Helper::MmapedFile.lock_to_process(path)
|
138
|
-
filename = "#{file_prefix}_#{Prometheus::Client.pid}-#{filename_number}.db"
|
139
|
-
path = File.join(Prometheus::Client.configuration.multiprocess_files_dir, filename)
|
140
|
-
filename_number += 1
|
141
|
-
end
|
142
|
-
path
|
143
|
-
end
|
151
|
+
private
|
144
152
|
|
145
|
-
|
146
|
-
|
147
|
-
|
153
|
+
def pid_alive?(pid)
|
154
|
+
begin
|
155
|
+
Process.getpgid(pid)
|
156
|
+
true
|
157
|
+
rescue Errno::ESRCH
|
158
|
+
false
|
148
159
|
end
|
149
160
|
end
|
150
161
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prometheus-client-mmap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.0.
|
4
|
+
version: 0.7.0.beta17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Schmidt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mmap2
|