You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@iotdb.apache.org by JT <jt...@163.com> on 2019/09/19 06:01:50 UTC

答复: Resolve "input line is too long" in windows os

Hi,

Should we really include the original CLASSPATH? We may get ourselves into trouble if it contains some incompatible or conflict dependencies with those in IoTDB. For example, if the user has put an old Log4j into CLASSPATH, the system log may fail.

Tian Jiang

发送自 Windows 10 版邮件应用

发件人: Lei Rui
发送时间: 2019年9月19日 13:42
收件人: dev@iotdb.apache.org
主题: Re: Resolve "input line is too long" in windows os

Hi,


Ok then it looks like `start-server.bat` needs changing because now it is 


```
@REM ***** CLASSPATH library setting *****
@REM Ensure that any user defined CLASSPATH variables are not used on startup
set CLASSPATH="%IOTDB_HOME%\lib"
@REM For each jar in the IOTDB_HOME lib directory call append to build the CLASSPATH variable.
set CLASSPATH=%CLASSPATH%;"%IOTDB_HOME%\lib\*"
set CLASSPATH=%CLASSPATH%;iotdb.IoTDB
goto okClasspath
```


Lei Rui
On 9/19/2019 13:33,Xiangdong Huang<sa...@gmail.com> wrote:
Hi,

set CLASSPATH=%CLASSPATH%;%IOTDB_CLI_HOME%\lib\*

Normally, the better way is :

set CLASSPATH=%IOTDB_CLI_HOME%\lib\*;%CLASSPATH%

It means load %IOTDB_CLI_HOME%\lib\* first, and then %CLASSPATH% that the
system original having.

Best,
-----------------------------------
Xiangdong Huang
School of Software, Tsinghua University

黄向东
清华大学 软件学院


Jialin Qiao <qj...@mails.tsinghua.edu.cn> 于2019年9月5日周四 上午9:21写道:


Ha....not iotdb-env.sh, it is in the start-client.bat, import-csv.bat and
export-csv.bat...

Best
--
Jialin Qiao
School of Software, Tsinghua University

乔嘉林
清华大学 软件学院

-----原始邮件-----
发件人: "Jialin Qiao" <qj...@mails.tsinghua.edu.cn>
发送时间: 2019-09-05 09:17:45 (星期四)
收件人: dev@iotdb.apache.org
抄送:
主题: Re:  Resolve "input line is too long" in windows os

Hi,

Ok, I found this in the current iotdb-env.sh:

```
@REM Ensure that any user defined CLASSPATH variables are not used on
startup
set CLASSPATH=""
```

Best,
--
Jialin Qiao
School of Software, Tsinghua University

乔嘉林
清华大学 软件学院

-----原始邮件-----
发件人: "Tian Jiang" <jt...@163.com>
发送时间: 2019-09-05 09:05:29 (星期四)
收件人: "dev@iotdb.apache.org" <de...@iotdb.apache.org>
抄送: "dev@iotdb.apache.org" <de...@iotdb.apache.org>
主题: Re:  Resolve "input line is too long" in windows os

Hi,


I think it is fine, since we are not sure what %CLASSPATH% would be
originally, if we depend on some unknown external dependencies, things may
get uncontrollable.


Tian Jiang


| |
Tian Jiang
|
|
jt2594838@163.com
|
签名由网易邮箱大师定制
On 9/5/2019 08:55,Jialin Qiao<qj...@mails.tsinghua.edu.cn> wrote:
Hi Zesong,

Thanks for sharing your experience :)

I just have a question about this line:

set CLASSPATH=%IOTDB_CLI_HOME%\lib\*

Should it be the following command?

set CLASSPATH=%CLASSPATH%;%IOTDB_CLI_HOME%\lib\*

Best,
--
Jialin Qiao
School of Software, Tsinghua University

乔嘉林
清华大学 软件学院

-----原始邮件-----
发件人: "Zesong Sun" <sa...@foxmail.com>
发送时间: 2019-09-04 22:20:54 (星期三)
收件人: dev <de...@iotdb.apache.org>
抄送:
主题: Resolve "input line is too long" in windows os

Hi,




Recently I have encountered a problem when updating maven dependency
in tsfile module: when starting client in windows os, I will get an error:
"The input line is too long."


It is resulted by limitation of the maximum length of the string that
can be used at the command line: "On computers running Microsoft Windows XP
or later, the maximum length of the string that you can use at the command
prompt is 8191 characters. On computers running Microsoft Windows 2000 or
Windows NT 4.0, the maximum length of the string that you can use at the
command prompt is 2047 characters. This limitation applies to the command
line, individual environment variables (such as the PATH variable) that are
inherited by other processes, and all environment variable expansions. If
you use Command Prompt to run batch files, this limitation also applies to
batch file processing.” [1]


With the suggestion of @Jialin Qiao, I reduced the dependency (from
hadoop-client to hadoop-common), and local tests are all passed. However,
the tests on Travis CI still failed.


Thanks to @Tian Jiang, I changed the set CLASSPATH statement in .bat
file of starting client:


Previous:
```
for %%i in ("%IOTDB_CLI_HOME%\lib\*.jar") do call :append "%%i"
goto okClasspath


:append
set CLASSPATH=%CLASSPATH%;%1
goto :eof

```


And  now:
```
set CLASSPATH=%IOTDB_CLI_HOME%\lib\*
```


This avoid too long input line of CLASSPATH, which resolves the
problem.


The error confused me for really a long time... And I think maybe this
solution will help you in the future. If you have any other suggestions and
ideas, welcome to discuss with us : )




[1]
https://support.microsoft.com/en-us/help/830473/command-prompt-cmd-exe-command-line-string-limitation





BR,
------------------
Zesong Sun
School of Software, Tsinghua University

孙泽嵩
清华大学 软件学院



Re: Resolve "input line is too long" in windows os

Posted by Jialin Qiao <qj...@mails.tsinghua.edu.cn>.
Hi,

+1 for not cover system classpath.

In our start shell, you will find we always clear classpath before adding ours:

CLASSPATH=""
for f in ${IOTDB_HOME}/lib/*.jar; do
  CLASSPATH=${CLASSPATH}":"$f
done

Best,
--
Jialin Qiao
School of Software, Tsinghua University

乔嘉林
清华大学 软件学院

> -----原始邮件-----
> 发件人: "Xiangdong Huang" <sa...@gmail.com>
> 发送时间: 2019-09-19 14:19:49 (星期四)
> 收件人: dev@iotdb.apache.org
> 抄送: 
> 主题: Re: Resolve "input line is too long" in windows os
> 
> Hi,
> 
> JVM loads a set of jars according to the order of users declaration.
> 
> If you set classpath=log4j-1.1.jar : log4j-0.9.jar : log4j-1.2.jar, then
> JVM will load log4-1.1.jar first. If there are duplicate files among the 3
> jars, then only the first one will be loaded into JVM.
> 
> That is why we must set it as classpath= %iotdb classpath% : %system
> classpath%.
> 
> Though for current version of IoTDB, you can just set classpath= %iotdb
> classpath%, I'd like to do not cover system classpath, because it is more
> general.
> 
> Best,
> -----------------------------------
> Xiangdong Huang
> School of Software, Tsinghua University
> 
>  黄向东
> 清华大学 软件学院
> 
> 
> JT <jt...@163.com> 于2019年9月19日周四 下午2:01写道:
> 
> > Hi,
> >
> > Should we really include the original CLASSPATH? We may get ourselves into
> > trouble if it contains some incompatible or conflict dependencies with
> > those in IoTDB. For example, if the user has put an old Log4j into
> > CLASSPATH, the system log may fail.
> >
> > Tian Jiang
> >
> > 发送自 Windows 10 版邮件应用
> >
> > 发件人: Lei Rui
> > 发送时间: 2019年9月19日 13:42
> > 收件人: dev@iotdb.apache.org
> > 主题: Re: Resolve "input line is too long" in windows os
> >
> > Hi,
> >
> >
> > Ok then it looks like `start-server.bat` needs changing because now it is
> >
> >
> > ```
> > @REM ***** CLASSPATH library setting *****
> > @REM Ensure that any user defined CLASSPATH variables are not used on
> > startup
> > set CLASSPATH="%IOTDB_HOME%\lib"
> > @REM For each jar in the IOTDB_HOME lib directory call append to build the
> > CLASSPATH variable.
> > set CLASSPATH=%CLASSPATH%;"%IOTDB_HOME%\lib\*"
> > set CLASSPATH=%CLASSPATH%;iotdb.IoTDB
> > goto okClasspath
> > ```
> >
> >
> > Lei Rui
> > On 9/19/2019 13:33,Xiangdong Huang<sa...@gmail.com> wrote:
> > Hi,
> >
> > set CLASSPATH=%CLASSPATH%;%IOTDB_CLI_HOME%\lib\*
> >
> > Normally, the better way is :
> >
> > set CLASSPATH=%IOTDB_CLI_HOME%\lib\*;%CLASSPATH%
> >
> > It means load %IOTDB_CLI_HOME%\lib\* first, and then %CLASSPATH% that the
> > system original having.
> >
> > Best,
> > -----------------------------------
> > Xiangdong Huang
> > School of Software, Tsinghua University
> >
> > 黄向东
> > 清华大学 软件学院
> >
> >
> > Jialin Qiao <qj...@mails.tsinghua.edu.cn> 于2019年9月5日周四 上午9:21写道:
> >
> >
> > Ha....not iotdb-env.sh, it is in the start-client.bat, import-csv.bat and
> > export-csv.bat...
> >
> > Best
> > --
> > Jialin Qiao
> > School of Software, Tsinghua University
> >
> > 乔嘉林
> > 清华大学 软件学院
> >
> > -----原始邮件-----
> > 发件人: "Jialin Qiao" <qj...@mails.tsinghua.edu.cn>
> > 发送时间: 2019-09-05 09:17:45 (星期四)
> > 收件人: dev@iotdb.apache.org
> > 抄送:
> > 主题: Re:  Resolve "input line is too long" in windows os
> >
> > Hi,
> >
> > Ok, I found this in the current iotdb-env.sh:
> >
> > ```
> > @REM Ensure that any user defined CLASSPATH variables are not used on
> > startup
> > set CLASSPATH=""
> > ```
> >
> > Best,
> > --
> > Jialin Qiao
> > School of Software, Tsinghua University
> >
> > 乔嘉林
> > 清华大学 软件学院
> >
> > -----原始邮件-----
> > 发件人: "Tian Jiang" <jt...@163.com>
> > 发送时间: 2019-09-05 09:05:29 (星期四)
> > 收件人: "dev@iotdb.apache.org" <de...@iotdb.apache.org>
> > 抄送: "dev@iotdb.apache.org" <de...@iotdb.apache.org>
> > 主题: Re:  Resolve "input line is too long" in windows os
> >
> > Hi,
> >
> >
> > I think it is fine, since we are not sure what %CLASSPATH% would be
> > originally, if we depend on some unknown external dependencies, things may
> > get uncontrollable.
> >
> >
> > Tian Jiang
> >
> >
> > | |
> > Tian Jiang
> > |
> > |
> > jt2594838@163.com
> > |
> > 签名由网易邮箱大师定制
> > On 9/5/2019 08:55,Jialin Qiao<qj...@mails.tsinghua.edu.cn> wrote:
> > Hi Zesong,
> >
> > Thanks for sharing your experience :)
> >
> > I just have a question about this line:
> >
> > set CLASSPATH=%IOTDB_CLI_HOME%\lib\*
> >
> > Should it be the following command?
> >
> > set CLASSPATH=%CLASSPATH%;%IOTDB_CLI_HOME%\lib\*
> >
> > Best,
> > --
> > Jialin Qiao
> > School of Software, Tsinghua University
> >
> > 乔嘉林
> > 清华大学 软件学院
> >
> > -----原始邮件-----
> > 发件人: "Zesong Sun" <sa...@foxmail.com>
> > 发送时间: 2019-09-04 22:20:54 (星期三)
> > 收件人: dev <de...@iotdb.apache.org>
> > 抄送:
> > 主题: Resolve "input line is too long" in windows os
> >
> > Hi,
> >
> >
> >
> >
> > Recently I have encountered a problem when updating maven dependency
> > in tsfile module: when starting client in windows os, I will get an error:
> > "The input line is too long."
> >
> >
> > It is resulted by limitation of the maximum length of the string that
> > can be used at the command line: "On computers running Microsoft Windows XP
> > or later, the maximum length of the string that you can use at the command
> > prompt is 8191 characters. On computers running Microsoft Windows 2000 or
> > Windows NT 4.0, the maximum length of the string that you can use at the
> > command prompt is 2047 characters. This limitation applies to the command
> > line, individual environment variables (such as the PATH variable) that are
> > inherited by other processes, and all environment variable expansions. If
> > you use Command Prompt to run batch files, this limitation also applies to
> > batch file processing.” [1]
> >
> >
> > With the suggestion of @Jialin Qiao, I reduced the dependency (from
> > hadoop-client to hadoop-common), and local tests are all passed. However,
> > the tests on Travis CI still failed.
> >
> >
> > Thanks to @Tian Jiang, I changed the set CLASSPATH statement in .bat
> > file of starting client:
> >
> >
> > Previous:
> > ```
> > for %%i in ("%IOTDB_CLI_HOME%\lib\*.jar") do call :append "%%i"
> > goto okClasspath
> >
> >
> > :append
> > set CLASSPATH=%CLASSPATH%;%1
> > goto :eof
> >
> > ```
> >
> >
> > And  now:
> > ```
> > set CLASSPATH=%IOTDB_CLI_HOME%\lib\*
> > ```
> >
> >
> > This avoid too long input line of CLASSPATH, which resolves the
> > problem.
> >
> >
> > The error confused me for really a long time... And I think maybe this
> > solution will help you in the future. If you have any other suggestions and
> > ideas, welcome to discuss with us : )
> >
> >
> >
> >
> > [1]
> >
> > https://support.microsoft.com/en-us/help/830473/command-prompt-cmd-exe-command-line-string-limitation
> >
> >
> >
> >
> >
> > BR,
> > ------------------
> > Zesong Sun
> > School of Software, Tsinghua University
> >
> > 孙泽嵩
> > 清华大学 软件学院
> >
> >
> >

Re: Resolve "input line is too long" in windows os

Posted by Xiangdong Huang <sa...@gmail.com>.
Hi,

JVM loads a set of jars according to the order of users declaration.

If you set classpath=log4j-1.1.jar : log4j-0.9.jar : log4j-1.2.jar, then
JVM will load log4-1.1.jar first. If there are duplicate files among the 3
jars, then only the first one will be loaded into JVM.

That is why we must set it as classpath= %iotdb classpath% : %system
classpath%.

Though for current version of IoTDB, you can just set classpath= %iotdb
classpath%, I'd like to do not cover system classpath, because it is more
general.

Best,
-----------------------------------
Xiangdong Huang
School of Software, Tsinghua University

 黄向东
清华大学 软件学院


JT <jt...@163.com> 于2019年9月19日周四 下午2:01写道:

> Hi,
>
> Should we really include the original CLASSPATH? We may get ourselves into
> trouble if it contains some incompatible or conflict dependencies with
> those in IoTDB. For example, if the user has put an old Log4j into
> CLASSPATH, the system log may fail.
>
> Tian Jiang
>
> 发送自 Windows 10 版邮件应用
>
> 发件人: Lei Rui
> 发送时间: 2019年9月19日 13:42
> 收件人: dev@iotdb.apache.org
> 主题: Re: Resolve "input line is too long" in windows os
>
> Hi,
>
>
> Ok then it looks like `start-server.bat` needs changing because now it is
>
>
> ```
> @REM ***** CLASSPATH library setting *****
> @REM Ensure that any user defined CLASSPATH variables are not used on
> startup
> set CLASSPATH="%IOTDB_HOME%\lib"
> @REM For each jar in the IOTDB_HOME lib directory call append to build the
> CLASSPATH variable.
> set CLASSPATH=%CLASSPATH%;"%IOTDB_HOME%\lib\*"
> set CLASSPATH=%CLASSPATH%;iotdb.IoTDB
> goto okClasspath
> ```
>
>
> Lei Rui
> On 9/19/2019 13:33,Xiangdong Huang<sa...@gmail.com> wrote:
> Hi,
>
> set CLASSPATH=%CLASSPATH%;%IOTDB_CLI_HOME%\lib\*
>
> Normally, the better way is :
>
> set CLASSPATH=%IOTDB_CLI_HOME%\lib\*;%CLASSPATH%
>
> It means load %IOTDB_CLI_HOME%\lib\* first, and then %CLASSPATH% that the
> system original having.
>
> Best,
> -----------------------------------
> Xiangdong Huang
> School of Software, Tsinghua University
>
> 黄向东
> 清华大学 软件学院
>
>
> Jialin Qiao <qj...@mails.tsinghua.edu.cn> 于2019年9月5日周四 上午9:21写道:
>
>
> Ha....not iotdb-env.sh, it is in the start-client.bat, import-csv.bat and
> export-csv.bat...
>
> Best
> --
> Jialin Qiao
> School of Software, Tsinghua University
>
> 乔嘉林
> 清华大学 软件学院
>
> -----原始邮件-----
> 发件人: "Jialin Qiao" <qj...@mails.tsinghua.edu.cn>
> 发送时间: 2019-09-05 09:17:45 (星期四)
> 收件人: dev@iotdb.apache.org
> 抄送:
> 主题: Re:  Resolve "input line is too long" in windows os
>
> Hi,
>
> Ok, I found this in the current iotdb-env.sh:
>
> ```
> @REM Ensure that any user defined CLASSPATH variables are not used on
> startup
> set CLASSPATH=""
> ```
>
> Best,
> --
> Jialin Qiao
> School of Software, Tsinghua University
>
> 乔嘉林
> 清华大学 软件学院
>
> -----原始邮件-----
> 发件人: "Tian Jiang" <jt...@163.com>
> 发送时间: 2019-09-05 09:05:29 (星期四)
> 收件人: "dev@iotdb.apache.org" <de...@iotdb.apache.org>
> 抄送: "dev@iotdb.apache.org" <de...@iotdb.apache.org>
> 主题: Re:  Resolve "input line is too long" in windows os
>
> Hi,
>
>
> I think it is fine, since we are not sure what %CLASSPATH% would be
> originally, if we depend on some unknown external dependencies, things may
> get uncontrollable.
>
>
> Tian Jiang
>
>
> | |
> Tian Jiang
> |
> |
> jt2594838@163.com
> |
> 签名由网易邮箱大师定制
> On 9/5/2019 08:55,Jialin Qiao<qj...@mails.tsinghua.edu.cn> wrote:
> Hi Zesong,
>
> Thanks for sharing your experience :)
>
> I just have a question about this line:
>
> set CLASSPATH=%IOTDB_CLI_HOME%\lib\*
>
> Should it be the following command?
>
> set CLASSPATH=%CLASSPATH%;%IOTDB_CLI_HOME%\lib\*
>
> Best,
> --
> Jialin Qiao
> School of Software, Tsinghua University
>
> 乔嘉林
> 清华大学 软件学院
>
> -----原始邮件-----
> 发件人: "Zesong Sun" <sa...@foxmail.com>
> 发送时间: 2019-09-04 22:20:54 (星期三)
> 收件人: dev <de...@iotdb.apache.org>
> 抄送:
> 主题: Resolve "input line is too long" in windows os
>
> Hi,
>
>
>
>
> Recently I have encountered a problem when updating maven dependency
> in tsfile module: when starting client in windows os, I will get an error:
> "The input line is too long."
>
>
> It is resulted by limitation of the maximum length of the string that
> can be used at the command line: "On computers running Microsoft Windows XP
> or later, the maximum length of the string that you can use at the command
> prompt is 8191 characters. On computers running Microsoft Windows 2000 or
> Windows NT 4.0, the maximum length of the string that you can use at the
> command prompt is 2047 characters. This limitation applies to the command
> line, individual environment variables (such as the PATH variable) that are
> inherited by other processes, and all environment variable expansions. If
> you use Command Prompt to run batch files, this limitation also applies to
> batch file processing.” [1]
>
>
> With the suggestion of @Jialin Qiao, I reduced the dependency (from
> hadoop-client to hadoop-common), and local tests are all passed. However,
> the tests on Travis CI still failed.
>
>
> Thanks to @Tian Jiang, I changed the set CLASSPATH statement in .bat
> file of starting client:
>
>
> Previous:
> ```
> for %%i in ("%IOTDB_CLI_HOME%\lib\*.jar") do call :append "%%i"
> goto okClasspath
>
>
> :append
> set CLASSPATH=%CLASSPATH%;%1
> goto :eof
>
> ```
>
>
> And  now:
> ```
> set CLASSPATH=%IOTDB_CLI_HOME%\lib\*
> ```
>
>
> This avoid too long input line of CLASSPATH, which resolves the
> problem.
>
>
> The error confused me for really a long time... And I think maybe this
> solution will help you in the future. If you have any other suggestions and
> ideas, welcome to discuss with us : )
>
>
>
>
> [1]
>
> https://support.microsoft.com/en-us/help/830473/command-prompt-cmd-exe-command-line-string-limitation
>
>
>
>
>
> BR,
> ------------------
> Zesong Sun
> School of Software, Tsinghua University
>
> 孙泽嵩
> 清华大学 软件学院
>
>
>