fluent-plugin-gcloud-pubsub-custom 0.2.0 → 0.3.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
  SHA1:
3
- metadata.gz: 08c5555e386df16b94ce1a8db279f952893b3f3b
4
- data.tar.gz: e6eee873e191628778e9793a4545baf4a9d90344
3
+ metadata.gz: 6537f709d3f3e8849ae455fad4ee15a5f8b36d36
4
+ data.tar.gz: 72ac72b492b01d4ac1301837f9faeaa185689f72
5
5
  SHA512:
6
- metadata.gz: eb8869520add948a27084fd46c58740455432f35bc29210efc77e4578901f5b10762c2b24a56eede4df04bfa54b57eaa210de5d022a11bcd5555e925939849aa
7
- data.tar.gz: 3d2ef099388aa1a0260061e3cc134d84c9326c29202414643a2fe3612ca27fed9697b763ddd2ead9c3f68aa3ef3adb85d55b1e00de77b1b6d79e035b16e452a7
6
+ metadata.gz: 21dfe776b5de4edfedc3cd71c47c050934db1b09ddb05f43a6d7c2fff0f7586e450bb669d7b5c9e5b7b5569dec176b6d1fed05f0aee12f3f01091c697f6cfe88
7
+ data.tar.gz: 0c388a5d3eaf2edd941c81ba76676fc21ca9950b12c3fd6229f8e6981d6affc68ca33dc26d76a151fa4e7e752fbac33ff48cb0b3843b04542b2dd90605ac52d3
@@ -1,5 +1,9 @@
1
1
  ## ChangeLog
2
2
 
3
+ - Release 0.3.0 - 2016/10/30
4
+ - Bump up google-cloud-pubsub to v0.21
5
+ - Input plugin
6
+ - Add multithreaded pulling feature
3
7
  - Release 0.2.0 - 2016/10/15
4
8
  - Input plugin
5
9
  - Add HTTP RPC feature
@@ -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.2.0"
10
+ gem.version = "0.3.0"
11
11
  gem.authors = ["Yoshihiro MIYAI"]
12
12
  gem.email = "msparrow17@gmail.com"
13
13
  gem.has_rdoc = false
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.require_paths = ['lib']
18
18
 
19
19
  gem.add_runtime_dependency "fluentd", [">= 0.10.58", "< 2"]
20
- gem.add_runtime_dependency "google-cloud-pubsub", "~> 0.20.0"
20
+ gem.add_runtime_dependency "google-cloud-pubsub", "~> 0.21.0"
21
21
 
22
22
  gem.add_development_dependency "bundler"
23
23
  gem.add_development_dependency "rake"
@@ -1,4 +1,4 @@
1
- require 'google/cloud'
1
+ require 'google/cloud/pubsub'
2
2
 
3
3
  module Fluent
4
4
  module GcloudPubSub
@@ -6,7 +6,7 @@ module Fluent
6
6
 
7
7
  class Publisher
8
8
  def initialize(project, key, topic, autocreate_topic)
9
- pubsub = (Google::Cloud.new project, key).pubsub
9
+ pubsub = Google::Cloud::Pubsub.new project: project, keyfile: key
10
10
 
11
11
  @client = pubsub.topic topic, autocreate: autocreate_topic
12
12
  raise Fluent::GcloudPubSub::Error.new "topic:#{topic} does not exist." if @client.nil?
@@ -23,7 +23,7 @@ module Fluent
23
23
 
24
24
  class Subscriber
25
25
  def initialize(project, key, topic, subscription)
26
- pubsub = (Google::Cloud.new project, key).pubsub
26
+ pubsub = Google::Cloud::Pubsub.new project: project, keyfile: key
27
27
  topic = pubsub.topic topic
28
28
  @client = topic.subscription subscription
29
29
  raise Fluent::GcloudPubSub::Error.new "subscription:#{subscription} does not exist." if @client.nil?
@@ -18,6 +18,7 @@ module Fluent
18
18
  config_param :pull_interval, :float, default: 5.0
19
19
  config_param :max_messages, :integer, default: 100
20
20
  config_param :return_immediately, :bool, default: true
21
+ config_param :pull_threads, :integer, default: 1
21
22
  config_param :format, :string, default: 'json'
22
23
  # for HTTP RPC
23
24
  config_param :enable_rpc, :bool, default: false
@@ -94,7 +95,10 @@ module Fluent
94
95
  log.debug "connected subscription:#{@subscription} in project #{@project}"
95
96
 
96
97
  @stop_subscribing = false
97
- @subscribe_thread = Thread.new(&method(:subscribe))
98
+ @subscribe_threads = []
99
+ @pull_threads.times do
100
+ @subscribe_threads.push Thread.new(&method(:subscribe))
101
+ end
98
102
  end
