Config files are included in arbitrary order when using `@INCLUDE` command with a wildcard
- Dominant language
- C
- Stars
- 8.1k
- Forks
- 2k
- Avg merge
- 4d 16h
- Merged PRs (30d)
- 58
Description
## Bug Report
**Describe the bug**
Config files are included in arbitrary order when using `@INCLUDE` command with wildcard characters
**To Reproduce**
Populate some config files.
```
cat < /tmp/flb-20.conf
[FILTER]
Name modify
Alias rename_key
Match *
Condition Key_exists service
rename service svc
EOF
cat < /tmp/flb-10.conf
[FILTER]
Name modify
Alias add_key
Match *
Condition Key_exists tool
Add service hello
EOF
```
Confirm the files are listed in the order such as:
```
# ls --sort=none /tmp | grep ^flb.*conf
flb-20.conf
flb-10.conf
```
Main configuration file: main.conf
```
[SERVICE]
Flush 5
Daemon off
[INPUT]
Name dummy
Dummy {"tool": "fluent"}
Tag dummy
[OUTPUT]
Name stdout
Match *
@INCLUDE /tmp/flb-*.conf
```
Start fluent-bit,
```
# /fluent-bit/bin/fluent-bit -c main.conf
Fluent Bit v1.9.5
* Copyright (C) 2015-2022 The Fluent Bit Authors
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io
[2022/06/22 12:34:50] [ info] [fluent bit] version=1.9.5, commit=9ec43447b6, pid=163
[2022/06/22 12:34:50] [ info] [storage] version=1.2.0, type=memory-only, sync=normal, checksum=disabled, max_chunks_up=128
[2022/06/22 12:34:50] [ info] [cmetrics] version=0.3.4
[2022/06/22 12:34:50] [ info] [sp] stream processor started
[2022/06/22 12:34:50] [ info] [output:stdout:stdout.0] worker #0 started
[0] dummy: [1655901290.831520000, {"tool"=>"fluent", "service"=>"hello"}]
...
```
**Expected behavior**
Expect flb-10.conf is included before flb-20.conf and a field `svc=>hello` exists in the final event.
```
[0] dummy: [1655901294.831573400, {"tool"=>"fluent", "svc"=>"hello"}]
```
Also in the step of populating the config files, If flb-10.conf is created before flb-20.conf, we get the expected result.
**Your Environment**
* Version used: 1.9.5
* Operating System and version
`Linux 674dd909c68f 5.10.76-linuxkit #1 SMP Mon Nov 8 10:21:19 UTC 2021 x86_64 GNU/Linux`
**Additional context**
We have multiple configuration files for our Kubernetes clusters and we combine them with Kustomize configmapGenerator. Wildcard is used in `@INCLUDE` command because different clusters require different combinations of config files. We need certain config files be included in determined order and expect the glob matched files are sorted by name.
`GLOB_NOSORT` is used when `glob`ing the files
https://github.com/fluent/fluent-bit/blob/7668f9163e9f88e3fda5e2edb598e72f0ce7611d/src/config_format/flb_cf_fluentbit.c#L158
This probably is not needed. According to https://man7.org/linux/man-pages/man3/glob.3.html
>
GLOB_NOSORT
Don't sort the returned pathnames. The only reason to do
this is to save processing time. By default, the returned
pathnames are sorted.
Contributor guide
Assessment
This issue has not been assessed yet.