xcflushd 1.1.0 → 1.2.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 +4 -4
- data/CHANGELOG.md +12 -0
- data/Dockerfile +4 -3
- data/Gemfile.lock +1 -1
- data/lib/xcflushd/priority_auth_renewer.rb +24 -40
- data/lib/xcflushd/runner.rb +7 -1
- data/lib/xcflushd/storage.rb +5 -2
- data/lib/xcflushd/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19c512d589477a74d1ade15d47a120f089f8955d
|
4
|
+
data.tar.gz: 0d3b16a8a1127980a9e36f126855686fd2f3958c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a06128d9b86a58539faf979fa6456ad39f7be4e1fc85b2191983c534e417a7ab5d9af625ca4ac068bc6d0293c145c4030dd12eb8f3c5bbb5b5273db9bb73d53
|
7
|
+
data.tar.gz: c3fbc3c768d11fd0a00c6c7853d564541e7821015d9922588f93faf6d0125e671d53bed208ebdabd0d97fa1e430af61beb7bb08fa1e75d7c52bfcd4d913c587e
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## [1.2.0] - 2017-06-21
|
2
|
+
|
3
|
+
Note: this version requires Apicast-XC >= v1.3.0.
|
4
|
+
|
5
|
+
- The priority auth renewer now only publishes each response in the redis
|
6
|
+
pubsub channel once, unless there is an error while publishing.
|
7
|
+
We were publishing each response several times, but that was because of a
|
8
|
+
race condition caused by Apicast-XC that has been fixed. This change improves
|
9
|
+
performance a bit because it lowers the number of commands issued to Redis.
|
10
|
+
- Introduced minor changes in the Dockerfile that decrease the image size.
|
11
|
+
|
12
|
+
|
1
13
|
## [1.1.0] - 2017-05-02
|
2
14
|
- Switched from MRI to JRuby. our tests show that JRuby performs better than
|
3
15
|
MRI when there is a high number of calls to be made to 3scale's backend in a
|
data/Dockerfile
CHANGED
@@ -33,7 +33,7 @@ RUN echo "Acquire::http {No-Cache=True;};" > /etc/apt/apt.conf.d/no-cache \
|
|
33
33
|
&& chown -R ${USER_NAME}: ${USER_HOME} \
|
34
34
|
&& apt-get -y -q clean
|
35
35
|
|
36
|
-
RUN apt-get install -y -q openjdk-8-jre
|
36
|
+
RUN apt-get install -y -q openjdk-8-jre && apt-get -y -q clean
|
37
37
|
|
38
38
|
USER ${USER_NAME}
|
39
39
|
|
@@ -67,7 +67,7 @@ ARG BUILD_DEPS="libyaml-dev libreadline-dev libncurses-dev libffi-dev libgdbm3 l
|
|
67
67
|
USER root
|
68
68
|
RUN test -z "${BUILD_DEPS}" \
|
69
69
|
|| ( \
|
70
|
-
apt-get update && apt-get install -y -q ${BUILD_DEPS} \
|
70
|
+
apt-get update && apt-get install -y -q ${BUILD_DEPS} && apt-get -y -q clean \
|
71
71
|
)
|
72
72
|
|
73
73
|
WORKDIR ${APP_HOME}
|
@@ -81,7 +81,8 @@ RUN rbenv install -s \
|
|
81
81
|
&& gem update --system \
|
82
82
|
&& ( bundler --version || gem install bundler ) \
|
83
83
|
&& bundle config --global jobs `grep -c processor /proc/cpuinfo` \
|
84
|
-
&& bundle config --global cache_all true
|
84
|
+
&& bundle config --global cache_all true \
|
85
|
+
&& gem cleanup all
|
85
86
|
|
86
87
|
COPY Gemfile Gemfile.lock xcflushd.gemspec ${APP_HOME}/
|
87
88
|
COPY lib/xcflushd/version.rb ${APP_HOME}/lib/xcflushd/
|
data/Gemfile.lock
CHANGED
@@ -149,7 +149,7 @@ module Xcflushd
|
|
149
149
|
# in the auths that failed. Also, as we do not publish anything when
|
150
150
|
# there is an error, the subscriber waits until it timeouts.
|
151
151
|
# This is good enough for now, but there is room for improvement.
|
152
|
-
|
152
|
+
publish_auth(combination, metric_auth) if success
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
@@ -173,51 +173,35 @@ module Xcflushd
|
|
173
173
|
combination[:metric])
|
174
174
|
end
|
175
175
|
|
176
|
-
def
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
# if events happened in this order:
|
182
|
-
# 1) The request publishes the combination it needs in the requests
|
183
|
-
# channel.
|
184
|
-
# 2) A new task is not executed, because there is another renewing
|
185
|
-
# the same combination.
|
186
|
-
# 3) That task publishes the result.
|
187
|
-
# 4) The request subscribes to receive the result, but now it is
|
188
|
-
# too late.
|
189
|
-
# I cannot think of an easy way to solve this. There is some time
|
190
|
-
# between the moment the requests performs the publish and the
|
191
|
-
# subscribe actions. To mitigate the problem we can publish several
|
192
|
-
# times during some ms. We will see if this is good enough.
|
193
|
-
# Trade-off: Waiting long times between publishing attempts reduces the
|
194
|
-
# probability of triggering the problem described. However, it also makes
|
195
|
-
# incoming requests slow because tasks accumulate in the thread pool
|
196
|
-
# waiting.
|
197
|
-
publish_failures = 0
|
198
|
-
PUBLISH_WAIT_TIMES.each do |wait_time|
|
199
|
-
begin
|
200
|
-
publish_auth(combination, authorization)
|
201
|
-
rescue
|
202
|
-
publish_failures += 1
|
203
|
-
end
|
204
|
-
sleep(wait_time)
|
176
|
+
def authorization_message(authorization)
|
177
|
+
if authorization.authorized?
|
178
|
+
'1'.freeze
|
179
|
+
else
|
180
|
+
authorization.reason ? "0:#{authorization.reason}" : '0'.freeze
|
205
181
|
end
|
182
|
+
end
|
206
183
|
|
207
|
-
|
208
|
-
|
209
|
-
|
184
|
+
def publish_message(channel, msg)
|
185
|
+
wait = PUBLISH_WAIT_TIMES.each
|
186
|
+
|
187
|
+
begin
|
188
|
+
redis_pub.publish(channel, msg)
|
189
|
+
rescue => e
|
190
|
+
begin
|
191
|
+
sleep wait.next
|
192
|
+
rescue StopIteration
|
193
|
+
raise e
|
194
|
+
end
|
195
|
+
retry
|
210
196
|
end
|
211
197
|
end
|
212
198
|
|
213
199
|
def publish_auth(combination, authorization)
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
redis_pub.publish(channel_for_combination(combination), msg)
|
200
|
+
publish_message channel_for_combination(combination),
|
201
|
+
authorization_message(authorization)
|
202
|
+
rescue => e
|
203
|
+
logger.warn "cannot publish in priority channel " \
|
204
|
+
"for combination #{combination}: #{e}"
|
221
205
|
end
|
222
206
|
|
223
207
|
def currently_authorizing?(channel_msg)
|
data/lib/xcflushd/runner.rb
CHANGED
@@ -33,12 +33,18 @@ module Xcflushd
|
|
33
33
|
redis = Redis.new(host: redis_host, port: redis_port, driver: redis_driver)
|
34
34
|
storage = Storage.new(redis, @logger, StorageKeys)
|
35
35
|
|
36
|
+
# The 3scale client shows a warning when using provider keys, because
|
37
|
+
# they are deprecated in favor of service tokens. However, we need to
|
38
|
+
# continue using provider keys, so we set warn_deprecated to false to
|
39
|
+
# avoid generating unnecessary warnings.
|
36
40
|
threescale = ThreeScale::Client.new(provider_key: opts[:provider_key],
|
37
41
|
host: opts[:backend].host,
|
38
42
|
port: opts[:backend].port ||
|
39
43
|
(opts[:secure] ? 443 : 80),
|
40
44
|
secure: opts[:secure],
|
41
|
-
persistent: true
|
45
|
+
persistent: true,
|
46
|
+
warn_deprecated: false)
|
47
|
+
|
42
48
|
reporter = Reporter.new(threescale)
|
43
49
|
authorizer = Authorizer.new(threescale)
|
44
50
|
|
data/lib/xcflushd/storage.rb
CHANGED
@@ -155,8 +155,11 @@ module Xcflushd
|
|
155
155
|
logger.error(SOME_REPORTS_MISSING_ERROR)
|
156
156
|
else
|
157
157
|
keys.each_with_index do |key, i|
|
158
|
-
#
|
159
|
-
#
|
158
|
+
# hgetall returns {} for keys that do not exist. That can happen
|
159
|
+
# for 2 reasons:
|
160
|
+
# 1) Apicast-xc does not guarantee that a key in the set of cached
|
161
|
+
# reports will always exist.
|
162
|
+
# 2) We failed to rename the key in the previous step.
|
160
163
|
unless usages[i].empty?
|
161
164
|
service_id, creds = storage_keys.service_and_creds(key, suffix)
|
162
165
|
result << { service_id: service_id,
|
data/lib/xcflushd/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcflushd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alejandro Martinez Ruiz
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-06-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -265,7 +265,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
265
265
|
version: '0'
|
266
266
|
requirements: []
|
267
267
|
rubyforge_project:
|
268
|
-
rubygems_version: 2.6.
|
268
|
+
rubygems_version: 2.6.8
|
269
269
|
signing_key:
|
270
270
|
specification_version: 4
|
271
271
|
summary: Daemon for flushing XC reports to 3scale.
|