fluentd icon indicating copy to clipboard operation
fluentd copied to clipboard

`warning: literal string will be frozen in the future` since Ruby 3.4.0

Open Watson1978 opened this issue 6 months ago • 0 comments

Describe the bug

warning: literal string will be frozen in the future since Ruby 3.4.0

According to https://bugs.ruby-lang.org/issues/20205, String literals may be frozen by default in the future (maybe Ruby 4.0+).

A transition period will be provided for this change, the warning is only displayed when Ruby is started with the -w option enabled at present.

In fact, if we run the test in Ruby HEAD, we will encounter many warnings. https://github.com/fluent/fluentd/actions/runs/10277576606

While the performance gains are attractive, it will affect all Ruby code used by fluentd if string literals were frozen by default:

  • Fluentd
  • Dependent gem libraries
  • Fluentd plugins

Then, I investigate logs in https://github.com/fluent/fluentd/actions/runs/10277576606, seems that the msgpack, rr gems and Fluentd main codes encounter the warnings when running tests at present.

/home/runner/.rubies/ruby-head/lib/ruby/gems/3.4.0+0/gems/msgpack-1.7.2/lib/msgpack.rb
/home/runner/.rubies/ruby-head/lib/ruby/gems/3.4.0+0/gems/rr-3.1.0/lib/rr/double_definitions/strategies/double_injection/instance.rb
/home/runner/work/fluentd/fluentd/lib/fluent/command/ctl.rb
/home/runner/work/fluentd/fluentd/lib/fluent/command/plugin_config_formatter.rb
/home/runner/work/fluentd/fluentd/lib/fluent/compat/record_filter_mixin.rb
/home/runner/work/fluentd/fluentd/lib/fluent/config/element.rb
/home/runner/work/fluentd/fluentd/lib/fluent/config/literal_parser.rb
/home/runner/work/fluentd/fluentd/lib/fluent/config/types.rb
/home/runner/work/fluentd/fluentd/lib/fluent/log.rb
/home/runner/work/fluentd/fluentd/lib/fluent/match.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/buffer/file_chunk.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/buffer/memory_chunk.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/compressable.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/formatter_csv.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/formatter_ltsv.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/formatter_out_file.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/in_http.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/in_monitor_agent.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/in_syslog.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/in_tail.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/in_tcp.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/out_forward/handshake_protocol.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin/parser_csv.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin_helper/http_server/server.rb
/home/runner/work/fluentd/fluentd/lib/fluent/plugin_helper/server.rb
/home/runner/work/fluentd/fluentd/lib/fluent/test/output_test.rb
/home/runner/work/fluentd/fluentd/test/command/test_fluentd.rb
/home/runner/work/fluentd/fluentd/test/plugin/in_tail/test_fifo.rb
/home/runner/work/fluentd/fluentd/test/plugin/in_tail/test_io_handler.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_buffer_chunk.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_buffer_file_chunk.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_buffer_file_single_chunk.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_buffer_memory_chunk.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_filter_grep.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_filter_parser.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_in_forward.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_in_tail.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_in_unix.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_out_file.rb
/home/runner/work/fluentd/fluentd/test/plugin/test_out_secondary_file.rb
/home/runner/work/fluentd/fluentd/test/plugin_helper/test_retry_state.rb
/home/runner/work/fluentd/fluentd/test/plugin_helper/test_server.rb

However, the Fluentd plugins are not included. We may need to set RUBYOPT="-disable=frozen_string_literal" to run Fluentd safely.

To Reproduce

Run test on Ruby HEAD

Expected behavior

Works well

Your Environment

- Fluentd version:
- Package version:
- Operating system:
- Kernel version:

Your Configuration

none

Your Error Log

https://github.com/fluent/fluentd/actions/runs/10277576606

Additional context

No response

Watson1978 avatar Aug 09 '24 03:08 Watson1978