xcflushd 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|