ff-ruby-server-sdk 1.4.1 → 1.4.2

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
  SHA256:
3
- metadata.gz: e2bcc6b6312ee2462bbf6a2a689ddee47c6000bc010db561eb72b5204a7c8d8f
4
- data.tar.gz: 7058cd57f6e72cb2c649b51071eaebed405ff3aac691f4aa186a096da70692b9
3
+ metadata.gz: d40a21b8332b96f4c3f507f2adece4bc12a9475fb87518323c3b79f959d2782a
4
+ data.tar.gz: 4be776d630a6c97cc563e801b74b8c25e6250ea3611fa83b6a1b26274ead4d06
5
5
  SHA512:
6
- metadata.gz: 85ff6d9cda7f5579a7eeedce0f7ea293ccf95ff426b413f53aa09c22a0caa4bc1890607c63d67a0b3c58295d537f830a85e81ae45a2a6afafdd4d0521daa60df
7
- data.tar.gz: '089aeb5abb536d43e118bade66a80fde7b70e1b74ce1a96fa32d53d7a4a61f08ec7b4c5d35a987e60f11fc4a8791b7233bad01c742bfc4ebc5545a738a13038d'
6
+ metadata.gz: d11cd5ae4daddce986eae1faa3ca10d16e68a0c708e4e15131d0ee74883e67bac88af39cedfa1ee5497f7ac916bfd270bd8067bcbf71c3e90de242520ff49cd1
7
+ data.tar.gz: bfc9bc6662bc500c25281c36bb9d8352ba16bdf8ad9f43c06b44074aa4ff791e2ddb8e1e84b1796bd4fb10bfe819190d6eb33bde7ac315eff02e918784653fcb
@@ -1,56 +1,23 @@
1
-
1
+ require 'singleton'
2
2
  require_relative "../../generated/lib/openapi_client"
3
3
  require_relative "../common/closeable"
4
4
  require_relative "inner_client"
5
5
 
6
6
  class CfClient < Closeable
7
-
8
- # Static:
9
- class << self
10
-
11
- @@instance = CfClient.new
12
-
13
- def instance
14
-
15
- @@instance
7
+ include Singleton
8
+
9
+ def init(api_key, config, connector = nil)
10
+ # Only initialize if @client is nil to avoid reinitialization
11
+ unless @client
12
+ @config = config || ConfigBuilder.new.build
13
+ @client = InnerClient.new(api_key, @config, connector)
14
+ @config.logger.debug "Client initialized with API key: #{api_key}"
16
15
  end
16
+ @client
17
17
  end
18
18
 
19
- # Static - End
20
-
21
- def initialize(api_key = nil, config = nil, connector = nil)
22
-
23
- if config == nil
24
-
25
- @config = ConfigBuilder.new.build
26
- else
27
-
28
- @config = config
29
- end
30
-
31
- @client = InnerClient.new(api_key, config, connector)
32
-
33
- @config.logger.debug "Client (1): " + @client.to_s
34
- end
35
-
36
- def init(api_key = nil, config = nil, connector = nil)
37
-
38
- if @client == nil
39
-
40
- @config = config
41
-
42
- @client = InnerClient.new(
43
-
44
- api_key = api_key,
45
- config = config,
46
- connector = connector
47
- )
48
-
49
- @config.logger.debug "Client (2): " + @client.to_s
50
- end
51
- end
52
19
 
53
- def wait_for_initialization(timeout_ms: nil)
20
+ def wait_for_initialization(timeout_ms: nil)
54
21
  if @client != nil
55
22
  @client.wait_for_initialization(timeout: timeout_ms)
56
23
  end
@@ -78,6 +78,8 @@ class MetricsProcessor < Closeable
78
78
 
79
79
  @executor = Concurrent::FixedThreadPool.new(10)
80
80
 
81
+ # Used for locking the evalution and target metrics maps before we clone them
82
+ @metric_maps_mutex = Mutex.new
81
83
  @evaluation_metrics = FrequencyMap.new
82
84
  @target_metrics = Concurrent::Map.new
83
85
 
@@ -181,21 +183,27 @@ class MetricsProcessor < Closeable
181
183
  end
182
184
 
183
185
  def send_data_and_reset_cache(evaluation_metrics_map, target_metrics_map)
184
- # Clone and clear evaluation metrics map
186
+
185
187
  evaluation_metrics_map_clone = Concurrent::Map.new
188
+ target_metrics_map_clone = Concurrent::Map.new
186
189
 
187
- evaluation_metrics_map.each_pair do |key, value|
188
- evaluation_metrics_map_clone[key] = value
189
- end
190
+ # A single lock is used to synchronise access to both the evaluation and target metrics maps.
191
+ # While separate locks could be applied to each map individually, we want an interval's eval/target
192
+ # metrics to be processed in an atomic unit.
193
+ @metric_maps_mutex.synchronize do
194
+ # Clone and clear evaluation metrics map
195
+ evaluation_metrics_map.each_pair do |key, value|
196
+ evaluation_metrics_map_clone[key] = value
197
+ end
190
198
 
191
- evaluation_metrics_map.clear
192
- target_metrics_map_clone = Concurrent::Map.new
199
+ evaluation_metrics_map.clear
193
200
 
194
- target_metrics_map.each_pair do |key, value|
195
- target_metrics_map_clone[key] = value
196
- end
201
+ target_metrics_map.each_pair do |key, value|
202
+ target_metrics_map_clone[key] = value
203
+ end
197
204
 
198
- target_metrics_map.clear
205
+ target_metrics_map.clear
206
+ end
199
207
 
200
208
  @evaluation_warning_issued.make_false
201
209
  @target_warning_issued.make_false
@@ -5,7 +5,7 @@ module Ff
5
5
  module Server
6
6
  module Sdk
7
7
 
8
- VERSION = "1.4.1"
8
+ VERSION = "1.4.2"
9
9
  end
10
10
  end
11
11
  end
data/scripts/sdk_specs.sh CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/bin/bash
2
2
 
3
3
  export ff_ruby_sdk="ff-ruby-server-sdk"
4
- export ff_ruby_sdk_version="1.4.1"
4
+ export ff_ruby_sdk_version="1.4.2"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ff-ruby-server-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - 'Miloš Vasić, cyr.: Милош Васић'