Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix a bug that BufferChunkOverflowError cause a whole data loss #3553

Merged
merged 2 commits into from Nov 22, 2021

Conversation

kenhys
Copy link
Contributor

@kenhys kenhys commented Nov 5, 2021

Which issue(s) this PR fixes:

Fixes #

What this PR does / why we need it:

In the previous version, if BufferChunkOverflowError occurs,
whole data is not sent because of exception.
It is not appropriate because the problem exists only a partial split
data.

In this commit, detect BufferChunkOverflowError and postpone to raise
it as an exception.
So a valid partial split is processed as intended.

Docs Changes:

N/A

Release Note:

N/A

@kenhys
Copy link
Contributor Author

kenhys commented Nov 5, 2021

TODO: need to fix error.

@kenhys kenhys force-pushed the fix-loss-buffer-chunk branch 5 times, most recently from 8ee2874 to 88e3821 Compare November 10, 2021 09:27
@kenhys kenhys added this to the v1.14.3 milestone Nov 11, 2021
@kenhys kenhys force-pushed the fix-loss-buffer-chunk branch 2 times, most recently from 0bd4076 to bd610dc Compare November 11, 2021 03:12
@kenhys
Copy link
Contributor Author

kenhys commented Nov 11, 2021

TODO: need to fix error.

Resolved.

@kenhys kenhys marked this pull request as ready for review November 11, 2021 03:13
@kenhys
Copy link
Contributor Author

kenhys commented Nov 11, 2021

micro bench:

It has slightly performance drawbacks.

Before:

  Calculating -------------------------------------
  no BufferChunkOverflowError
                          116.903k (± 1.4%) i/s -      1.172M in  10.030026s
  raise BufferChunkOverflowError in every 100 calls
                           40.906k (± 4.1%) i/s -    411.060k in  10.065067s

  Comparison:
  no BufferChunkOverflowError:   116903.2 i/s
  raise BufferChunkOverflowError in every 100 calls:    40905.8 i/s - 2.86x  (± 0.00) slower

After:

  Calculating -------------------------------------
  no BufferChunkOverflowError
                          116.276k (± 1.1%) i/s -      1.163M in  10.007341s
  raise BufferChunkOverflowError in every 100 calls
                           40.179k (± 4.9%) i/s -    401.472k in  10.016561s

  Comparison:
  no BufferChunkOverflowError:   116276.1 i/s
  raise BufferChunkOverflowError in every 100 calls:    40179.0 i/s - 2.89x  (± 0.00) slower
+    test '#write BufferChunkOverflowError micro benchmark' do
+      require 'benchmark/ips'
+      es = Fluent::ArrayEventStream.new([ [event_time('2016-04-11 16:00:02 +0000'), {"message" => "x"}] ])
+      large = Fluent::ArrayEventStream.new([ [event_time('2016-04-11 16:00:02 +0000'), {"message" => "x" * 1_280_000}] ])
+      Benchmark.ips do |x|
+        x.config(:time => 10, :warmup => 2)
+        x.report("no BufferChunkOverflowError") do
+          @p.write({@dm0 => es}, format: @format)
+        end
+        x.report("raise BufferChunkOverflowError in every 100 calls") do |n|
+          n.times do |i|
+            if i % 100 == 0
+              assert_raise Fluent::Plugin::Buffer::BufferChunkOverflowError do
+                @p.write({@dm0 => large}, format: @format)
+              end
+            else
+              @p.write({@dm0 => es}, format: @format)
+            end
+          end
+        end
+        x.compare!
+      end
+    end

Copy link
Contributor

@cosmo0920 cosmo0920 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe almost this implementation is very awesome, but we should consider that buffer should be handled by multiple output threads.
Thus, we should use synchronize blocks to block processing by other output threads while updating values with substitutions.

lib/fluent/plugin/buffer.rb Outdated Show resolved Hide resolved
lib/fluent/plugin/buffer.rb Outdated Show resolved Hide resolved
@kenhys
Copy link
Contributor Author

kenhys commented Nov 12, 2021

Fixed and squashed commit.

Copy link
Contributor

@cosmo0920 cosmo0920 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks reasonable for me.
We should wait for @ashie's review.

Copy link
Member

@ashie ashie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please consider not to use an instance variable @delay_buffer_chunk_overflow_error.
I'm not sure but I think the feature can be realized without bothering synchronization.
For example, store errors into a local variable in write_step_by_step and pass it to write_once or write via 3rd argument of given blocks.

