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 +4 -4
- data/CHANGES.txt +3 -1
- data/Detailed-README.md +30 -0
- data/lib/cache/repositories/impressions/redis_repository.rb +4 -0
- data/lib/cache/stores/segment_store.rb +1 -0
- data/lib/cache/stores/split_store.rb +1 -0
- data/lib/splitclient-rb/clients/split_client.rb +4 -3
- data/lib/splitclient-rb/version.rb +1 -1
- data/lib/splitclient-rb.rb +0 -1
- data/splitclient-rb.gemspec +1 -1
- metadata +6 -7
- data/lib/cache/adapters/memory_adapters/sized_queue_adapter.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 223bd7fc20de406557f2f8a839ba8d85e27b4e52
|
4
|
+
data.tar.gz: 18ce388d744623aafcc90fb03cf2db3fc3b47900
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
@@ -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
|
-
|
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
|
|
data/lib/splitclient-rb.rb
CHANGED
@@ -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'
|
data/splitclient-rb.gemspec
CHANGED
@@ -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.
|
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-
|
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
|