[ 
https://issues.apache.org/jira/browse/FLINK-6176?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Scott Kidder updated FLINK-6176:
--------------------------------
    Description: 
The {{config.sh}} script uses the following shell-script function to build the 
{{FLINK_CLASSPATH}} variable from a listing of JAR files in the 
{{$FLINK_LIB_DIR}} directory:

{code}
constructFlinkClassPath() {

    while read -d '' -r jarfile ; do
        if [[ $FLINK_CLASSPATH = "" ]]; then
            FLINK_CLASSPATH="$jarfile";
        else
            FLINK_CLASSPATH="$FLINK_CLASSPATH":"$jarfile"
        fi
    done < <(find "$FLINK_LIB_DIR" ! -type d -name '*.jar' -print0)

    echo $FLINK_CLASSPATH
}
{code}

The {{find}} command as specified will return files in directory-order, which 
varies by OS and filesystem.

The inconsistent ordering of directory contents caused problems for me when 
installing a Flink Docker image onto new machine with a newer version of Docker 
and different filesystem (UFS). The differences in the Docker filesystem 
implementation led to different ordering of the directory contents; this 
affected the {{FLINK_CLASSPATH}} ordering and generated very puzzling 
{{NoClassNotFoundException}} errors when running my Flink application.

This should be addressed by deterministically ordering JAR files added to the 
{{FLINK_CLASSPATH}}.

  was:
The Flink 1.2.0 {{config.sh}} script uses the following shell-script function 
to build the CLASSPATH variable from a listing of JAR files in the 
{{$FLINK_HOME/lib}} directory:

{code}
constructFlinkClassPath() {

    while read -d '' -r jarfile ; do
        if [[ $FLINK_CLASSPATH = "" ]]; then
            FLINK_CLASSPATH="$jarfile";
        else
            FLINK_CLASSPATH="$FLINK_CLASSPATH":"$jarfile"
        fi
    done < <(find "$FLINK_LIB_DIR" ! -type d -name '*.jar' -print0)

    echo $FLINK_CLASSPATH
}
{code}

The {{find}} command as it is specified will return files in directory-order, 
which is varies by OS and filesystem.

The inconsistent ordering caused problems for me when installing a Flink Docker 
image I built on a new machine with a newer version of Docker. The differences 
in the Docker filesystem implementation led to different ordering of the 
directory contents, which led to a different order of the CLASSPATH element and 
very puzzling {{ClassNotFoundException}} errors when running my application.

This should be addressed by adding some explicit ordering to the JAR files 
added to the CLASSPATH used by Flink.


> Add JARs to CLASSPATH deterministically
> ---------------------------------------
>
>                 Key: FLINK-6176
>                 URL: https://issues.apache.org/jira/browse/FLINK-6176
>             Project: Flink
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.2.0
>            Reporter: Scott Kidder
>
> The {{config.sh}} script uses the following shell-script function to build 
> the {{FLINK_CLASSPATH}} variable from a listing of JAR files in the 
> {{$FLINK_LIB_DIR}} directory:
> {code}
> constructFlinkClassPath() {
>     while read -d '' -r jarfile ; do
>         if [[ $FLINK_CLASSPATH = "" ]]; then
>             FLINK_CLASSPATH="$jarfile";
>         else
>             FLINK_CLASSPATH="$FLINK_CLASSPATH":"$jarfile"
>         fi
>     done < <(find "$FLINK_LIB_DIR" ! -type d -name '*.jar' -print0)
>     echo $FLINK_CLASSPATH
> }
> {code}
> The {{find}} command as specified will return files in directory-order, which 
> varies by OS and filesystem.
> The inconsistent ordering of directory contents caused problems for me when 
> installing a Flink Docker image onto new machine with a newer version of 
> Docker and different filesystem (UFS). The differences in the Docker 
> filesystem implementation led to different ordering of the directory 
> contents; this affected the {{FLINK_CLASSPATH}} ordering and generated very 
> puzzling {{NoClassNotFoundException}} errors when running my Flink 
> application.
> This should be addressed by deterministically ordering JAR files added to the 
> {{FLINK_CLASSPATH}}.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to