fluent-plugin-gcloud-pubsub-custom 0.4.1 → 0.4.2

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
  SHA1:
3
- metadata.gz: ce4671f1f14d950d6c5eed9b5c86fab28c0c0e4e
4
- data.tar.gz: d6b615131cdf7f4a3e64d4f37918f22aafe18c57
3
+ metadata.gz: b6a3dc4854e4b3d760150f6ba6e46513fd432d82
4
+ data.tar.gz: e79d3538b84e949c8754c4c40f429af5ccfb9b42
5
5
  SHA512:
6
- metadata.gz: 5e0d49b85278cf8f9faa5fbf9f490930131e769130fb7124aa8cf6991eedb0fc68c5ece236c54047f117ce698de75fa225279e760f1a33e1d7be2fd9261aa766
7
- data.tar.gz: a83690434bc3b5ee2a45c2bd0a244fbb1f21ec0d81516fe42661a33f0d1e08452b4df5ead99201bf2b27ba51125b5fe15f9eeec23e344d05ef06ae3a10eae704
6
+ metadata.gz: 611d5fc134b67c6f51740beeab19fa2ee0fe1a001399fb3cbddb64b71a0187b5bcab8000dac1a007d0758de0d9923f838b424a8e95098e4c95783d6a192141e5
7
+ data.tar.gz: 8cd2edd9f32f283ba06686a102ee66af5a7c9d86811a86fe38491d336d431f2c85fc1caa21b387cc9328678897c380b1a00d7fca9610b2d412bf5c97542beb22
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## ChangeLog
2
2
 
3
+ ### Release 0.4.2 - 2017/02/03
4
+
5
+ - Make retry to get topic/subscription when Pub/Sub API returns 50x code
6
+
3
7
  ### Release 0.4.1 - 2017/02/02
4
8
 
5
9
  - Bump up google-cloud-pubsub to v0.22.x
@@ -7,7 +7,7 @@ Gem::Specification.new do |gem|
7
7
  gem.license = "MIT"
8
8
  gem.homepage = "https://github.com/mia-0032/fluent-plugin-gcloud-pubsub-custom"
9
9
  gem.summary = gem.description
10
- gem.version = "0.4.1"
10
+ gem.version = "0.4.2"
11
11
  gem.authors = ["Yoshihiro MIYAI"]
12
12
  gem.email = "msparrow17@gmail.com"
13
13
  gem.has_rdoc = false
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
18
18
 
19
19
  gem.add_runtime_dependency "fluentd", [">= 0.10.58", "< 2"]
20
20
  gem.add_runtime_dependency "google-cloud-pubsub", "~> 0.22.0"
21
+ gem.add_runtime_dependency "retryable", "~> 2.0"
21
22
 
22
23
  gem.add_development_dependency "bundler"
23
24
  gem.add_development_dependency "rake"
@@ -1,4 +1,5 @@
1
1
  require 'google/cloud/pubsub'
2
+ require 'retryable'
2
3
 
3
4
  module Fluent
4
5
  module GcloudPubSub
@@ -8,11 +9,15 @@ module Fluent
8
9
  end
9
10
 
10
11
  class Publisher
11
- def initialize(project, key, topic, autocreate_topic)
12
- pubsub = Google::Cloud::Pubsub.new project: project, keyfile: key
12
+ RETRY_COUNT = 5
13
+ RETRYABLE_ERRORS = [Google::Cloud::UnavailableError, Google::Cloud::DeadlineExceededError, Google::Cloud::InternalError]
13
14
 
14
- @client = pubsub.topic topic, autocreate: autocreate_topic
15
- raise Error.new "topic:#{topic} does not exist." if @client.nil?
15
+ def initialize(project, key, topic_name, autocreate_topic)
16
+ Retryable.retryable(tries: RETRY_COUNT, on: RETRYABLE_ERRORS) do
17
+ pubsub = Google::Cloud::Pubsub.new project: project, keyfile: key
18
+ @client = pubsub.topic topic_name, autocreate: autocreate_topic
19
+ end
20
+ raise Error.new "topic:#{topic_name} does not exist." if @client.nil?
16
21
  end
17
22
 
18
23
  def publish(messages)
@@ -27,11 +32,16 @@ module Fluent
27
32
  end
28
33
 
29
34
  class Subscriber
