fluent-plugin-mongo 0.6.13 → 0.7.0

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