[Bug] health_check.bat creates a stray empty directory (e.g. C:\Program) when the install path contains a space

Open Beginner friendly
#18,177 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
78/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Quiet
Tech stack
shell

Research direction

Start in scripts/tools/windows/ops/health_check.bat, focusing on the :local_dirs_check routine and its directory iteration. Reproduce with IoTDB installed under a path containing spaces, then verify that tools\windows\ops\health_check.bat -o local reports each configured directory as one path and creates no stray directory.

Written by the indexing model from the issue text.

Description

Search before asking
  • I searched in the issues and found nothing similar.
Version

Reproduced on 2.0.8 and current master (identical code). Present since the tool was introduced (#12325); not addressed by #12435 (launch scripts) or #12450 (permission-detection logic).

Environment:

  • OS: Windows (reproduces wherever the install path contains a space)
  • IoTDB: 2.0.8 and master
Describe the bug and provide the minimal reproduce step

On Windows, if IoTDB is located under a path that contains a space (e.g. C:\Program Files\iotdb), the health-check tool's Installation Environment(Directory Access) check splits directory paths at the space. It:

  1. creates a stray empty directory such as C:\Program, and
  2. prints garbled results - e.g. "C:\Program" has write permission followed by "Files\...\ext\pipe" has write permission - instead of one line for the real directory.

To reproduce:

  1. Unzip/install IoTDB into a path containing a space, e.g. C:\Program Files\iotdb (or C:\test dir\iotdb).
  2. Run tools\windows\ops\health_check.bat -o local.
  3. Observe a stray empty C:\Program directory, and split/garbled lines in the Directory Access section.

Any configured directory under the spaced install path triggers it; the ext/* dirs (pipe_lib_dir / udf_lib_dir / trigger_lib_dir) hit it by default because they resolve to %IOTDB_HOME%\ext\....

Affected file: scripts/tools/windows/ops/health_check.bat, routine :local_dirs_check.

Root cause:

:local_dirs_check joins the directory variables into spacedirs with spaces and iterates with for %%a in (%spacedirs%). The for ... in (set) form tokenizes on spaces (and ,/;), so a path containing a space is split into two
tokens. The inner for %%b/%%c loops already preserve spaces for the ;/, multi-dir separators via the "!var:;=" "!" technique, but the outer space-join defeats that. Separately, %%c (from for %%c in ("...")) still carries its
surrounding quotes, so mkdir "%%c" expands to mkdir ""C:\Program Files\..."" - a doubly-quoted path the argument parser re-splits.

What did you expect to see?

Each configured directory is checked as a single path; no stray directory is created; the output has one clean line per directory.

What did you see instead?

The tool splits directory paths at the space and creates a stray directory.

Anything else?

The docs recommend a space-free install path, but the tool shouldn't create stray directories or emit corrupt output when that guidance isn't met - especially since Windows users frequently install under C:\Program Files. A minimal fix is
available (see PR).

Are you willing to submit a PR?
  • I'm willing to submit a PR!
Dominant language
Java
Stars
6.4k
Forks
1.2k
Avg merge
1d 8h
Merged PRs (30d)
129

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/iotdb

All issues in apache/iotdb

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.