splitclient-rb 8.3.1 → 8.3.2.pre.rc2

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
  SHA256:
3
- metadata.gz: 28b17d201426172454ca4aafc72ffa49363c20386fb5e6515e1e734d6e915f18
4
- data.tar.gz: 473d7bf15d91b38d18a05006c0ebee6c013319add4153ac40245f674398ba5d0
3
+ metadata.gz: 3e0fe5d6b573015bd83ed8d8c9d2a50d61f312d436b36b166420e20fa4ea6541
4
+ data.tar.gz: ab4003f1bb7ec13437da9804326075ae8d71ee0a613e6037c737076a3b8d45c1
5
5
  SHA512:
6
- metadata.gz: e9c0aa0c613fb3abb35bda295ad1a9726e9ecc994b64d909b8ea12fa9b63f950785c2c46afb1592a8405871370e1dadc3ffed9e874781752a572209238b032de
7
- data.tar.gz: 412dc67a3514a67def649c74db278cb3c006b8bcfbebc9cc1b231f9c9d7e565754e2b1dcc2729e1eabce33818fb2d1311d9bbcff96f715bab55b0a5413ee2358
6
+ metadata.gz: f8ccb4279ea5eef142f7d78633c98d7cd27b6d16823b4bfe821659766d34a09ed892e80f0e9037fe99b3305bb69a288b8ed83799e5811e6005d7a1d154b8db96
7
+ data.tar.gz: f724d7499c992d3b21f106cac2f875abe746e1fe0e3d4a95753d1895069a13d4b521dd611d89c7b8dfc94e14ff6e3168192eb68385ede4b28ccb4228b475a085
@@ -29,6 +29,10 @@ module SplitIoClient
29
29
  @adapter.clear
30
30
  end
31
31
 
32
+ def empty?
33
+ @adapter.empty?
34
+ end
35
+
32
36
  def batch
33
37
  return [] if @config.events_queue_size.zero?
34
38
 
@@ -25,6 +25,10 @@ module SplitIoClient
25
25
  @config.log_found_exception(__method__.to_s, e)
26
26
  end
27
27
 
28
+ def empty?
29
+ @repository.empty?
30
+ end
31
+
28
32
  protected
29
33
 
30
34
  def metadata
@@ -5,7 +5,32 @@ module SplitIoClient
5
5
  module Repositories
6
6
  class SplitsRepository < Repository
7
7
  attr_reader :adapter
8
-
8
+ DEFAULT_CONDITIONS_TEMPLATE = [{
9
+ conditionType: "ROLLOUT",
10
+ matcherGroup: {
11
+ combiner: "AND",
12
+ matchers: [
13
+ {
14
+ keySelector: nil,
15
+ matcherType: "ALL_KEYS",
16
+ negate: false,
17
+ userDefinedSegmentMatcherData: nil,
18
+ whitelistMatcherData: nil,
19
+ unaryNumericMatcherData: nil,
20
+ betweenMatcherData: nil,
21
+ dependencyMatcherData: nil,
22
+ booleanMatcherData: nil,
23
+ stringMatcherData: nil
24
+ }]
25
+ },
26
+ partitions: [
27
+ {
28
+ treatment: "control",
29
+ size: 100
30
+ }
31
+ ],
32
+ label: "unsupported matcher type"
33
+ }]
9
34
  def initialize(config, flag_sets_repository, flag_set_filter)
10
35
  super(config)
11
36
  @tt_cache = {}
@@ -155,6 +180,10 @@ module SplitIoClient
155
180
  remove_from_flag_sets(existing_split)
156
181
  end
157
182
 
183
+ if check_undefined_matcher(split)
184
+ @config.logger.warn("Feature Flag #{split[:name]} has undefined matcher, setting conditions to default template.")
185
+ split[:conditions] = SplitsRepository::DEFAULT_CONDITIONS_TEMPLATE
186
+ end
158
187
  if !split[:sets].nil?
159
188
  for flag_set in split[:sets]
160
189
  if !@flag_sets.flag_set_exist?(flag_set)
@@ -170,6 +199,18 @@ module SplitIoClient
170
199
  @adapter.set_string(namespace_key(".split.#{split[:name]}"), split.to_json)
171
200
  end
172
201
 
202
+ def check_undefined_matcher(split)
203
+ for condition in split[:conditions]
204
+ for matcher in condition[:matcherGroup][:matchers]
205
+ if !SplitIoClient::Condition.instance_methods(false).map(&:to_s).include?("matcher_#{matcher[:matcherType].downcase}")
206
+ @config.logger.error("Detected undefined matcher #{matcher[:matcherType].downcase} in feature flag #{split[:name]}")
207
+ return true
208
+ end
209
+ end
210
+ end
211
+ return false
212
+ end
213
+
173
214
  def remove_feature_flag(split)
174
215
  decrease_tt_name_count(split[:trafficTypeName])
175
216
  remove_from_flag_sets(split)
@@ -96,7 +96,16 @@ module SplitIoClient
96
96
 
97
97
  def destroy
98
98
  @config.logger.info('Split client shutdown started...') if @config.debug_enabled
99
-
99
+ if !@config.cache_adapter.is_a?(SplitIoClient::Cache::Adapters::RedisAdapter) && @config.impressions_mode != :none &&
100
+ (!@impressions_repository.empty? || !@events_repository.empty?)
101
+ @config.logger.debug("Impressions and/or Events cache is not empty")
102
+ # Adding small delay to ensure sender threads are fully running
103
+ sleep(0.1)
104
+ if !@config.threads.key?(:impressions_sender) || !@config.threads.key?(:events_sender)
105
+ @config.logger.debug("Periodic data recording thread has not started yet, waiting for service startup.")
106
+ @config.threads[:start_sdk].join(5) if @config.threads.key?(:start_sdk)
107
+ end
108
+ end
100
109
  @config.threads.select { |name, thread| name.to_s.end_with? 'sender' }.values.each do |thread|
101
110
  thread.raise(SplitIoClient::SDKShutdownException)
102
111
  thread.join
@@ -14,8 +14,8 @@ module SplitIoClient
14
14
  @telemetry_runtime_producer = telemetry_runtime_producer
15
15
  @status_queue = status_queue
16
16
  @publisher_available = Concurrent::AtomicBoolean.new(true)
17
- @publishers_pri = Concurrent::AtomicFixnum.new
18
- @publishers_sec = Concurrent::AtomicFixnum.new
17
+ @publishers_pri = Concurrent::AtomicFixnum.new(2)
18
+ @publishers_sec = Concurrent::AtomicFixnum.new(2)
19
19
  end
20
20
 
21
21
  def handle_incoming_occupancy_event(event)
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '8.3.1'
2
+ VERSION = '8.3.2.pre.rc2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: splitclient-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.3.1
4
+ version: 8.3.2.pre.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Split Software
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-25 00:00:00.000000000 Z
11
+ date: 2024-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: allocation_stats
@@ -583,9 +583,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
583
583
  version: 2.5.0
584
584
  required_rubygems_version: !ruby/object:Gem::Requirement
585
585
  requirements:
586
- - - ">="
586
+ - - ">"
587
587
  - !ruby/object:Gem::Version
588
- version: '0'
588
+ version: 1.3.1
589
589
  requirements: []
590
590
  rubygems_version: 3.2.3
591
591
  signing_key: