prometheus-client-mmap 0.7.0.beta16 → 0.7.0.beta17
Sign up to get free protection for your applications and to get access to all the features.
- 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
|