lib/fluent/plugin/buffer.rb Outdated Show resolved Hide resolved
lib/fluent/plugin/buffer.rb Outdated Show resolved Hide resolved
lib/fluent/plugin/buffer.rb Outdated Show resolved Hide resolved
@kenhys
Copy link
Contributor Author

kenhys commented Nov 12, 2021

I've considered two-approaches to fix again.

  • propagate error via #write_once block
  • propagate error by raising #write_step_by_step

The first one is confirmed that it shows better performance.

@ashie
Copy link
Member

ashie commented Nov 12, 2021

It seems good, but I don't yet fully understand your patch.
Please wait for a while.

test/plugin/test_buffer.rb Outdated Show resolved Hide resolved
@ashie
Copy link
Member

ashie commented Nov 16, 2021

@kenhys Could you take a look #1849 too?
Although it's a problem that is different from the one we are going to solve (whole size of a chunk vs 1 message's size), but a very near issue.

@kenhys
Copy link
Contributor Author

kenhys commented Nov 16, 2021

@kenhys Could you take a look #1849 too?

okay, I'll check it.

@kenhys
Copy link
Contributor Author

kenhys commented Nov 16, 2021

With extending memory chunk approach (PoC), it seems that it overcome the performance regression:

 Before:

      Warming up --------------------------------------
      no BufferChunkOverflowError
                              11.488k i/100ms
      raise BufferChunkOverflowError in every 100 calls
                               4.110k i/100ms
      Calculating -------------------------------------
      no BufferChunkOverflowError
                              113.353k (± 1.0%) i/s -      1.137M in  10.034300s
      raise BufferChunkOverflowError in every 100 calls
                               40.599k (± 3.5%) i/s -    406.890k in  10.034076s

      Comparison:
      no BufferChunkOverflowError:   113353.4 i/s
      raise BufferChunkOverflowError in every 100 calls:    40599.5 i/s - 2.79x  (± 0.00) slower

    After:

      Warming up --------------------------------------
      no BufferChunkOverflowError
                              11.399k i/100ms
      raise BufferChunkOverflowError in every 100 calls
                               4.301k i/100ms
      Calculating -------------------------------------
      no BufferChunkOverflowError
                              113.855k (± 1.1%) i/s -      1.140M in  10.013090s
      raise BufferChunkOverflowError in every 100 calls
                               43.683k (± 4.0%) i/s -    438.702k in  10.059251s

      Comparison:
      no BufferChunkOverflowError:   113854.6 i/s
      raise BufferChunkOverflowError in every 100 calls:    43683.3 i/s - 2.61x  (± 0.00) slower

@kenhys
Copy link
Contributor Author

kenhys commented Nov 16, 2021

TODO: also do the same thing for file chunk.

lib/fluent/plugin/buffer.rb Outdated Show resolved Hide resolved
kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 22, 2021
In the previous commit, it assumed format is specified and
not compressed case.

In this commit, it supports compressed data, too.

NOTE: In the test case, the boundary value which cause the overflow is
calculated in the advance because there is a case that the value
varies on machine.

See fluent#3553 (comment)

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
lib/fluent/plugin/buffer.rb Outdated Show resolved Hide resolved
kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 22, 2021
In the previous commit, it assumed format is specified and
not compressed case.

In this commit, it supports compressed data, too.

NOTE: In the test case, the boundary value which cause the overflow is
calculated in the advance because there is a case that the value
varies on machine.

See fluent#3553 (comment)

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
lib/fluent/plugin/buffer.rb Outdated Show resolved Hide resolved
In the previous commit, it assumed format is specified and
not compressed case.

In this commit, it supports compressed data, too.

NOTE: In the test case, the boundary value which cause the overflow is
calculated in the advance because there is a case that the value
varies on machine.

See fluent#3553 (comment)

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
Copy link
Member

@ashie ashie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Waiting CI...

@ashie ashie merged commit 9e904e6 into fluent:master Nov 22, 2021
@ashie
Copy link
Member

ashie commented Nov 22, 2021

Thanks for your work!
TODO: Additional work is required for #1849

kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 22, 2021
…mit_size

Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

