fluent-plugin-mongo 0.6.13 → 0.7.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.
data/ChangeLog CHANGED
@@ -1,3 +1,12 @@
1
+ Release 0.7.0 - 2012/03/20
2
+
3
+ * Upgrade mongo gem least version to 1.8
4
+ * Upgrade fluentd gem least version to 0.10.9
5
+ * Use new classes with mongo gem version 1.8
6
+ * Replace safe with write_concern option in output plugins
7
+ * Change buffer_chunk_limit to 8MB when mongod version is 1.8 or later.
8
+
9
+
1
10
  Release 0.6.13 - 2012/01/15
2
11
 
3
12
  * Add exclude_broken_fields config to output plugins
data/README.rdoc CHANGED
@@ -208,7 +208,7 @@ MongoDB returns error or mongo-ruby-driver raises an exception.
208
208
 
209
209
  So, Mongo plugin resets _buffer_chunk_limit_ if configurated value is larger than above limitation:
210
210
  - Before v1.8, max of _buffer_chunk_limit_ is 2MB
211
- - After v1.8, max of _buffer_chunk_limit_ is 10MB
211
+ - After v1.8, max of _buffer_chunk_limit_ is 8MB
212
212
 
213
213
  == Disable collection check
214
214
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.13
1
+ 0.7.0
data/bin/mongo-tail CHANGED
@@ -29,10 +29,10 @@ OptionParser.new { |opt|
29
29
  }
30
30
 
31
31
  def get_capped_collection(conf)
32
- db = Mongo::Connection.new(conf[:h], conf[:p]).db(conf[:d])
32
+ db = Mongo::MongoClient.new(conf[:h], conf[:p]).db(conf[:d])
33
33
  if db.collection_names.include?(conf[:c])
34
34
  collection = db.collection(conf[:c])
35
- if [1, true].include?(collection.stats['capped']) # older version(2.0.x or earlier) returns 1
35
+ if collection.capped?
36
36
  collection
37
37
  else
38
38
  puts "#{conf[:c]} is not capped. mongo-tail can not tail normal collection."
@@ -16,8 +16,8 @@ Gem::Specification.new do |gem|
16
16
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
17
  gem.require_paths = ['lib']
18
18
 
19
- gem.add_dependency "fluentd", "~> 0.10.7"
20
- gem.add_dependency "mongo", "~> 1.6.0"
19
+ gem.add_dependency "fluentd", "~> 0.10.9"
20
+ gem.add_dependency "mongo", "~> 1.8.0"
21
21
  gem.add_development_dependency "rake", ">= 0.9.2"
22
22
  gem.add_development_dependency "simplecov", ">= 0.5.4"
23
23
  gem.add_development_dependency "rr", ">= 1.0.0"
@@ -70,7 +70,7 @@ class MongoTailInput < Input
70
70
  db = authenticate(Mongo::Connection.new(@host, @port).db(@database))
71
71
  raise ConfigError, "'#{@database}.#{@collection}' not found: node = #{@host}:#{@port}" unless db.collection_names.include?(@collection)
72
72
  collection = db.collection(@collection)
73
- raise ConfigError, "'#{@database}.#{@collection}' is not capped: node = #{@host}:#{@port}" unless [1, true].include?(collection.stats['capped']) # older version(2.0.x or earlier) returns 1
73
+ raise ConfigError, "'#{@database}.#{@collection}' is not capped: node = #{@host}:#{@port}" unless collection.capped?
74
74
  collection
75
75
  rescue Mongo::ConnectionFailure => e
76
76
  $log.fatal "Failed to connect to 'mongod'. Please restart 'fluentd' after 'mongod' started: #{e}"
@@ -19,14 +19,14 @@ class MongoOutput < BufferedOutput
19
19
  config_param :port, :integer, :default => 27017
20
20
  config_param :ignore_invalid_record, :bool, :default => false
21
21
  config_param :disable_collection_check, :bool, :default => nil
22
- config_param :safe, :bool, :default => true
23
22
  config_param :exclude_broken_fields, :string, :default => nil
23
+ config_param :write_concern, :integer, :default => nil
24
24
 
25
25
  # tag mapping mode
