Search before asking
Version
- IoTDB Version 2.0.11
- Containerized deployment
Describe the bug and provide the minimal reproduce step
At container startup, replace-conf-from-env.sh regenerates iotdb-system.properties from the live environment. It iterates over env unquoted (for v in $(env), ~line 56), so any variable whose value contains spaces gets word-split into individual tokens. Every lowercase token then passes the key filter and is appended as a junk line, which shifts the script's delete-line-N / append-after-N sed math and can displace or drop legitimate overrides such as dn_rpc_address.
Minimal reproduce:
docker run --rm \
-e "SOME_VAR=this is a multi word value" \
-e "dn_rpc_address=0.0.0.0" \
apache/iotdb:2.0.11-standalone
Then inspect the tail of the generated config inside the container:
tail conf/iotdb-system.properties
What did you expect to see?
- Only real config keys patched from the environment.
- Multi-word env values ignored (or handled intact), never split and appended as junk.
dn_rpc_address=0.0.0.0 reliably applied, so the DataNode binds 0.0.0.0 and accepts network connections.
What did you see instead?
The multi-word value was split and appended to iotdb-system.properties as separate lines, one word per line:
# dn_metric_reporter_list=
dn_metric_prometheus_reporter_port=9092
is
a
multi
word
value
_=/usr/bin/env
- Multi-word env values split into word-tokens, each appended as a junk property line (log symptoms: stray
append … lines and grep: Unmatched [ errors).
- The trailing
_=/usr/bin/env line shows the internal-var guard is dead (see "Anything else?").
- The
sed line math shifted by the junk, dropping the dn_rpc_address override so the DataNode fell back to the packaged default 127.0.0.1 and bound loopback-only.
- Nondeterministic output: the same intended config produces different files depending on unrelated env values (and even
env ordering).
Anything else?
Second bug in the same loop: the internal-var guard ! 2w$key_name =~ ^_ (~line 58) has a 2w typo, so the "skip internal vars" check never fires (e.g. append _=/usr/bin/env).
Suggested fix:
- Iterate with
env -0 + read -r -d '' (or equivalent) so values are never word-split.
- Restrict patching to an allowlist of known keys (
dn_* / cn_* / wal_*).
- Fix the
2w typo in the internal-var guard.
Are you willing to submit a PR?
Search before asking
Version
Describe the bug and provide the minimal reproduce step
At container startup,
replace-conf-from-env.shregeneratesiotdb-system.propertiesfrom the live environment. It iterates overenvunquoted (for v in $(env), ~line 56), so any variable whose value contains spaces gets word-split into individual tokens. Every lowercase token then passes the key filter and is appended as a junk line, which shifts the script's delete-line-N / append-after-Nsedmath and can displace or drop legitimate overrides such asdn_rpc_address.Minimal reproduce:
Then inspect the tail of the generated config inside the container:
What did you expect to see?
dn_rpc_address=0.0.0.0reliably applied, so the DataNode binds0.0.0.0and accepts network connections.What did you see instead?
The multi-word value was split and appended to
iotdb-system.propertiesas separate lines, one word per line:append …lines andgrep: Unmatched [errors)._=/usr/bin/envline shows the internal-var guard is dead (see "Anything else?").sedline math shifted by the junk, dropping thedn_rpc_addressoverride so the DataNode fell back to the packaged default127.0.0.1and bound loopback-only.envordering).Anything else?
Second bug in the same loop: the internal-var guard
! 2w$key_name =~ ^_(~line 58) has a2wtypo, so the "skip internal vars" check never fires (e.g.append _=/usr/bin/env).Suggested fix:
env -0+read -r -d ''(or equivalent) so values are never word-split.dn_*/cn_*/wal_*).2wtypo in the internal-var guard.Are you willing to submit a PR?