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 +9 -0
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/bin/mongo-tail +2 -2
- data/fluent-plugin-mongo.gemspec +2 -2
- data/lib/fluent/plugin/in_mongo_tail.rb +1 -1
- data/lib/fluent/plugin/out_mongo.rb +10 -16
- data/lib/fluent/plugin/out_mongo_replset.rb +1 -1
- data/test/plugin/out_mongo.rb +11 -2
- metadata +8 -8
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
|
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.
|
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::
|
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
|
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."
|
data/fluent-plugin-mongo.gemspec
CHANGED
@@ -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.
|
20
|
-
gem.add_dependency "mongo", "~> 1.
|
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
|
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[:
|
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
|
-
|
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)
|
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 =
|
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::
|
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
|
205
|
-
LIMIT_AFTER_v1_8 =
|
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
|
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::
|
53
|
+
db = Mongo::MongoReplicaSetClient.new(@nodes, @connection_options).db(@database)
|
54
54
|
authenticate(db)
|
55
55
|
end
|
56
56
|
|
data/test/plugin/out_mongo.rb
CHANGED
@@ -32,7 +32,7 @@ class MongoOutputTest < Test::Unit::TestCase
|
|
32
32
|
conf = conf + %[
|
33
33
|
port #{@@mongod_port}
|
34
34
|
]
|
35
|
-
@db = Mongo::
|
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::
|
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.
|
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-
|
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.
|
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.
|
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.
|
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.
|
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:
|
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:
|
148
|
+
hash: -2812294622738366735
|
149
149
|
requirements: []
|
150
150
|
rubyforge_project:
|
151
151
|
rubygems_version: 1.8.23
|