Skip to content

Commit b4a8c00

Browse files
committed
root_agent: system_config: Handle maxstdio parameter to increase limit of opening files at once
Signed-off-by: Hiroshi Hatake <[email protected]>
1 parent fe6c577 commit b4a8c00

File tree

6 files changed

+22
-1
lines changed

6 files changed

+22
-1
lines changed

lib/fluent/command/fluentd.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@
163163
cmd_opts[:enable_size_metrics] = b
164164
}
165165

166+
op.on('--maxstdio NUMBER', "specify maxstdio number for increasing the number of opening files at once") {|s|
167+
cmd_opts[:maxstdio] = s.to_i
168+
}
169+
166170
op.on('-v', '--verbose', "increase verbose level (-v: debug, -vv: trace)", TrueClass) {|b|
167171
return unless b
168172
cur_level = cmd_opts.fetch(:log_level, default_opts[:log_level])

lib/fluent/root_agent.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ def initialize(log:, system_config: SystemConfig.new, start_in_parallel: false)
8787
@source_only_mode = SourceOnlyMode.new(system_config.with_source_only, start_in_parallel)
8888
@source_only_buffer_agent = nil
8989
@enable_input_metrics = system_config.enable_input_metrics || false
90+
@maxstdio = system_config.maxstdio
9091

9192
suppress_interval(system_config.emit_error_log_interval) unless system_config.emit_error_log_interval.nil?
9293
end

lib/fluent/supervisor.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,7 @@ def self.default_options
641641
conf_encoding: 'utf-8',
642642
disable_shared_socket: nil,
643643
config_file_type: :guess,
644+
maxstdio: nil,
644645
}
645646
end
646647

@@ -681,6 +682,7 @@ def initialize(cl_opt)
681682
@log_path = opt[:log_path]
682683
@log_rotate_age = opt[:log_rotate_age]
683684
@log_rotate_size = opt[:log_rotate_size]
685+
@maxstdio = opt[:maxstdio]
684686

685687
@finished = false
686688
end
@@ -754,6 +756,14 @@ def options
754756
}
755757
end
756758

759+
def setup_maxstdio
760+
if Fluent.windows?
761+
require "fluent/win32api"
762+
Win32API._setmaxstdio(@maxstdio)
763+
$log.debug "Current maxstdio is #{Win32API._getmaxstdio}"
764+
end
765+
end
766+
757767
def run_worker
758768
Process.setproctitle("worker:#{@system_config.process_name}") if @process_name
759769

@@ -766,6 +776,7 @@ def run_worker
766776
end
767777

768778
install_main_process_signal_handlers
779+
setup_maxstdio
769780

770781
# This is the only log messsage for @standalone_worker
771782
$log.info "starting fluentd-#{Fluent::VERSION} without supervision", pid: Process.pid, ruby: RUBY_VERSION if @standalone_worker

lib/fluent/system_config.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class SystemConfig
3030
:file_permission, :dir_permission, :counter_server, :counter_client,
3131
:strict_config_value, :enable_msgpack_time_support, :disable_shared_socket,
3232
:metrics, :enable_input_metrics, :enable_size_metrics, :enable_jit, :source_only_buffer,
33-
:config_include_dir
33+
:config_include_dir, :maxstdio
3434
]
3535

3636
config_param :workers, :integer, default: 1
@@ -61,6 +61,7 @@ class SystemConfig
6161
v.to_i(8)
6262
end
6363
config_param :config_include_dir, default: Fluent::DEFAULT_CONFIG_INCLUDE_DIR
64+
config_param :maxstdio, :integer, default: nil
6465
config_section :log, required: false, init: true, multi: false do
6566
config_param :path, :string, default: nil
6667
config_param :format, :enum, list: [:text, :json], default: :text

lib/fluent/win32api.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,7 @@ module Win32API
3434
extern "intptr_t _get_osfhandle(int)"
3535
extern "BOOL GetFileInformationByHandle(HANDLE, void *)"
3636
extern "BOOL GetFileInformationByHandleEx(HANDLE, int, void *, DWORD)"
37+
extern 'int _setmaxstdio(int)'
38+
extern 'int _getmaxstdio(void)'
3739
end if Fluent.windows?
3840
end

test/config/test_system_config.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ def parse_text(text)
8080
assert_nil(sc.enable_msgpack_time_support)
8181
assert(!sc.enable_jit)
8282
assert_nil(sc.log.path)
83+
assert_nil(sc.maxstdio)
8384
assert_equal(:text, sc.log.format)
8485
assert_equal('%Y-%m-%d %H:%M:%S %z', sc.log.time_format)
8586
end
@@ -100,6 +101,7 @@ def parse_text(text)
100101
'enable_input_metrics' => ['enable_input_metrics', true],
101102
'enable_size_metrics' => ['enable_size_metrics', true],
102103
'enable_jit' => ['enable_jit', true],
104+
'maxstdio' => ['maxstdio', 768],
103105
)
104106
test "accepts parameters" do |(k, v)|
105107
conf = parse_text(<<-EOS)

0 commit comments

Comments
 (0)