Now changed not to raise exception if it's record size is smaller
than chunk limit size.
The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 22, 2021
…mit_size

Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size.
The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 22, 2021
…mit_size

Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, process 3 event
stream (every 1_000_00 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 22, 2021
…mit_size

Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, process 3 event
stream (every 1_000_00 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
@kenhys kenhys deleted the fix-loss-buffer-chunk branch November 22, 2021 07:28
@cosmo0920
Copy link
Contributor

🎉

kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 24, 2021
Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, process 3 event
stream (every 1_000_00 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size. Thus each message is stored into
separated chunks.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

NOTE: This approach depends that chunk implements adding_bytes
interface.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 24, 2021
Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, process 3 event
stream (every 1_000_00 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size. Thus each message is stored into
separated chunks.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

NOTE: This approach depends that chunk implements adding_bytes
interface.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 24, 2021
Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, when processing 3 event
stream (every 1_000_000 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size. Thus each message is stored into
separated chunks.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

NOTE: This approach depends that chunk implements adding_bytes
interface.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kenhys added a commit to kenhys/fluentd that referenced this pull request Nov 24, 2021
Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, when processing 3 event
stream (every 1_000_000 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size. Thus each message is stored into
separated chunks.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

NOTE: This approach depends that chunk implements adding_bytes
interface.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kenhys added a commit to kenhys/fluentd that referenced this pull request Dec 7, 2021
Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, when processing 3 event
stream (every 1_000_000 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size. Thus each message is stored into
separated chunks.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

NOTE: This approach depends that chunk implements adding_bytes
interface.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kenhys added a commit to kenhys/fluentd that referenced this pull request Dec 17, 2021
Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, when processing 3 event
stream (every 1_000_000 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size. Thus each message is stored into
separated chunks.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
ashie pushed a commit to kenhys/fluentd that referenced this pull request Dec 23, 2021
Follow up fluent#3553

In the previous versions, even though each record size is smaller
than chunk limit size, but whole message size exceeds
chunk limit size, BufferChunkOverflowError is raised unexpectedly.

For example, if chunk limit size is 1_280_000, when processing 3 event
stream (every 1_000_000 bytes), it throws an exception like this:

  Fluent::Plugin::Buffer::BufferChunkOverflowError(<a 1000025 bytes
  record (nth: 1) is larger than buffer chunk limit size, a 1000025
  bytes record (nth: 2) is larger than buffer chunk limit size>)

Now changed not to raise exception if it's record size is smaller
enough than chunk limit size. Thus each message is stored into
separated chunks.

The idea is based on that adding byte size is smaller than chunk
limit size, chunk should be unstaged and pushed into queue,
If not, it should be skipped like fluent#3553.

Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
kavirajk pushed a commit to grafana/loki that referenced this pull request Oct 10, 2023
…10839)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [fluentd](https://www.fluentd.org/)
([source](https://togithub.com/fluent/fluentd)) | `'1.14.2'` ->
`'1.15.3'` |
[![age](https://developer.mend.io/api/mc/badges/age/rubygems/fluentd/1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/rubygems/fluentd/1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/rubygems/fluentd/'1.14.2'/1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/rubygems/fluentd/'1.14.2'/1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

### GitHub Vulnerability Alerts

####
[CVE-2022-39379](https://togithub.com/fluent/fluentd/security/advisories/GHSA-fppq-mj76-fpj2)

### Impact
A remote code execution (RCE) vulnerability in non-default
configurations of Fluentd allows unauthenticated attackers to execute
arbitrary code via specially crafted JSON payloads.

Fluentd setups are only affected if the environment variable
`FLUENT_OJ_OPTION_MODE` is explicitly set to `object`.

Please note: The option FLUENT_OJ_OPTION_MODE was introduced in Fluentd
version 1.13.2. Earlier versions of Fluentd are not affected by this
vulnerability.

### Patches
v1.15.3

### Workarounds
Do not use `FLUENT_OJ_OPTION_MODE=object`.

### References

* GHSL-2022-067

---

### Release Notes

<details>
<summary>fluent/fluentd (fluentd)</summary>

###
[`v1.15.3`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1153---20221102)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.15.2...v1.15.3)

##### Bug Fix

-   Support glob for `!include` directive in YAML config format

[fluent/fluentd#3917
-   Remove meaningless oj options

[fluent/fluentd#3929
-   Fix log initializer to correctly create per-process files on Windows

[fluent/fluentd#3939
-   out_file: Fix the multi-worker check with `<worker 0-N>` directive

[fluent/fluentd#3942

##### Misc

-   Fix broken tests on Ruby 3.2

[fluent/fluentd#3883

###
[`v1.15.2`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1152---20220822)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.15.1...v1.15.2)

##### Enhancement

-   Add a new system configuration `enable_jit`

[fluent/fluentd#3857

##### Bug Fix

-   out_file: Fix append mode with `--daemon` flag

[fluent/fluentd#3864
-   child_process: Plug file descriptor leak

[fluent/fluentd#3844

##### Misc

-   Drop win32-api gem to support Ruby 3.2

[fluent/fluentd#3849

###
[`v1.15.1`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1151---20220727)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.15.0...v1.15.1)

##### Bug Fix

-   Add support for concurrent append in out_file

[fluent/fluentd#3808

##### Misc

-   in_tail: Show more information on skipping update_watcher

[fluent/fluentd#3829

###
[`v1.15.0`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1150---20220629)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.6...v1.15.0)

##### Enhancement

-   in_tail: Add log throttling in files based on group rules

[fluent/fluentd#3535
-   Add `dump` command to fluent-ctl

[fluent/fluentd#3680
-   Handle YAML configuration format on configuration file

[fluent/fluentd#3712
- Add `restart_worker_interval` parameter in `<system>` directive to set
interval to restart workers that has stopped for some
reas[fluent/fluentd#3768

##### Bug fixes

-   out_forward: Fix to update timeout of cached sockets

[fluent/fluentd#3711
- in_tail: Fix a possible crash on file rotation when `follow_inodes
true`

[fluent/fluentd#3754
-   output: Fix a possible crash of flush thread

[fluent/fluentd#3755
-   in_tail: Fix crash bugs on Ruby 3.1 on Windows

[fluent/fluentd#3766
- in_tail: Fix a bug that in_tail cannot open non-ascii path on Windows

[fluent/fluentd#3774
- Fix a bug that fluentd doesn't release its own log file even after
rotated by
external
to[fluent/fluentd#3782

##### Misc

-   in_tail: Simplify TargetInfo related code

[fluent/fluentd#3489
-   Fix a wrong issue number in CHANGELOG

[fluent/fluentd#3700
-   server helper: Add comments to linger_timeout behavior about Windows

[fluent/fluentd#3701
-   service_discovery: Fix typo

[fluent/fluentd#3724
-   test: Fix unstable tests and warnings

[fluent/fluentd#3745

###
[`v1.14.6`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1146---20220331)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.5...v1.14.6)

##### Enhancement

-   Enable server plugins to specify socket-option `SO_LINGER`

[fluent/fluentd#3644
-   Add `--umask` command line parameter

[fluent/fluentd#3671

##### Bug fixes

-   Fix metric name typo

[fluent/fluentd#3630
- Apply modifications in pipeline to the records being passed to
`@ERROR` label

[fluent/fluentd#3631
-   Fix wrong calculation of retry interval

[fluent/fluentd#3640
-   Support IPv6 address for `rpc_endpoint` in `system` config

[fluent/fluentd#3641

##### Misc

-   CI: Support Ruby 3.1 except Windows

[fluent/fluentd#3619
-   Switch to GitHub Discussions

[fluent/fluentd#3654
-   Fix CHANGELOG.md heading styles

[fluent/fluentd#3648
-   Declare `null_value_pattern` as `regexp`

[fluent/fluentd#3650

###
[`v1.14.5`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1145---20220209)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.4...v1.14.5)

##### Enhancement

-   Add support for "application/x-ndjson" to `in_http`

[fluent/fluentd#3616
-   Add support for ucrt binary for Windows

[fluent/fluentd#3613

##### Bug fixes

-   Don't retry when `retry_max_times == 0`

[fluent/fluentd#3608
-   Fix hang-up issue during TLS handshake in `out_forward`

[fluent/fluentd#3601
-   Bump up required ServerEngine to v2.2.5

[fluent/fluentd#3599
-   Fix "invalid byte sequence is replaced" warning on Kubernetes

[fluent/fluentd#3596
- Fix "ArgumentError: unknown keyword: :logger" on Windows with Ruby 3.1

[fluent/fluentd#3592

###
[`v1.14.4`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1144---20220106)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.3...v1.14.4)

##### Enhancement

-   `in_tail`: Add option to skip long lines (`max_line_size`)

[fluent/fluentd#3565

##### Bug fix

- Incorrect BufferChunkOverflowError when each event size is <
`chunk_limit_size`

[fluent/fluentd#3560
- On macOS with Ruby 2.7/3.0, `out_file` fails to write events if
`append` is true.

[fluent/fluentd#3579
-   test: Fix unstable test cases

[fluent/fluentd#3574

###
[`v1.14.3`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1143---20211126)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.2...v1.14.3)

##### Enhancement

-   Changed to accept `http_parser.rb` 0.8.0.
    `http_parser.rb` 0.8.0 is ready for Ractor.

[fluent/fluentd#3544

##### Bug fix

-   in_tail: Fixed a bug that no new logs are read when
    `enable_stat_watcher true` and `enable_watch_timer false` is set.

[fluent/fluentd#3541
-   in_tail: Fixed a bug that the beginning and initial lines are lost
after startup when `read_from_head false` and path includes wildcard
'\*'.[fluent/fluentd#3542
-   Fixed a bug that processing messages were lost when
    BufferChunkOverflowError was thrown even though only a specific
message size exceeds
chunk_limi[fluent/fluentd#3553

##### Misc

-   Bump up required version of `win32-service` gem.
newer version is required to implement additional `fluent-ctl` commands.

[fluent/fluentd#3556

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no
schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/grafana/loki).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44LjEiLCJ1cGRhdGVkSW5WZXIiOiIzNy44LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
rhnasc pushed a commit to inloco/loki that referenced this pull request Apr 12, 2024
…rafana#10839)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [fluentd](https://www.fluentd.org/)
([source](https://togithub.com/fluent/fluentd)) | `'1.14.2'` ->
`'1.15.3'` |
[![age](https://developer.mend.io/api/mc/badges/age/rubygems/fluentd/1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/rubygems/fluentd/1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/rubygems/fluentd/'1.14.2'/1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/rubygems/fluentd/'1.14.2'/1.15.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

### GitHub Vulnerability Alerts

####
[CVE-2022-39379](https://togithub.com/fluent/fluentd/security/advisories/GHSA-fppq-mj76-fpj2)

### Impact
A remote code execution (RCE) vulnerability in non-default
configurations of Fluentd allows unauthenticated attackers to execute
arbitrary code via specially crafted JSON payloads.

Fluentd setups are only affected if the environment variable
`FLUENT_OJ_OPTION_MODE` is explicitly set to `object`.

Please note: The option FLUENT_OJ_OPTION_MODE was introduced in Fluentd
version 1.13.2. Earlier versions of Fluentd are not affected by this
vulnerability.

### Patches
v1.15.3

### Workarounds
Do not use `FLUENT_OJ_OPTION_MODE=object`.

### References

* GHSL-2022-067

---

### Release Notes

<details>
<summary>fluent/fluentd (fluentd)</summary>

###
[`v1.15.3`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1153---20221102)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.15.2...v1.15.3)

##### Bug Fix

-   Support glob for `!include` directive in YAML config format

[fluent/fluentd#3917
-   Remove meaningless oj options

[fluent/fluentd#3929
-   Fix log initializer to correctly create per-process files on Windows

[fluent/fluentd#3939
-   out_file: Fix the multi-worker check with `<worker 0-N>` directive

[fluent/fluentd#3942

##### Misc

-   Fix broken tests on Ruby 3.2

[fluent/fluentd#3883

###
[`v1.15.2`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1152---20220822)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.15.1...v1.15.2)

##### Enhancement

-   Add a new system configuration `enable_jit`

[fluent/fluentd#3857

##### Bug Fix

-   out_file: Fix append mode with `--daemon` flag

[fluent/fluentd#3864
-   child_process: Plug file descriptor leak

[fluent/fluentd#3844

##### Misc

-   Drop win32-api gem to support Ruby 3.2

[fluent/fluentd#3849

###
[`v1.15.1`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1151---20220727)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.15.0...v1.15.1)

##### Bug Fix

-   Add support for concurrent append in out_file

[fluent/fluentd#3808

##### Misc

-   in_tail: Show more information on skipping update_watcher

[fluent/fluentd#3829

###
[`v1.15.0`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1150---20220629)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.6...v1.15.0)

##### Enhancement

-   in_tail: Add log throttling in files based on group rules

[fluent/fluentd#3535
-   Add `dump` command to fluent-ctl

[fluent/fluentd#3680
-   Handle YAML configuration format on configuration file

[fluent/fluentd#3712
- Add `restart_worker_interval` parameter in `<system>` directive to set
interval to restart workers that has stopped for some
reas[fluent/fluentd#3768

##### Bug fixes

-   out_forward: Fix to update timeout of cached sockets

[fluent/fluentd#3711
- in_tail: Fix a possible crash on file rotation when `follow_inodes
true`

[fluent/fluentd#3754
-   output: Fix a possible crash of flush thread

[fluent/fluentd#3755
-   in_tail: Fix crash bugs on Ruby 3.1 on Windows

[fluent/fluentd#3766
- in_tail: Fix a bug that in_tail cannot open non-ascii path on Windows

[fluent/fluentd#3774
- Fix a bug that fluentd doesn't release its own log file even after
rotated by
external
to[fluent/fluentd#3782

##### Misc

-   in_tail: Simplify TargetInfo related code

[fluent/fluentd#3489
-   Fix a wrong issue number in CHANGELOG

[fluent/fluentd#3700
-   server helper: Add comments to linger_timeout behavior about Windows

[fluent/fluentd#3701
-   service_discovery: Fix typo

[fluent/fluentd#3724
-   test: Fix unstable tests and warnings

[fluent/fluentd#3745

###
[`v1.14.6`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1146---20220331)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.5...v1.14.6)

##### Enhancement

-   Enable server plugins to specify socket-option `SO_LINGER`

[fluent/fluentd#3644
-   Add `--umask` command line parameter

[fluent/fluentd#3671

##### Bug fixes

-   Fix metric name typo

[fluent/fluentd#3630
- Apply modifications in pipeline to the records being passed to
`@ERROR` label

[fluent/fluentd#3631
-   Fix wrong calculation of retry interval

[fluent/fluentd#3640
-   Support IPv6 address for `rpc_endpoint` in `system` config

[fluent/fluentd#3641

##### Misc

-   CI: Support Ruby 3.1 except Windows

[fluent/fluentd#3619
-   Switch to GitHub Discussions

[fluent/fluentd#3654
-   Fix CHANGELOG.md heading styles

[fluent/fluentd#3648
-   Declare `null_value_pattern` as `regexp`

[fluent/fluentd#3650

###
[`v1.14.5`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1145---20220209)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.4...v1.14.5)

##### Enhancement

-   Add support for "application/x-ndjson" to `in_http`

[fluent/fluentd#3616
-   Add support for ucrt binary for Windows

[fluent/fluentd#3613

##### Bug fixes

-   Don't retry when `retry_max_times == 0`

[fluent/fluentd#3608
-   Fix hang-up issue during TLS handshake in `out_forward`

[fluent/fluentd#3601
-   Bump up required ServerEngine to v2.2.5

[fluent/fluentd#3599
-   Fix "invalid byte sequence is replaced" warning on Kubernetes

[fluent/fluentd#3596
- Fix "ArgumentError: unknown keyword: :logger" on Windows with Ruby 3.1

[fluent/fluentd#3592

###
[`v1.14.4`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1144---20220106)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.3...v1.14.4)

##### Enhancement

-   `in_tail`: Add option to skip long lines (`max_line_size`)

[fluent/fluentd#3565

##### Bug fix

- Incorrect BufferChunkOverflowError when each event size is <
`chunk_limit_size`

[fluent/fluentd#3560
- On macOS with Ruby 2.7/3.0, `out_file` fails to write events if
`append` is true.

[fluent/fluentd#3579
-   test: Fix unstable test cases

[fluent/fluentd#3574

###
[`v1.14.3`](https://togithub.com/fluent/fluentd/blob/HEAD/CHANGELOG.md#Release-v1143---20211126)

[Compare
Source](https://togithub.com/fluent/fluentd/compare/v1.14.2...v1.14.3)

##### Enhancement

-   Changed to accept `http_parser.rb` 0.8.0.
    `http_parser.rb` 0.8.0 is ready for Ractor.

[fluent/fluentd#3544

##### Bug fix

-   in_tail: Fixed a bug that no new logs are read when
    `enable_stat_watcher true` and `enable_watch_timer false` is set.

[fluent/fluentd#3541
-   in_tail: Fixed a bug that the beginning and initial lines are lost
after startup when `read_from_head false` and path includes wildcard
'\*'.[fluent/fluentd#3542
-   Fixed a bug that processing messages were lost when
    BufferChunkOverflowError was thrown even though only a specific
message size exceeds
chunk_limi[fluent/fluentd#3553

##### Misc

-   Bump up required version of `win32-service` gem.
newer version is required to implement additional `fluent-ctl` commands.

[fluent/fluentd#3556

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no
schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/grafana/loki).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44LjEiLCJ1cGRhdGVkSW5WZXIiOiIzNy44LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants