splitclient-rb 8.7.0 → 8.8.0
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2929d92bdc4d732f21bb8e104316555b0ca458c2eb21df7ecb957d6b1412d65
|
4
|
+
data.tar.gz: 2be266d8b0948a68faa96c01b24e964308616a32927e27dfb64e1a37f6afbff6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b35604f7de21d0a4a164f07ff42c7930c932977be704cef2d924d87561453a137f0a320fc48e4501f4eb8576fe4f11250062fd8383d5886d7368df6d1d570f36
|
7
|
+
data.tar.gz: 234c3dd2fd93e34f6348d51177676e950a38e0f628924294c1a72d31cb48e5ae80381a322d15cd7e8d651119c556dbc9b8e965c861ee386b79ff1c3d984c7d39
|
data/CHANGES.txt
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
CHANGES
|
2
2
|
|
3
|
+
8.8.0 (Sep 26, 2025)
|
4
|
+
- Added a maximum size payload when posting unique keys telemetry in batches
|
5
|
+
|
3
6
|
8.7.0 (Aug 1, 2025)
|
4
7
|
- Added a new optional argument to the client `getTreatment` methods to allow passing additional evaluation options, such as a map of properties to append to the generated impressions sent to Split backend. Read more in our docs.
|
5
8
|
|
@@ -14,9 +14,9 @@ module SplitIoClient
|
|
14
14
|
@filter_adapter = filter_adapter
|
15
15
|
@sender_adapter = sender_adapter
|
16
16
|
@cache = cache
|
17
|
-
@cache_max_size = config.unique_keys_cache_max_size
|
18
17
|
@max_bulk_size = config.unique_keys_bulk_size
|
19
18
|
@semaphore = Mutex.new
|
19
|
+
@keys_size = 0
|
20
20
|
end
|
21
21
|
|
22
22
|
def call
|
@@ -30,8 +30,9 @@ module SplitIoClient
|
|
30
30
|
@filter_adapter.add(feature_name, key)
|
31
31
|
|
32
32
|
add_or_update(feature_name, key)
|
33
|
+
@keys_size += 1
|
33
34
|
|
34
|
-
send_bulk_data if @
|
35
|
+
send_bulk_data if @keys_size >= @max_bulk_size
|
35
36
|
|
36
37
|
true
|
37
38
|
rescue StandardError => e
|
@@ -70,27 +71,73 @@ module SplitIoClient
|
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
74
|
+
def clear_cache
|
75
|
+
uniques = @cache.clone
|
76
|
+
keys_size = @keys_size
|
77
|
+
@cache.clear
|
78
|
+
@keys_size = 0
|
79
|
+
|
80
|
+
[uniques, keys_size]
|
81
|
+
end
|
82
|
+
|
73
83
|
def send_bulk_data
|
74
84
|
@semaphore.synchronize do
|
75
85
|
return if @cache.empty?
|
76
86
|
|
77
|
-
uniques =
|
78
|
-
@
|
79
|
-
|
80
|
-
if uniques.size <= @max_bulk_size
|
87
|
+
uniques, keys_size = clear_cache
|
88
|
+
if keys_size <= @max_bulk_size
|
81
89
|
@sender_adapter.record_uniques_key(uniques)
|
82
90
|
return
|
83
|
-
end
|
84
|
-
|
85
|
-
bulks = SplitIoClient::Utilities.split_bulk_to_send(uniques, uniques.size / @max_bulk_size)
|
86
91
|
|
87
|
-
bulks.each do |b|
|
88
|
-
@sender_adapter.record_uniques_key(b)
|
89
92
|
end
|
93
|
+
bulks = flatten_bulks(uniques)
|
94
|
+
bulks_to_post = group_bulks_by_max_size(bulks)
|
95
|
+
@sender_adapter.record_uniques_key(bulks_to_post)
|
90
96
|
end
|
91
97
|
rescue StandardError => e
|
92
98
|
@config.log_found_exception(__method__.to_s, e)
|
93
99
|
end
|
100
|
+
|
101
|
+
def group_bulks_by_max_size(bulks)
|
102
|
+
current_size = 0
|
103
|
+
bulks_to_post = Concurrent::Hash.new
|
104
|
+
bulks.each do |bulk|
|
105
|
+
key, value = bulk.first
|
106
|
+
if (value.size + current_size) > @max_bulk_size
|
107
|
+
@sender_adapter.record_uniques_key(bulks_to_post)
|
108
|
+
bulks_to_post = Concurrent::Hash.new
|
109
|
+
current_size = 0
|
110
|
+
end
|
111
|
+
bulks_to_post[key] = value
|
112
|
+
current_size += value.size
|
113
|
+
end
|
114
|
+
|
115
|
+
bulks_to_post
|
116
|
+
end
|
117
|
+
|
118
|
+
def flatten_bulks(uniques)
|
119
|
+
bulks = []
|
120
|
+
uniques.each_key do |unique_key|
|
121
|
+
bulks += check_keys_and_split_to_bulks(uniques[unique_key], unique_key)
|
122
|
+
end
|
123
|
+
|
124
|
+
bulks
|
125
|
+
end
|
126
|
+
|
127
|
+
def check_keys_and_split_to_bulks(value, key)
|
128
|
+
unique_updated = []
|
129
|
+
if value.size > @max_bulk_size
|
130
|
+
sub_bulks = SplitIoClient::Utilities.split_bulk_to_send(value, @max_bulk_size)
|
131
|
+
sub_bulks.each do |sub_bulk|
|
132
|
+
unique_updated << { key => sub_bulk.to_set }
|
133
|
+
end
|
134
|
+
return unique_updated
|
135
|
+
|
136
|
+
end
|
137
|
+
unique_updated << { key => value }
|
138
|
+
|
139
|
+
unique_updated
|
140
|
+
end
|
94
141
|
end
|
95
142
|
end
|
96
143
|
end
|
@@ -112,7 +112,7 @@ module SplitIoClient
|
|
112
112
|
@telemetry_service_url = opts[:telemetry_service_url] || SplitConfig.default_telemetry_service_url
|
113
113
|
|
114
114
|
@unique_keys_refresh_rate = SplitConfig.default_unique_keys_refresh_rate(@cache_adapter)
|
115
|
-
@unique_keys_cache_max_size = SplitConfig.default_unique_keys_cache_max_size
|
115
|
+
# @unique_keys_cache_max_size = SplitConfig.default_unique_keys_cache_max_size
|
116
116
|
@unique_keys_bulk_size = SplitConfig.default_unique_keys_bulk_size(@cache_adapter)
|
117
117
|
|
118
118
|
@counter_refresh_rate = SplitConfig.default_counter_refresh_rate(@cache_adapter)
|
@@ -292,7 +292,7 @@ module SplitIoClient
|
|
292
292
|
attr_accessor :on_demand_fetch_max_retries
|
293
293
|
|
294
294
|
attr_accessor :unique_keys_refresh_rate
|
295
|
-
attr_accessor :unique_keys_cache_max_size
|
295
|
+
#attr_accessor :unique_keys_cache_max_size
|
296
296
|
attr_accessor :unique_keys_bulk_size
|
297
297
|
|
298
298
|
attr_accessor :counter_refresh_rate
|
@@ -498,9 +498,9 @@ module SplitIoClient
|
|
498
498
|
900
|
499
499
|
end
|
500
500
|
|
501
|
-
def self.default_unique_keys_cache_max_size
|
502
|
-
30000
|
503
|
-
end
|
501
|
+
# def self.default_unique_keys_cache_max_size
|
502
|
+
# 30000
|
503
|
+
# end
|
504
504
|
|
505
505
|
def self.default_unique_keys_bulk_size(adapter)
|
506
506
|
return 2000 if adapter == :redis
|
@@ -38,16 +38,12 @@ module SplitIoClient
|
|
38
38
|
interval * random_factor
|
39
39
|
end
|
40
40
|
|
41
|
-
def split_bulk_to_send(
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
count += 1
|
48
|
-
end
|
49
|
-
rescue StandardError
|
50
|
-
[]
|
41
|
+
def split_bulk_to_send(items, divisions)
|
42
|
+
to_return = []
|
43
|
+
items.to_a.each_slice(divisions) {|bulk|
|
44
|
+
to_return.push(bulk.to_set)
|
45
|
+
}
|
46
|
+
to_return
|
51
47
|
end
|
52
48
|
end
|
53
49
|
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.
|
4
|
+
version: 8.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Split Software
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: allocation_stats
|