From d23bb68d843176e027d3b05d7e18c84ad696a082 Mon Sep 17 00:00:00 2001 From: Yuta Iwama Date: Wed, 27 Nov 2019 11:29:48 -0800 Subject: [PATCH] inline_config is replaced with the input value when user specify `-` Current implementation calling `STDIN.read` in supervisors and workers. it cause blocking in worker side. Signed-off-by: Yuta Iwama --- lib/fluent/supervisor.rb | 14 +++++++------- test/test_supervisor.rb | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/fluent/supervisor.rb b/lib/fluent/supervisor.rb index ac982b5349..58b2923ef9 100644 --- a/lib/fluent/supervisor.rb +++ b/lib/fluent/supervisor.rb @@ -251,9 +251,7 @@ def self.load_config(path, params = {}) # Assume fluent.conf encoding is UTF-8 config_data = File.open(path, "r:#{params['conf_encoding']}:utf-8") {|f| f.read } inline_config = params['inline_config'] - if inline_config == '-' - config_data << "\n" << STDIN.read - elsif inline_config + if inline_config config_data << "\n" << inline_config.gsub("\\n","\n") end fluentd_conf = Fluent::Config.parse(config_data, config_fname, config_basedir, params['use_v1_config']) @@ -572,6 +570,10 @@ def configure(supervisor: false) show_plugin_config end + if @inline_config == '-' + @inline_config = STDIN.read + end + @conf = read_config @system_config = build_system_config(@conf) @@ -783,10 +785,8 @@ def read_config config_fname = File.basename(@config_path) config_basedir = File.dirname(@config_path) config_data = File.open(@config_path, "r:#{@conf_encoding}:utf-8") {|f| f.read } - if @inline_config == '-' - config_data << "\n" << STDIN.read - elsif @inline_config - config_data << "\n" << @inline_config.gsub("\\n","\n") + if @inline_config + config_data << "\n" << @inline_config.gsub("\\n", "\n") end Fluent::Config.parse(config_data, config_fname, config_basedir, @use_v1_config) end diff --git a/test/test_supervisor.rb b/test/test_supervisor.rb index ed52cdd913..3a50f9ac43 100644 --- a/test/test_supervisor.rb +++ b/test/test_supervisor.rb @@ -448,6 +448,21 @@ def test_logger_with_rotate_age_and_rotate_size(rotate_age) assert_equal 10, $log.out.instance_variable_get(:@shift_size) end + def test_inline_config + opts = Fluent::Supervisor.default_options + opts[:inline_config] = '-' + sv = Fluent::Supervisor.new(opts) + assert_equal '-', sv.instance_variable_get(:@inline_config) + + inline_config = '\n@type stdout\n' + stub(STDIN).read { inline_config } + stub(sv).read_config # to skip + stub(sv).build_system_config { Fluent::SystemConfig.new } # to skip + + sv.configure + assert_equal inline_config, sv.instance_variable_get(:@inline_config) + end + def create_debug_dummy_logger dl_opts = {} dl_opts[:log_level] = ServerEngine::DaemonLogger::DEBUG