Thanks.

About ssh connections pool,
1. If the connection is not enough, Can it be solved by modifying the
number of server ssh connections.
2. I think we have to look at whether a server's parallel ssh tasks will
reach the bottleneck of server connections.

I think it is better to use the encapsulated ssh connection to get clear
exception information.

--------------------
DolphinScheduler(Incubator) Commtter
Hemin Wen  温合民
[email protected]
--------------------


裴龙武 <[email protected]> 于2020年5月20日周三 下午11:29写道:

> Thanks for your advise and suggestions. It may has some exceptions if I
> implement SSH Task as you said. Now, let me explain my ideas.
>
>
> e.g
>
>
> My workflow DAG has 100 or more task, it's all ssh task. I have&nbsp; two
> questions.
>
>
> 1、We must limit SSH connection and reuse the SSH connections, otherwise
> the remote server will be refused.
>
>
> 2、If we config all of these task, we have a lot of repeat work to do.
>
>
> By the way, the way I'm currently verifying is I use local params to
> config the remote server's host,user,password
>
>
> ------------------&nbsp;原始邮件&nbsp;------------------
> 发件人:&nbsp;"lidong dai"<[email protected]&gt;;
> 发送时间:&nbsp;2020年5月20日(星期三) 晚上10:56
> 收件人:&nbsp;"dev"<[email protected]&gt;;
>
> 主题:&nbsp;Re: [Feature] Support SSH Task
>
>
>
> hi, I see you will Jsch, does his license compitable with apache v2
> license, I see the following words "
> JSch 0.0.* was released under the GNU LGPL license. Later, we have switched
> over to a BSD-style license.
> " on https://github.com/is/jsch/blob/master/LICENSE.txt . you know, LGPL
> license not compitable with apache license. but BSD is ok , so the version
> of Jsch is key point
>
> second, Connection Pool is heavy resource, Please use carefully
>
> and I'm a little confused, why there must be add a new Table,&nbsp; other
> task
> types also no seperate table,&nbsp; could you consider task_type and
> task_json
> in t_ds_task_instance ?
>
>
>
> Best Regards
> ---------------
> DolphinScheduler(Incubator) PPMC
> Lidong Dai 代立冬
> [email protected]
> ---------------
>
>
> 裴龙武 <[email protected]&gt; 于2020年5月20日周三 下午9:57写道:
>
> &gt; I want to describe my idea.
> &gt;
> &gt;
> &gt; First, we must design a host table that's named t_ds_ssh_host, e.g
> &gt;
> &gt;
> &gt; - id
> &gt; - name
> &gt; - ip / host
> &gt; - user
> &gt; - password
> &gt; - max_connection
> &gt; - create_time
> &gt; - update_time
> &gt; - user_id
> &gt;
> &gt;
> &gt; Second, Shell can execute in worker server or remote host. We can
> choose a
> &gt; host in host's list.
> &gt;
> &gt;
> &gt; Third, when workflow running, we must maintain the remote host's
> &gt; connection pool.
> &gt;
> &gt;
> &gt; Finally, when workflow finish, we must release the connection pool.
> &gt;
> &gt;
> &gt; Why do we have to maintain a connection pool. Because it is very easy
> to
> &gt; get exceptions when it's has many SSH task.
> &gt;
> &gt;
> &gt;
> &gt;
> &gt; ------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
> &gt; 发件人:&amp;nbsp;"lidong dai"<[email protected]&amp;gt;;
> &gt; 发送时间:&amp;nbsp;2020年5月20日(星期三) 晚上7:12
> &gt; 收件人:&amp;nbsp;"dev"<[email protected]&amp;gt;;
> &gt;
> &gt; 主题:&amp;nbsp;Re: [Feature] Support SSH Task
> &gt;
> &gt;
> &gt;
> &gt; glad to hear that you will implement this feature
> &gt;
> &gt;
> &gt;
> &gt; Best Regards
> &gt; ---------------
> &gt; DolphinScheduler(Incubator) PPMC
> &gt; Lidong Dai 代立冬
> &gt; [email protected]
> &gt; ---------------
> &gt;
> &gt;
> &gt; 裴龙武 <[email protected]&amp;gt; 于2020年5月20日周三 下午3:47写道:
> &gt;
> &gt; &amp;gt; My code is not perfect yet. I will write a detailed design
> document.
> &gt; Then
> &gt; &amp;gt; I will realize this feature about our discussion result.
> &gt; &amp;gt;
> &gt; &amp;gt;
> &gt; &amp;gt;
> ------------------&amp;amp;nbsp;原始邮件&amp;amp;nbsp;------------------
> &gt; &amp;gt; 发件人:&amp;amp;nbsp;"wenhemin"<[email protected]&amp;amp;gt;;
> &gt; &amp;gt; 发送时间:&amp;amp;nbsp;2020年5月18日(星期一) 晚上7:50
> &gt; &amp;gt; 收件人:&amp;amp;nbsp;"裴龙武"<[email protected]&amp;amp;gt;;"dev"<
> &gt; [email protected]
> &gt; &amp;gt; &amp;amp;gt;;
> &gt; &amp;gt;
> &gt; &amp;gt; 主题:&amp;amp;nbsp;Re: [Feature] Support SSH Task and Support
> dummy task
> &gt; like airflow
> &gt; &amp;gt;
> &gt; &amp;gt;
> &gt; &amp;gt;
> &gt; &amp;gt; Thanks for writing detailed documentation. I think this is
> also a
> &gt; missing
> &gt; &amp;gt; feature of DS.
> &gt; &amp;gt; About the extension point:
> &gt; &amp;gt; 1.Can ssh tasks be merged into shell tasks. Essentially,
> they all
> &gt; execute
> &gt; &amp;gt; shell commands.
> &gt; &amp;gt; 2.About dummy task, DS has the function of disable nodes, I
> do n’t
> &gt; know if
> &gt; &amp;gt; this requirement is met.
> &gt; &amp;gt;
> &gt; &amp;gt; The script from AirFlow to Dolphin is great.
> &gt; &amp;gt;
> &gt; &amp;gt; &amp;amp;gt; 在 2020年5月18日,09:28,裴龙武 
> <[email protected]&amp;amp;gt;
> 写道:
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt; OK, 3Q!
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt; First, I will ensure that open source can use.
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt; Second, I think we must discuss deeply. I write
> a more
> &gt; detailed
> &gt; &amp;gt; document. You can check the attachment. I also send the
> document to
> &gt; &amp;gt; DaiLidong.
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt; Third,&amp;amp;nbsp; I'll give you the error of
> not using SSH
> &gt; connection pool.
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt; ------------------ 原始邮件 ------------------
> &gt; &amp;gt; &amp;amp;gt; 发件人: "wenhemin"<[email protected]&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt; 发送时间: 2020年5月14日(星期四) 晚上7:26
> &gt; &amp;gt; &amp;amp;gt; 收件人: "裴龙武"<[email protected]&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt; 主题: Re: [Feature] Support SSH Task and Support
> dummy task
> &gt; like airflow
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt; Great!
> &gt; &amp;gt; &amp;amp;gt; I think, Can ssh tasks be merged into shell
> tasks,&amp;amp;nbsp;
> &gt; execute
> &gt; &amp;gt; script locally or remotely, Configure on the front end.
> &gt; &amp;gt; &amp;amp;gt; About ssh connect pool, I did not find it
> necessary to use
> &gt; the
> &gt; &amp;gt; connection pool.
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt; BTW, Look at the code to introduce additional
> jar packages,
> &gt; You also
> &gt; &amp;gt; need to ensure that open source can use the license of this
> jar
> &gt; package.
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 在 2020年5月14日,16:20,裴龙武 <
> [email protected] <mailto:
> &gt; [email protected]&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; 写道:
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 1. The priority between these tasks
> is also depended
> &gt; on the
> &gt; &amp;gt; dolphin DAG define. When the front task is not finished, it
> not
> &gt; execute
> &gt; &amp;gt; next task.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 2. I extend ssh task. I also use
> local params to
> &gt; config ssh host,
> &gt; &amp;gt; user and password.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; E.g:
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; public static AbstractTask
> &gt; newTask(TaskExecutionContext
> &gt; &amp;gt; taskExecutionContext, Logger logger)
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> throws
> &gt; IllegalArgumentException {
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; Boolean
> enable =
> &gt; &amp;gt;
> &gt;
> JSONUtils.parseObject(taskExecutionContext.getTaskParams()).getBoolean("enable");
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; if
> (enable != null
> &gt; &amp;amp;amp;&amp;amp;amp; enable == false ) {
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> return new
> &gt; &amp;gt; DummyTask(taskExecutionContext, logger);
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; }
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; switch
> &gt; &amp;gt;
> &gt;
> (EnumUtils.getEnum(TaskType.class,taskExecutionContext.getTaskType())) {
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case SHELL:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; ShellTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case
> &gt; PROCEDURE:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; ProcedureTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case SQL:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; SqlTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case MR:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; MapReduceTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case SPARK:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; SparkTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case FLINK:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; FlinkTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case PYTHON:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; PythonTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case HTTP:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; HttpTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case DATAX:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; DataxTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case SQOOP:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; SqoopTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> case SSH:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; return new
> &gt; &amp;gt; SSHTask(taskExecutionContext, logger);
> &gt; &amp;gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> default:
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; logger.error("unsupport task
> &gt; &amp;gt; type: {}", taskExecutionContext.getTaskType());
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; throw new
> &gt; &amp;gt; IllegalArgumentException("not support task type");
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; }
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; }
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 3. I am not sure that it supports
> window or not.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; ------------------ 原始邮件
> ------------------
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 发件人: "wenhemin"<[email protected]
> <mailto:
> &gt; [email protected]&amp;amp;gt;&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 发送时间: 2020年5月14日(星期四) 下午3:46
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 收件人: "裴龙武"<[email protected]
> <mailto:[email protected]
> &gt; &amp;amp;gt;&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 主题: Re: [Feature] Support SSH Task
> and Support dummy
> &gt; task like
> &gt; &amp;gt; airflow
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; Sorry, My previous description is
> not very clear.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; I want to ask some questions:
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 1.How to control the priority
> between ssh tasks?
> &gt; There may be
> &gt; &amp;gt; some ssh tasks that have been waiting for execution.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 2.I understand what you want to
> solve is the problem
> &gt; of executing
> &gt; &amp;gt; remote ssh scripts in batches.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; So, not
> sure how to use this
> &gt; function.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt; 3.I don't know if this supports
> windows system.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 在 2020年5月13日,20:56,裴龙武 <
> [email protected]
> &gt; <mailto:
> &gt; &amp;gt; [email protected]&amp;amp;gt;&amp;amp;gt; 写道:
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; I use spin lock. Here
> is my code. Of course
> &gt; , it's not
> &gt; &amp;gt; perfect. I just do a test. To my surprise, it is the result
> of the
> &gt; &amp;gt; execution is the same as the AirFlow
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; 我通过模拟自选锁方式实现,附件中是我的代码,当然,这并不完善。我拿这个做了测试。令我惊喜的是,我得到了和 AirFlow
> &gt; &amp;gt; 相同的结果。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; ------------------ 原始邮件
> ------------------
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 发件人: "whm_777"<
> [email protected] <mailto:
> &gt; [email protected]
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 发送时间: 2020年5月13日(星期三)
> 晚上7:21
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 收件人: "裴龙武"<
> [email protected] <mailto:
> &gt; [email protected]&amp;amp;gt;&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 主题: Re: [Feature]
> Support SSH Task and
> &gt; Support dummy task
> &gt; &amp;gt; like airflow
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; You can modify the
> maximum number of linux
> &gt; ssh connections.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; If use ssh connection
> pool, How to control
> &gt; the priority of
> &gt; &amp;gt; ssh?
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 在
> 2020年5月13日,18:01,裴龙武 <
> &gt; [email protected] <mailto:
> &gt; &amp;gt; [email protected]&amp;amp;gt;&amp;amp;gt; 写道:
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; First 3Q,
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> I&amp;amp;nbsp; use more than 100 task
> &gt; node. But SSH connections
> &gt; &amp;gt; are limited.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt;
> &gt;
> 我是使用了100多个任务节点,但服务器SSH连接是有限制的,超过后,就会报错了。下面是我扩展SSH任务节点后的一张截图,另外这个DAG是我从AirFlow转换过来的。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> <[email protected]
> &gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> ------------------ 原始邮件
> &gt; ------------------
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 发件人:
> "whm_777"<[email protected]
> &gt; <mailto:[email protected]
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 发送时间:
> 2020年5月13日(星期三) 下午5:50
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 收件人: "裴龙武"<
> [email protected] <mailto:
> &gt; [email protected]
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; 主题: Re:
> [Feature] Support SSH Task
> &gt; and Support dummy task
> &gt; &amp;gt; like airflow
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; E.g.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> rtn_code=`ssh -o
> &gt; ServerAliveInterval=60 -p xxxx
> &gt; &amp;gt; [email protected] <mailto:[email protected]&amp;amp;gt;
> ‘shell
> &gt; &amp;gt; command&amp;amp;nbsp; &amp;amp;gt;/dev/null
> 2&amp;amp;gt;&amp;amp;amp;1; echo $?'`
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; if [
> "$rtn_code" -eq 0 ]; then
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; echo "成功"
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; exit 0
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; else
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; echo "失败"
> &gt; &amp;gt;
> &gt;
> &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;
> &gt; exit 1
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; fi
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; Batch shell
> command is not supported.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; Multiple
> servers can be split into
> &gt; multiple task nodes.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> 在 2020年5月13日,17:40,裴龙武 <
> &gt; [email protected] <mailto:
> &gt; &amp;gt; [email protected]&amp;amp;gt;&amp;amp;gt; 写道:
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> Could you give me a
> &gt; example,3Q. 能否给我一个例子,谢谢!
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> By the way, I have more than
> &gt; 100 tasks in one DAG.
> &gt; &amp;gt; These tasks connect two other server to execute. So SSH
> tasks must
> &gt; have
> &gt; &amp;gt; pool to manager. Now I use JSch and realize a simple pool.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> 顺带说一下,在我的实际场景中,我有100多个 SSH
> &gt; 任务,这些任务连接两台任务服务器进行任务执行。所以
> &gt; &amp;gt; SSH 任务进行连接时,必须使用连接池进行管理。当前我使用 JSch,并实现了一个简单的连接池。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> ------------------ 原始邮件
> &gt; ------------------
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> 发件人: "wenhemin"<
> &gt; [email protected] <mailto:
> &gt; &amp;gt; [email protected]&amp;amp;gt;&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> 发送时间: 2020年5月13日(星期三) 下午5:24
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> 收件人: "dev"<
> &gt; [email protected] <mailto:
> &gt; &amp;gt; [email protected]&amp;amp;gt;&amp;amp;gt;;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> 主题: Re: [Feature] Support
> &gt; SSH Task and Support dummy
> &gt; &amp;gt; task like airflow
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> The shell node is supports
> &gt; remote calling, and get
> &gt; &amp;gt; the remote command result code.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; 在
> &gt; 2020年5月13日,15:16,裴龙武 <[email protected]
> &gt; &amp;gt; <mailto:[email protected]&amp;amp;gt;&amp;amp;gt; 写道:
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Dear ALL:
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Support Linux SSH
> &gt; Task 支持 Linux SSH 任务
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; 场景描述:当前项目中,工作流的任务的目标是执行不同服务器 Shell 脚本,Shell
> &gt; &amp;gt; 脚本是保存在业务服务器的固定目录。当 Worker 调度执行时,需要通过固定用户登录这些服务器,然后执行 Shell
> &gt; &amp;gt; 脚本并获取这些任务执行的状态,其中服务器地址、用户名、密码可配置。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; For example, in my
> &gt; project, the workflow's tasks
> &gt; &amp;gt; want to execute shell scripts where are in different server's
> &gt; different
> &gt; &amp;gt; directory. When worker execute these shell scripts, it must
> use the
> &gt; same
> &gt; &amp;gt; user to login these server. Also, the worker can get the
> executing
> &gt; state of
> &gt; &amp;gt; these server. We can config these server 's host,user and
> password.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; SSH Task is very
> &gt; useful for most user SSH
> &gt; &amp;gt; 任务对大多数用户是非常有用的
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; 分布式调度任务所执行的 Shell
> &gt; &amp;gt; 脚本是处于不同的业务服务器,都有其固定的业务,这些业务服务器不是 Worker,只是需要 Worker
> &gt; &amp;gt; 调度执行,我们只需要传递不同的参数,让服务器执行任务脚本即可。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; In
> &gt; dolphinscheduler, the most executing tasks
> &gt; &amp;gt; are in different servers who are not workers. These servers
> also have
> &gt; their
> &gt; &amp;gt; different fixed services. We just have to pass different
> parameters to
> &gt; &amp;gt; schedule these shell scripts to execute.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Python has a module
> &gt; to execute ssh script Python
> &gt; &amp;gt; 有固定的工具包,可执行这些SSH Shell 脚本
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Python
> &gt; 有一个可执行远程服务器SSH Shell脚本的模块,其名字为:paramiko。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Python has a module
> &gt; that can execute SSH Shell
> &gt; &amp;gt; script. It's paramiko.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Others 其他内容
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; 我发现之前的改进功能中也有关于这个的描述,不过相对简单。功能更新地址
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; I found this
> &gt; described in previous feature, but
> &gt; &amp;gt; it was relatively simple.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Feature URL
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; 另外,我通过 Shell Task
> &gt; &amp;gt; 方式去执行远程任务会非常不便,下面是我的脚本,不知道是否有更好的方式。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; In addition, it is
> &gt; very inconvenient for me to
> &gt; &amp;gt; perform remote tasks through Shell Task. Here is my script.
> I don't
> &gt; know if
> &gt; &amp;gt; there's a better way.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; sshpass -p
> &gt; 'password' ssh user@host echo 'ssh
> &gt; &amp;gt; success' echo 'Hello World' -&amp;amp;amp;gt;
> &gt; /home/dolphinscheduler/test/hello.txt
> &gt; &amp;gt; echo 'end'
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Support dummy task
> &gt; like airflow 支持像 Airflow
> &gt; &amp;gt; 中的虚拟任务
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; 场景描述:项目中,有已经产品化的
> &gt; DAG 文件,DAG
> &gt; &amp;gt;
> 文件中包括不同的模块,这些模块之间的有些点是相互依赖的,有些不是,在用户购买不同模块时,需要把未购买模块且其他已购模块未依赖的点设置为
> &gt; Dummy
> &gt; &amp;gt;
> &gt;
> Task,这样实际这些任务就不会执行,这样设置的好处是产品统一性和图的完整性,在AirFlow中,这些是通过DummyOperator完成的。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; For example, in my
> &gt; project, it has a productized
> &gt; &amp;gt; DAG file. The file contains different modules, some of which
> are
> &gt; &amp;gt; interdependent and some of which are not. When customers
> purchase
> &gt; different
> &gt; &amp;gt; modules, we need to set some tasks as dummy tasks, which
> some modules
> &gt; are
> &gt; &amp;gt; not purchased and the purchased module is not dependent.
> Because of
> &gt; this
> &gt; &amp;gt; setting, these dummy tasks are actually not executed. The
> benefits of
> &gt; this
> &gt; &amp;gt; setup are product unity and diagram integrity. In airflow,
> these task
> &gt; &amp;gt; execute by dummy operator.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; ** Realize 实现方式**
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Dummy Task
> &gt; 本身实现很简单,只是需要与其他任务配合使用,但任务执行方式设置为
> &gt; &amp;gt; dummy 时,实际的任务不执行,执行 Dummy Task。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; Dummy Task is easy
> &gt; to realize, but it need to
> &gt; &amp;gt; use with other different tasks. When the task's executed
> type is set
> &gt; to
> &gt; &amp;gt; dummy type, the task are executed as a dummy task and the
> real task
> &gt; is not
> &gt; &amp;gt; executed.
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; 顺带说一下,因为项目着急测试使用,我Fork了开发版本,实现两种任务类型。在后续的版本中是否能够支持。
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &amp;amp;gt; By the way,I
> &gt; already realize these two&amp;amp;amp;nbsp;
> &gt; &amp;gt; features in my fork branch.&amp;amp;amp;nbsp;Whether the
> follow-up
> &gt; release can be
> &gt; &amp;gt; supported
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;&amp;amp;gt;
> &gt;
> <SSHClient.java&amp;amp;gt;<SSHPool.java&amp;amp;gt;<SSHTask.java&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;&amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt;
> &gt; &amp;gt; &amp;amp;gt; <项目场景中关于Dolphin的一些扩展点.pdf&amp;amp;gt;

Reply via email to