Hello community,
here is the log from the commit of package rubygem-fluentd for openSUSE:Factory
checked in at 2019-06-19 20:59:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-fluentd (Old)
and /work/SRC/openSUSE:Factory/.rubygem-fluentd.new.4811 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-fluentd"
Wed Jun 19 20:59:46 2019 rev:11 rq:705989 version:1.4.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-fluentd/rubygem-fluentd.changes
2019-04-01 12:37:12.805881247 +0200
+++
/work/SRC/openSUSE:Factory/.rubygem-fluentd.new.4811/rubygem-fluentd.changes
2019-06-19 20:59:48.658056900 +0200
@@ -1,0 +2,30 @@
+Sun May 5 09:25:46 UTC 2019 - Stephan Kulow <[email protected]>
+
+- updated to version 1.4.2
+ see installed CHANGELOG.md
+
+ ## Release v1.4.2 - 2019/04/02
+
+ ### Enhancements
+
+ * in_http: subdomain support in CORS domain
+ https://github.com/fluent/fluentd/pull/2337
+ * in_monitor_agent: Expose current timekey list as a buffer metrics
+ https://github.com/fluent/fluentd/pull/2343
+ * in_tcp/in_udp: Add source_address_key parameter
+ https://github.com/fluent/fluentd/pull/2347
+ * in_forward: Add send_keepalive_packet parameter to check the remote
connection is available or not
+ https://github.com/fluent/fluentd/pull/2352
+
+ ### Bug fixes
+
+ * out_exec_filter: Fix typo of child_respawn description
+ https://github.com/fluent/fluentd/pull/2341
+ * in_tail: Create parent directories for symlink
+ https://github.com/fluent/fluentd/pull/2353
+ * in_tail: Fix encoding duplication check for non-specified case
+ https://github.com/fluent/fluentd/pull/2361
+ * log: Fix time format handling of plugin logger when log format is JSON
+ https://github.com/fluent/fluentd/pull/2356
+
+-------------------------------------------------------------------
Old:
----
fluentd-1.4.1.gem
New:
----
fluentd-1.4.2.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-fluentd.spec ++++++
--- /var/tmp/diff_new_pack.5OTmVw/_old 2019-06-19 20:59:49.346057516 +0200
+++ /var/tmp/diff_new_pack.5OTmVw/_new 2019-06-19 20:59:49.346057516 +0200
@@ -24,7 +24,7 @@
#
Name: rubygem-fluentd
-Version: 1.4.1
+Version: 1.4.2
Release: 0
%define mod_name fluentd
%define mod_full_name %{mod_name}-%{version}
++++++ fluentd-1.4.1.gem -> fluentd-1.4.2.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md 2019-03-19 14:48:00.000000000 +0100
+++ new/CHANGELOG.md 2019-04-02 17:04:49.000000000 +0200
@@ -1,13 +1,35 @@
# v1.4
+## Release v1.4.2 - 2019/04/02
+
+### Enhancements
+
+* in_http: subdomain support in CORS domain
+ https://github.com/fluent/fluentd/pull/2337
+* in_monitor_agent: Expose current timekey list as a buffer metrics
+ https://github.com/fluent/fluentd/pull/2343
+* in_tcp/in_udp: Add source_address_key parameter
+ https://github.com/fluent/fluentd/pull/2347
+* in_forward: Add send_keepalive_packet parameter to check the remote
connection is available or not
+ https://github.com/fluent/fluentd/pull/2352
+
+### Bug fixes
+
+* out_exec_filter: Fix typo of child_respawn description
+ https://github.com/fluent/fluentd/pull/2341
+* in_tail: Create parent directories for symlink
+ https://github.com/fluent/fluentd/pull/2353
+* in_tail: Fix encoding duplication check for non-specified case
+ https://github.com/fluent/fluentd/pull/2361
+* log: Fix time format handling of plugin logger when log format is JSON
+ https://github.com/fluent/fluentd/pull/2356
+
## Release v1.4.1 - 2019/03/18
### Enhancements
* system: Add worker_id to process_name when workers is larger than 1
https://github.com/fluent/fluentd/pull/2321
-* in_syslog: Check message length when read from buffer in octet counting
- https://github.com/fluent/fluentd/pull/2323
* parser_regexp: Check named captures. When no named captures, configuration
error is raised
https://github.com/fluent/fluentd/pull/2331
@@ -15,6 +37,8 @@
* out_forward: Make tls_client_private_key_passphrase secret
https://github.com/fluent/fluentd/pull/2324
+* in_syslog: Check message length when read from buffer in octet counting
+ https://github.com/fluent/fluentd/pull/2323
## Release v1.4.0 - 2019/02/24
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2019-03-19 14:48:00.000000000 +0100
+++ new/README.md 2019-04-02 17:04:49.000000000 +0200
@@ -53,11 +53,6 @@
$ bundle exec rake test TEST=test/test_specified_path.rb
$ bundle exec rake test TEST=test/test_*.rb
-## Running in Production
-
-Many enterprises run Fluentd in production to handle all of their logging
needs. For enterprises requiring Security tested binaries, SLA-based support,
architectural guidance, and enhanced plugin connectors see [Fluentd
Enterprise](https://www.fluentd.org/enterprise).
-
-
## Fluentd UI: Admin GUI
[Fluentd UI](https://github.com/fluent/fluentd-ui) is a graphical user
interface to start/stop/configure Fluentd.
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/log.rb new/lib/fluent/log.rb
--- old/lib/fluent/log.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/log.rb 2019-04-02 17:04:49.000000000 +0200
@@ -532,6 +532,7 @@
end
self.format = @logger.format
+ self.time_format = @logger.time_format
enable_color @logger.enable_color?
end
@@ -540,6 +541,7 @@
end
alias orig_format= format=
+ alias orig_time_format= time_format=
alias orig_enable_color enable_color
def format=(fmt)
@@ -547,6 +549,11 @@
@logger.format = fmt
end
+ def time_format=(fmt)
+ self.orig_time_format = fmt
+ @logger.time_format = fmt
+ end
+
def enable_color(b = true)
orig_enable_color b
@logger.enable_color b
@@ -554,9 +561,9 @@
extend Forwardable
def_delegators '@logger', :get_worker_id, :enable_color?, :enable_debug,
:enable_event,
- :disable_events, :log_event_enabled, :log_event_enabled=, :time_format,
:time_format=,
- :time_formatter, :time_formatter=, :event, :caller_line, :puts, :write,
:<<, :flush,
- :reset, :out, :out=, :optional_header, :optional_header=,
:optional_attrs, :optional_attrs=
+ :disable_events, :log_event_enabled, :log_event_enabled=, :event,
:caller_line, :puts, :write,
+ :<<, :flush, :reset, :out, :out=, :optional_header, :optional_header=,
:optional_attrs,
+ :optional_attrs=
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/buf_file.rb
new/lib/fluent/plugin/buf_file.rb
--- old/lib/fluent/plugin/buf_file.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/plugin/buf_file.rb 2019-04-02 17:04:49.000000000 +0200
@@ -133,6 +133,8 @@
Dir.glob(patterns) do |path|
next unless File.file?(path)
+ log.debug { "restoring buffer file: path = #{path}" }
+
m = new_metadata() # this metadata will be overwritten by resuming
.meta file content
# so it should not added into @metadata_list for
now
mode = Fluent::Plugin::Buffer::FileChunk.assume_chunk_state(path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/buffer.rb
new/lib/fluent/plugin/buffer.rb
--- old/lib/fluent/plugin/buffer.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/plugin/buffer.rb 2019-04-02 17:04:49.000000000 +0200
@@ -154,6 +154,7 @@
@dequeued_num = {} # metadata => int (number of dequeued chunks)
@stage_size = @queue_size = 0
+ @timekeys = Hash.new(0)
@metadata_list = [] # keys of @stage
end
@@ -176,12 +177,14 @@
@stage.each_pair do |metadata, chunk|
@metadata_list << metadata unless @metadata_list.include?(metadata)
@stage_size += chunk.bytesize
+ add_timekey(metadata)
end
@queue.each do |chunk|
@metadata_list << chunk.metadata unless
@metadata_list.include?(chunk.metadata)
@queued_num[chunk.metadata] ||= 0
@queued_num[chunk.metadata] += 1
@queue_size += chunk.bytesize
+ add_timekey(chunk.metadata)
end
log.debug "buffer started", instance: self.object_id, stage_size:
@stage_size, queue_size: @queue_size
end
@@ -206,6 +209,7 @@
super
@dequeued = @stage = @queue = @queued_num = @metadata_list = nil
@stage_size = @queue_size = 0
+ @timekeys.clear
end
def storable?
@@ -251,6 +255,7 @@
@metadata_list[i]
else
@metadata_list << metadata
+ add_timekey(metadata)
metadata
end
end
@@ -261,6 +266,30 @@
add_metadata(meta)
end
+ def add_timekey(metadata)
+ if t = metadata.timekey
+ @timekeys[t] += 1
+ end
+ nil
+ end
+ private :add_timekey
+
+ def del_timekey(metadata)
+ if t = metadata.timekey
+ if @timekeys[t] <= 1
+ @timekeys.delete(t)
+ else
+ @timekeys[t] -= 1
+ end
+ end
+ nil
+ end
+ private :del_timekey
+
+ def timekeys
+ @timekeys.keys
+ end
+
# metadata MUST have consistent object_id for each variation
# data MUST be Array of serialized events, or EventStream
# metadata_and_data MUST be a hash of { metadata => data }
@@ -506,6 +535,7 @@
@metadata_list.delete(metadata)
@queued_num.delete(metadata)
@dequeued_num.delete(metadata)
+ del_timekey(metadata)
end
log.trace "chunk purged", instance: self.object_id, chunk_id:
dump_unique_id_hex(chunk_id), metadata: metadata
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/in_forward.rb
new/lib/fluent/plugin/in_forward.rb
--- old/lib/fluent/plugin/in_forward.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/plugin/in_forward.rb 2019-04-02 17:04:49.000000000 +0200
@@ -47,6 +47,8 @@
config_param :resolve_hostname, :bool, default: nil
desc 'Connections will be disconnected right after receiving first message
if this value is true.'
config_param :deny_keepalive, :bool, default: false
+ desc 'Check the remote connection is still available by sending a
keepalive packet if this value is true.'
+ config_param :send_keepalive_packet, :bool, default: false
desc 'Log warning if received chunk size is larger than this value.'
config_param :chunk_size_warn_limit, :size, default: nil
@@ -141,6 +143,10 @@
})
end
end
+
+ if @send_keepalive_packet && @deny_keepalive
+ raise Fluent::ConfigError, "both 'send_keepalive_packet' and
'deny_keepalive' cannot be set to true"
+ end
end
def multi_workers_ready?
@@ -161,6 +167,7 @@
shared: shared_socket,
resolve_name: @resolve_hostname,
linger_timeout: @linger_timeout,
+ send_keepalive_packet: @send_keepalive_packet,
backlog: @backlog,
&method(:handle_connection)
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/in_http.rb
new/lib/fluent/plugin/in_http.rb
--- old/lib/fluent/plugin/in_http.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/plugin/in_http.rb 2019-04-02 17:04:49.000000000 +0200
@@ -394,7 +394,7 @@
if @cors_allow_origins.include?('*')
header["Access-Control-Allow-Origin"] = "*"
send_response_and_close("200 OK", header, "")
- elsif @cors_allow_origins.include?(@origin)
+ elsif include_cors_allow_origin
header["Access-Control-Allow-Origin"] = @origin
send_response_and_close("200 OK", header, "")
else
@@ -414,7 +414,7 @@
# For every incoming request, we check if we have some CORS
# restrictions and white listed origins through @cors_allow_origins.
unless @cors_allow_origins.nil?
- unless @cors_allow_origins.include?('*') or
@cors_allow_origins.include?(@origin)
+ unless @cors_allow_origins.include?('*') or include_cors_allow_origin
send_response_and_close("403 Forbidden", {'Connection' =>
'close'}, "")
return
end
@@ -464,7 +464,7 @@
unless @cors_allow_origins.nil?
if @cors_allow_origins.include?('*')
header['Access-Control-Allow-Origin'] = '*'
- elsif @cors_allow_origins.include?(@origin)
+ elsif include_cors_allow_origin
header['Access-Control-Allow-Origin'] = @origin
end
end
@@ -512,6 +512,17 @@
data << "\r\n"
write data
end
+
+ def include_cors_allow_origin
+ if @cors_allow_origins.include?(@origin)
+ return true
+ end
+ filtered_cors_allow_origins = @cors_allow_origins.select {|origin|
origin != ""}
+ return filtered_cors_allow_origins.find do |origin|
+ (start_str,end_str) = origin.split("*",2)
+ @origin.start_with?(start_str) and @origin.end_with?(end_str)
+ end != nil
+ end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/in_monitor_agent.rb
new/lib/fluent/plugin/in_monitor_agent.rb
--- old/lib/fluent/plugin/in_monitor_agent.rb 2019-03-19 14:48:00.000000000
+0100
+++ new/lib/fluent/plugin/in_monitor_agent.rb 2019-04-02 17:04:49.000000000
+0200
@@ -285,6 +285,7 @@
MONITOR_INFO = {
'output_plugin' => ->(){ is_a?(::Fluent::Plugin::Output) },
'buffer_queue_length' => ->(){ throw(:skip) unless
instance_variable_defined?(:@buffer) && [email protected]? &&
@buffer.is_a?(::Fluent::Plugin::Buffer); @buffer.queue.size },
+ 'buffer_timekeys' => ->(){ throw(:skip) unless
instance_variable_defined?(:@buffer) && [email protected]? &&
@buffer.is_a?(::Fluent::Plugin::Buffer); @buffer.timekeys },
'buffer_total_queued_size' => ->(){ throw(:skip) unless
instance_variable_defined?(:@buffer) && [email protected]? &&
@buffer.is_a?(::Fluent::Plugin::Buffer); @buffer.stage_size +
@buffer.queue_size },
'retry_count' => ->(){ instance_variable_defined?(:@num_errors) ?
@num_errors : nil },
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/in_tail.rb
new/lib/fluent/plugin/in_tail.rb
--- old/lib/fluent/plugin/in_tail.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/plugin/in_tail.rb 2019-04-02 17:04:50.000000000 +0200
@@ -171,7 +171,7 @@
@encoding = parse_encoding_param(@encoding) if @encoding
@from_encoding = parse_encoding_param(@from_encoding) if @from_encoding
- if @encoding == @from_encoding
+ if @encoding && (@encoding == @from_encoding)
log.warn "'encoding' and 'from_encoding' are same encoding. No effect"
end
end
@@ -239,6 +239,7 @@
false
end
rescue Errno::ENOENT
+ log.debug("#{p} is missing after refresh file list")
false
end
}
@@ -260,6 +261,8 @@
target_paths = expand_paths
existence_paths = @tails.keys
+ log.debug { "tailing paths: target = #{target_paths.join(",")} |
existing = #{existence_paths.join(",")}" }
+
unwatched = existence_paths - target_paths
added = target_paths - existence_paths
@@ -337,7 +340,7 @@
def update_watcher(path, pe)
if @pf
unless pe.read_inode == @pf[path].read_inode
- log.trace "Skip update_watcher because watcher has been already
updated by other inotify event"
+ log.debug "Skip update_watcher because watcher has been already
updated by other inotify event"
return
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/in_tcp.rb
new/lib/fluent/plugin/in_tcp.rb
--- old/lib/fluent/plugin/in_tcp.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/plugin/in_tcp.rb 2019-04-02 17:04:50.000000000 +0200
@@ -33,6 +33,8 @@
config_param :source_host_key, :string, default: nil, deprecated: "use
source_hostname_key instead."
desc "The field name of the client's hostname."
config_param :source_hostname_key, :string, default: nil
+ desc "The field name of the client's address."
+ config_param :source_address_key, :string, default: nil
config_param :blocking_timeout, :time, default: 0.5
@@ -76,6 +78,7 @@
tag = extract_tag_from_record(record)
tag ||= @tag
time ||= extract_time_from_record(record) ||
Fluent::EventTime.now
+ record[@source_address_key] = conn.remote_addr if
@source_address_key
record[@source_hostname_key] = conn.remote_host if
@source_hostname_key
router.emit(tag, time, record)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/in_udp.rb
new/lib/fluent/plugin/in_udp.rb
--- old/lib/fluent/plugin/in_udp.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/plugin/in_udp.rb 2019-04-02 17:04:50.000000000 +0200
@@ -33,6 +33,8 @@
config_param :source_host_key, :string, default: nil, deprecated: "use
source_hostname_key instead."
desc "The field name of the client's hostname."
config_param :source_hostname_key, :string, default: nil
+ desc "The field name of the client's address."
+ config_param :source_address_key, :string, default: nil
desc "Deprecated parameter. Use message_length_limit instead"
config_param :body_size_limit, :size, default: nil, deprecated: "use
message_length_limit instead."
@@ -79,6 +81,7 @@
tag = extract_tag_from_record(record)
tag ||= @tag
time ||= extract_time_from_record(record) || Fluent::EventTime.now
+ record[@source_address_key] = sock.remote_addr if
@source_address_key
record[@source_hostname_key] = sock.remote_host if
@source_hostname_key
router.emit(tag, time, record)
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/out_exec_filter.rb
new/lib/fluent/plugin/out_exec_filter.rb
--- old/lib/fluent/plugin/out_exec_filter.rb 2019-03-19 14:48:00.000000000
+0100
+++ new/lib/fluent/plugin/out_exec_filter.rb 2019-04-02 17:04:50.000000000
+0200
@@ -69,7 +69,7 @@
desc 'The number of spawned process for command.'
config_param :num_children, :integer, default: 1
- desc 'Respawn command when command exit. ["none", "inf" or positive
integer for times to respawn (defaut: none)]'
+ desc 'Respawn command when command exit. ["none", "inf" or positive
integer for times to respawn (default: none)]'
# nil, 'none' or 0: no respawn, 'inf' or -1: infinite times, positive
integer: try to respawn specified times only
config_param :child_respawn, :string, default: nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin/out_file.rb
new/lib/fluent/plugin/out_file.rb
--- old/lib/fluent/plugin/out_file.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/plugin/out_file.rb 2019-04-02 17:04:50.000000000 +0200
@@ -68,6 +68,7 @@
config_set_default :timekey, DEFAULT_TIMEKEY
end
+ attr_reader :dir_perm
attr_accessor :last_written_path # for tests
module SymlinkBufferMixin
@@ -87,7 +88,9 @@
# These chunks will be enqueued immediately, and will be flushed soon.
latest_metadata = metadata_list.select{|m| m.timekey
}.sort_by(&:timekey).last
if chunk.metadata == latest_metadata
- FileUtils.ln_sf(chunk.path,
@_output_plugin_for_symlink.extract_placeholders(@_symlink_path, chunk))
+ sym_path =
@_output_plugin_for_symlink.extract_placeholders(@_symlink_path, chunk)
+ FileUtils.mkdir_p(File.dirname(sym_path), mode:
@_output_plugin_for_symlink.dir_perm)
+ FileUtils.ln_sf(chunk.path, sym_path)
end
chunk
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/plugin_helper/socket_option.rb
new/lib/fluent/plugin_helper/socket_option.rb
--- old/lib/fluent/plugin_helper/socket_option.rb 2019-03-19
14:48:00.000000000 +0100
+++ new/lib/fluent/plugin_helper/socket_option.rb 2019-04-02
17:04:50.000000000 +0200
@@ -24,7 +24,7 @@
FORMAT_STRUCT_LINGER = 'I!I!' # { int l_onoff; int l_linger; }
FORMAT_STRUCT_TIMEVAL = 'L!L!' # { time_t tv_sec; suseconds_t tv_usec; }
- def socket_option_validate!(protocol, resolve_name: nil, linger_timeout:
nil, recv_timeout: nil, send_timeout: nil, receive_buffer_size: nil)
+ def socket_option_validate!(protocol, resolve_name: nil, linger_timeout:
nil, recv_timeout: nil, send_timeout: nil, receive_buffer_size: nil,
send_keepalive_packet: nil)
unless resolve_name.nil?
if protocol != :tcp && protocol != :udp && protocol != :tls
raise ArgumentError, "BUG: resolve_name in available for
tcp/udp/tls"
@@ -35,9 +35,14 @@
raise ArgumentError, "BUG: linger_timeout is available for tcp/tls"
end
end
+ if send_keepalive_packet
+ if protocol != :tcp
+ raise ArgumentError, "BUG: send_keepalive_packet is available for
tcp"
+ end
+ end
end
- def socket_option_set(sock, resolve_name: nil, nonblock: false,
linger_timeout: nil, recv_timeout: nil, send_timeout: nil, receive_buffer_size:
nil)
+ def socket_option_set(sock, resolve_name: nil, nonblock: false,
linger_timeout: nil, recv_timeout: nil, send_timeout: nil, receive_buffer_size:
nil, send_keepalive_packet: nil)
unless resolve_name.nil?
sock.do_not_reverse_lookup = !resolve_name
end
@@ -59,6 +64,9 @@
if receive_buffer_size
socket_option_set_one(sock, :SO_RCVBUF, receive_buffer_size.to_i)
end
+ if send_keepalive_packet
+ socket_option_set_one(sock, :SO_KEEPALIVE, true)
+ end
sock
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/fluent/version.rb new/lib/fluent/version.rb
--- old/lib/fluent/version.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/lib/fluent/version.rb 2019-04-02 17:04:50.000000000 +0200
@@ -16,6 +16,6 @@
module Fluent
- VERSION = '1.4.1'
+ VERSION = '1.4.2'
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2019-03-19 14:48:00.000000000 +0100
+++ new/metadata 2019-04-02 17:04:49.000000000 +0200
@@ -1,14 +1,14 @@
--- !ruby/object:Gem::Specification
name: fluentd
version: !ruby/object:Gem::Version
- version: 1.4.1
+ version: 1.4.2
platform: ruby
authors:
- Sadayuki Furuhashi
autorequire:
bindir: bin
cert_chain: []
-date: 2019-03-19 00:00:00.000000000 Z
+date: 2019-04-02 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: msgpack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/plugin/test_buffer.rb
new/test/plugin/test_buffer.rb
--- old/test/plugin/test_buffer.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/test/plugin/test_buffer.rb 2019-04-02 17:04:50.000000000 +0200
@@ -189,6 +189,7 @@
assert_equal 0, plugin.stage_size
assert_equal 0, plugin.queue_size
+ assert_equal [], plugin.timekeys
# @p is started plugin
@@ -242,6 +243,7 @@
assert_nil @p.instance_eval{ @metadata_list } # #metadata_list does #dup
for @metadata_list
assert_equal 0, @p.stage_size
assert_equal 0, @p.queue_size
+ assert_equal [], @p.timekeys
end
test '#metadata_list returns list of metadata on stage or in queue' do
@@ -569,9 +571,12 @@
assert_equal [@dm0,@dm1,@dm1], @p.queue.map(&:metadata)
assert_equal [@dm2,@dm3], @p.stage.keys
- prev_stage_size = @p.stage_size
+ timekey = Time.parse('2016-04-11 16:40:00 +0000').to_i
+ assert [email protected]?(timekey)
- m = @p.metadata(timekey: Time.parse('2016-04-11 16:40:00 +0000').to_i)
+ prev_stage_size = @p.stage_size
+
+ m = @p.metadata(timekey: timekey)
@p.write({m => ["x" * 256, "y" * 256, "z" * 256]})
@@ -581,6 +586,8 @@
assert_equal [@dm0,@dm1,@dm1], @p.queue.map(&:metadata)
assert_equal [@dm2,@dm3,m], @p.stage.keys
+
+ assert @p.timekeys.include?(timekey)
end
test '#write tries to enqueue and store data into a new chunk if existing
chunk is full' do
@@ -688,8 +695,11 @@
assert_equal [@dm0,@dm1,@dm1], @p.queue.map(&:metadata)
assert_equal [@dm2,@dm3], @p.stage.keys
+
+ timekey = Time.parse('2016-04-11 16:40:00 +0000').to_i
+ assert [email protected]?(timekey)
- m = @p.metadata(timekey: Time.parse('2016-04-11 16:40:00 +0000').to_i)
+ m = @p.metadata(timekey: timekey)
es = Fluent::ArrayEventStream.new(
[
@@ -708,6 +718,8 @@
assert_equal [@dm0,@dm1,@dm1], @p.queue.map(&:metadata)
assert_equal [@dm2,@dm3,m], @p.stage.keys
assert_equal 1, @p.stage[m].append_count
+
+ assert @p.timekeys.include?(timekey)
end
test '#write w/ format tries to enqueue and store data into a new chunk if
existing chunk does not have enough space' do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/plugin/test_in_forward.rb
new/test/plugin/test_in_forward.rb
--- old/test/plugin/test_in_forward.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/test/plugin/test_in_forward.rb 2019-04-02 17:04:50.000000000 +0200
@@ -81,6 +81,27 @@
assert_equal 1, d.instance.security.users.size
assert_equal 1, d.instance.security.clients.size
end
+
+ test 'send_keepalive_packet is disabled by default' do
+ @d = d = create_driver(CONFIG_AUTH)
+ assert_false d.instance.send_keepalive_packet
+ end
+
+ test 'send_keepalive_packet can be enabled' do
+ @d = d = create_driver(CONFIG_AUTH + %[
+ send_keepalive_packet true
+ ])
+ assert_true d.instance.send_keepalive_packet
+ end
+
+ test 'both send_keepalive_packet and deny_keepalive cannot be enabled' do
+ assert_raise(Fluent::ConfigError.new("both 'send_keepalive_packet' and
'deny_keepalive' cannot be set to true")) do
+ create_driver(CONFIG_AUTH + %[
+ send_keepalive_packet true
+ deny_keepalive true
+ ])
+ end
+ end
end
sub_test_case 'message' do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/plugin/test_in_http.rb
new/test/plugin/test_in_http.rb
--- old/test/plugin/test_in_http.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/test/plugin/test_in_http.rb 2019-04-02 17:04:50.000000000 +0200
@@ -641,6 +641,63 @@
end
end
+ def test_cors_allowed_wildcard_for_subdomain
+ d = create_driver(CONFIG + 'cors_allow_origins ["http://*.foo.com"]')
+
+ time = event_time("2011-01-02 13:14:15 UTC")
+ events = [
+ ["tag1", time, {"a"=>1}],
+ ]
+
+ d.run do
+ events.each do |tag, time, record|
+ headers = {"Origin" => "http://subdomain.foo.com"}
+
+ res = post("/#{tag}", {"json" => record.to_json, "time" => time.to_i},
headers)
+
+ assert_equal "200", res.code
+ assert_equal "http://subdomain.foo.com",
res["Access-Control-Allow-Origin"]
+ end
+ end
+ end
+
+ def test_cors_allowed_exclude_empty_string
+ d = create_driver(CONFIG + 'cors_allow_origins ["", "http://*.foo.com"]')
+
+ time = event_time("2011-01-02 13:14:15 UTC")
+ events = [
+ ["tag1", time, {"a"=>1}],
+ ]
+
+ d.run do
+ events.each do |tag, time, record|
+ headers = {"Origin" => "http://subdomain.foo.com"}
+
+ res = post("/#{tag}", {"json" => record.to_json, "time" => time.to_i},
headers)
+
+ assert_equal "200", res.code
+ assert_equal "http://subdomain.foo.com",
res["Access-Control-Allow-Origin"]
+ end
+ end
+ end
+
+ def test_cors_allowed_wildcard_preflight_for_subdomain
+ d = create_driver(CONFIG + 'cors_allow_origins ["http://*.foo.com"]')
+
+ d.run do
+ header = {
+ "Origin" => "http://subdomain.foo.com",
+ "Access-Control-Request-Method" => "POST",
+ "Access-Control-Request-Headers" => "Content-Type",
+ }
+ res = options("/cors.test", {}, header)
+
+ assert_equal "200", res.code
+ assert_equal "http://subdomain.foo.com",
res["Access-Control-Allow-Origin"]
+ assert_equal "POST", res["Access-Control-Allow-Methods"]
+ end
+ end
+
def test_content_encoding_gzip
d = create_driver
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/plugin/test_in_monitor_agent.rb
new/test/plugin/test_in_monitor_agent.rb
--- old/test/plugin/test_in_monitor_agent.rb 2019-03-19 14:48:00.000000000
+0100
+++ new/test/plugin/test_in_monitor_agent.rb 2019-04-02 17:04:50.000000000
+0200
@@ -123,6 +123,7 @@
output_info.merge!("config" => {"@id" => "test_out", "@type" =>
"test_out"}) if with_config
error_label_info = {
"buffer_queue_length" => 0,
+ "buffer_timekeys" => [],
"buffer_total_queued_size" => 0,
"output_plugin" => true,
"plugin_category" => "output",
@@ -296,6 +297,7 @@
expected_test_in_response.merge!("config" => {"@id" => "test_in",
"@type" => "test_in"}) if with_config
expected_null_response = {
"buffer_queue_length" => 0,
+ "buffer_timekeys" => [],
"buffer_total_queued_size" => 0,
"output_plugin" => true,
"plugin_category" => "output",
@@ -333,6 +335,7 @@
expected_test_in_response.merge!("config" => {"@id" => "test_in",
"@type" => "test_in"}) if with_config
expected_null_response = {
"buffer_queue_length" => 0,
+ "buffer_timekeys" => [],
"buffer_total_queued_size" => 0,
"output_plugin" => true,
"plugin_category" => "output",
@@ -367,6 +370,7 @@
}
expected_null_response = {
"buffer_queue_length" => 0,
+ "buffer_timekeys" => [],
"buffer_total_queued_size" => 0,
"output_plugin" => true,
"plugin_category" => "output",
@@ -434,7 +438,8 @@
<match **>
@type test_out_fail_write
@id test_out_fail_write
- <buffer>
+ <buffer time>
+ timekey 1m
flush_mode immediate
</buffer>
</match>
@@ -453,17 +458,18 @@
include_config no
")
d.instance.start
+ output = @ra.outputs[0]
+ output.start
+ output.after_start
expected_test_out_fail_write_response = {
"buffer_queue_length" => 1,
+ "buffer_timekeys" => [output.calculate_timekey(event_time)],
"buffer_total_queued_size" => 40,
"output_plugin" => true,
"plugin_category" => "output",
"plugin_id" => "test_out_fail_write",
"type" => "test_out_fail_write",
}
- output = @ra.outputs[0]
- output.start
- output.after_start
output.emit_events('test.tag',
Fluent::ArrayEventStream.new([[event_time, {"message" => "test failed flush
1"}]]))
# flush few times to check steps
2.times do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/plugin/test_in_tcp.rb
new/test/plugin/test_in_tcp.rb
--- old/test/plugin/test_in_tcp.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/test/plugin/test_in_tcp.rb 2019-04-02 17:04:50.000000000 +0200
@@ -142,4 +142,24 @@
assert event[1].is_a?(Fluent::EventTime)
assert_equal hostname, event[2]['host']
end
+
+ test 'source_address_key' do
+ d = create_driver(BASE_CONFIG + %!
+ format none
+ source_address_key addr
+ !)
+ address = nil
+ d.run(expect_records: 1) do
+ create_tcp_socket('127.0.0.1', PORT) do |sock|
+ address = sock.peeraddr[3]
+ sock.send("test\n", 0)
+ end
+ end
+
+ assert_equal 1, d.events.size
+ event = d.events[0]
+ assert_equal "tcp", event[0]
+ assert event[1].is_a?(Fluent::EventTime)
+ assert_equal address, event[2]['addr']
+ end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/plugin/test_in_udp.rb
new/test/plugin/test_in_udp.rb
--- old/test/plugin/test_in_udp.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/test/plugin/test_in_udp.rb 2019-04-02 17:04:50.000000000 +0200
@@ -201,6 +201,26 @@
assert_equal hostname, d.events[0][2]['host']
end
+ test 'source_address_key' do
+ d = create_driver(BASE_CONFIG + %!
+ format none
+ source_address_key addr
+ !)
+ address = nil
+ d.run(expect_records: 1) do
+ create_udp_socket('127.0.0.1', PORT) do |u|
+ u.send("test", 0)
+ address = u.peeraddr[3]
+ end
+ end
+
+ expected = {'message' => 'test'}
+ assert_equal 1, d.events.size
+ assert_equal "udp", d.events[0][0]
+ assert d.events[0][1].is_a?(Fluent::EventTime)
+ assert_equal address, d.events[0][2]['addr']
+ end
+
test 'receive_buffer_size' do
# doesn't check exact value because it depends on platform and condition
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/plugin/test_out_file.rb
new/test/plugin/test_out_file.rb
--- old/test/plugin/test_out_file.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/test/plugin/test_out_file.rb 2019-04-02 17:04:50.000000000 +0200
@@ -684,11 +684,11 @@
omit "Windows doesn't support symlink" if Fluent.windows?
conf = %[
path #{TMP_DIR}/${tag}/out_file_test
- symlink_path #{SYMLINK_PATH}-${tag}
+ symlink_path #{SYMLINK_PATH}/foo/${tag}
<buffer tag,time>
</buffer>
]
- symlink_path = "#{SYMLINK_PATH}-tag"
+ symlink_path = "#{SYMLINK_PATH}/foo/tag"
d = create_driver(conf)
begin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/plugin_helper/test_server.rb
new/test/plugin_helper/test_server.rb
--- old/test/plugin_helper/test_server.rb 2019-03-19 14:48:00.000000000
+0100
+++ new/test/plugin_helper/test_server.rb 2019-04-02 17:04:50.000000000
+0200
@@ -237,6 +237,15 @@
end
data(
+ 'server_create udp' => [:server_create, :udp],
+ )
+ test 'raise error if tcp/tls/unix options specified for udp' do |(m,
proto)|
+ assert_raise(ArgumentError.new("BUG: send_keepalive_packet is available
for tcp")) do
+ @d.__send__(m, :myserver, PORT, proto: proto, send_keepalive_packet:
true){|x| x }
+ end
+ end
+
+ data(
'server_create tcp' => [:server_create, :tcp, {}],
'server_create udp' => [:server_create, :udp, {max_bytes: 128}],
# 'server_create unix' => [:server_create, :unix, {}],
@@ -352,7 +361,7 @@
sub_test_case '#server_create_tcp' do
test 'can accept all keyword arguments valid for tcp server' do
assert_nothing_raised do
- @d.server_create_tcp(:s, PORT, bind: '127.0.0.1', shared: false,
resolve_name: true, linger_timeout: 10, backlog: 500) do |data, conn|
+ @d.server_create_tcp(:s, PORT, bind: '127.0.0.1', shared: false,
resolve_name: true, linger_timeout: 10, backlog: 500, send_keepalive_packet:
true) do |data, conn|
# ...
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/test_log.rb new/test/test_log.rb
--- old/test/test_log.rb 2019-03-19 14:48:00.000000000 +0100
+++ new/test/test_log.rb 2019-04-02 17:04:50.000000000 +0200
@@ -744,12 +744,6 @@
@log.disable_events(Thread.current)
end
- def test_time_format
- assert_equal(@log.time_format, @logger.time_format)
- @log.time_format = "time_format"
- assert_equal(@log.time_format, @logger.time_format)
- end
-
def test_event
mock(@logger).event(Fluent::Log::LEVEL_TRACE, { key: "value" })
@log.event(Fluent::Log::LEVEL_TRACE, { key: "value" })
@@ -794,6 +788,36 @@
assert_equal(@log.optional_attrs, @logger.optional_attrs)
end
end
+
+ sub_test_case "partially delegated" do
+ def setup
+ super
+ @log = Fluent::PluginLogger.new(@logger)
+ end
+
+ data(
+ text: [:text, "2016-04-21 11:58:41 +0900 [info]: yaaay\n"],
+ json: [:json, %Q({"time":"2016-04-21 11:58:41
+0900","level":"info","message":"yaaay"}\n)],
+ )
+ def test_format(data)
+ fmt, expected_log_line = data
+ @log.format = fmt
+ @log.info "yaaay"
+ assert{ @log_device.logs.include? expected_log_line }
+ end
+
+ data(
+ text: [:text, "2016 [info]: yaaay\n"],
+ json: [:json, %Q({"time":"2016","level":"info","message":"yaaay"}\n)],
+ )
+ def test_time_format(data)
+ fmt, expected_log_line = data
+ @log.format = fmt
+ @log.time_format = "%Y"
+ @log.info "yaaay"
+ assert{ @log_device.logs.include? expected_log_line }
+ end
+ end
end
class PluginLoggerMixinTest < Test::Unit::TestCase