fluent-plugin-mysql-replicator 0.6.1 → 1.0.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
- SHA1:
3
- metadata.gz: ffa1646346a6d10f15cc8837a0551ecdcddfd0c0
4
- data.tar.gz: 5a3f350ffdeda01067e3b7ab90b35078333f9ee6
2
+ SHA256:
3
+ metadata.gz: 5c523ddf1d5052d11c6c7a0f7e9172d319c881257d791a0006cd1a6601f5a948
4
+ data.tar.gz: ca9f218dfa56543f141d8911578250194281bfbad16d8f5ed6b4980120d99c8d
5
5
  SHA512:
6
- metadata.gz: d96f0e8226cb824bf44a14d961528cef03a3831df71a0a5a6810d68935733fbe1f940d44875ef7871f2b757845174e168bd69fd77239fad96f773ef967b99af2
7
- data.tar.gz: 2c5886bdaa8050b70024cfeab747bdadaa6c0eb22bbb4b431aad818502969f58a3fbd23315565d41d74c4b9ee7cd9c9fca0f22681aa93c30dececa78647d5a22
6
+ metadata.gz: a5266cd4f824e781d53eaa613c37f260c7814badcee87fb6c49a1321e9c9ac8bc8d9505b2ea800f3a8ccde237b2b0eeb808e187463996c2b1aecc93065128869
7
+ data.tar.gz: 70834ef8629d34bbd53aa1ff9d66ba706d6df5b48cd310d8a554c7d25628682633860123f63855e851482abda385e6288c4fcd01da848cbffc56bc0525553968
data/.travis.yml CHANGED
@@ -7,6 +7,7 @@ rvm:
7
7
  - 2.1
8
8
 
9
9
  services:
10
+ - mysql
10
11
  - elasticsearch
11
12
 
12
13
  before_install:
data/README.md CHANGED
@@ -10,8 +10,20 @@ It's comming support replicate to another RDB/noSQL.
10
10
 
11
11
  | fluent-plugin-mysql-replicator | fluentd | ruby |
12
12
  |--------------------|------------|--------|
13
- | 0.6.1 | v0.14.x | >= 2.1 |
14
- | 0.6.1 | v0.12.x | >= 1.9 |
13
+ | >= 0.6.1 | >= v0.14.x | >= 2.1 |
14
+ | <= 0.6.1 | >= v0.12.x | >= 1.9 |
15
+
16
+ ## Dependency
17
+
18
+ before use, install dependent library as:
19
+
20
+ ```bash
21
+ # for RHEL/CentOS
22
+ $ sudo yum group install "Development Tools"
23
+
24
+ # for Ubuntu/Debian
25
+ $ sudo apt-get install build-essential
26
+ ```
15
27
 
16
28
  ## Installation
17
29
 
@@ -19,10 +31,13 @@ install with gem or fluent-gem command as:
19
31
 
20
32
  `````
21
33
  # for system installed fluentd
22
- $ gem install fluent-plugin-mysql-replicator -v 0.6.1
34
+ $ gem install fluent-plugin-mysql-replicator -v 1.0.2
23
35
 
24
36
  # for td-agent2
25
37
  $ sudo td-agent-gem install fluent-plugin-mysql-replicator -v 0.6.1
38
+
39
+ # for td-agent3
40
+ $ sudo td-agent-gem install fluent-plugin-mysql-replicator -v 1.0.2
26
41
  `````
27
42
 
28
43
  ## Included plugins
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "fluent-plugin-mysql-replicator"
4
- s.version = "0.6.1"
4
+ s.version = "1.0.2"
5
5
  s.authors = ["Kentaro Yoshida"]
6
6
  s.email = ["y.ken.studio@gmail.com"]
7
7
  s.homepage = "https://github.com/y-ken/fluent-plugin-mysql-replicator"
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.add_development_dependency "webmock", "~> 1.24.0"
20
20
  s.add_development_dependency "test-unit", ">= 3.1.0"
21
21
 
22
- s.add_runtime_dependency "fluentd", [">= 0.10.58", "< 2"]
22
+ s.add_runtime_dependency "fluentd", [">= 0.14.15", "< 2"]
23
23
  s.add_runtime_dependency "mysql2"