99
103
 
100
104
  def shutdown
@@ -108,7 +112,7 @@ module Fluent
108
112
  @rpc_thread = nil
109
113
  end
110
114
  @stop_subscribing = true
111
- @subscribe_thread.join
115
+ @subscribe_threads.each(&:join)
112
116
  end
113
117
 
114
118
  def stop_pull
@@ -40,6 +40,7 @@ class GcloudPubSubInputTest < Test::Unit::TestCase
40
40
  max_messages 1000
41
41
  return_immediately true
42
42
  pull_interval 2
43
+ pull_threads 3
43
44
  format ltsv
44
45
  enable_rpc true
45
46
  rpc_bind 127.0.0.1
@@ -54,6 +55,7 @@ class GcloudPubSubInputTest < Test::Unit::TestCase
54
55
  assert_equal(2.0, d.instance.pull_interval)
55
56
  assert_equal(1000, d.instance.max_messages)
56
57
  assert_equal(true, d.instance.return_immediately)
58
+ assert_equal(3, d.instance.pull_threads)
57
59
  assert_equal('ltsv', d.instance.format)
58
60
  assert_equal(true, d.instance.enable_rpc)
59
61
  assert_equal('127.0.0.1', d.instance.rpc_bind)
@@ -65,6 +67,7 @@ class GcloudPubSubInputTest < Test::Unit::TestCase
65
67
  assert_equal(5.0, d.instance.pull_interval)
66
68
  assert_equal(100, d.instance.max_messages)
67
69
  assert_equal(true, d.instance.return_immediately)
70
+ assert_equal(1, d.instance.pull_threads)
68
71
  assert_equal('json', d.instance.format)
69
72
  assert_equal(false, d.instance.enable_rpc)
70
73
  assert_equal('0.0.0.0', d.instance.rpc_bind)
@@ -88,8 +91,7 @@ class GcloudPubSubInputTest < Test::Unit::TestCase
88
91
  @subscriber = mock!
89
92
  @topic_mock = mock!.subscription('subscription-test') { @subscriber }
90
93
  @pubsub_mock = mock!.topic('topic-test') { @topic_mock }
91
- @gcloud_mock = mock!.pubsub { @pubsub_mock }
92
- stub(Google::Cloud).new { @gcloud_mock }
94
+ stub(Google::Cloud::Pubsub).new { @pubsub_mock }
93
95
  end
94
96
 
95
97
  test 'empty' do
@@ -122,6 +124,24 @@ class GcloudPubSubInputTest < Test::Unit::TestCase
122
124
  end
123
125
  end
124
126
 
127
+ test 'multithread' do
128
+ messages = Array.new(1, DummyMessage.new)
129
+ @subscriber.pull(immediate: true, max: 100).twice { messages }
130
+ @subscriber.acknowledge(messages).twice
131
+
132
+ d = create_driver("#{CONFIG}\npull_threads 2")
133
+ d.run {
134
+ # d.run sleeps 0.5 sec
135
+ }
136
+ emits = d.emits
137
+
138
+ assert_equal(2, emits.length)
139
+ emits.each do |tag, time, record|
140
+ assert_equal("test", tag)
141
+ assert_equal({"foo" => "bar"}, record)
142
+ end
143
+ end
144
+
125
145
  test 'invalid messages' do
126
146
  class DummyInvalidMsgData
127
147
  def data
@@ -58,8 +58,7 @@ class GcloudPubSubOutputTest < Test::Unit::TestCase
58
58
  setup do
59
59
  @publisher = mock!
60
60
  @pubsub_mock = mock!
61
- @gcloud_mock = mock!.pubsub { @pubsub_mock }
62
- stub(Google::Cloud).new { @gcloud_mock }
61
+ stub(Google::Cloud::Pubsub).new { @pubsub_mock }
63
62
  end
64
63
 
65
64
  test '"autocreate_topic" is enabled' do
@@ -79,8 +78,7 @@ class GcloudPubSubOutputTest < Test::Unit::TestCase
79
78
  setup do
80
79
  @publisher = mock!
81
80
  @pubsub_mock = mock!.topic(anything, anything) { @publisher }
82
- @gcloud_mock = mock!.pubsub { @pubsub_mock }
83
- stub(Google::Cloud).new { @gcloud_mock }
81
+ stub(Google::Cloud::Pubsub).new { @pubsub_mock }
84
82
  end
85
83
 
86
84
  setup 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.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshihiro MIYAI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-18 00:00:00.000000000 Z
11
+ date: 2016-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.20.0
39
+ version: 0.21.0
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 0.20.0
46
+ version: 0.21.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement