Limitation in pgrep on Linux platform breaks script-utils fixUser
------------------------------------------------------------------
Key: SOLR-590
URL: https://issues.apache.org/jira/browse/SOLR-590
Project: Solr
Issue Type: Bug
Affects Versions: 1.2
Environment: Linux 2.6.18-53.1.14.el5 #1 SMP Wed Mar 5 11:37:38 EST
2008 x86_64 x86_64 x86_64 GNU/Linux
procps-3.2.7-8.1.el5
Reporter: Hannes Schmidt
The fixUser function in script-utils uses two methods to determine the username
of the parent process (oldwhoami). If the first method fails for certain
reasons it will fallback to the second method. For most people the first method
will succeed but I know that in my particular installation the first method
fails so I need the second method to succeed. Unfortunately, that fallback
method doesn't work because it uses pgrep to lookup the current script's name
and on my Linux 2.6.18 platform pgrep is limited to 15 characters. The names of
many scripts in the SOLR distribution are longer than that, causing pgrep to
return nothing and the subsequent ps invocation to fail with an error:
ERROR: List of process IDs must follow -p.
You can easily reproduce that behaviour with
/app/solr/solr/bin/snappuller-enable < /dev/null
The redirection of stdin from /dev/null causes fixUser to fallback to the
second method but there are other, more realistic scenarios in which the
fallback happens, like
ssh [EMAIL PROTECTED] /app/solr/solr/bin/snappuller-enable
The fix is to use the -f option which causes pgrep to compare the full path of
the executable. Interestingly, that method is not subject to the 15 character
length limit. The limit is not actually enforced by jetty but rather by the
procfs file system of the linux kernel. If you look at /proc/*/stat you will
notice that the second column is limited to 15 characters.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.