24
24
  s.add_runtime_dependency "rsolr"
25
25
  end
@@ -1,14 +1,12 @@
1
- require 'fluent/input'
1
+ require 'mysql2'
2
+ require 'digest/sha1'
3
+ require 'fluent/plugin/input'
2
4
 
3
- module Fluent
4
- class MysqlReplicatorInput < Fluent::Input
5
- Plugin.register_input('mysql_replicator', self)
5
+ module Fluent::Plugin
6
+ class MysqlReplicatorInput < Fluent::Plugin::Input
7
+ Fluent::Plugin.register_input('mysql_replicator', self)
6
8
 
7
- def initialize
8
- require 'mysql2'
9
- require 'digest/sha1'
10
- super
11
- end
9
+ helpers :thread
12
10
 
13
11
  config_param :host, :string, :default => 'localhost'
14
12
  config_param :port, :integer, :default => 3306
@@ -25,7 +23,7 @@ module Fluent
25
23
 
26
24
  def configure(conf)
27
25
  super
28
- @interval = Config.time_value(@interval)
26
+ @interval = Fluent::Config.time_value(@interval)
29
27
 
30
28
  if @tag.nil?
31
29
  raise Fluent::ConfigError, "mysql_replicator: missing 'tag' parameter. Please add following line into config like 'tag replicator.mydatabase.mytable.${event}.${primary_key}'"
@@ -35,11 +33,12 @@ module Fluent
35
33
  end
36
34
 
37
35
  def start
38
- @thread = Thread.new(&method(:run))
36
+ super
37
+ thread_create(:in_mysql_replicator_runner, &method(:run))
39
38
  end
40
39
 
41
40
  def shutdown
42
- Thread.kill(@thread)
41
+ super
43
42
  end
44
43
 
45
44
  def run
@@ -72,7 +71,7 @@ module Fluent
72
71
  current_ids << row[@primary_key]
73
72
  current_hash = Digest::SHA1.hexdigest(row.flatten.join)
74
73
  row.each {|k, v| row[k] = v.to_s if v.is_a?(Time) || v.is_a?(Date) || v.is_a?(BigDecimal)}
75
- row.select {|k, v| v.to_s.strip.match(/^SELECT/i) }.each do |k, v|
74
+ row.select {|k, v| v.to_s.strip.match(/^SELECT(\s+)/i) }.each do |k, v|
76
75
  row[k] = [] unless row[k].is_a?(Array)
77
76
  nest_rows, prepared_con = query(v.gsub(/\$\{([^\}]+)\}/, row[$1].to_s), prepared_con)
78
77
  nest_rows.each do |nest_row|
@@ -107,7 +106,7 @@ module Fluent
107
106
  end
108
107
  if deleted_ids.count > 0
109
108
  hash_delete_by_list(table_hash, deleted_ids)
110
- deleted_ids.each do |id|
109
+ deleted_ids.each do |id|
111
110
  tag = format_tag(@tag, {:event => :delete})
112
111
  emit_record(tag, {@primary_key => id})
113
112
  end
@@ -1,8 +1,10 @@
1
- require 'fluent/input'
1
+ require 'fluent/plugin/input'
2
2
 
3
- module Fluent
4
- class MysqlReplicatorMultiInput < Fluent::Input
5
- Plugin.register_input('mysql_replicator_multi', self)
3
+ module Fluent::Plugin
4
+ class MysqlReplicatorMultiInput < Fluent::Plugin::Input
5
+ Fluent::Plugin.register_input('mysql_replicator_multi', self)
6
+
7
+ helpers :thread
6
8
 
7
9
  def initialize
8
10
  require 'mysql2'
@@ -28,18 +30,20 @@ module Fluent
28
30
  end
29
31
 
30
32
  def start
33
+ super
31
34
  begin
32
35
  @threads = []
33
36
  @mutex = Mutex.new
34
37
  @manager_db = get_manager_connection
35
38
  @manager_db.query("SET SESSION wait_timeout=1800;")
