prometheus-client-mmap 0.7.0.beta29 → 0.7.0.beta30

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 553a05d7d0b14439046cfbda874603af9b6ba6f6
4
- data.tar.gz: a1a202b9bffe768e978aaf9eef85c526b78afd2b
3
+ metadata.gz: baae77f6d273813515be523af6a16e159006f636
4
+ data.tar.gz: 60a044917b7edb908639a22df60727d85136297f
5
5
  SHA512:
6
- metadata.gz: 32f7f2f9fda00f570817ce0a0dbb47e713ef9f849a01f8c41b551e297e72a0872b94a816b346ee0635077cc33efe36504ad6be084be4f4d2ed6d3a4647f7f7eb
7
- data.tar.gz: ab1a83e5e0be8a7d860d7dcac6b073ca21f37360e8577e0b4f9fc60789c51d22a2728e068fb2aa186884592f516c1a2932c5d8164a6032f5d3ff93e13fb1c303
6
+ metadata.gz: 305cf2a73f788de59de593483847ecb105c8a79b6a98a9f308d1d02a3ac6263b141ae17a546756642cb8ab1e7f9dcaa94b6ae3a9edeeaffcd86628a9ffaf3106
7
+ data.tar.gz: d3df54b93d82293d7d4a66ca59811296e11b6543128fe7eb354248dd56fe977bfe071d11feb192dcc1247fc20e9dbbfbf2aa255602ff8afbf54233b6c4082684
@@ -26,22 +26,6 @@ module Prometheus
26
26
  self[0..3] = [value].pack('l')
27
27
  end
28
28
 
29
- def try_add_entry(data, value)
30
- self.used = START_POSITION if used.zero?
31
-
32
- # Pad to be 8-byte aligned.
33
- padded = data + (' ' * (8 - (data.length + 4) % 8))
34
- entry = [data.length, padded, value].pack("lA#{padded.length}d")
35
- used_ = used
36
-
37
- return false if (used_ + entry.length) > @size
38
-
39
- self[used_..used_ + entry.length] = entry
40
- self.used = used_ + entry.length
41
-
42
- true
43
- end
44
-
45
29
  def close
46
30
  munmap
47
31
  end
@@ -7,11 +7,10 @@ module Prometheus
7
7
  # A float protected by a mutex backed by a per-process mmaped file.
8
8
  class MmapedValue
9
9
  @@files = {}
10
- @@files_lock = Mutex.new
10
+ VALUE_LOCK = Mutex.new
11
11
  @@pid = -1
12
12
 
13
13
  def initialize(type, metric_name, name, labels, multiprocess_mode = '')
14
- @pid = Prometheus::Client.pid
15
14
  @file_prefix = type.to_s
16
15
  @metric_name = metric_name
17
16
  @name = name
@@ -20,7 +19,9 @@ module Prometheus
20
19
  @file_prefix += '_' + multiprocess_mode.to_s
21
20
  end
22
21
 
23
- self.class.reset_on_pid_change if self.class.pid_changed?
22
+ self.class.reset_on_pid_change
23
+ # initialize_file
24
+ @pid = -1
24
25
 
25
26
  @mutex = Mutex.new
26
27
  initialize_file
@@ -28,6 +29,8 @@ module Prometheus
28
29
 
29
30
  def increment(amount=1)
30
31
  @mutex.synchronize do
32
+ initialize_file if pid_changed?
33
+
31
34
  @value += amount
32
35
  write_value(@key, @value)
33
36
  @value
@@ -36,6 +39,8 @@ module Prometheus
36
39
 
37
40
  def set(value)
38
41
  @mutex.synchronize do
42
+ initialize_file if pid_changed?
43
+
39
44
  @value = value
40
45
  write_value(@key, @value)
41
46
  @value
@@ -44,41 +49,24 @@ module Prometheus
44
49
 
45
50
  def get
46
51
  @mutex.synchronize do
52
+ initialize_file if pid_changed?
47
53
  return @value
48
54
  end
49
55
  end
50
56
 
51
- def self.reset_on_pid_change
52
- @@files_lock.synchronize do
53
- if pid_changed?
54
- @@pid = Prometheus::Client.pid
55
- @@files = {}
56
- end
57
- end
58
- end
59
-
60
- def self.reinitialize_on_pid_change
61
- reset_on_pid_change
62
- ObjectSpace.each_object(MmapedValue, &:reinitialize)
63
- end
64
-
65
- def self.pid_changed?
66
- @@pid != Prometheus::Client.pid
67
- end
68
-
69
- def self.multiprocess
70
- true
57
+ def pid_changed?
58
+ @pid != Process.pid
71
59
  end
72
60
 
73
61
  def reinitialize
74
- if @pid != Prometheus::Client.pid
75
- @pid = Prometheus::Client.pid
76
- initialize_file
77
- end
62
+ initialize_file if pid_changed?
78
63
  end
79
64
 
80
65
  def initialize_file
81
- @@files_lock.synchronize do
66
+ VALUE_LOCK.synchronize do
67
+ return if @file && !pid_changed?
68
+
69
+ @pid = Process.pid
82
70
  unless @@files.has_key?(@file_prefix)
83
71
  unless @file.nil?
84
72
  @file.close
@@ -87,9 +75,7 @@ module Prometheus
87
75
 
88
76
  @@files[@file_prefix] = MmapedDict.new(mmaped_file)
89
77
  end
90
- end
91
78
 
92
- @mutex.synchronize do
93
79
  @file = @@files[@file_prefix]
94
80
  labelnames = []
95
81
  labelvalues = []
@@ -103,10 +89,33 @@ module Prometheus
103
89
  end
104
90
  end
105
91
 
92
+ def self.reset_on_pid_change
93
+ VALUE_LOCK.synchronize do
94
+ if pid_changed?
95
+ @@pid = Process.pid
96
+ @@files = {}
97
+ end
98
+ end
99
+ end
100
+
101
+ def self.reinitialize_on_pid_change
102
+ reset_on_pid_change
103
+ ObjectSpace.each_object(MmapedValue, &:reinitialize)
104
+ end
105
+
106
+ def self.pid_changed?
107
+ @@pid != Process.pid
108
+ end
109
+
110
+ def self.multiprocess
111
+ true
112
+ end
113
+
106
114
  private
107
115
 
108
116
  def write_value(key, val)
109
117
  @file.write_value(key, val)
118
+
110
119
  rescue StandardError => e
111
120
  Prometheus::Client.logger.warn("writing value to #{@file.path} failed with #{e}")
112
121
  Prometheus::Client.logger.debug(e.backtrace.join("\n"))
@@ -1,5 +1,5 @@
1
1
  module Prometheus
2
2
  module Client
3
- VERSION = '0.7.0.beta29'.freeze
3
+ VERSION = '0.7.0.beta30'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-client-mmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0.beta29
4
+ version: 0.7.0.beta30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Schmidt
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-11-16 00:00:00.000000000 Z
12
+ date: 2017-11-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mmap2