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

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 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