36
- @threads << Thread.new {
39
+ @running = true
40
+ @threads << thread_create(:in_mysql_replicator_flusher) {
37
41
  @hash_table_bulk_insert = []
38
42
  @hash_table_bulk_insert_last_time = Time.now
39
43
  hash_table_flusher
40
44
  }
41
- get_settings.each do |config|
42
- @threads << Thread.new {
45
+ get_settings.each_with_index do |config, idx|
46
+ @threads << thread_create(:"in_mysql_replicator_pollers_#{idx}") {
43
47
  poll(config)
44
48
  }
45
49
  end
@@ -50,10 +54,14 @@ module Fluent
50
54
  end
51
55
  end
52
56
 
57
+ def stop
58
+ @running = false
59
+ super
60
+ end
61
+
53
62
  def shutdown
54
- @threads.each do |thread|
55
- Thread.kill(thread)
56
- end
63
+ @threads.each(&:join)
64
+ super
57
65
  end
58
66
 
59
67
  def get_settings
@@ -74,7 +82,7 @@ module Fluent
74
82
  }
75
83
  primary_key = config['primary_key']
76
84
  previous_id = current_id = nil
77
- loop do
85
+ while @running
78
86
  rows_count = 0
79
87
  start_time = Time.now
80
88
  unless config['prepared_query'].nil?
@@ -106,6 +114,9 @@ module Fluent
106
114
  rows_count += 1
107
115
  end
108
116
  db.close
117
+ unless config['prepared_query'].nil?
118
+ nest_db.close
119
+ end
109
120
  elapsed_time = sprintf("%0.02f", Time.now - start_time)
110
121
  @mutex.synchronize {
111
122
  log.info "mysql_replicator_multi: execution finished. :setting_name=>#{config['name']} :rows_count=>#{rows_count} :elapsed_time=>#{elapsed_time} sec"
@@ -212,7 +223,7 @@ module Fluent
212
223
 
213
224
  def hash_table_flusher
214
225
  begin
215
- loop do
226
+ while @running
216
227
  if @hash_table_bulk_insert.empty? || @bulk_insert_timeout > (Time.now - @hash_table_bulk_insert_last_time)
217
228
  sleep @bulk_insert_timeout
218
229
  next
@@ -221,6 +232,9 @@ module Fluent
221
232
  flush_hash_table
222
233
  }
223
234
  end
235
+ @mutex.synchronize {
236
+ flush_hash_table
237
+ }
224
238
  rescue StandardError => e
225
239
  @mutex.synchronize {
226
240
  log.error "mysql_replicator_multi: failed to flush buffered query. :config=>#{masked_config}"
@@ -1,9 +1,14 @@
1
1
  require 'net/http'
2
2
  require 'date'
3
+ require 'fluent/plugin/output'
3
4
 
4
- class Fluent::MysqlReplicatorElasticsearchOutput < Fluent::BufferedOutput
5
+ class Fluent::Plugin::MysqlReplicatorElasticsearchOutput < Fluent::Plugin::Output
5
6
  Fluent::Plugin.register_output('mysql_replicator_elasticsearch', self)
6
7
 
8
+ DEFAULT_BUFFER_TYPE = "memory"
9
+
10
+ helpers :compat_parameters
11
+
7
12
  config_param :host, :string, :default => 'localhost'
8
13
  config_param :port, :integer, :default => 9200
9
14
  config_param :tag_format, :string, :default => nil
@@ -11,6 +16,10 @@ class Fluent::MysqlReplicatorElasticsearchOutput < Fluent::BufferedOutput
11
16
  config_param :username, :string, :default => nil
12
17
  config_param :password, :string, :default => nil, :secret => true
13
18
 
19
+ config_section :buffer do
20
+ config_set_default :@type, DEFAULT_BUFFER_TYPE
21
+ end
22
+
14
23
  DEFAULT_TAG_FORMAT = /(?<index_name>[^\.]+)\.(?<type_name>[^\.]+)\.(?<event>[^\.]+)\.(?<primary_key>[^\.]+)$/
15
24
 
16
25
  def initialize
@@ -39,6 +48,14 @@ class Fluent::MysqlReplicatorElasticsearchOutput < Fluent::BufferedOutput
39
48
  super
40
49
  end
41
50
 
51
+ def multi_workers_ready?
52
+ true
53
+ end
54
+
55
+ def formatted_to_msgpack_binary?
56
+ true
57
+ end
58
+
42
59
  def write(chunk)
43
60
  bulk_message = []
44
61
 
@@ -1,13 +1,22 @@
1
1
  require 'rsolr'
2
2
  require 'uri'
3
+ require 'fluent/plugin/output'
3
4
 
4
- class Fluent::MysqlReplicatorSolrOutput < Fluent::BufferedOutput
5
+ class Fluent::Plugin::MysqlReplicatorSolrOutput < Fluent::Plugin::Output
5
6
  Fluent::Plugin.register_output('mysql_replicator_solr', self)
6
7
 
8
+ DEFAULT_BUFFER_TYPE = "memory"
9
+
10
+ helpers :compat_parameters
11
+
7
12
  config_param :host, :string, :default => 'localhost'
8
13
  config_param :port, :integer, :default => 8983
9
14
  config_param :tag_format, :string, :default => nil
10
15
 
16
+ config_section :buffer do
17
+ config_set_default :@type, DEFAULT_BUFFER_TYPE
18
+ end
19
+
11
20
  DEFAULT_TAG_FORMAT = /(?<core_name>[^\.]+)\.(?<event>[^\.]+)\.(?<primary_key>[^\.]+)$/
12
21
 
13
22
  def initialize
@@ -36,6 +45,14 @@ class Fluent::MysqlReplicatorSolrOutput < Fluent::BufferedOutput
36
45
  super
37
46
  end
38
47
 
48
+ def multi_workers_ready?
49
+ true
50
+ end
51
+
52
+ def formatted_to_msgpack_binary?
53
+ true
54
+ end
55
+
39
56
  def write(chunk)
40
57
  solr_connection = {}
41
58
 
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'fluent/test/driver/input'
2
3
 
3
4
  class MysqlReplicatorInputTest < Test::Unit::TestCase
4
5
  def setup
@@ -14,8 +15,8 @@ class MysqlReplicatorInputTest < Test::Unit::TestCase
14
15
  record_hostname yes
15
16
  ]
16
17
 
17
- def create_driver(conf=CONFIG,tag='test')
18
- Fluent::Test::OutputTestDriver.new(Fluent::MysqlReplicatorInput, tag).configure(conf)
18
+ def create_driver(conf=CONFIG)
19
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::MysqlReplicatorInput).configure(conf)
19
20
  end
20
21
 
21
22
  def test_configure
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'fluent/test/driver/input'
2
3
 
3
4
  class MysqlReplicatorMultiInputTest < Test::Unit::TestCase
4
5
  def setup
@@ -13,8 +14,8 @@ class MysqlReplicatorMultiInputTest < Test::Unit::TestCase
13
14
  tag replicator.${name}.${event}.${primary_key}
14
15
  ]
15
16
 
16
- def create_driver(conf=CONFIG,tag='test')
17
- Fluent::Test::OutputTestDriver.new(Fluent::MysqlReplicatorMultiInput, tag).configure(conf)
17
+ def create_driver(conf=CONFIG)
18
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::MysqlReplicatorMultiInput).configure(conf)
18
19
  end
19
20
 
20
21
  def test_configure
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'fluent/test/driver/output'
2
3
  require 'webmock/test_unit'
3
4
 
4
5
  WebMock.disable_net_connect!
@@ -9,10 +10,11 @@ class MysqlReplicatorElasticsearchOutput < Test::Unit::TestCase
9
10
  def setup
10
11
  Fluent::Test.setup
11
12
  @driver = nil
13
+ @tag = 'myindex.mytype.insert.id'
12
14
  end
13
15
 
14
- def driver(tag='myindex.mytype.insert.id', conf='')
15
- @driver ||= Fluent::Test::BufferedOutputTestDriver.new(Fluent::MysqlReplicatorElasticsearchOutput, tag).configure(conf)
16
+ def driver(conf='')
17
+ @driver ||= Fluent::Test::Driver::Output.new(Fluent::Plugin::MysqlReplicatorElasticsearchOutput).configure(conf)
16
18
  end
17
19
 
