splitclient-rb 3.2.4.pre.rc2 → 3.2.4.pre.rc3

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: 4f11642bc9c67b056c263522562fc62fcbbe4afb
4
- data.tar.gz: 42b81c78e59f1003b0ebf9d5bee841369b5a97f5
3
+ metadata.gz: 223bd7fc20de406557f2f8a839ba8d85e27b4e52
4
+ data.tar.gz: 18ce388d744623aafcc90fb03cf2db3fc3b47900
5
5
  SHA512:
6
- metadata.gz: b6264ad8c6f755169f01e763baa81451ebece87a0610460561ef18026d29ddafe768f1166577f16d8c5def5cf7ca3db6a93d2cabda5b053bfc76964260b351a7
7
- data.tar.gz: 717d297e6483ab4c59e512787b7ad5f959c36ad66b7574114072918825b91bc43d87a9ae6126421181e343940923599552d08ca63f9e085679f5fea3b89338e9
6
+ metadata.gz: fd7ef95547add97314006955983b49c14f51fa0e4886601ef8c3bfb0b7c23b842074e774a083523a0722718214b0087d5f8465448034c230ca5ecfc7451a2163
7
+ data.tar.gz: d61aaabb2ec095d7fbcd7d32d6e975362a12ad116f2768fb62c6e1f07ae70d19a684996c2150a256fbd050f1f6a105bcda94c04a61696c4fb24651dc36e9bba3
data/CHANGES.txt CHANGED
@@ -1,7 +1,9 @@
1
-
2
1
  3.2.4
3
2
  - Fix Faraday compability issue (now compatible with Faraday 0.8.9)
4
3
  - Provide an interface to run SplitAdapter(start and resume), can be used to resurrect threads in Unicorn and Passenger servers
4
+ - Allow passing non-string values to get_treatment/get_treatments
5
+ - Better logging when returning CONTROL and label:Exception as well as when restarting threads
6
+ - Add exception logging when failed to clear impressions keys or fetch impressions keys
5
7
 
6
8
  3.2.3
7
9
  - Fix Redis namespace issue to align with the spec
data/Detailed-README.md CHANGED
@@ -229,6 +229,36 @@ rescue SplitIoClient::SDKBlockerTimeoutExpiredException
229
229
  end