30
- def initialize(project, key, topic, subscription)
31
- pubsub = Google::Cloud::Pubsub.new project: project, keyfile: key
32
- topic = pubsub.topic topic
33
- @client = topic.subscription subscription
34
- raise Error.new "subscription:#{subscription} does not exist." if @client.nil?
35
+ RETRY_COUNT = 5
36
+ RETRYABLE_ERRORS = [Google::Cloud::UnavailableError, Google::Cloud::DeadlineExceededError, Google::Cloud::InternalError]
37
+
38
+ def initialize(project, key, topic_name, subscription_name)
39
+ Retryable.retryable(tries: RETRY_COUNT, on: RETRYABLE_ERRORS) do
40
+ pubsub = Google::Cloud::Pubsub.new project: project, keyfile: key
41
+ topic = pubsub.topic topic_name
42
+ @client = topic.subscription subscription_name
43
+ end
44
+ raise Error.new "subscription:#{subscription_name} does not exist." if @client.nil?
35
45
  end
36
46
 
37
47
  def pull(immediate, max)
@@ -87,6 +87,45 @@ class GcloudPubSubInputTest < Test::Unit::TestCase
87
87
  end
88
88
  end
89
89
 
90
+ sub_test_case 'start' do
91
+ setup do
92
+ @topic_mock = mock!
93
+ @pubsub_mock = mock!.topic('topic-test').at_least(1) { @topic_mock }
94
+ stub(Google::Cloud::Pubsub).new { @pubsub_mock }
95
+ end
96
+
97
+ test '40x error occurred on connecting to Pub/Sub' do
98
+ @topic_mock.subscription('subscription-test').once do
99
+ raise Google::Cloud::NotFoundError.new('TEST')
100
+ end
101
+
102
+ d = create_driver
103
+ assert_raise Google::Cloud::NotFoundError do
104
+ d.run {}
105
+ end
106
+ end
107
+
108
+ test '50x error occurred on connecting to Pub/Sub' do
109
+ @topic_mock.subscription('subscription-test').times(5) do
110
+ raise Google::Cloud::UnavailableError.new('TEST')
111
+ end
112
+
113
+ d = create_driver
114
+ assert_raise Google::Cloud::UnavailableError do
115
+ d.run {}
116
+ end
117
+ end
118
+
119
+ test 'subscription is nil' do
120
+ @topic_mock.subscription('subscription-test').once { nil }
121
+
122
+ d = create_driver
123
+ assert_raise Fluent::GcloudPubSub::Error do
124
+ d.run {}
125
+ end
126
+ end
127
+ end
128
+
90
129
  sub_test_case 'emit' do
91
130
  class DummyMsgData
92
131
  def data
@@ -72,6 +72,40 @@ class GcloudPubSubOutputTest < Test::Unit::TestCase
72
72
  @pubsub_mock.topic("topic-test", autocreate: true).once { @publisher }
73
73
  d.run
74
74
  end
75
+
76
+ test '40x error occurred on connecting to Pub/Sub' do
77
+ d = create_driver
78
+
79
+ @pubsub_mock.topic('topic-test', autocreate: false).once do
80
+ raise Google::Cloud::NotFoundError.new('TEST')
81
+ end
82
+
83
+ assert_raise Google::Cloud::NotFoundError do
84
+ d.run {}
85
+ end
86
+ end
87
+
88
+ test '50x error occurred on connecting to Pub/Sub' do
89
+ d = create_driver
90
+
91
+ @pubsub_mock.topic('topic-test', autocreate: false).times(5) do
92
+ raise Google::Cloud::UnavailableError.new('TEST')
93
+ end
94
+
95
+ assert_raise Google::Cloud::UnavailableError do
96
+ d.run {}
97
+ end
98
+ end
99
+
100
+ test 'topic is nil' do
101
+ d = create_driver
102
+
103
+ @pubsub_mock.topic('topic-test', autocreate: false).once { nil }
104
+
105
+ assert_raise Fluent::GcloudPubSub::Error do
106
+ d.run {}
107
+ end
108
+ end
75
109
  end
76
110
 
77
111
  sub_test_case 'publish' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-gcloud-pubsub-custom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshihiro MIYAI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-02 00:00:00.000000000 Z
11
+ date: 2017-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -44,6 +44,20 @@ dependencies:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: 0.22.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: retryable
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
47
61
  - !ruby/object:Gem::Dependency
48
62
  name: bundler
49
63
  requirement: !ruby/object:Gem::Requirement