18
20
  def sample_record
@@ -32,56 +34,63 @@ class MysqlReplicatorElasticsearchOutput < Test::Unit::TestCase
32
34
 
33
35
  def test_wrties_with_proper_content_type
34
36
  stub_elastic
35
- driver.emit(sample_record)
36
- driver.run
37
+ driver.run(default_tag: @tag) do
38
+ driver.feed(sample_record)
39
+ end
37
40
  assert_equal("application/json; charset=utf-8", @content_type)
38
41
  end
39
42
 
40
43
  def test_writes_to_speficied_index
41
44
  driver.configure("index_name myindex\n")
42
45
  stub_elastic
43
- driver.emit(sample_record)
44
- driver.run
46
+ driver.run(default_tag: @tag) do
47
+ driver.feed(sample_record)
48
+ end
45
49
  assert_equal('myindex', index_cmds.first['index']['_index'])
46
50
  end
47
51
 
48
52
  def test_writes_to_speficied_type
49
53
  driver.configure("type_name mytype\n")
50
54
  stub_elastic
51
- driver.emit(sample_record)
52
- driver.run
55
+ driver.run(default_tag: @tag) do
56
+ driver.feed(sample_record)
57
+ end
53
58
  assert_equal('mytype', index_cmds.first['index']['_type'])
54
59
  end
55
60
 
56
61
  def test_writes_to_speficied_host
57
62
  driver.configure("host 192.168.33.50\n")
58
63
  elastic_request = stub_elastic("http://192.168.33.50:9200/_bulk")
59
- driver.emit(sample_record)
60
- driver.run
64
+ driver.run(default_tag: @tag) do
65
+ driver.feed(sample_record)
66
+ end
61
67
  assert_requested(elastic_request)
62
68
  end
63
69
 
64
70
  def test_writes_to_speficied_port
65
71
  driver.configure("port 9201\n")
66
72
  elastic_request = stub_elastic("http://localhost:9201/_bulk")
67
- driver.emit(sample_record)
68
- driver.run
73
+ driver.run(default_tag: @tag) do
74
+ driver.feed(sample_record)
75
+ end
69
76
  assert_requested(elastic_request)
70
77
  end
71
78
 
72
79
  def test_makes_bulk_request
73
80
  stub_elastic
74
- driver.emit(sample_record)
75
- driver.emit(sample_record.merge('age' => 27))
76
- driver.run
81
+ driver.run(default_tag: @tag) do
82
+ driver.feed(sample_record)
83
+ driver.feed(sample_record.merge('age' => 27))
84
+ end
77
85
  assert_equal(4, index_cmds.count)
78
86
  end
79
87
 
80
88
  def test_all_records_are_preserved_in_bulk
81
89
  stub_elastic
82
- driver.emit(sample_record)
83
- driver.emit(sample_record.merge('age' => 27))
84
- driver.run
90
+ driver.run(default_tag: @tag) do
91
+ driver.feed(sample_record)
92
+ driver.feed(sample_record.merge('age' => 27))
93
+ end
85
94
  assert_equal(26, index_cmds[1]['age'])
86
95
  assert_equal(27, index_cmds[3]['age'])
87
96
  end
@@ -89,47 +98,53 @@ class MysqlReplicatorElasticsearchOutput < Test::Unit::TestCase
89
98
 
90
99
  def test_doesnt_add_logstash_timestamp_by_default
91
100
  stub_elastic
92
- driver.emit(sample_record)
93
- driver.run
101
+ driver.run(default_tag: @tag) do
102
+ driver.feed(sample_record)
103
+ end
94
104
  assert_nil(index_cmds[1]['@timestamp'])
95
105
  end
96
106
 
97
107
 
98
108
  def test_doesnt_add_tag_key_by_default
99
109
  stub_elastic
100
- driver.emit(sample_record)
101
- driver.run
110
+ driver.run(default_tag: @tag) do
111
+ driver.feed(sample_record)
112
+ end
102
113
  assert_nil(index_cmds[1]['tag'])
103
114
  end
104
115
 
105
116
  def test_doesnt_add_id_key_if_missing_when_configured
106
117
  driver.configure("id_key another_request_id\n")
107
118
  stub_elastic
108
- driver.emit(sample_record)
109
- driver.run
119
+ driver.run(default_tag: @tag) do
120
+ driver.feed(sample_record)
121
+ end
110
122
  assert(!index_cmds[0]['index'].has_key?('_id'))
111
123
  end
112
124
 
113
125
  def test_adds_id_key_when_not_configured
114
126
  stub_elastic
115
- driver.emit(sample_record)
116
- driver.run
127
+ driver.run(default_tag: @tag) do
128
+ driver.feed(sample_record)
129
+ end
117
130
  assert(!index_cmds[0]['index'].has_key?('_id'))
118
131
  end
119
132
 
120
133
  def test_request_error
121
134
  stub_elastic_unavailable
122
- driver.emit(sample_record)
123
135
  assert_raise(Net::HTTPFatalError) {
124
- driver.run
136
+ driver.run(default_tag: @tag) do
137
+ driver.feed(sample_record)
138
+ end
125
139
  }
126
140
  end
127
141
 
128
142
  def test_writes_to_https_host
129
143
  driver.configure("ssl true\n")
130
144
  elastic_request = stub_elastic("https://localhost:9200/_bulk")
131
- driver.emit(sample_record)
132
- driver.run
145
+ driver.run(default_tag: @tag) do
146
+ driver.feed(sample_record)
147
+ end
133
148
  assert_requested(elastic_request)
134
149
  end
135
150
 
@@ -139,8 +154,9 @@ class MysqlReplicatorElasticsearchOutput < Test::Unit::TestCase
139
154
  password bar\n
140
155
  ])
141
156
  elastic_request = stub_elastic("http://foo:bar@localhost:9200/_bulk")
142
- driver.emit(sample_record)
143
- driver.run
157
+ driver.run(default_tag: @tag) do
158
+ driver.feed(sample_record)
159
+ end
144
160
  assert_requested(elastic_request)
145
161
  end
146
162
 
@@ -150,9 +166,10 @@ class MysqlReplicatorElasticsearchOutput < Test::Unit::TestCase
150
166
  password bar\n
151
167
  ])
152
168
  elastic_request = stub_elastic("http://foo:bar@localhost:9200/_bulk")
153
- driver.emit(sample_record)
154
169
  assert_raise(WebMock::NetConnectNotAllowedError) {
155
- driver.run
170
+ driver.run(default_tag: @tag) do
171
+ driver.feed(sample_record)
172
+ end
156
173
  }
157
174
  end
158
175
  end
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'fluent/test/driver/output'
2
3
 
3
4
  class MysqlReplicatorSolrOutput < Test::Unit::TestCase
4
5
 
@@ -12,8 +13,8 @@ class MysqlReplicatorSolrOutput < Test::Unit::TestCase
12
13
  tag_format (?<core_name>[^\.]+)\.(?<event>[^\.]+)\.(?<primary_key>[^\.]+)$
13
14
  ]
14
15
 
15
- def create_driver(conf=CONFIG,tag='test')
16
- Fluent::Test::OutputTestDriver.new(Fluent::MysqlReplicatorSolrOutput, tag).configure(conf)
16
+ def create_driver(conf=CONFIG)
17
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::MysqlReplicatorSolrOutput).configure(conf)
17
18
  end
18
19
 
19
20
  def test_configure
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mysql-replicator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kentaro Yoshida
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-15 00:00:00.000000000 Z
11
+ date: 2021-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 0.10.58
61
+ version: 0.14.15
62
62
  - - "<"
63
63
  - !ruby/object:Gem::Version
64
64
  version: '2'
@@ -68,7 +68,7 @@ dependencies:
68
68
  requirements:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
- version: 0.10.58
71
+ version: 0.14.15
72
72
  - - "<"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '2'
@@ -149,8 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
149
  - !ruby/object:Gem::Version
150
150
  version: '0'
151
151
  requirements: []
152
- rubyforge_project:
153
- rubygems_version: 2.4.5
152
+ rubygems_version: 3.1.6
154
153
  signing_key:
155
154
  specification_version: 4
156
155
  summary: Fluentd input plugin to track insert/update/delete event from MySQL database