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

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