Jan Høydahl created SOLR-18644:
----------------------------------
Summary: bin/solr.cmd ignores SOLR_PID_DIR, writing pid files into
the installation directory
Key: SOLR-18644
URL: https://issues.apache.org/jira/browse/SOLR-18644
Project: Solr
Issue Type: Bug
Components: cli
Reporter: Jan Høydahl
*Found by CATS*, the cross-platform CLI test framework proposed in SOLR-18642 —
see [PR #5323|https://github.com/apache/solr/pull/5323]. Unlike the other bugs
that PR turned up, this one is *not* marked {{@AwaitsFix}} there: the harness
cannot run test classes in parallel on Windows without it, because {{solr stop
\-\-all}} walks this very directory. The fix will be split out into its own PR
and land first.
h3. The bug
Three places agree on the variable and its default. {{bin/solr.cmd}} was the
only one not reading it:
|| where || what it does ||
| {{bin/solr}} line 123 | {{: "${SOLR_PID_DIR:=$SOLR_TIP/bin}"}}, then used
throughout |
| {{SolrProcessManager}} line 100 | reads the {{solr.pid.dir}} system property,
which {{bin/solr}} passes from {{SOLR_PID_DIR}} |
| {{bin/solr.cmd}} | hardcodes {{%SOLR_TIP%\\bin}} in five places |
So on Windows a user who sets {{SOLR_PID_DIR}} is silently ignored: the port
files are written to {{%SOLR_TIP%\\bin}}, and {{stop \-\-all}} and {{status}}
then look there too — self-consistent, but not what was asked for, and not what
{{bin/solr}} does.
h3. It contradicts the documentation
{{solr-control-script-reference.adoc}} says, without qualifying it to POSIX:
{quote}The {{status}} command uses the {{SOLR_PID_DIR}} environment variable to
locate Solr process ID files to find running Solr instances, which defaults to
the {{bin}} directory.{quote}
{{taking-solr-to-production.adoc}} also tells the reader to set it.
h3. Why it matters outside tests
The installation directory is exactly where a packaged or read-only install
does not want writes, which is why the variable exists. A Windows service
pointing {{SOLR_PID_DIR}} at a writable location gets the files in
{{%SOLR_TIP%\\bin}} anyway; if that directory is not writable the port file
silently never appears, after which {{stop \-\-all}} finds nothing to stop and
the node has to be killed by hand.
h3. Fix
Add the default beside the other {{SOLR_TIP}} handling, and replace the five
hardcoded paths:
{code:bat}
IF NOT DEFINED SOLR_PID_DIR set "SOLR_PID_DIR=%SOLR_TIP%\bin"
{code}
The sites are the {{stop \-\-all}} listing and its {{del}}, the stop-by-port
{{del}}, and the two places that write the port file on start, foreground and
background. Same variable, same default, so nothing changes for anyone who does
not set it.
Not addressed here: the pid file spelling still differs between the platforms
({{solr-<port>.pid}} on bash, {{solr-<port>.port}} on Windows), which
{{SolrProcessManager.pidFilePattern}} already copes with.
🤖 AI Assisted
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]