230
230
  ```
231
231
 
232
+ #### Unicorn
233
+
234
+ When using Unicorn without Redis (i.e. in memory mode) it's highly recommended to include the startup code above inside Unicorn's `after_fork` hook:
235
+
236
+ *unicorn.rb*
237
+ ```ruby
238
+ # Unicorn configuration
239
+ after_fork do
240
+ options = {
241
+ connection_timeout: 10,
242
+ read_timeout: 5,
243
+ features_refresh_rate: 120,
244
+ segments_refresh_rate: 120,
245
+ metrics_refresh_rate: 360,
246
+ impressions_refresh_rate: 360,
247
+ logger: Logger.new('logfile.log'),
248
+ cache_adapter: :redis,
249
+ mode: :standalone,
250
+ redis_url: 'redis://127.0.0.1:6379/0'
251
+ }
252
+ begin
253
+ split_client = SplitIoClient::SplitFactoryBuilder.build('YOUR_API_KEY', options).client
254
+ rescue SplitIoClient::SDKBlockerTimeoutExpiredException
255
+ # Some arbitrary actions
256
+ end
257
+ end
258
+ ```
259
+
260
+ When initializing the SDK this way, SDK will only run HTTP requests from workers, not master process.
261
+
232
262
  #### IMPORTANT
233
263
 
234
264
  For now, SDK does not support both `producer` mode and `ready`. You must either run SDK in `standalone` mode, or do not use `ready` option.
@@ -59,6 +59,8 @@ module SplitIoClient
59
59
  end
60
60
 
61
61
  impressions
62
+ rescue StandardError => e
63
+ @config.logger.error("Exception while clearing impressions cache: #{e}")
62
64
  end
63
65
 
64
66
  private
@@ -66,6 +68,8 @@ module SplitIoClient
66
68
  # Get all sets by prefix
67
69
  def impression_keys
68
70
  @adapter.find_sets_by_prefix("#{@config.redis_namespace}/*/impressions.*")
71
+ rescue StandardError => e
72
+ @config.logger.error("Exception while fetching impression_keys: #{e}")
69
73
  end
70
74
  end
71
75
  end
@@ -30,6 +30,7 @@ module SplitIoClient
30
30
 
31
31
  def segments_thread
32
32
  @sdk_blocker.segments_thread = Thread.new do
33
+ @config.logger.info('Starting segments fetcher service')
33
34
  @config.block_until_ready > 0 ? blocked_store : unblocked_store
34
35
  end
35
36
  end
@@ -30,6 +30,7 @@ module SplitIoClient
30
30
 
31
31
  def splits_thread
32
32
  @sdk_blocker.splits_thread = Thread.new do
33
+ @config.logger.info('Starting splits fetcher service')
33
34
  loop do
34
35
  store_splits
35
36
 
@@ -67,6 +67,7 @@ module SplitIoClient
67
67
  split = multiple ? split_data : @splits_repository.get_split(split_name)
68
68
 
69
69
  if split.nil?
70
+ @config.logger.debug("split_name: #{split_name} does not exist. Returning CONTROL")
70
71
  return parsed_treatment(multiple, treatment_label_change_number)
71
72
  else
72
73
  treatment_label_change_number = SplitIoClient::Engine::Parser::SplitTreatment.new(@segments_repository).call(
@@ -107,9 +108,9 @@ module SplitIoClient
107
108
  def keys_from_key(key)
108
109
  case key.class.to_s
109
110
  when 'Hash'
110
- key.values_at(:bucketing_key, :matching_key)
111
- when 'String'
112
- [nil, key]
111
+ key.values_at(:bucketing_key, :matching_key).map { |k| k.nil? ? nil : k.to_s }
112
+ else
113
+ [nil, key].map { |k| k.nil? ? nil : k.to_s }
113
114
  end
114
115
  end
115
116
 
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '3.2.4-rc2'
2
+ VERSION = '3.2.4-rc3'
3
3
  end
@@ -3,7 +3,6 @@ require 'splitclient-rb/version'
3
3
  require 'exceptions/sdk_blocker_timeout_expired_exception'
4
4
  require 'cache/adapters/memory_adapters/map_adapter'
5
5
  require 'cache/adapters/memory_adapters/queue_adapter'
6
- require 'cache/adapters/memory_adapters/sized_queue_adapter'
7
6
  require 'cache/adapters/memory_adapter'
8
7
  require 'cache/adapters/redis_adapter'
9
8
  require 'cache/repositories/repository'
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_runtime_dependency "json", "~> 1.8"
32
32
  spec.add_runtime_dependency "thread_safe"
33
- spec.add_runtime_dependency "concurrent-ruby"
33
+ spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
34
34
  spec.add_runtime_dependency "faraday"
35
35
  spec.add_runtime_dependency "faraday-http-cache"
36
36
  spec.add_runtime_dependency "faraday_middleware"
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: 3.2.4.pre.rc2
4
+ version: 3.2.4.pre.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Split Software
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-02 00:00:00.000000000 Z
11
+ date: 2017-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -154,16 +154,16 @@ dependencies:
154
154
  name: concurrent-ruby
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ">="
157
+ - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '0'
159
+ version: '1.0'
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ">="
164
+ - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '0'
166
+ version: '1.0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: faraday
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -255,7 +255,6 @@ files:
255
255
  - lib/cache/adapters/memory_adapter.rb
256
256
  - lib/cache/adapters/memory_adapters/map_adapter.rb
257
257
  - lib/cache/adapters/memory_adapters/queue_adapter.rb
258
- - lib/cache/adapters/memory_adapters/sized_queue_adapter.rb
259
258
  - lib/cache/adapters/redis_adapter.rb
260
259
  - lib/cache/repositories/impressions/memory_repository.rb
261
260
  - lib/cache/repositories/impressions/redis_repository.rb
@@ -1,38 +0,0 @@
1
- module SplitIoClient
2
- module Cache
3
- module Adapters
4
- module MemoryAdapters
5
- # Memory adapter implementation, which stores everything inside sized queue
6
- class SizedQueueAdapter
7
- def initialize(size)
8
- @size = size
9
- @queue = SizedQueue.new(queue_size)
10
- end
11
-
12
- # Adds data to queue in non-blocking mode
13
- def add_to_queue(data)
14
- # IMPORTANT: this requires Ruby >= 2.2, consider changing implementation
15
- @queue.push(data, true)
16
- end
17
-
18
- # Get all items from the queue
19
- def clear
20
- items = []
21
-
22
- loop { items << @queue.pop(true) }
23
- rescue ThreadError
24
- # Last queue item reached
25
- items
26
- end
27
-
28
- private
29
-
30
- # Return 1 to prevent an exception
31
- def queue_size
32
- @size <= 0 ? 1 : @size
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end