Details
Description
In the bin/storm script there is logic that attempts to determine the fullpath of the bin directory, and it relies on using cd and pwd like so:
STORM_BIN_DIR=`dirname ${PRG}` export STORM_BASE_DIR=`cd ${STORM_BIN_DIR}/..;pwd`
This is problematic if your environment has an exported CDPATH variable which contains a matching entry, because bash's built-in cd command prints out the directory upon successfully matching a CDPATH entry. And then the pwd command prints the same directory again. So the behavior results in the STORM_BASE_DIR variable containing duplicate paths with a newline in between. This results in a broken classpath in the Storm processes, which looks something like this:
...:/base/apache-storm-2.0.0-SNAPSHOT/lib/storm-rename-hack-2.0.0-SNAPSHOT.jar:/base/apache-storm-2.0.0-SNAPSHOT^J/base/apache-storm-2.0.0-SNAPSHOT/conf:/base/apache-storm-2.0.0-SNAPSHOT/storm-local/supervisor/stormdist/foo-1-1480491213/stormjar.jar
Or with the : chars replaced with newlines for ease of readability:
... /base/apache-storm-2.0.0-SNAPSHOT/lib/storm-rename-hack-2.0.0-SNAPSHOT.jar /base/apache-storm-2.0.0-SNAPSHOT^J/base/apache-storm-2.0.0-SNAPSHOT/conf /base/apache-storm-2.0.0-SNAPSHOT/storm-local/supervisor/stormdist/foo-1-1480491213/stormjar.jar
Note that the classpath entry with /conf as a suffix is munged, with a ^J character in between duplicate copies of the base path.
The solution is easy: at the beginning of the bin/storm script we should unset CDPATH.
FYI, this "CDPATH + bash script" problem is covered in this blog entry:
Attachments
Issue Links
- links to