Skip to content

Conversation

daipom
Copy link
Contributor

@daipom daipom commented Sep 10, 2025

Which issue(s) this PR fixes:

What this PR does / why we need it:
TCP server with server helper does not close all connections at shutdown process.
When receiving data from multiple clients, the server receive the data continuously because the connection is not closed.

The server will shut down properly by this PR

Reproduce

  1. Launch Fluentd with following config file.
  2. Send syslog data from two or more clients using following client script
  3. Terminate Fluentd
  4. Relaunch Fluentd, then it shows the 2025-07-16 14:12:26 +0900 [warn]: #0 restoring buffer file: path = xxxxxxxxx in logs.
  • config
<source>
  @type syslog
  tag system

  <transport tcp>
  </transport>

  bind 0.0.0.0
  port 5140
</source>

<match **>
  @type file
  path "#{File.expand_path('~/tmp/fluentd/maillog')}"
  <buffer>
    @type file
    path "#{File.expand_path('~/tmp/fluentd/buffer/buffer_syslog_maillog')}"
    flush_at_shutdown true
  </buffer>
</match>
  • client script
require 'bundler/inline'
gemfile do
  source 'https://rubygems.org'
  gem 'remote_syslog_sender'
end

def create_client
  Thread.new do
    sender = RemoteSyslogSender.new('127.0.0.1', 5140, protocol: :tcp)
    loop do
      sender.transmit("message body")
      sleep 0.5
    end
  end
end

clients = []
3.times do
  clients << create_client
end

clients.each(&:join)

Example code.

@ary = [1,2,3]

# It would like 1, 2, and 3 to be processed.
# However, following code handles 1 and 3.
@ary.each do |i|
  puts i
  @ary.delete(i)
end

Docs Changes:
Not needed.

Release Note:
Same as the title.

@daipom daipom added this to the v1.16.10 milestone Sep 10, 2025
…uent#5026)

**Which issue(s) this PR fixes**:
Fixes #

**What this PR does / why we need it**:
TCP server with `server` helper does not close all connections at
shutdown process.
When receiving data from multiple clients, the server receive the data
continuously because the connection is not closed.

The server will shut down properly by this PR

### Reproduce
1. Launch Fluentd with following config file.
2. Send syslog data from two or more clients using following client
script
3. Terminate Fluentd
4. Relaunch Fluentd, then it shows the `2025-07-16 14:12:26 +0900
[warn]: #0 restoring buffer file: path = xxxxxxxxx` in logs.

* config

```
<source>
  @type syslog
  tag system

  <transport tcp>
  </transport>

  bind 0.0.0.0
  port 5140
</source>

<match **>
  @type file
  path "#{File.expand_path('~/tmp/fluentd/maillog')}"
  <buffer>
    @type file
    path "#{File.expand_path('~/tmp/fluentd/buffer/buffer_syslog_maillog')}"
    flush_at_shutdown true
  </buffer>
</match>
```

* client script

```ruby
require 'bundler/inline'
gemfile do
  source 'https://rubygems.org'
  gem 'remote_syslog_sender'
end

def create_client
  Thread.new do
    sender = RemoteSyslogSender.new('127.0.0.1', 5140, protocol: :tcp)
    loop do
      sender.transmit("message body")
      sleep 0.5
    end
  end
end

clients = []
3.times do
  clients << create_client
end

clients.each(&:join)
```

Example code.
```
@ary = [1,2,3]

# It would like 1, 2, and 3 to be processed.
# However, following code handles 1 and 3.
@ary.each do |i|
  puts i
  @ary.delete(i)
end
```

**Docs Changes**:
Not needed.

**Release Note**:
Same as the title.

Signed-off-by: Shizuo Fujita <fujita@clear-code.com>
Signed-off-by: Daijiro Fukuda <fukuda@clear-code.com>
@daipom daipom merged commit cb90ad7 into fluent:v1.16 Sep 11, 2025
21 checks passed
@daipom daipom deleted the barkport-pr5026 branch September 11, 2025 08:40
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.

2 participants