26
26
  config_param :tag_mapped, :bool, :default => false
27
27
  config_param :remove_tag_prefix, :string, :default => nil
28
28
 
29
- attr_reader :collection_options
29
+ attr_reader :collection_options, :connection_options
30
30
 
31
31
  def initialize
32
32
  super
@@ -55,7 +55,6 @@ class MongoOutput < BufferedOutput
55
55
 
56
56
  @exclude_broken_fields = @exclude_broken_fields.split(',') if @exclude_broken_fields
57
57
 
58
- # capped configuration
59
58
  if conf.has_key?('capped')
60
59
  raise ConfigError, "'capped_size' parameter is required on <store> of Mongo output" unless conf.has_key?('capped_size')
61
60
  @collection_options[:capped] = true
@@ -63,7 +62,7 @@ class MongoOutput < BufferedOutput
63
62
  @collection_options[:max] = Config.size_value(conf['capped_max']) if conf.has_key?('capped_max')
64
63
  end
65
64
 
66
- @connection_options[:safe] = @safe
65
+ @connection_options[:w] = @write_concern unless @write_concern.nil?
67
66
 
68
67
  # MongoDB uses BSON's Date for time.
69
68
  def @timef.format_nocache(time)
@@ -78,11 +77,7 @@ class MongoOutput < BufferedOutput
78
77
  get_or_create_collection(@collection) unless @tag_mapped
79
78
 
80
79
  # From configure for avoding complex method dependency...
81
- if @buffer.respond_to?(:buffer_chunk_limit)
82
- @buffer.buffer_chunk_limit = available_buffer_chunk_limit
83
- else
84
- $log.warn "#{Fluent::VERSION} does not have :buffer_chunk_limit. Be careful when insert large documents to MongoDB"
85
- end
80
+ @buffer.buffer_chunk_limit = available_buffer_chunk_limit
86
81
 
87
82
  super
88
83
  end
@@ -147,7 +142,7 @@ class MongoOutput < BufferedOutput
147
142
  new_record[BROKEN_DATA_KEY] = BSON::Binary.new(Marshal.dump(record))
148
143
  new_record
149
144
  }
150
- collection.insert(converted_records) # Should create another collection like name_broken?
145
+ collection.insert(converted_records)
151
146
  end
152
147
 
153
148
  def collect_records(chunk)
@@ -177,7 +172,7 @@ class MongoOutput < BufferedOutput
177
172
  if @db.collection_names.include?(collection_name)
178
173
  collection = @db.collection(collection_name)
179
174
  unless @disable_collection_check
180
- capped = [1, true].include?(collection.stats['capped']) # TODO: Remove this check after mongo gem upgrade to 1.7.x
175
+ capped = collection.capped?
181
176
  unless @collection_options[:capped] == capped # TODO: Verify capped configuration
182
177
  new_mode = format_collection_mode(@collection_options[:capped])
183
178
  old_mode = format_collection_mode(capped)
@@ -196,17 +191,17 @@ class MongoOutput < BufferedOutput
196
191
  end
197
192
 
198
193
  def get_connection
199
- db = Mongo::Connection.new(@host, @port, @connection_options).db(@database)
194
+ db = Mongo::MongoClient.new(@host, @port, @connection_options).db(@database)
200
195
  authenticate(db)
201
196
  end
202
197
 
203
198
  # Following limits are heuristic. BSON is sometimes bigger than MessagePack and JSON.
204
- LIMIT_BEFORE_v1_8 = 2 * 1024 * 1024 # 2MB = 4MB / 2
205
- LIMIT_AFTER_v1_8 = 10 * 1024 * 1024 # 10MB = 16MB / 2 + alpha
199
+ LIMIT_BEFORE_v1_8 = 2 * 1024 * 1024 # 2MB = 4MB / 2
200
+ LIMIT_AFTER_v1_8 = 8 * 1024 * 1024 # 8MB = 16MB / 2
206
201
 
207
202
  def available_buffer_chunk_limit
208
203
  begin
209
- limit = mongod_version >= "1.8.0" ? LIMIT_AFTER_v1_8 : LIMIT_BEFORE_v1_8 # TODO: each version comparison
204
+ limit = mongod_version >= "1.8.0" ? LIMIT_AFTER_v1_8 : LIMIT_BEFORE_v1_8
210
205
  rescue Mongo::ConnectionFailure => e
211
206
  $log.fatal "Failed to connect to 'mongod'. Please restart 'fluentd' after 'mongod' started: #{e}"
212
207
  exit!
@@ -214,7 +209,6 @@ class MongoOutput < BufferedOutput
214
209
  $log.fatal "Operation failed. Probably, 'mongod' needs an authentication: #{e}"
215
210
  exit!
216
211
  rescue Exception => e
217
- # TODO: should do exit?
218
212
  $log.warn "mongo unknown error #{e}, set #{LIMIT_BEFORE_v1_8} to chunk limit"
219
213
  limit = LIMIT_BEFORE_v1_8
220
214
  end
@@ -50,7 +50,7 @@ class MongoOutputReplset < MongoOutput
50
50
  end
51
51
 
52
52
  def get_connection
53
- db = Mongo::ReplSetConnection.new(@nodes, @connection_options).db(@database)
53
+ db = Mongo::MongoReplicaSetClient.new(@nodes, @connection_options).db(@database)
54
54
  authenticate(db)
55
55
  end
56
56
 
@@ -32,7 +32,7 @@ class MongoOutputTest < Test::Unit::TestCase
32
32
  conf = conf + %[
33
33
  port #{@@mongod_port}
34
34
  ]
35
- @db = Mongo::Connection.new('localhost', @@mongod_port).db(MONGO_DB_DB)
35
+ @db = Mongo::MongoClient.new('localhost', @@mongod_port).db(MONGO_DB_DB)
36
36
  Fluent::Test::BufferedOutputTestDriver.new(Fluent::MongoOutput).configure(conf)
37
37
  end
38
38
 
@@ -51,11 +51,20 @@ class MongoOutputTest < Test::Unit::TestCase
51
51
  assert_equal('localhost', d.instance.host)
52
52
  assert_equal(@@mongod_port, d.instance.port)
53
53
  assert_equal({:capped => true, :size => 100}, d.instance.collection_options)
54
+ assert(d.instance.connection_options.empty?)
54
55
  # buffer_chunk_limit moved from configure to start
55
56
  # I will move this test to correct space after BufferedOutputTestDriver supports start method invoking
56
57
  # assert_equal(Fluent::MongoOutput::LIMIT_BEFORE_v1_8, d.instance.instance_variable_get(:@buffer).buffer_chunk_limit)
57
58
  end
58
59
 
60
+ def test_configure_with_write_concern
61
+ d = create_driver(default_config + %[
62
+ write_concern 2
63
+ ])
64
+
65
+ assert_equal({:w => 2}, d.instance.connection_options)
66
+ end
67
+
59
68
  def test_format
60
69
  d = create_driver
61
70
 
@@ -198,7 +207,7 @@ class MongoReplOutputTest < MongoOutputTest
198
207
  end
199
208
 
200
209
  def create_driver(conf = default_config)
201
- @db = Mongo::ReplSetConnection.new(build_seeds(3), :name => @rs.name).db(MONGO_DB_DB)
210
+ @db = Mongo::MongoReplicaSetClient.new(build_seeds(3), :name => @rs.name).db(MONGO_DB_DB)
202
211
  Fluent::Test::BufferedOutputTestDriver.new(Fluent::MongoOutputReplset).configure(conf)
203
212
  end
204
213
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.13
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-15 00:00:00.000000000 Z
12
+ date: 2013-03-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.10.7
21
+ version: 0.10.9
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 0.10.7
29
+ version: 0.10.9
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: mongo
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.6.0
37
+ version: 1.8.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.6.0
45
+ version: 1.8.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rake
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -136,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
136
  version: '0'
137
137
  segments:
138
138
  - 0
139
- hash: 1797874939389521588
139
+ hash: -2812294622738366735
140
140
  required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  none: false
142
142
  requirements:
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
145
  version: '0'
146
146
  segments:
147
147
  - 0
148
- hash: 1797874939389521588
148
+ hash: -2812294622738366735
149
149
  requirements: []
150
150
  rubyforge_project:
151
151
  rubygems_version: 1.8.23