From c7435a51ac6e9a1e572d1a7c22dc7407bd204da7 Mon Sep 17 00:00:00 2001 From: Tq Date: Sun, 9 Oct 2022 10:47:01 +0800 Subject: [PATCH] [Feature][task-plugins] aws datasync task plugins (#11865) * submit datasync task * add aws software package license --- docs/configs/docsdev.js | 8 + docs/docs/en/guide/task/datasync.md | 77 ++++++ docs/docs/zh/guide/task/datasync.md | 82 ++++++ docs/img/tasks/demo/datasync_task01.png | Bin 0 -> 18775 bytes docs/img/tasks/demo/datasync_task02.png | Bin 0 -> 18760 bytes docs/img/tasks/icons/datasync.png | Bin 0 -> 24850 bytes .../src/main/resources/task-type-config.yaml | 3 +- dolphinscheduler-bom/pom.xml | 97 +++++++ dolphinscheduler-dist/release-docs/LICENSE | 27 +- .../licenses/LICENSE-annotations.txt | 202 ++++++++++++++ .../licenses/LICENSE-apache-client.txt | 202 ++++++++++++++ .../release-docs/licenses/LICENSE-auth.txt | 202 ++++++++++++++ .../licenses/LICENSE-aws-core.txt | 202 ++++++++++++++ .../LICENSE-aws-java-sdk-datasync.txt | 201 ++++++++++++++ .../licenses/LICENSE-aws-json-protocol.txt | 202 ++++++++++++++ .../licenses/LICENSE-datasync.txt | 201 ++++++++++++++ .../licenses/LICENSE-eventstream.txt | 202 ++++++++++++++ .../licenses/LICENSE-http-client-spi.txt | 202 ++++++++++++++ .../licenses/LICENSE-json-utils.txt | 202 ++++++++++++++ .../licenses/LICENSE-metrics-spi.txt | 202 ++++++++++++++ .../licenses/LICENSE-netty-codec-http.txt | 202 ++++++++++++++ .../licenses/LICENSE-netty-codec-http2.txt | 202 ++++++++++++++ .../licenses/LICENSE-netty-nio-client.txt | 202 ++++++++++++++ .../LICENSE-netty-transport-classes.txt | 202 ++++++++++++++ .../licenses/LICENSE-profiles.txt | 202 ++++++++++++++ .../licenses/LICENSE-protocol-core.txt | 202 ++++++++++++++ .../licenses/LICENSE-reactive-streams.txt | 14 + .../release-docs/licenses/LICENSE-regions.txt | 202 ++++++++++++++ .../licenses/LICENSE-sdk-core.txt | 202 ++++++++++++++ .../LICENSE-third-party-jackson-core.txt | 202 ++++++++++++++ .../release-docs/licenses/LICENSE-utils.txt | 202 ++++++++++++++ .../dolphinscheduler-task-all/pom.xml | 6 + .../dolphinscheduler-task-datasync/pom.xml | 54 ++++ .../plugin/task/datasync/DatasyncHook.java | 250 ++++++++++++++++++ .../task/datasync/DatasyncParameters.java | 107 ++++++++ .../plugin/task/datasync/DatasyncTask.java | 162 ++++++++++++ .../task/datasync/DatasyncTaskChannel.java | 48 ++++ .../datasync/DatasyncTaskChannelFactory.java | 45 ++++ .../task/datasync/DatasyncTaskTest.java | 234 ++++++++++++++++ dolphinscheduler-task-plugin/pom.xml | 1 + .../public/images/task-icons/datasync.png | Bin 0 -> 24850 bytes .../images/task-icons/datasync_hover.png | Bin 0 -> 159573 bytes .../src/store/project/task-type.ts | 4 + .../src/store/project/types.ts | 1 + .../task/components/node/fields/index.ts | 1 + .../components/node/fields/use-datasync.ts | 86 ++++++ .../task/components/node/format-data.ts | 9 + .../task/components/node/tasks/index.ts | 4 +- .../components/node/tasks/use-datasync.ts | 82 ++++++ .../projects/task/components/node/types.ts | 5 + .../projects/task/constants/task-type.ts | 5 + .../workflow/components/dag/dag.module.scss | 6 + tools/dependencies/known-dependencies.txt | 21 ++ 53 files changed, 5674 insertions(+), 5 deletions(-) create mode 100644 docs/docs/en/guide/task/datasync.md create mode 100644 docs/docs/zh/guide/task/datasync.md create mode 100644 docs/img/tasks/demo/datasync_task01.png create mode 100644 docs/img/tasks/demo/datasync_task02.png create mode 100644 docs/img/tasks/icons/datasync.png create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-annotations.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-apache-client.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-auth.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-core.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-java-sdk-datasync.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-json-protocol.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-datasync.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-eventstream.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-http-client-spi.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-json-utils.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-metrics-spi.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http2.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-nio-client.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-transport-classes.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-profiles.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-protocol-core.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-reactive-streams.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-regions.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-sdk-core.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-third-party-jackson-core.txt create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-utils.txt create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncHook.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncParameters.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTask.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskChannel.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskChannelFactory.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/test/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskTest.java create mode 100644 dolphinscheduler-ui/public/images/task-icons/datasync.png create mode 100644 dolphinscheduler-ui/public/images/task-icons/datasync_hover.png create mode 100644 dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasync.ts create mode 100644 dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-datasync.ts diff --git a/docs/configs/docsdev.js b/docs/configs/docsdev.js index 7a1c76f5a6..d29f273e48 100644 --- a/docs/configs/docsdev.js +++ b/docs/configs/docsdev.js @@ -209,6 +209,10 @@ export default { title: 'Amazon DMS', link: '/en-us/docs/dev/user_doc/guide/task/dms.html', }, + { + title: 'AWS Datasync', + link: '/en-us/docs/dev/user_doc/guide/task/datasync.html', + }, ], }, { @@ -849,6 +853,10 @@ export default { title: 'Amazon DMS', link: '/zh-cn/docs/dev/user_doc/guide/task/dms.html', }, + { + title: 'AWS Datasync', + link: '/zh-cn/docs/dev/user_doc/guide/task/datasync.html', + }, ], }, { diff --git a/docs/docs/en/guide/task/datasync.md b/docs/docs/en/guide/task/datasync.md new file mode 100644 index 0000000000..66825c1cbb --- /dev/null +++ b/docs/docs/en/guide/task/datasync.md @@ -0,0 +1,77 @@ +# DataSync Node + +## Overview + +[AWS DataSync](https://console.aws.amazon.com/datasync/) is an online data transfer service that simplifies, automates, and accelerates moving data between on-premises storage systems and AWS Storage services, as well as between AWS Storage services. + +DataSync can copy data to and from: + +- Network File System (NFS) file servers +- Server Message Block (SMB) file servers +- Hadoop Distributed File System (HDFS) +- Object storage systems +- Amazon Simple Storage Service (Amazon S3) buckets +- Amazon EFS file systems +- Amazon FSx for Windows File Server file systems +- Amazon FSx for Lustre file systems +- Amazon FSx for OpenZFS file systems +- Amazon FSx for NetApp ONTAP file systems +- AWS Snowcone devices + +The follow shows the DolphinScheduler DataSync task plugin features: + +- Create an AWS DataSync task and execute, continuously get the execution status until the task completes. + +## Create Task + +- Click `Project -> Management-Project -> Name-Workflow Definition`, and click the "Create Workflow" button to enter the + DAG editing page. +- Drag from the toolbar task node to canvas. + +## Task Example + +First, introduce some general parameters of DolphinScheduler: + +- **Node name**: The name of the task. Node names within the same workflow must be unique. +- **Run flag**: Indicating whether to schedule the task. If you do not need to execute the task, you can turn on the `Prohibition execution` switch. +- **Description**: Describing the function of this node. +- **Task priority**: When the number of the worker threads is insufficient, the worker executes task according to the priority. When two tasks have the same priority, the worker will execute them in `first come first served` fashion. +- **Worker group**: Machines which execute the tasks. If you choose `default`, scheduler will send the task to a random worker. +- **Task group name**: Resource group of tasks. It will not take effect if not configured. +- **Environment name**: Environment to execute the task. +- **Number of failed retries**: The number of task retries for failures. You could select it by drop-down menu or fill it manually. +- **Failure retry interval**: Interval of task retries for failures. You could select it by drop-down menu or fill it manually. +- **CPU quota**: Assign the specified CPU time quota to the task executed. Takes a percentage value. Default -1 means unlimited. For example, the full CPU load of one core is 100%, and that of 16 cores is 1600%. You could configure it by [task.resource.limit.state](../../architecture/configuration.md). +- **Max memory**: Assign the specified max memory to the task executed. Exceeding this limit will trigger oom to be killed and will not automatically retry. Takes an MB value. Default -1 means unlimited. You could configure it by [task.resource.limit.state](../../architecture/configuration.md). +- **Timeout alarm**: Alarm for task timeout. When the task exceeds the "timeout threshold", an alarm email will send. +- **Delayed execution time**: The time that a task delays for execution in minutes. +- **Resources**: Resources which your task node uses. +- **Predecessor task**: The upstream task of the current task node. + +Here are some specific parameters for the DataSync plugin: + +- **name**: Task name +- **destinationLocationArn**: The Amazon Resource Name (ARN) of an AWS storage resource's location. Visit [AWS API](https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-DestinationLocationArn) +- **sourceLocationArn**: The Amazon Resource Name (ARN) of the source location for the task. Visit [AWS API](https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-SourceLocationArn) +- **cloudWatchLogGroupArn**: The Amazon Resource Name (ARN) of the Amazon CloudWatch log group that is used to monitor and log events in the task. Visit [AWS API](https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-CloudWatchLogGroupArn) + + or + +- **json**: JSON parameters to construct datasync task, and supports parameters like options, etc. Visit: [AWS CreateTask API] 的 Request Syntax (https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html) + +- The following shows the task plugin example: + +![datasync](../../../../img/tasks/demo/datasync_task02.png) + +## Environment to prepare + +The task requires AWS configurations, modify the value in file `common.properties` + +```yaml +# Defines AWS access key and is required +resource.aws.access.key.id= +# Defines AWS secret access key and is required +resource.aws.secret.access.key= +# Defines AWS Region to use and is required +resource.aws.region= +``` \ No newline at end of file diff --git a/docs/docs/zh/guide/task/datasync.md b/docs/docs/zh/guide/task/datasync.md new file mode 100644 index 0000000000..331913f44e --- /dev/null +++ b/docs/docs/zh/guide/task/datasync.md @@ -0,0 +1,82 @@ +# DataSync 节点 + +## 综述 + +[AWS DataSync](https://console.aws.amazon.com/datasync/) 是一种在线数据传输服务,可简化、自动化和加速本地存储系统和 AWS Storage 服务之间,以及不同 AWS Storage 服务之间的数据移动。 + +DataSync 支持的组件: + +- Network File System (NFS) file servers +- Server Message Block (SMB) file servers +- Hadoop Distributed File System (HDFS) +- Object storage systems +- Amazon Simple Storage Service (Amazon S3) buckets +- Amazon EFS file systems +- Amazon FSx for Windows File Server file systems +- Amazon FSx for Lustre file systems +- Amazon FSx for OpenZFS file systems +- Amazon FSx for NetApp ONTAP file systems +- AWS Snowcone devices + +DolphinScheduler DataSync 组件的功能: + +- 创建 AWS DataSync 任务并启动,持续获取状态,直至任务执行完成。 + + +## 创建任务 + +- 点击项目管理-项目名称-工作流定义,点击“创建工作流”按钮,进入 DAG 编辑页面; +- 拖动工具栏的 任务节点到画板中。 + + +## 任务样例 + +首先介绍一些DS通用参数 + +- **任务名称** :任务的名称,同一个工作流定义中的节点名称不能重复。 +- **运行标志** :标识这个节点是否需要调度执行,如果不需要执行,可以打开禁止执行开关。 +- **描述** :当前节点的功能描述。 +- **任务优先级** :worker线程数不足时,根据优先级从高到低依次执行任务,优先级一样时根据先到先得原则执行。 +- **Worker 分组** :设置分组后,任务会被分配给worker组的机器机执行。若选择Default,则会随机选择一个worker执行。 +- **任务组名称** :任务资源组,未配置则不生效。 +- **组内优先级** :一个任务组内此任务的优先级。 +- **环境名称** :配置任务执行的环境。 +- **失败重试次数** :任务失败重新提交的次数,可以在下拉菜单中选择或者手动填充。 +- **失败重试间隔** :任务失败重新提交任务的时间间隔,可以在下拉菜单中选择或者手动填充。 +- **CPU 配额** :为执行的任务分配指定的CPU时间配额,单位百分比,默认-1代表不限制,例如1个核心的CPU满载是100%,16个核心的是1600%。 [task.resource.limit.state](../../architecture/configuration.md) +- **最大内存** :为执行的任务分配指定的内存大小,超过会触发OOM被Kill同时不会进行自动重试,单位MB,默认-1代表不限制。这个功能由 [task.resource.limit.state](../../architecture/configuration.md) 控制。 +- **超时告警** :勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败.这个功能由 [task.resource.limit.state](../../architecture/configuration.md) 控制。 +- **资源** :任务执行时所需资源文件。 +- **前置任务** :设置当前任务的前置(上游)任务。 +- **延时执行时间** :任务延迟执行的时间,以分为单位。 + +以上参数如无特殊需求,可以默认即可 + +- **name**: 任务名称 +- **destinationLocationArn**: 目标 AWS 存储资源位置的 Amazon Resource Name (ARN) ,可见 [AWS API](https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-DestinationLocationArn) +- **sourceLocationArn**: 源 AWS 存储资源位置的 Amazon Resource Name (ARN) ,可见 [AWS API](https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-SourceLocationArn) +- **cloudWatchLogGroupArn**: 用来监控任务的Amazon CloudWatch任务组的 Amazon Resource Name (ARN) ,可见 [AWS API](https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html#DataSync-CreateTask-request-CloudWatchLogGroupArn) + +或 + +- **json**: 创建 datasync 任务的JSON结构任务参数,可以支持options等参数,可见 [AWS CreateTask API] 的 Request Syntax (https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateTask.html) + + +组件图示如下: + +![datasync](../../../../img/tasks/demo/datasync_task01.png) + + + +## 环境配置 + +需要进行AWS的一些配置,修改`common.properties`中的`xxxxx`为你的配置信息 + +```yaml +# Defines AWS access key and is required +resource.aws.access.key.id= +# Defines AWS secret access key and is required +resource.aws.secret.access.key= +# Defines AWS Region to use and is required +resource.aws.region= +``` \ No newline at end of file diff --git a/docs/img/tasks/demo/datasync_task01.png b/docs/img/tasks/demo/datasync_task01.png new file mode 100644 index 0000000000000000000000000000000000000000..d26da0fcbd35787613166a4c5f115915e0a21b23 GIT binary patch literal 18775 zcmdVC2UJth)-D4KC1Qba)r5KuaVNDI-a&)_LP)5g zDZTd)ARQOPlX*K`hWVG7_$KN0EZyIeAF5(Lf9?EyczjFVTzS00ak@EV-{P?) z*mnp7DrxnpbI$7X47$j2Q1Idk2t>m*2RX%l2_#H;k3fCNALMuY15wY9iV}3;Q74At z@hy-k)l2NvTNI~2ikG&KAbKj$wYTx`GauwZ^_RYT@ykX^b2;)xRt36w`mA#M-y;{L8u8-3vn}`%JH~;&;tApyS z;9?9y##MI{^1j^}YEKT+2Z1gq0k)MAC~~rV$JLXOFDXh%`r;YCj88;8(-Dr|%x)~h;9=!vb$w$?lA(znN{9mZ zjzT))q_!2_F!@uaUw~1Ye@HPGvH@V0XR4*O; zr!S&6Y`SKWq}kMW%Z(~%1|x4I+@=^%>!+S*mP2@ME+tifK*D!{`LWIBe=yy1$sZv! zdhC2nz0jW063%nH_jb3i+;j1R2B`im&^*94sKQcFYB`04PY=-=i2<6_u6lhr277 zNslE=-SNtq-ysr{`#YoXb|b78aje`ft522hGadvoy$cv&;#0lbq`MUiwsJ(=Dy}0P zR676e4sD}x=NGZ)(|o5rQR6P+a319M@MFE)39-kCfUc_IOSrS=J5mhwU8~&_ZWATQ6}+iy=n@;}JN7NLNTSKN+3kdE9x zVk+*cd;*&p%r*wlNQKlB)@yHp>dC7ELp44=Ze(mM<2={7g2za$o=Ec|mWBlkl=PB+ zDQmAY>wx^oGX+BxEiC1^TR7fxbuKNkvGh}61sW}`L>a1_^@0PGu1216jQ-?~jQ1E< zBVc*-JO!;I%u$n!Xn~3N(&y zMW;1^K+k~nU90r7D@j5tO;$j{St>*xxHGM3U4C_j6%Nc- z9T&>7$CVSY@aj44Q+Kp&&Svw<+qCnbQT45>{*jb>EN|qucKZciKx`)`rO*DC@*(P+t{V0^;@Daz^lVM^(hzayc_esIl3HqYMvBCp+5J| ztNmURrAUhX+P}#~KUyL8E!-C>i5Op{aE&Q(1Nq5_90IP#lp7dh`JDeFC!hxs5)yC% z_IMZqKi?}kObaf#Etihb6rV}>L5@jn36>7@r^x14-GwUlde3e_BlTAT&u-A{D%X0TE9y5 zs@K(Ht4qS-iemxDuc}Lyf-9LbXU0KmbxS#`58CW?Dup9B+mA7c{S4Pj@FS3)#35Dm z>qyfm)x)3f=oI$dfyk!%EnioA^~|drAbxZ`_}GOV6s;MLJJfy6)%>) z#*66mC&Cyg{{(_L;2R(Qh;s&_+=HF4moHsGetf`}_oT`kc0fr^RaDVecRU}Hx8faAiqS5|7pY-1eys92GEY!q{7M9(XMoC3fX>>)((??DjA*4wyDtvrZ=T2}GQ>X5 zJsfyLI&A|2iA+;5FbNvHnT^q(DO!E^_Cy2CFwm%bbgmzWH>W{0IF+A=YjwV>jzz4DS&RPKO9T0d1MUh0 zTD}h0U7Pp+%2U4k=XxNs@j3c=g_)Vzu|YFgvUYQ!$7}W14|T_eZm@c`Oi-%3xF8RA zNF|W?011&}gJAgNk_F^x4-gDuVq4CDgc+JX%G2^0=o2O_C=bLt-6;dxJwM7%%oa;; zw@xgJfjTQ2lz$p07SY0X?^Af*W@Et~tYsCI zqX3hlKBp)vkrkw-)5>l``c=}lm7La61k>iQ_=HC0;Md3mn+iiaSBRu8=8Id}eFEVf zIwu;AP&KM+6*t3|k9n!10@0IEZHPyEhLYcRMZH|YF;B}Fw|W%HH-RvNlUPlFEuHdn z7iXg9VbZP6?Km^?+y8Fq2*PnM&eB~V?k9I8%?0`|arOd2TPws#H#%Rfj(IQ0#JP{f z22eaZEg$S7+?^*jL>`DT0ubbzg;B=@U)$s*nG<48f-#>Ye zA$1GAHyS-&^#GZ6cX?6ayo8JzMiDu6dVNfn5ED0EY{6xhQOhS|#Y+nYvQVYN)Qs#*No z8Ji*>R-c~O+KBW0>|&8%SOU|CNhpYNhq(1-Igd8vJ3`jnYwd@_xq`Q&-&gU|rzpST? z;rGisdU_^O>-BLeSvp1~cg(9xcaGDJqBT0?_RWlH%KbF3`A+jN?6MN#D)e_wN1WUt zQE2|?otBsPt5+P=tzRQ4o@!XNKjn=QU`vD{sgu^r1C*XBBKW(^k=oenYgwJ0tYY~B z0tAkg$>oMIUKUSy-7#9UB98hAUdOuG_+Um?E6At2G^dZT6WD;@!y01{Q|8lcK#xQ5t(!i?6S} zLV!>qTMjao=jcb}*k4mSU-i#jQ7u<84QDwIa}}TNXkcR7kJMWlfkA%s(8*X997-zQ zGq?vc5iwEPEkbUU@3DH!-1Ak6^2kPqW})%)qfARhK1+mMp7#{6#@-d#w@XVo5~bp) zO&@4g1f)`v%$F_7mC^~1-P88sS!gc#dki+MlyyrZjx31!vJVQ4E7H9&qV9vHT*rBz zQD1u(re1wu*^FsJRlC9@AJeHx9#e;>&!U;!2V|=VuCHULFk7Jz{p3{OsfN zi^=f81(l^MuoA@El~RH7@~knT){99t zLkF^`jz=D^pFcqCiX+8mgM!vDjWn@r=X0l}F}4Hur(R}z-K$+Rpc4ua$p;H+A!vtO zk$ciIiH@u9SD&F}%pjyenps%=nwEoZzmC4sWt@)<*Tm^!n2}gf%EIlEzy-z$wFL2V zFqH;sbCqY;ev?+L?l9FZ(?44f6oq(lv%EL^9*8j$8k@s6(2A6$l>N&5_DbVy08Z!S zDfZsfTSU8XELw0FTb5DzEAB=oaQq+E zs0Chid2Z(CmA`(`XUiHQx8G5rCa0k)Vm`iTMjO<2gD}imXNNuK<(@B$FR0?VFcMN4 z)w(x|J}o3wq`-wGY2UwzLv=|K?4+pm>gk>(O=B|kL3J-%=$~Z-Cn8;QVb*99=l-Fl zjpv4UJsUPWYsX2IYIAlXdXaE;JcFgmM*w&23Dth!+-RmsXVU()bo#5E%y#Q5NrIp= z?lin{lvd#0!u1$f>QJmeR4S;-*f(+s!s5Q*K6HEg9U&l;b$;I6_x^h&{x-#v*9w6Y z889p)mK!5w;_>>pf4OaKA*Qh?#&Kgt?W^u6eNNJP0UYvsbKm(h%XqJXub7TuhMb1_ zs`!sx$wF(frA4&0`(}COZplhC;{faM$koEkB*~Z?**}* zhISV&HEfIU`BctwhCh7x)vM7hel*J?{+m@_z>7wjFWZ<@^?O*MylX1Kgy4v3Wnx1D zYszxwMO|~1q%$AtdsRH%H(sMw;g@;i;{$n~wc%E?*%+x67Q{H3=IPMO`K}r#`Ptq$ zrPK;O-~=}AKE~GbVdiYWgtMMWXn`C^9~cuO-lL2ru=xJa@RUVnFKFbxmd6)8$&hpH zmz27=N0$r?bWywY!+t%nEFT=d@afIBqa+K6}beMQcVn)GIe@W)h z%_2RPbDDP7LMC^%6wCQ!3Y**WEDE`Bl1adT@AAWZ2V~b9A-;159{qv1PYapc5?{tb z-$J?GtMG((!=>KpJ?Q*qHka4Ck7m`*s7BqJ;!yhH>)TPA4|8jixvZ)cB2HcllN{Qf zILRNO+Sk}|?^vozk$m2@(xm$*KliOP4>)8}Yzpvwv?`)9=L#)lG7Tpsctzp3i6)Dn za<+U)>L#X%4BB0B7^GxIRtUeZ=_!P2w_75jB6E+`2071(GL&F4;ujuNJaJkc<7-n( zx{B>R?OZ+z;!HfQ}cUvrNx44&wvAq!IdlE+?bp z`H~+ji1qF&gsDR?qse#e+^dqt(%6__I*}{^b21c)X=C)%-ug}@_^x~Y_uLCCFNrw+K%~<8$F*(P=Op>N+^vPk1e5#jMl!PR#y(N5iavHc!&9f9P zoT;E?sN2NtwHDAfbWh~ZuyTwKw->ES%rIX^;MfK>{eKezWfos_FljPbl(Ph&DHcvW z_mPkaHN_|AAj3ZBW-KYBy%*t;`60-qRas_lH6Wsc*>~(?@T&X+ zGt}462wQl$0wh~1lQ#DLZYIt{DAO*$Gk4qm8CI(ivf>Vz@#I+6iL&QnScmV7;xc?m zctWKp>5R?pPs=dlJytN+(>$zZb*stYBpMyS|G}m}#Asi-t`(T%=-;08bYGjx`3hGd zt57`e6%)^nGxYN#JF{_yJ{O}{iZUW_QLT#`uqdPx9((42zKeNm8f90*W`+KEI;u|iTZjM26VsOT<$0oIKhf|b z+-#S@kQMsV#Y)kCT~FQc++yc)!xJ~c$R)|){R0@(tB!cQNn0j9YOY@93ar{3(!4d7 zkDGmIX!+(LX0;H?e^brw`GcESvnjs(qiZ5l!bDx6=slL%C9N?1DKLW|Rlw<<$=uWT zrAo>hh3)&rtz2&gaJxN~sN|O)?aDo-5^odakyGur9R2vJ@XoQxp_+Za9&y56%BqRG zG*21RxXkknME~KI=gxx8Zs)19cWbv_rS8PDJpTC>EO&M{l=>15T;YF82mPzumi*i?9` zSjr(7KYW*?4N*l$ZzhbWQ##n&OZ%*UBqzPAV$7hx5UQhA z6J=8&L6e&8p&+)H#94xm-B~}iP9@6rp`(E`;y92%?>xLs2C*+}%`&R3`pmGZ5)7;6 zjr)M&Tx;F#n_k;px(j6@c=leVT|8~DmrO>Nc#ADnb$XA8YvhQeuG>kT++pQvDAe2z z+-2A)M>Eu(!)AV!H~pC7#8!6}YJ)B~3tALAq}pb3bQfScwu}@+^zCU~tmf#2{wlv5 z90cI3arbYWHB=_muGODDkYx6M`rvyKtO~hlZ)TS*xLJMchkXPhV6_~J&TZGIv#Tnr z5~#Z^u(0*i?Geqq;qBH_>4s%t@@b0PM#DQ}$he(Vs_lERxrxOp;8Wgsz0sa+o0M2O zuVr8d+^PfZZ!s%#9l*w8cNga61hdr@)j{c&!0k_Nc-#K|y`OGtG~=RT3bEWz*d5fl zgA@-zq0ZtTSGCSRiPyv{o8C~}^}l7$UbDkSukZrBqqQpl8noY~|FZ3)n)Y)AL1~#) z5J$D$Hq(?#pc)*x-HJ>_liILn{1Us=Dfz0sg5)g_4^U~?mE2Tg zBIX>RIVlE$>h(%FC$qK;3u%7QjbpDJUs|%K1h(IqcS)1UsECy~&42xhX@ z!}Yj5#!lnUF%dNrkga?nvRb%p zIIf}qq|!;B+3FOiH@{_>T+$ED{&zkPG26?|_kUE5evFA3xhTCp+h@(dw0s^{Wbb`) zM~-V?lg{TF6I|d{6#VN=k0c?_2;(0k?hBi9J**?tTI38l~4 z%{ziDAq9=xUNEzW!SD$+5d;2cc=I8TNSVqLTlJ1T)oKaP5`=R8k}}TA zN8>|O7w~E<#L3_)8`>CD_FaHFP@EHYp4TQw)~K)4wO#cMd3&E4&X0{hveW0fE-vnL zG}LY-Z;ciO7YsdlK_k^{=Js--$bzG6<%_HSgMi+BEPLKyoge40 z*+U1ec)g7+#W36=wp&|6Pa|pMvwlRa-ICWzZ4j$_r%K`=N4e|G@`=!T>2@Z%a+2`^0C1EDQ6f$W!U3;oiq96}NydzAI0;7%^~YE%nNE?%TA` zl2vRu4HIf9jyvo|VfM-6WWB4QxKD=_6BSDze3p08yyCdi778y5q{FBn7$vh%?|DeK zjLYVb+CA^3Vgm&G!ukR6Bh-58HNqgx`d#@I`#4xW(!%?)9*VjaRRYggdrjbjRo;|E z9>wUJ4BbDxBa?n+`}L?s!SG&2O8-K`^QloB9yJ!t#)>60UPXqGv(EcwL%9~E`j?;@ zLTtlL>eCvwkp)QObFLH1XLQ0Wlch4GVqjXMv2r^K?#%0lG^x1Qs(KgP#2!?GWtD9XCGKS?hF5$`Q<6YX=kt&@^wVTOC&l`2nXZOENAPjTP z{fN5&qdCN*j5eO3Prv&ceyz2_kHl1=_=e#P+hgp1WS$Rq>gTX~;>aR?m@yhx(&7Bt{AOE0#_WorGh)%9mqgt9R zMmd(`y_vfiuTba7z^fOSi+^~fOmX&6;8;x@*>sOG+E~Yzzo~1riu1QQa~7bdWx+&_ zRifl+DM}lfV;(UqKkBpCT3cS~aHE-0fx9R+BE~VsL@Vd|eTSWrz$Wt$xLp`QjBpxT z^DKVlxiLfFk}?iF<7togk7Lo#xD55>xgKgiW|^`EY+9RPJU6#XuGUiQbF8-Ps;xeD zKs)F!VTKfY@WbBaPdaSMbr9MbqsQt3`qCCZB>$Os3LZ@D+l=5V#}J&-1?}AspBzmL5}$PS$|fZ^_wIImY)IhtL=`O(0Z7!PiHPC5UO>+jnlJ-ZNm zlu+16WTSqMCOQ}-j<3F1XxLE)pdb%DeEEIBR3oq}wN$3dl_}I(k+b{J!{&<))@BtS zM5CyW%?zE=4q(MipY+O#9D-x-K>2Oy4wnjle8djx<*e8kdO(Qx7K)ccAa?kv#W0_1 z=dmsA=S-|ieDUA(%C>Y1S9nBM(md@iB$aeL>G-+lIfW_MIow1)vqLYL;8}B?*h-fd*1~wuoWfAB-ND6Y$-bXZhlt|Xqd2P z;XxN^!cJRox&6&Nq2sXXznPaBCNs)`AC^k1TPH>Ol(6e%2p&k#nDRp#Cn@+YX1gM8 zjvqt9QV6jo5yz{Ldyqt#Rm+FOGbyZH=v1vGR4jfqXwup#Xmq!4?uCeptMLszRAN(3 z-gLbUZB}2kkIxsqoS>l>MAYYUPKcE*0zhGMR^VgjOx`T@7(unhgdz8g2WQSc$Lp-q zuAh@(0f`SBG=yz&yRk26;2jLD5JIJ=IVOzS9_cL5k0hWS9(ebk3g_z#y}ZThKh`&# zC$8Kyb-_4I<}&R0!qV(U9PwO>+`=&1!h!~5BGlko+`>asv89CcS??%?t=I_}Bm92Z zlleD>P{L;LO7EY{`-M|l94tGxmdS9o9LS}?13p}~k*9A^kK(sQfdm=@4mE~w8QAE) z+qNFNnh{d0%X~#V!}WksuzKxxY_prEkIfh!{qgFaPX2YcCL61{is5ek0?#I48nI^oekR?5)2X~+D4q!*I=@+2zyI+GmLseS)R@4; zCKZ#x=dsO%fYIWi+U?hYw&iAq&0%$D|I3Mq7e5H=cBpS1x#>(vqc9n;NArsOg-Pqx zI2|pOo*?XIa6dKv#+Auj7|oe&m`D6kX9?0lQe0BAqXc>wMF-|B&>iU-UUO@JzkFD^ zaN$g}tLinKj62ADvn$xW#`(qg1XjIQvjg-Fb{6`3%$p$>s+YrTi1l0WCRW$NS(?1y zQUFyDns&P_lP)g8GHND`0kD`YS4+A~xUF@btNqj?n@DtyMgPX7v8d-je$9A`V&y&5 zu`Yv3hPi5}u2z&-->(-F8_~4h%Mpfq>TV~;)9b2Ot`15233*OVLdCU@UX0i6IQqwe zq4?9vhm8*}JVt(c|=*(^-CoNV~4dV-hFT<4n zVA`kwjjQy6^)TZqo7@#Sat2C5Xv$f zm&k$_@;gRY=3Zi3WwsPE^?QtAzofR6C7nanAvUo0Tk{C~@YiA2S{yvSydn2>4%Pp2 z2Dx9NS1>ABhpWEA zDRlwgQ{NM&I2>g`roBKxmMc>;#Uui=SzH^d6zRMP7im*S5i+xku)JW zaHLNn%^{QpP9pg_(@=q)C&W>qq~xl3#|>>eyoman8c&}vwN;g>M)j+tbnZz+dt}+b z<=DU7ncAE5bo05$VF2(Snrj}XTL2*?&3r5+O_pk?(+;hiqLl6{Y8wTm0clrOhRUCC zij1FOR5taH0O*N{OH|uBBjR;7ALUbeU~HiDt{Rne@852N$CSCk6g%Agwy{h^GDq&K z=m`Cn;vKshanmE#Q!;}?vTrJ*ErqG zfV!Ng)7G3dF#P~xtKWNa78S<(07#;w@0@@@vz%g_QoqJ+0B*)?k$5)+C|&nopV|N8 zO8EAMzT)T|8>`o^C35lp6eyiyz(R%b4`%b<|1kXW@lT+vw{kL*XCBEU3y^uSN4Or} zM{{g%es%y%l%lhsYss6-qr()B)4!*3jkmYkU4C=J|Gvsx$IS$xVqc&Ph|m7W(Z;Gr$K>5f8(3len3$2?yYC7G~SYn!vGiA0D$2Pe^L!% zc3smuG50}!8GLP_3cwy<$|i4;m{UhJYn2Jo{usH;Bf3U^?Y>rKH!w3Q-z@KU7}_u3 ze!sa%4HDz|dq)@NnKEAnGvB)n0=GcVGKHnofZT%uWa`m*5m=@rs{j6HC_srBDp*QN zVr#Ahflz;3gL59>8fsjZCXysnvVqi^JdlCrDn`Oc17(0>@~F+ZvcTdc`B+Tl6!Pe- zvz#N-2Mft8_kXtz{BM?z|MRvkn}4EE0H-6ACf9Z2SI*%@>02iNU`1wiXqxOR0i){H ziOa`l^?C2f#Ume)2{D(LG}JNWYpI^Di{A#Q0Tz2TF6E4$yPh#+?o_t^x?+#?(r=f% zXom1PFvs-Uk1qTG!V*2EaMT)Vj;U7PR`s6EQ1LoPQLpetkfPkO+5`__Q{O}%zLmX0 z|7Opvz)fpxos58qx7O7zGk}&8+&{|KUX21z-wu&)pvKEf&mTC~; zU4U=SKr0b-F3S}HLuxJqr0ZFMnc|&>FTpll1J;9AeGkggAZGYDG}Shq`i$tJOJ7Q^ z=I%GCujL8?@E#vzns=0Bl@7$y_GtUX2=zz)7**!}))B4q09zolmSORHPv$98ZU8q? z)2d4?}`os^ZI!$P$?x*us zAcEdlN2d2nZ%N$K%L|hfFx9$PMjtO;40fuOqEIa2At=;+dBqk}F2|sXvGeX94#Aas zo$SvHmlx(|Kon$b%0VT2d?E74spv!cmX(dTx8elbGCL2vvFTV1_s6tVZLo6@?+1DQ ztqsXno{av6ow986<^cd?wgum%zgAS&4m}v?$T2o)dQSQ^V*pLOsWO3aG<+(45OOE2 zv;$Sd?tC=z-lrP&r%k`|q@E>mc6uE)W$La=dZdlHYNHPccJq8Nx#QlS z8}!z+7rUY&^CI!RFb-{qb;!ofQm(5pvSm_yx=4MGpV{AV^y^R#HmGdk3j|YJ7D#;l zISmZp-oDQC{$2Zvg_AJi&qqc_DH1; z$bJYv#9W8rWz(FCN_s2`{QHn)V`@sjZ}|k^_5>z9geD=Aluf61ThRq$RXSyAbMx#S z0w<5Ymua#7>6j4x2L+}U-%nVpsYiOJt_icho&-|`RQIg!JL&^#`|M{bBhc<+H$v)( zehFab)5?I?<5T)yIf+gGab*SiBgICQ&ELt#pbXeV)%N?XN}96I^0+9#%aPsR84!q* zQ;1W{L!-e!Ieq3K@f?WfPX28i{clY>AhNlYJ2HYmDgVBwy~w`q5TcxQn$FAJVz#`( zblyD9qQzow`mM}u2;rnnt8E*IOH=)`9YCG9!uooGmu_6DclX@k=@GrWt~l^;Iq@a& zoSeoI0P;Q9|2|Uoyv;5lE7;sPiBO@}R`v8<*Phfb%qr%xo(;EMz_9qVH`q!%YD^*O ztn#kl$`>puu0k~|$6_?+AhE49>W_?#nQR!xE{-jF(3U5!r{`Y z92v;&<`q|KGdv%Og2|&(oMm|DN4EU#FCLKrOJ<}tH(SmaGwv8Rx27;&ZOl>xQ>imZ zrW&+t<)r7)#W%$~{0A0S&Mi&VpU@IoclV^d&#?OSqoBV28JozMZ8prn*T(&*m!whr zjsl$N=t^ErTg&ci-t8o+yyWNXN#U{hhp*UrRzkmHDjmaG3l%2Xd$f)k^*T*Po*9m& z!C|z+>VYWTy@Nl%+nA3{24gR4S%MyNGT^=B07*Z?a|LDyYlnJ!)wvqQ)Yx;n6x!+c zYv-;g%>7n3YrDM^k^`;@C@2g0qND!FE=63L0{;>*(x|cY4RtKOxC{3-S`I20j&=Bf zx;pHQ+S1>)w(J|X1Vaq`EX}FdmFD0 zFdam-c+0M&0OQx81T!`m6T;=?;v`PbWne)#RpKx8W4(3HWU%0!oZ-Qk;7vsC!nJ<8 zFKk)|l8_j-EJ;}xtg-dc!tIlyRH&UHyYPi{i@o$t39$Z#6*eW=Nhe&=J82eLee->Y zA+6cXa~bQUo}w7oJEWOjn3yt+wI`~$komZ6p;`ief?K77I8)S!Lh<4Zv-h)n6PBi>lMp6pqU6MMISn;7ov=N)Lh%0_<{% zKzc3eEfk>Sfz5{KumrfWH4&30GTB(snS#`iy{wV2dhL&$(q1z^N-|vbjvr>8Ze!za zGnU#mD{Rkg0%zM3vm)LL4=E&54&WUQ?timnW1oX7O`5^JhM;~EL=s`d`~wRd^haZo*8ZdH9% zxkZnzrF+-dtw9f(Xap%Y^flf>mX4UU<}Y_zRx82B}>B$T9;Z`1cRVWNpUY@fQP~<&+1>LE!@ThStp8n2QcD`0n zz+NEC@`fcqQFkB`{R60*+2sVK!?3guQ(Pk0>eZ*u#g9GnMxNRIEvrcsqzx*>jkPW# zI+EfXCiv=RQr+K+?;lgcAV&Y7a;Uru2}A4hT*z{HCbsf?!7ichez!DlZqF(Ed486+ zhZtEG+xE*`D6|dHuSU*I$HXa(9d;@2D&q5+c13o>lcGlL9?c$9CVN&ja3d|mn_yN$cEyV6IfB%4WSVD$Kese#UA19R>Ob{ zcQZ)WaCEzaglIJ~-WFdaN1Z|I6K|o_sr2kGYop1`PAZ`B1vp4^z$8X6ax*Bb=1W1V zmwSr$t<=+pt_~;Fh{JE^F$k#kS z34)bS%GSC~#4E3z&Rt)$XA}DE?1n%!c6aE&=UPbJc=;w4hEqpCQf%bnE!@gWZOh^W zW($U14o9MgVDSMXX4V#v_=y4G0gq0&J`|5uC}w?~fDy&=f-#wr)Q68oT^#z{qOoW# z;SLC!nAIVlz3RxOF@_*R7tTcb9;fz)WMV5fS0&mOx&0!DrSD(|hDRJb z@8yYP#@*@CgbVY>)4#9rN5O9I(Vv7iCUPcP;+;P8T_+s?uYj)m= zGcc=`ggMX7xHhsGl92e)g!bZJH2Xee6z|=WDil(4$yd%`jVROq5X+iW_{tmRV|8pe z=-2UWciuos()?X$Wo(YMOGtM{~H>Y;A%JT9-r3HSGa4eHDn6! zI7i2-T;f$(drg0;?;4-SeFckf2c`n$S&h1*;uQLkb>;IBzB9u7)hQd!1>`-(UZ~7l zs<8XH@{}+2j;>U$QraS3yvaj{)SC?~wROT3tup`D3$yWnIHa};3)FyT3*2sFrX0CVB%va2J!=^G31{X|X&E{yDPLQf9lLX;kR+noUD1Fy$( ztuzLEK=xF(*~@Xm|G;k$PV@I(faYHo#y-$ym0CE@77{2#CBvUDfrx}nUF>(bB(^9j zWpS0)=G66HjKJlLycD`D{5MYQ2Yl8SXy)}l-#-~UsHzD!g&4~SiOfRXnH`po_JY;Y zeA}z0B6!K70(Ht<31^>8`uRF1{*Urc9`N!;$<}VGyXH<(j2&mbAIG+3X~L4`tgT}l z3>6Rf>10Y_>L8G_g$a9!fLwpIyf0gr~z(lhsQ!1q z1Hn{?eLX?9i{OPJ3Y}nxVL^#nM*}I~zv?*{s#`Sruw?S?;-qNXX7?B4URoJS=HEN zH(tEs!$A!ijrb!fu7{nF9_6wf9dt)`(?vZ4Bny>)Rnk_PKdyCX2GH|d@fD*3@i6_7 zGVe|VeLW1#hD`qRKi@?Gh{VZ)Ytuk-PXs844=?=Z&w#wG{=(m< zZ{}@){I37idE4*PWuF3BlI7d79N}akw5i@-?RwHLwjVB9N0-imN_5Fhxaof+)pF6#j? z?RzOhv<9_%?ita3&RXooj4t!5ryA6G1*!=E%9@TFj*Vz{x|dQqdkSyTGBnsijAFM|E`Q zOL)3JQs5Z+=C(mcF&>SAEz+FS$%EpBZc}hg*@uQ>=;RK>Xv7nQbgZ^UMhL@H(cs^E z?6es!k;0yP1UZkXwG*ES`^ug}*FvdR_{YmMfD_$PdMY4&X2+eom}`cU#ar;;xf*Nc z>a!aP3)^LTEq&!TM#P-l_CGpOBJPZ%&&UFWk$UYM;FTzCG{?n9_e5 zk;Cni6SP8wem`n%0zAbuo|0DkW@;A@b9VeO=A60*leK}h5Gp%hypvqh*qO?kY_dp0 zSk`fL_MiL8^2hq|LgW$>2^QSBjd^Dlv&}m{DMMupn|#7vvMubV!R&_e-Le#S+~9JaC)0$o zZ2B*9$(37#&^{$#uy5t;x$gq6O&Nr?j5_PE`J-bsrWzIo`!Ct1pq0l`sFIJUpHaX& ze8rHn?h7n<8JZRH0F5f&P$)||P#{m`h`?U^JS=(X!m@9R{+&Xm%r;bAh{gZ$(hatY zKQ1LsafU4X`AakOM7=ZPx@Ld;pW9c!>zzj?+BbS%k;H(Or5ln@PcQqQtkY>-0Up1o uN=cfQBe4OCK%0ep`d2iyA@wJ8k3PL=edPc3F7U!65Lij`agl=Q+y4fzWJ=Zm literal 0 HcmV?d00001 diff --git a/docs/img/tasks/demo/datasync_task02.png b/docs/img/tasks/demo/datasync_task02.png new file mode 100644 index 0000000000000000000000000000000000000000..8d86796bca9e06a52d080d8feff2646d364310e3 GIT binary patch literal 18760 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 literal 0 HcmV?d00001 diff --git a/docs/img/tasks/icons/datasync.png b/docs/img/tasks/icons/datasync.png new file mode 100644 index 0000000000000000000000000000000000000000..e4292823597afae786d20b9d36b0e2a4b8242912 GIT binary patch literal 24850 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

M9}>P8wRV5F z@B6FwU*n})7H)vbp8zx4dxkT($+tZ2Mj(XB@5a2orD=SZFCa)_WyeiJ8^163P#`Nv zic?z(iNm9w(u&1RK5)G^M7K1$5%_Lc`g+hBTwA}ba;46hCGmGKC5a;@tqM7(Xl$P{ zjlNODZ$yd{&C%EreZ@2tjDgl`u%3|p3qp>0T%h2*W(SZ7@W`P#9H@TBW{F%>W@Cw( zN!LwQg2#Z2!Op%1=cPa!kDpT<$=}newE?nDvfqGj=uac!OU{uwY%VD|roFXAsQ3OG z_o9Fufb+Al!&JYpd}Qh-mzNy4e$HWng=)ezINkj!7_8*0 zqewu`jt7`LJ62#aTBixva9=>m&p(_-&C#A*bilkK@Hs2_H&Z_UEGWd5ABqR_W2puH zvCTPd8?Q+OdE#cw*OX~HC?sDuSSFH}oRZ#YRU(#@n=+#IM`OAogvOG2{RJ#OgC7bu z1_~<-`JA4LN|1aKir;$`Px*B4EJrT>bE&%M3@iew!S+KS4eaY9JN{c{iZVh7eU#l)g3f){QdMeX->Y z>6-P2BqKGGIax_NLBGd?Br_eIjLXVqJNPm12mze@iwaT6Sk8b{O=}~xCotYrq9QvQ!)zJr&I{ujUtVu)XRif(8SB(%YmKx^TaJoX7#*Or z)6x(LS2v@u|X~ce1jIwKj$jb|CuY zp}%nt0jGNV(t&+ks_84=00Cd?9Cix!p6-ql!;J#< zT6?`G-rwyn^!l_~xgB}~SB;@fdz4Wi!C75;2QG|+XmS@*bhxE|-OrF5+vZNlU0TusHKCX3fyZZ!J@gJocmkzK zTc2-ZgIF;9RX2>kXrn5cpSnDbB)C1HW{5}bq;D>S1cCQ+J>%9Sy#cHq?hVIBy8~^5 zLZhwZ@(s*cf(E75^_83cDI~uybPhALeGW8*sG~0>&3wN(bfoU9)i;kCumAg(ZNMza zm|pVc54u<}lJ9M@-wG~Sq&M0XZ9;wP)+=zz+n${D3T}dQ3eF!t!96L0O{W5~rrrf(2Hd4P|S9e}A7RM#hHdsDe4V zP9>Q0ezowKWoPJglhVSNKEPMS1fcIEXS-y(f4>; z+hsUDvu;@fB?pkcqS(-~90FqBA<>Fu5Z+e4W0;jBqjKtN2f3P)$A-&j&H!v82M*VX zg^Hxdc|10kui}FmkAZ@&$i58Ug7PM;W~kIlsub9zJ6kyQf^)+W=<^^-6BQHw3B5j% z{(7`G#|f0s#$OisW3+8;ymb5{kk@6)rLbuQwcdT1CdFZ@+QqQeC14+k>K*9;yz^(4 z1|c{xM;A)#?xi$bkIR?j>@~(NIGesKG1mCBX?x2<_}v^}Xu$BYxeKL5v|QWx5&=^ogtQt5A{$ed+cyt^!&?eWpaqF0N;bN*VlyBlzs6vX;cwod6CxHC zkJ;^c?b$%w49S!w`Akku4qX5BMa+!TH6ARtEjGyVo3KU_e7-IGKrB)xbkBIZt&I}iNP zJI7deQ$5jm3FrttT!s*Vy4Gdpnh~$9fcth&mZMly45kXd6aYBI{^O-|Oi^g-5C7qd ze9wwR#5a(EG=B(2^a({8g|UB$pW3)!@b0ePI_l)Ix&{6l**}FDpDv%TqN?WgW8rH* z?R(%Dt^8%EFd;%5XF51!so@wU+y1iU z&fBC_$T7lrvdR0;g}NU}5Lw9nn5@j?^^I-oFVHsam7`Cix96$`X-nY@^382y6nr82 zl11|1Od@zQ!_5B^MTa;%Q5r51epVMV+3*x29rhr-ojF8zkbE5yZ7Sc@F;p$SI2#cqSNN7%m1i&{lOVAhWC zti+~4QoNz8Z(DD}8RI^O*L9H}feSqpqF#FDWRCN1>&ojPPj(qv|FfMLff~fyX7=1& z_T-<*(w8;i`lK9tkV0!?#vf~(i)(hjDG@ZjcMbuZWr{$*`^lP#M3PiObc~x(nZXt+ zGWrC%I0Hk@9vefEpft^g+p&`4Xg-p{V-Y*E*FQY;Ycrg;5WhFVLD%$O+`oc=23p6XT6d(+$`l&0oRgG_}@#*gse$#Ap_= zq8WFt*bpLFkCIbXDhv;k9Z}au-09MlX;mV|$OSEZj*8Crj*iF)gYd8}JhZRAXbz)* zZyQ=e2j+ci;m+~}x2kxW!N|<3X_K7Z)kFIw9a~5;rPn^Yw`Q?{4rM$O^n2nv1p*li z37>r5jaSDmL_S~UjB@c5=QE{`-urdCl=<WlH*WC3@EvAe~Z^ek|gz01%vp($@J?OTmqVLvS;f15Lh(`tC$R#1i%>GtKCP%P4MrF@4xjtvY@ zEbz^fURWZ1@wgXkf@Sl@nF$P5{_yH);8wr`XlOWF|I5mSGpvc)wD0gWbs!OG6Fq?8 zv<>OIx@TmbN#Qsk!|*yDQk;@K6iMq$sZXH5nroj_viOR{Rg-`f}KwCE46cp-2()-cY)IUehk9CSd& zS*^^5Ise6%+=xo~%NIZ6A8YOGWqanh<ZBq4n6RKe ziY|*LP~33F_U)gcie*F58HFswxI^Z$ZoG~wmia8)9;!)bvRAJ*@#@{d+~y*3e(rD! zrO##CP?bQ(OMTp$)9P7|E1k<$u(#!;7OAK_1-ki?ltQH|&@|AB^5lvIs5zi0L+im1 zk=6QVb*mI-%R2pZ$Isvtp%WY@W`=TSkPY zx5M}V7=H)+aKHMiTE zuNOuk8mPdu*>|T2u@+KHaE|G6ZUi*6pD*jSP2ntg2IQyrdM%3aJ2_sqP#!Ot!zRg= zMH!4gk<5v=$gb*mCur)`**T}SbqtFq1$O>hSe%?AI^$=RtCd&Am{_b#Os0boh_ogV zYR1K6&Tp#wH7|=+1%R@XSx4+B!{FB-`y&Y&hgR$UM_2+b%v8Yd$*AAIo;F$qXcZj; zI0XyO8ms;|8xp(U4W0->*Gu2_5dVRGnuN($Dlb>7%BC0W-#C<#fw;R1sEA6G)pGNH3`#fvVW{4h3XP`Z52> zG|z#A-gPF_1NHf=Cg@uK#kY0*!ZTpDdD^mv`~XZTxa2;Q|7L<-g%spVEyy7PX6A-} zp7S20kGOZeXKxzMBntZ7N=)pdz4>eVYbMokTfiW}990zILiaon&zYZyeDi;fK4HU* z&XUluVOCVGYO9$H(J*3#)^JMuwnps|CZ9*AK%wjK1;9MeThvw0+YX8d0% zjG5YF3TSJHlU#6vWNJaXB^O2`IERudCU^-QeL=akpuKg-UuzPw(fiA0Oz3(em~%uf zttb&--tSAA56mb~I9eDx&9(rDUxr2q|L#H#6in*Rl)n_b^AT*)2VzYg4FI_M2|?b_;Tf8#D!n`{vTAV;=d9Y$e%~ClNx}PeOv9 zQf_;@lm(H0{3Y+6DDwoOI*=c>I2P5-Q?3WL*Qk-BO2_GIJPgqXso~l3WRQ#ZYR3~K zm{b@S`@xIHlTI8n{GP12u}$Tm6`e11*~z^H8c?pRwQcT@c@{{L=HK1G1 zj-N^k{ARXzF#eiep<8{V0hL0@m&t2Q1!hrT7&JU5q3&lE)Fo!sZBI+Hhp2#(+-pgS z#FnBDn6)i3{bi_F4O|}4F9FUZA5p2G91aWdEsz_{g169;G>c=>AflFUjoRdlH2$b_u^RcV7FP0X>)RYw3+-fW>6}Au5 zKXyN&ukvvJ3}gAVs25mTPaE8CEhL*O(WH&cgia{Ya*SBfZ0F&(^}aoE1->rw z!D?$;1OnmC@|TyoS|jy^Fi1DE8~}hPvt4#E<}?T%$bhh+?gYEBfOw*z!@Qb*hAmpJSGu-DmvRG?to+DdSR~biz~v?JQHB> zG~`SRx0Q?_8Y*5j@aPi<9l@SV;6Z^#C4Ioq-*;dgZ%(_%!rp(~__2pNs89KJ#B@r0 zqj%=xdAIlK<6-j@dW}=>``{mFR!I*k2Gq&b3gs9ZLD{Vg8vSd zJ-{Xig+r^|S@TQArVtrWHw1BNKBj`&;S%FQNBa2&;YD)>@!YXeAY4$KdiKz>Kj!9} zt>EkU&3huP*VZLh{i3%fVRtpLT%URjO(J=STeS_dX1ciHsS0{}t^3@w(gr=cf|-7WxqMz0|7z%D6Ja}r9c!fF+9H_-)Rieh?LTtl_1>*9o7a*h)-1hu$=Xf8~{ z>azOgwB|rRkc73L6ZD3xy6PvCDHKmD{4*_yXtk$mhT-e>V9Fo$Fi)_6duW9b`|~em zbo9igoJy6v=8=X*H#5usAisN8myELKrVjDS-7mWg<7p(i^Zm#pqr36W)3drn`*!|i zaS5VX4S`ZFrL~;so8vI0=vXi1@4O*7%mo+tYWpeaK*|MJ6S1rx5`|cU95@f-*YfY54No;AJ5HI1wZJIUBLn)k!%2@3YIy z)hp26VP4OjR((a!)TXA@QrkViT|OK-!8igfjPW_w|srDJGh!fR54F{*U?B(?t8H)eO4 zIF(dS-34%80oyi`UC4v?;LvGni=MIXA=Xu-(5mDD<|#Tl8Of|4@qNU#9wE*oh7+s# zv{aA7pnK4+goW7@z1$T`=W^Z#{;UM9J2#+KpTjqG*Kyy9umO0GVn`q&q-NDYDI}d% zIsCrk%L2vuw5Wk@I3vpCYFKN6U12`Gs(R*`ZcOOJ9dna;jHA81x0uq}RfIaHMrY_O zP2NmRo-E$ua)RS>1!r#HZp{<{cG-~sPOuS0f4|;?)6#+7M1W^x@P7UoxOnNZeCcr$ z)l_X{=&PW3#dF=h(FuLTrJq;Bc-sS9mG}E+gg8Rjmdi}7MBf=Qkl70=N-+8 zy8POV*soW#|4~~+#zYY0_VczrD^sEMFmc^O=m72=jPp6b+ zAZE9V!B@59&aAk~sOF2oi$Ue5O<#3HFdOM3YyOe~@Jg!UH~S%U`D4x22C;Kn*wr79 zt8C@Y(Y48&|H&zQ*VE`&XAF;l?Y%m^7P;Q0Mz|8B&V8z15tT4D?n$f-;Lb2HE36n@ zl;iNa=Bn%9OYl=76^<)cxw9FheyUwD>X&4Snk4EZpCdo*(kY>1N+!~Ix|Sj_?WgzO_cUB z+SgbP=hO_4`onw`S}rZYAq%)Sl=rNY#Jd%;%t(|wlnOa8x>`s|wa2KS!P;p-J7mud zxO}<9K`67;k}axcrOHv{@2A@|$OrQ&=sdO7SoW0;V&6|-AvHr0_^W)Uo3^=3(*~?< zV!JwxP`2y3`(^^|7jG-xukuDX)E5w=i`7pr*kwkg{}PVyLCVQz7uU}2 z>sejzU7Xk5OVuzV)@<(4X4rUCDt_EJ#v0>@$#&-@3EVy9zsUfl#XHjIJX45}@za#q zna-(?f@#>69LcEC3J3yoCObUKTC^PAtZwoXbO}aJed3x9fv#n*L#z!UrGngP8daoM zjiZC7a0lK%&(Thb!X4oQ{ek;$ITF9S>&?ROetn}pO2kHWEi22T+`jhfw}f&0J*7m` zlIHt{p5J4{Voj&lr6ifIsTDJ3@*O(?oj47v8(~VU1sI_`ML=F?z5Hj=jYA%7>2Wbq zVadr|d{$Rr$JU>0V8gE1SAs{XjV1n~;FtTF0-!*F_O>fTJO5R8QVPvhM|>6P(SQml z-ZSjioP3W-~76K+((^{9SSB_nGp+N6S^%u3zNF5&KmReVJdxGs)fWotaI(Ptk z>^Si)L!18iq~QcMVT6=yip~HTbz(nuXr~RMKUy(=H z^7Ii_umZ?)o?XP6-_v=!GkXr@x5g=Ob0DFr2ddcE5GMe;dSwm@icK|W5*rv96eHx!e8fbkW}n z$3g=6%F|RWCey;XSq|IF8|ZC?QcS?3oX&_vMt&PYxQL1d(WR9Vuv62jECn6t^z2rH zfGkpF#$mj*Ms@yU(Dt1wEOz4`G|=br@BIP55LbTV*Msat9&wotZRIAvH;hei7N2=` zZ_j9%!KGS*3m}BV#SvW{nx7~x+&Uc-VhoQPf2zLPrBW`B06b>>h!a%~$8hHP!3aMb z_HP6N+H~AYy4W4zdHqRGAFSxQkLrq47J4AZ04>iZ9{*kFFHbE0EJPTv<-0Y zVEXP9bOtMWZys_24`Yh1N?mt2(mEyj5Ek{1WTH%MOfdg<(lizIKeXi$#_yu%U}s;K z?7jI`1}VOtTw{G%YyzXAbcvFi^W>+hkUQK6nsxI|yH|mbSFe%Y+=~Es7p%~ap+nz9 zZg3PIj8yINz88H~;y4aaFoZ2ZiCB_Qqbb@LV$|oEh;%@U4yi)0J>f>FK6fEEWA;Go z?sV*11RTM8dZ^=yFU@z`pNmHc`3Ahb)s$EhJNLCtJDX;A|6KhVBJeoQ*LzgPjnT>B zVn>ve6Sm%CGr-37KH2~Vhn&DWsQW`?a*&KDk>WgMw4FBGBJk=G4x|#)gUl~1cXu-V z5{>VPVmy2QrqY6OqHAW`FV}`~saPlbGLiiL@lN`2__RAB^m5%bSn%7(_mZY2mb$xV zj{I;{a$x++h9JPzLlyRZwoa~Ga;g=ess`7DAt8y%7JYOAR|GK%2SLB8g}qX2YFZ7b zz?>v+;+HxTqdr#?XBa8jG25ykiaqgb2n@BJDZXueBPZH^9{aN~sFdNrvCRzoYusR- zJqh`w$WPNDiC{?d-X<%MI1Oq_SX`N0{4<#Z;k&G>`Oss0XFE-?;lBE-x3DWkuAH^Y zs3aMH75F?NwP>JV18Cwyc1iCkCugvS?c~~2(X+T^xEub4 z^gR=*b2po70DUfALF=)LDtxGn8DjzEqyBt2_#=gqlz6m4sceCkwp>ar8-wU`;zJp% zORQ{s^Hf@-A_%n?iAuy|V~RdpAouWx!(029S*Qt${GT;7f{+TKlHBEJ2m#~u*MQ?v zRI9e%;%;WXV7ekSe-)#U-0Z?v?iO55U?F=gq0?%5WCjDW{*J!B!{raTK<{ibN>-R{ zt3-b+aS+SO>@;ipT;rn~JRsEQ=%ln7A=NiFn4}TNh{P_KoFa;&wU-LPFX?piMVSXO z`71>68ny=%*|o8RIj(G%zS0+LG!$*Y-KOX0@{(2KRRu}h`Siqka|PK^z0?ZZXdgQ%EexE zqVBJ}N3M>Nt)a?DyJwS#3rk)xsom9&Uq6b5mW^VkO5FU8{m&?9LcU>pwf<2$xE_7{ z)+teT$=nFEu|y$CP*;U?t0a34eahSYiWRD3WN?V187i3P;fy;%iK)l$^jK*m6!fG+ zvZS@oCn(I1!b6oN>bX2}{p0vqxPe1vxvTXdt9iJ*+RLuXNkZ9jK!boiJqkH~r(Xi> zjr~s_890OBS5QH_HCV#tSc7y0NT$MUPm2^#1D@ zkE_EicK0&%I@3;nhDqM<>H4x^rq3l;zp^s-h%=+ewzO09mfq%?`+toAnB`T(3K*LH z>a?0f?zp>+D($eMXhRbU3X{Ji$WrAadvkThlOaXQlIsO5{1w!!aaMFCxWZv{XlD{N z>bq(P?2Rq4x6V}h0xxHEM*}%d{V8JBnUZMT#x6MdQ#gYll>dDG-0+4YUcviTGc``5 zfCSO>BQmzoR&vz33y#CW+|xyMw+D4^yopw>e|&6jjtTvEb!JOy;j!WuqB}O z`b#w+Ql1txve5tc4gxp@jaqm-ao?c+;9OiGwqjIGyUd3C_wYrlyS(kL3O+xJ_kkq; z1AXQP5coJf`LwY>8AUcSR+ea`KEmNXg0*(vWB{5*$W{dly^7?u>s0#Ys?WxLyYHL# zQDar&&lh01oz~|_Tu|8mdXSLf5mQsXN_LV<&WPXr!p81M#|;j7jBoM7`UpM$g;$`7 zRGC;3fBAk)P!AyXS#Evp0Y;92uW4vW@dddQXR?V?REdhpgTLXAr5HD^Uh}rR;`+k-IXU(%+00(}FokTvo{YXtb5UegkTdOz>=u6w&^__3_a4+rlrG#&zP496jyF zYqU}^kC8a6n{K!(-<6wK9pH8HRppV8eWwG8NSK8GyEBk5zN zjG27Wu%b~U5s8EOe6^P9jAOB^$Ymt3ngCAa)rGP2u`2n)a_|Ovxq&c=y%U7}E@mIB z5=0hYnXTFsU*{`c)9?i|N8E>4CNS#0rdG-@$zHnV58q^KxY=1SdRl!|wiL?aEg?=c z{fE})dNymjSdDDSdB8V1V&%3wQt(5xq?Tv2I(|!-yPd;tYDaNL2^z=52Lh^j5EuMF z#?kzLJ0%ti8-iOXk@&2x%?62gzsWu0tfi|0AXomFRWz~D2)RYz?a%Y#jP63nKm_cZ z2nppX5<~^mLTKc<*1v+5_9dm7Uy%xEo%AvLcGZ17@)ZbX6vcOBs=f*V z5rv^#j@&kd3Rx7n6^jVPuc(b*f; z`wuzilt)tT-rmj!3f#F=%}ivkgKzhaY|`!`8|WSE?{)xAq{w^YIteJ^RT9rIN#AYwt9-J)5^FVG6K|S0A(7NggUlIB_*IL6s=N{R%yb4g2?J#2V|!npT;J}gM1dN^G5z^Sk3P;uJxoVG(y zLLf-7Lx3NJu?3S|Ib33)g&~I;Na81jVxtv4sJ|6S-s}7O*zzTpd9%gKZ)T*0yM`MY z9_b0;i7pWA9Aplye$J{}NKousHj1D_gdAgz>+8c6gEx1Nw{zkRL_$x?RajR^`9bHC zH@Jxx+X1&baTP~%@)c;R50hPk`MnJdcUc4|^Y%=D1uQh6r^hx!MUr5b^Hto4@CHZV z?emR#3Yzh;?Yca6?wF!QhPT(J@5RuA_pkaT}X+E%U_juWVTrq<2<U zlD`&O^QUbW$eGLtgA`Y(5UOE%aYXw)e=f9aE;cQ0qCy1^K&7a1XwTiMH~6+0ZC2VD zTc#S2vM%fOgqJ76)!G|ztq*A|t@YFZ3A(#->#rEo94pykwaiir;1X&k4ecFL;o@w{ zw85Z`dC7tCmxLyUVUx0JdRrLb^4(T7O~sem-=MsEtCkn3k~gV1w_aVhFm1m);}w(B z&~JeW@~T(K-_AS01Vm_Xr0G?0?nX`B-g#cmWgaxCCDv>C@R*Z^^}KCkV#RItwY>7y z>UsDEa%XTa`4zg!{e#2IciiNAgw5{A$^D8N3L$vEv$e2pby@re?p!# z+2P-;k!SLMxgMVfJufBFO;9oOc>U^)BFiC}*8pJ;t@mV{FWe&hgl#H!-8Gn)DeCe$ zqvrn-O@{}l#fJ*6-gGk>QrR}I|5xcbBmB~FaNt{Pin5;ieGIv`qhbwUxE8hK@H^0A zRjp&|{qMYcy4(LjgtkgM!=h~si`B-(&QrjC1_LCeIAQ5cx}0iyXF4s$O)0U*ScaOX zeN)#RZF~EtdEY;2txj3u^vEgARN+klqD`Rt$I@o_+n6DdCc_{Z6pPB)w+vpYYj+)| zC3Z!9#7KU(U^(X4%?p3iv+UJp&Ao38F67uhPc)hTjl}`S%~<$_%O(@nW7E#dEtc>m z$}9xZ4SGVI)vxPrX)+U|#%9~u8-8$B8tkUky2PC%GUxYU3;m%i`1lKhQ9}Zj`uO?a z%1@{gKbe5drEc@w4wHJ+hteyB4S*8;8T?wKn3gE~5As7;3#_oX)k?&N|bvZ}v~b35Y1AoyhB zpbWI2RbLBCcNlbw>m0A4Z};N(o&(7Ju}Y$6_`;$Yq=9{A?9L5xR-IvO7v6F8L#SqDhz2(~m=4VgY;@E!A zr|%r*JN;z3g!1L&yTa)c|N7f1lo-SapTy4&A)httFWr(tPgM{v&g>NQ9T#qh;o2t# z+|FSFOUMe3MTxK$A?YR?^D($)&EZ7gnXBLIy0u|ZYlN)o;G7TBSYldT+vR@Gpj`>Q z;#29OUmp*vEyPUbmqfKG3om}<4y!W1*RKY}-&e}6I`2y>YIxuv0N1rba}`-}PCJ4r z!-z;u=r!YNkli9BRjaW+CAwX!tlZP()lPA6&$$`5e9ou1e=m0!@#iQPiQ}~lg`+15 zKd#X-aHYD94ZBhLKO9zGXtIRTWm%<83a~S>M@q6=m+Dd@=f;D1KZ?r8bi7>xl8}n5 ztnh@ffq4Yh2=ufS9c+IEExSub?}-yguBiqw`K?AC`)8y5l3-6Utf|`ek`QI2l+T+`&Uo#>&jU>3 z;|BiqzfCbl^XYQJW~#J$%sRmU@;KOCv>{O-W#pH2FW1D^nRv$D*D-k1mE|O=B_N#8 z&&Lc{ebw!0SnT*rI{Ra0&M?AsXqM-3t>wB>?`=#9Cj*>8~xydO~ce351s8}Lb z!XypJK}`f6ijtM@(3HzfpW79d#*Dwrp&|Y-h279l!Tyy6K5ygk{Q)6y`gAN|%7Rwq z$^Yxfr^nIGl8|9`Q`sUlz%@ob&n&vfKA=0DfbKQHtq_VW6 zz}t?El0+*L41WWSnV9T>RK)k;BRZ-3weNA$Vnr420CPf!Rx$XG$`Y|H)pDtO#-+G% z|Fh3|hbNZ5y_O`h>2>as|E>r;9CP7&U$2L31qBojFot4&Rc<1Fe-XdxU!q(4wG6?= zB>!;o6v8fzJH=Gj9DRy|k;jg?kv*n3RglD48|QQtSs7t^6-g8eQHeAQN%^zYgN+R% zbd1@GpUMW~4>{z7>P6<~5PA1}E38>ix8kJdxQ`Oz2(uG%W#GFAUGr5!|9)lAZw-Jz z0LaV^lZ%u<=;r54J3rs$rQEeEhOMT8CVuL|<`!ecH~UPtyf5YYs=Jyv@R}2YHR68l5Kw37E z*Q3g{#Gld~yHVYKnP)s&bXP{^m#x6}9lr(Z8O#aX<8mylG(-ty)H&$s^N6t5`lVybSL4sxU{VeLMl)a_;=5 zFlz_%(~Z?(EuZg}P9^&M0H(UbjCM?WLSi#wzhgIdhAA2;8o6y$n3e4A?)>$e(P!wO zk-Mwu_)DO-9Yw)R37l5i(N@sQ5@m{9ZQZYp-zVyyvuc%xt}Zb`GvwCzLb4ZO~)OB(ICR2^=vyf6Vc)^{i;aK`PGbaUP5C zr@lgq+L~H}b4^RM&A4Azq*kJrd_qyL*0xc@`5WyBTw3MN%{7OwT!aGJ_!2cJc{L9< z;r2eIF+T0foAj(5&^jWk)t!i#K9Ox$?7l)YNA?>|h2OY z@?d+)sK7MDFPsxocXo2n$UngjVvy~f=ReNRiw(e$Y_Zq8YB_?Zh$WfbE z9}?dts=>PIFfqJfl|#19rM%9qzS*t)xl7x&EfU%DmzT~RJxru>phHuWljGCL$<$OH z-#0TEee;EzLq?8ORMTUi1(nRWj^ASzMokc3*9Qf(u{>j1YJ+ zh=Eq9Hdd)N)f+oEZuLL-;Ty+su*2ztBd14Dk_8uMPnIpwFu|F~X zQFiLB>2t44pLt>O#QS*awbc1Hk|S?^1)cwEdi0&t=)0-W_mW8O&s@;oQe*F>$KFkk z!3$nbkGz^X_j2m&bLlhJcr`+O2UpkDWRtD3NN;xPLc5_;SXNzeeadQcV5}{_N&A1ygKl=Jw1E(g#W%L z^5LF=y{`?w|N4#(-rV{3zdro&dyjp(_vr&4{pH{%e;Ye{Fq?#*d@7qcl}3P~6`O26 zN&M1%lVj06e*tu=bXy?X5N@+V*hG(NxM4jnpcVLZ^+8iZ&{X5oS5vt8Ch56Sv3Xum zdHNbuEmO6ZC`Dze?jjYkKtGai{Qo-dC{l0XTEs=0ZWFZKDI1FJ9X}0!mow87$IhHe zqAzjw6rOwG-FK`WUuq_snaX6wQ+Of=7^O3)OHBgLPvPifE>crpQN${G9+b>~K~w2; z3dhIOXq9w^uy&*Q3|N%6@u{0!nmXC0X33_z{n%S0r%<<{RDNm_Ol2}n+|=ie9o(=r z1cX80U+b3g!BAN`>r9<@40ztbXFkYIog$mw=h3nnXo{!~I8SIamj@;$b3{|-9I@_} z!DrI=*km%5Ms_!w!6zq@W21?gX|#L`Fg>#O-L}EV8VpF43(%1Ux?;Z+qHksdt!4;= zdQf%f^Y+m5iptZasj4FmW>o`4rjotuG3XEcWo?SA2Q zzjdWU!S%?>ENu|k)LXi1bRBi_md$;^W5jd=ybGPZi<&MI|1pCW7BXq{U@DmhWr(GI z5K1#=@~P<@d{n??bSyDBl}bbK2fu47x$oSF`H}nY84h3LGgiA4oUn$|Z({Wu={*P? zP6%}w2XqAFf;_Q9p32R_p-0tPrs&{WR7)hAE6ozfkIEDq;Y+hd*7DRxf14m~Wg>w( z7ADbZQEGo?x@BwRdb^sp>5gAoRBw-;KZ~qU{%i_)diZK438e_s;4Y(!{8tdXC7(sg zWzj+I=qKdS-AoZxK6#QwG*v*{<8idl{t%vSiF*c~e`*Ysi)Hguxy(rN{LyoO&f&?# z;48atb(xs*%^aJA7uM1}vTBd2$)&E*cL^n1HuZ)M5(eg6CJ!GQnU3@YLG%m%nabf{ zb;k1eBw>xl2prF6(d#FOTB75*+z~vtFFF0pzK<;TZ~vu5Q*V;+opPQJtzc9HRFLFX zgw(XKmKh=z!U*w*-Y$^3gNPld^N7mLrRkx%t$%~(YOOMM|M!;PF|BgCzOz((ca6I3 zw?6ZqKYH&Rj?Pa+H!F*un3#Y+@oOiKZR!nFbluIxx~t@ygxb!oKi&8A_=ykj%mJe4 z=@gNmo+Ct>{j*qibe%v&QT z&l9{7r>&qGRd~Vs$4=NE-F2-|!P9rvc-4XsTA8AIl@%5-nsPKro2<%~`?tQ9p8Obs z>l`}fc!XHf7{91d;!_P!5G3KwV?;eR%H8sj(-He-?T3W$DA)ei!%N>@{5L z)UEPpc^)+@tOKLM2y08d@?y8N(yxR^*ul@&!oUczBMYA%(ErLdu-&R3cige8^|v+B z&8>aDw?|Hn;5l$uKo8uYG2-U+zOnmylaj0MSfbu^rKSB!LkrrcXYS%y#WclczNWQC z*;=RE(x7ZNH4=nzlwwN0Yi^&e*K!Y|?hl8CR>@uT~(fQ?;+uv^VHb zzE*8)hs15IU3R@qajQwu74^M$;@EgLpCzipPNb70bK|MZ*f=^h9j-qbAGynGTW66m z)ve{GcGQK#qd__Id|5vr)e~m3a zRNnhP^1F-ltu-MX%}CDKv@wh=baQK^wWShkt;E{UmJE=kYtG2B5}PZ&IC3qbTBE4W z&>=K+aI76Pdk5M%??R$EJL!fkEa^Qzx2aw^edIKr1AxYf3bK7Cj-5}XP$_D1`m=Q6 z$wMFC?lrQz?}ZP8b_V(t#Z1T|S24;zjfsiQNEEsyO&~3TG-ueH??_ilbwjOvF+{F3R zOmZ3`!_0{@DAjsnBPPYg>_}t;pOlXDqggim{G4W4XBlZaGWeR%Jpn zflC~1SGd~#*WLCbcUwt7Qf}|0sW(H^_3GH^Q-qB{jHggA1UB*%p8W*Rdfs_%tzT22 z*}(TH7_M%nTLzv2yaoVN=9a^K1#YTbx+;fO;5YN!hH{;VZbpk}Jim@Cz+i^dY$PQo zsN@Bd0-v_lrw29o42@nxqg&tL($zb)YrEmLD~-BZexUiWfmE^VI=U zqu<=Dfpf305{y#;-=t zmD(-;m-yFJeyRSgXWq`Co;`3U(xa29#MDGC_3%4;HV+4z;mfMp@I&ccKi0Lbu*)lK zO33Y(sM`Lk^Dek9Hj68)(iQslVtreQ0d3_eGHqFAZMo96`N#Ga&~n@V-`<%AM^)u} z{QW!is@~M7K$cGL-ATGhLN+!5K^+~PnNr_4Q*YEaEFq-#?%Vsl-S_t1=_N}C5C(bj zw0z@~TFTP_N0A|lgG!0|+{e*T*#amDBq96K?|1GEZPTZTh%9lqRbLOc*QC6k{I>Hu z=UAmNB)9;HSiyxXX_qIa1lJ%5`;4mDu5Pv}6IMx!RnTrN=&;W2K%;bnOV#GA30Z%c zWcKxZb!2j)pUu7Cztd-iAWwd8w9ozgA1i51McfKEzM_Miw-GJ4K^?ad0&Neqo+(AE z=)IL~{?cZ&MzOlxR{^GFL#RA4b54o}6+z=)C;JYjN72m~OON*sOr|H^Jo?$~lwNMW z4{ipS3UQPW`OPZ$AD4>Gje4bwO&z1<0jDzTl=&>`kWCdJ=K3v20aJO?P#qENSslcZb1dU3dB#!3K%c6Ek&?)VqweKI_63FC>rPQ`G2O zx~cs)tD2GEqO#p9joH-eX<5P{PddxmDP@amE_+fKc%qsl8sQqADQ`#O_M76ioWfPZ zHon!IyJs2NZwj@TF>Iq5jO_MP$f`|=i=er_vrJEPW?9el!g-p8s()c|$s-n*e8RYy zo*oIKmzY<+I@|-kpnrI*@8s$9MEX>J-=~A!w#PTuGrA({eF9HoY0M5^BKDevZj*>K z3*1HlWe|CZ(uk`(;w%pk?8+Xrpr_n#EDInbBo85#GDanBl=_U)2mv=t+Ts+0v5DJd zVFI|RjHCT~%9|bF0fiAuQP@4!gfXXQg1R|Ki05o&RQp5IE>wKFxTDb=PJcsRd}Sdp_Fy}aC$WL@{W0yRVufpD(0MJUj?^Z=ChWDoQi;5>bFRI zgwSUK4=6)RQK$AxWcyr=f@XbjOfQTY(K#3)LJ>w=YKoFJNrxLGOd#jQ_Egv_lkRzJ zUphQQ8)!rwr7@Qx<`jm_h_hCgg0%sK?zOcoRHfIn$Zu_YbaUsKuRczv-x%rl@7{4+ zj1e{7r?fU!1+6l#PT*;hMG0Zp#7P`7NrEO>(4_FA=xtuy1xa-+yO&QHn^8*>=!h1; zg#!pQ?+VhB7ocev!nwJc^e6&Wv0GE_&^)j;_1Zx9akjKS%m$-_>^WSIzrF8{2sxK* zf^bAYYsHL76?Mt|1ULl|+$yrEz_z9;;YN!I*|G-KJ&tWWdW(byDjkR_R!BGpjv?$@3=QS^DVX9*;a43)~$y*%75tBGZWSkf0xj1^Rz)6=m4E@09DIs-0!;e<~ zYEg^#mV~!+=;SfBlYDS!q`#+caB#Rkoqqn)_kXh?EO#|PN;TWI3XDI{pbA(@h}H8# zL>Z}B+U8MHO`OU-ji55`+EQ<$nrd7TaxA6IH^r&N?G!k&lCV}9vy=pyAV-_u=3bJZ zAVpsub}jar=DQ8cqHf5FE90&ODQ0fORugwa6t$$)yCOv|4m(OMD{rLDcf`q`$H-e5 z%fH7wcZFOxI}Eo|#I0W2GRm~vXTLQ@!k5(2hD9NC2Jhma{l=hmX~4eBZ-rM^`0V#~ z#2?tUv6i+#)(wFX#K_7N30XAQA;b#H5O-$k72B&d2Oy3ioST_QPq9m<2ssqZ?gCOH zB%7AE(*O1D>mQyug?e(w(}Q344zX+Mp84dR-#ywsFK8$*{s;VhtG!yVMt61u=+0-E z-P;3uwr_Z=6SVO_=f=18Y&tNd&2R46w*Te!-8(z>?+L&0;@yw7RW%ckjhFhg)j_l7 z*+=59@7nOjo=4t!ecS%Mn>t_I^yVvfJ<<+F4*W}*M_V7V-JGPDm!I46;r?BH$DTR# z(Vp(ZyN-Xp=fszPKKSwLr@A_ieD-$Fi8oIid$sG(-mXKhe08MrBUl5F+Nv(v$s$ z3_v(HGmsurkyBq9CTDw1r77R_RO62gzn$mSZGLUfk-@?Kz9DYT^2-y)yV4_nOAj?X z(spCmQp@NniB&5+#y@;~;Dd>Q!)zN=7aPN}GZhm(=?RFvdy!C8=8J*;FVhomPxSkC zKfNMqucLMKUfrEBa@z;5!^h#XJ!cQ42D8`r+#?ddM(NYb9c${nhI>=toyR^u%zk-y z)-(btX|f)+cW`uIbP}zYMhE#!92*!sK0J)(#@V;^vA@6|yN+{&J@XrW&jTZazg?fa zso4YO4T3EQ!bGih`Faunff8 z;t#cMrDMy3-4hf2L!;f@r`YoU_-FlJ|06xvzHjH9VaHN)!+k-rD?Q#dI<+|gC$6(% zYv53?zXUz8|=s$h_A(|SSoZ$LghesyiZNy7Y zN(0)en6)ls0e5q6-1ox4PY$!)rKcw+Po5cscMgo8;sT8D@0s3VH22Q#moPLuG0gtN zvB|TmrzhCm6u9Zn5p?MFk@3j`XZr6=Ms7{`7D8(FpkLbNER0)#9xy^V=I08~ll_rw zfN*XuhMpqV+PuPf;)GYFr>#vJ#gs+pu@o|vS$@lP0n;qMK|t%2q_({2fd`uXyFPfA zow%6V(Bf!sH<*XcqklKGgk6a!JP-bDba-rRWW2YxpSw+c>~Za921eimV7<_c$LYS4 zXnt`#y6c%Gq^_D+z0lcoJ8gOHA0Kp~U7-hh$0z%S#(GYj0eaRx^RO(at8aBJOOgv* z+IzyD=fC)vn|wXZH4MR*PfmdP(`W>{!YM=WHz>2ub5>_;9L<>zP9WR!(d5K0LiCLR z=dD{4kW!Uy@XU%BWF2mK3Y7{W|5CGikaObv7cQKnOG{NwB8FphAyi#%dh{ZX2~t_auE!e)j&S>G4DC4yhR(LC=6D52nZSs*80}T*K&D zmx?Yv9vR-(ck1qVu-0R)Y<56yuiC^^Yz+cEigtHd+YF`WTLHq+xia(^K;Xp$UQ;21 z7@7_88w$M|v>}VLX{kdOfAX=TX8@aYZ+B1cIJhdbo&xq)b{IRAI};FjGx zoB#Zj|AnXMT~E1o`~g_;?RYZz!n6LT9}n+-mfExZ&aJVzVUsFkEc5GB9?hyJejj>e zN1}6Q+h2Ajc0Lo`{zUYpXMegWq6iq&L82yPo$n`VDcx-`>Ss}MIYWTITh30rFA10z z2Tcn@NWkLKs3Tj;B1lU@Hqf%5?WO?I3RbuHYhNNYu29mi0{2+a-{1wo_SXDqX>*BZ#Y>VnpK##rmpRofctUHSz+q9*Dr4O+^BmWlvT6LC~9Mx|?A ziRpedV^H~YfSn?sk%csputpr#2qPLvNXN>M8D&8O_&!D0qzD_7Av9-_86p3#AlB76 z4fQ^2T?`>o-a&~IHc8UXp@a6^{O0tGt4vQeLo<^et$@}Fm?jn=tr!6`<;8wNX=SaX zC}@#;bPE_ut$x+&me9VgFOH_iP}Va#0+~F-p_3!&p|Q!MBg0Ss?VW{`LE>C34r+^n z+S!37X@XEj%xcC|MnVo{gj-t}G6-7;Y06a;H7Jq}aZoR(^`(qnNgKdbRYe^&Nm3nk zR3zM`K|%)H1T0l8WNnIGu*qMZa4K8uidMU{-70Cfic(f#2a=@S4uZ&6iZ=57W`qz} z(c#J-AufiL>h`V4B?&LY%ViO(q?uq(0Y?Wqt66TU5=b0C+%DrdH&=$9?3c2Q5YEk2 zqo>%bE%r5ngmk0G+a#rQV&uq70lF*LlSigXoHN>mO0neklLR`oXMBAf1V!h zWi#ZV;ql>-iBltEM<&Pq_s}QvX`|HBB#Ib|qlSW@z9fY9PEd!f-~pw`k{Jpk#-aoP znjO@^-#Ww`im*l1Y*)n{%4VB1Vi5+6h48bYP8Ar2Hjlg+GHM5yz>i! zm65w(S#io*b0uLX?Lpv}K#-Gz;351t8DpqwqtIT`4>GEaw4&81XHV(?ZffF4aKX_7 zevM1PaN)#Ua(c4gkO2ti<|@*oDfBlK`qv1UDSBk2K}wk*5mQAy|EgbE=rNSFdTyW^ z=TMDcJg(ROx}IuEbZ&q3_?KKW`QX{*2Ty#+QiM0 zO2QTiIIo0V7=u50tFqZ%-t0h|-uca?5kQBSO>2JQZV-j7vWQa@wyWCdk}#oYAtf<1 z84jQ2Iz8Y{mqt-1Pwl!_MnmjX!oa z%n9g)3DkC@Bpa7UY}O|qelI&r%b0RY#nqE?r&Jtzyhd z#w7Eb6j57g!YN`646q_*AP^yhq^8ihRvxsJC0(+FLjm_S#mJ)eLIzO_*`G9S7e#GA zn=Ecu#Oz8m=VenxY-lBX2&uN&4T2w(BlsOS&0{g*NCJ$cAv0>d=%55qbJ=%6WyJ=q`01_hJP9lb5l&y=VCs(;8>5HsQ8;U%- zBDY3F>8m2{pKeb6=CLim`{TC%eEi`BjB~!vSo(vZE(Z&i>6g+o_C znrj$)rOQ-J+o}Ujwa+Rc^~Ej?yi*po;oR`_d>?x90(3rxW)?lji}{QN9&Lehoxr70 zcuZ=VPK0z z)+uN+gg8nFl8DA~k6G^4iyRuUTPLB>4tBzT8KNbgo=Zzl_Dk7D2uEio(gO*RIAQ~% zg0|qGO>(bEP8mUE3?X&v1@?8|v*0CwOb{>wXFNTZoSy7AWB|g^nThnwqBOHT+CsD# zgDoSGItY-#2mwZ@R86rTXN)C&6VOxaM@9%oho|RK(USoPM`tF|Qxdey@#=1HHO`?l zK!!4Gm-`8k#{kJWm?BvKE!+XN;MF3Cd%#NZ^juPUvOkgy5RML_XO4Y!Ug11l994K# zdfM8w9zvNyRQo{!m@;6A*%V#Gu5N~S8C1lM028+56cWx8D^rG^^XYq1RTg*T70%O@ zp^D=P7tYi4RApRPwq_zd8F7U~j-CuU8G1PJ^zih2BaRqc95=XdZg_gGU3$3aha0D- zhqFdFH#|MpG(E^qv8`m;!nau9A|ad`o}O!$9IVX4dVq4xQcf6@!3&Fr zIN>~HQN{IjoHL%SC1T?xvPpPd@t>f&i0DB8*;rg`YY{-KGS8eNL=R_&a)om|129Dq26a=GE@;pxGI=;4$D zP=4|BV7Tz~oCDBw4Ds|}xLnip++bM^x=?_4dN5pgdcFaOr-!E}uW)qEp(jTr>-r9})Ko*o<*o*t|Y#M6U`rzel{ z#y~thxOjT<0Uf~#VngWQ8fo4KK5N?ew166!KkOxQSBI!9N3*$RF zu8rDswjIjoBI(Hh#M8smlSeo=obuO!czSqxE|8u)b)fT!rw7C32TBhYN9X9`>B(z^ za>dhw;c`vWlf%%r0L0US;qn8eC$BD&o(w=dJ=Zin*O^x470%Q2RON?>pV`3lJ*mR$ zidV6^$kW5q!_$Ka=Z2?;rzcl9H#|K&J-NcU;pyS&$ra8GPY+K|u5fO6dVX;9{69LN VtN%AKo1p*z002ovPDHLkV1jlSg&+U` literal 0 HcmV?d00001 diff --git a/dolphinscheduler-api/src/main/resources/task-type-config.yaml b/dolphinscheduler-api/src/main/resources/task-type-config.yaml index 991d3bd982..0ce770c2c5 100644 --- a/dolphinscheduler-api/src/main/resources/task-type-config.yaml +++ b/dolphinscheduler-api/src/main/resources/task-type-config.yaml @@ -54,4 +54,5 @@ task: other: - 'PIGEON' - 'ZEPPELIN' - - 'CHUNJUN' \ No newline at end of file + - 'CHUNJUN' + - 'DATASYNC' \ No newline at end of file diff --git a/dolphinscheduler-bom/pom.xml b/dolphinscheduler-bom/pom.xml index f9ea2abdc7..dd77d73ecb 100644 --- a/dolphinscheduler-bom/pom.xml +++ b/dolphinscheduler-bom/pom.xml @@ -97,6 +97,7 @@ 3.0.16 1.31 4.1.1 + 2.17.282 @@ -748,6 +749,102 @@ snakeyaml ${snakeyaml.version} + + + software.amazon.awssdk + datasync + ${datasync.version} + + diff --git a/dolphinscheduler-dist/release-docs/LICENSE b/dolphinscheduler-dist/release-docs/LICENSE index b7691bfbc1..2ad573a241 100644 --- a/dolphinscheduler-dist/release-docs/LICENSE +++ b/dolphinscheduler-dist/release-docs/LICENSE @@ -446,6 +446,7 @@ The text of each license is also included at licenses/LICENSE-[project].txt. aws-java-sdk-kms-1.12.300 https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-kms/1.12.300 Apache 2.0 aws-java-sdk-sagemaker-1.12.300 https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-sagemaker/1.12.300 Apache 2.0 aws-java-sdk-dms-1.12.300 https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-dms/1.12.300 Apache 2.0 + datasync-2.17.282 https://mvnrepository.com/artifact/software.amazon.awssdk/datasync/2.17.282 Apache 2.0 commons-text 1.8: https://mvnrepository.com/artifact/org.apache.commons/commons-text/1.8, Apache 2.0 httpasyncclient 4.1.5: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpasyncclient/4.1.4, Apache 2.0 httpcore-nio 4.4.15: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore-nio/4.4.15, Apache 2.0 @@ -483,6 +484,25 @@ The text of each license is also included at licenses/LICENSE-[project].txt. jettison 1.1: https://github.com/jettison-json/jettison/blob/master/LICENSE, Apache 2.0 stax-api 1.0.1: https://mvnrepository.com/artifact/stax/stax-api/1.0.1, Apache 2.0 hbase-noop-htrace 4.1.1: https://mvnrepository.com/artifact/org.apache.hbase.thirdparty/hbase-noop-htrace/4.1.1, Apache 2.0 + annotations 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/annotations/2.17.282, Apache 2.0 + apache-client 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/apache-client/2.17.282, Apache 2.0 + auth 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/auth/2.17.282, Apache 2.0 + aws-core 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/aws-core/2.17.282, Apache 2.0 + aws-json-protocol 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/aws-json-protocol/2.17.282, Apache 2.0 + eventstream 1.0.1: https://mvnrepository.com/artifact/software.amazon.eventstream/eventstream/1.0.1, Apache 2.0 + http-client-spi 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/http-client-spi/2.17.282, Apache 2.0 + json-utils 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/json-utils/2.17.282, Apache 2.0 + metrics-spi 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/metrics-spi/2.17.282, Apache 2.0 + netty-codec-http 4.1.53.Final: https://mvnrepository.com/artifact/io.netty/netty-codec-http/4.1.53.Final, Apache 2.0 + netty-codec-http2 4.1.53.Final: https://mvnrepository.com/artifact/io.netty/netty-codec-http2/4.1.53.Final, Apache 2.0 + netty-nio-client 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/netty-nio-client/2.17.282, Apache 2.0 + netty-transport-classes-epoll 4.1.79.Final: https://mvnrepository.com/artifact/io.netty/netty-transport-classes-epoll/4.1.79.Final, Apache 2.0 + profiles 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/profiles/2.17.282, Apache 2.0 + protocol-core 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/protocol-core/2.17.282, Apache 2.0 + regions 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/regions/2.17.282, Apache 2.0 + sdk-core 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/sdk-core/2.17.282, Apache 2.0 + third-party-jackson-core 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/third-party-jackson-core/2.17.282, Apache 2.0 + utils 2.17.282: https://mvnrepository.com/artifact/software.amazon.awssdk/utils/2.17.282, Apache 2.0 ======================================================================== BSD licenses @@ -561,12 +581,13 @@ The text of each license is also included at licenses/LICENSE-[project].txt. slf4j-api 1.7.36: https://mvnrepository.com/artifact/org.slf4j/slf4j-api/1.7.36, MIT animal-sniffer-annotations 1.19 https://mvnrepository.com/artifact/org.codehaus.mojo/animal-sniffer-annotations/1.19, MIT checker-qual 3.12.0 https://mvnrepository.com/artifact/org.checkerframework/checker-qual/3.12.0, MIT + GPLv2 - Java-WebSocket 1.5.1: https://github.com/TooTallNate/Java-WebSocket MIT + Java-WebSocket 1.5.1: https://github.com/TooTallNate/Java-WebSocket, MIT oshi-core 6.1.1: https://mvnrepository.com/artifact/com.github.oshi/oshi-core/6.1.1, MIT unirest-java 3.7.04-standalone: https://mvnrepository.com/artifact/com.konghq/unirest-java/3.7.04, MIT classgraph 4.8.83: https://mvnrepository.com/artifact/io.github.classgraph/classgraph, MIT - bcpkix-jdk15on 1.68: https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on MIT - bcprov-jdk15on 1.68: https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on MIT + bcpkix-jdk15on 1.68: https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on, MIT + bcprov-jdk15on 1.68: https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on, MIT + reactive-streams 1.0.4: https://mvnrepository.com/artifact/org.reactivestreams/reactive-streams/1.0.4, MIT ======================================================================== MPL 1.1 licenses diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-annotations.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-annotations.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-annotations.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-apache-client.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-apache-client.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-apache-client.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-auth.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-auth.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-auth.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-core.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-core.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-core.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-java-sdk-datasync.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-java-sdk-datasync.txt new file mode 100644 index 0000000000..f49a4e16e6 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-java-sdk-datasync.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-json-protocol.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-json-protocol.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-aws-json-protocol.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-datasync.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-datasync.txt new file mode 100644 index 0000000000..f49a4e16e6 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-datasync.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-eventstream.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-eventstream.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-eventstream.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-http-client-spi.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-http-client-spi.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-http-client-spi.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-json-utils.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-json-utils.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-json-utils.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-metrics-spi.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-metrics-spi.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-metrics-spi.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http2.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http2.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-codec-http2.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-nio-client.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-nio-client.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-nio-client.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-transport-classes.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-transport-classes.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-netty-transport-classes.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-profiles.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-profiles.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-profiles.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-protocol-core.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-protocol-core.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-protocol-core.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-reactive-streams.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-reactive-streams.txt new file mode 100644 index 0000000000..d332c60cd0 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-reactive-streams.txt @@ -0,0 +1,14 @@ +Copyright(c) 2016 Microsoft Corporation +All rights reserved. + +MIT License +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files(the "Software"), +to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions : + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. \ No newline at end of file diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-regions.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-regions.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-regions.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-sdk-core.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-sdk-core.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-sdk-core.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-third-party-jackson-core.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-third-party-jackson-core.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-third-party-jackson-core.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-utils.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-utils.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-utils.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml b/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml index e55ccaafac..eb18a84201 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml @@ -224,6 +224,12 @@ dolphinscheduler-task-dms ${project.version} + + + org.apache.dolphinscheduler + dolphinscheduler-task-datasync + ${project.version} + diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml new file mode 100644 index 0000000000..3aa7bcacb1 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml @@ -0,0 +1,54 @@ + + + + + dolphinscheduler-task-plugin + org.apache.dolphinscheduler + dev-SNAPSHOT + + 4.0.0 + + dolphinscheduler-task-datasync + jar + + + + org.apache.dolphinscheduler + dolphinscheduler-spi + provided + + + org.apache.dolphinscheduler + dolphinscheduler-task-api + provided + + + + software.amazon.awssdk + datasync + + + org.apache.dolphinscheduler + dolphinscheduler-common + provided + + + + \ No newline at end of file diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncHook.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncHook.java new file mode 100644 index 0000000000..572cc35537 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncHook.java @@ -0,0 +1,250 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.datasync; + +import lombok.Data; +import lombok.SneakyThrows; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.dolphinscheduler.plugin.task.api.TaskConstants; +import org.apache.dolphinscheduler.spi.utils.PropertyUtils; +import org.apache.dolphinscheduler.spi.utils.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.datasync.DataSyncClient; +import software.amazon.awssdk.services.datasync.model.CancelTaskExecutionRequest; +import software.amazon.awssdk.services.datasync.model.CancelTaskExecutionResponse; +import software.amazon.awssdk.services.datasync.model.CreateTaskRequest; +import software.amazon.awssdk.services.datasync.model.CreateTaskResponse; +import software.amazon.awssdk.services.datasync.model.DescribeTaskExecutionRequest; +import software.amazon.awssdk.services.datasync.model.DescribeTaskExecutionResponse; +import software.amazon.awssdk.services.datasync.model.DescribeTaskRequest; +import software.amazon.awssdk.services.datasync.model.DescribeTaskResponse; +import software.amazon.awssdk.services.datasync.model.FilterRule; +import software.amazon.awssdk.services.datasync.model.Options; +import software.amazon.awssdk.services.datasync.model.StartTaskExecutionRequest; +import software.amazon.awssdk.services.datasync.model.StartTaskExecutionResponse; +import software.amazon.awssdk.services.datasync.model.TagListEntry; +import software.amazon.awssdk.services.datasync.model.TaskExecutionStatus; +import software.amazon.awssdk.services.datasync.model.TaskSchedule; +import software.amazon.awssdk.services.datasync.model.TaskStatus; + +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Data +public class DatasyncHook { + + public static TaskExecutionStatus[] doneStatus = {TaskExecutionStatus.ERROR, TaskExecutionStatus.SUCCESS, TaskExecutionStatus.UNKNOWN_TO_SDK_VERSION}; + public static TaskStatus[] taskFinishFlags = {TaskStatus.UNAVAILABLE, TaskStatus.UNKNOWN_TO_SDK_VERSION}; + protected final Logger logger = LoggerFactory.getLogger(String.format(TaskConstants.TASK_LOG_LOGGER_NAME_FORMAT, getClass())); + private DataSyncClient client; + private String taskArn; + private String taskExecArn; + + public DatasyncHook() { + client = createClient(); + } + + protected static DataSyncClient createClient() { + final String awsAccessKeyId = PropertyUtils.getString(TaskConstants.AWS_ACCESS_KEY_ID); + final String awsSecretAccessKey = PropertyUtils.getString(TaskConstants.AWS_SECRET_ACCESS_KEY); + final String awsRegion = PropertyUtils.getString(TaskConstants.AWS_REGION); + + final AwsBasicCredentials basicAWSCredentials = AwsBasicCredentials.create(awsAccessKeyId, awsSecretAccessKey); + final AwsCredentialsProvider awsCredentialsProvider = StaticCredentialsProvider.create(basicAWSCredentials); + + // create a datasync client + return DataSyncClient.builder().region(Region.of(awsRegion)).credentialsProvider(awsCredentialsProvider).build(); + } + + public Boolean createDatasyncTask(DatasyncParameters parameters) { + logger.info("createDatasyncTask ......"); + CreateTaskRequest.Builder builder = CreateTaskRequest.builder() + .name(parameters.getName()) + .sourceLocationArn(parameters.getSourceLocationArn()) + .destinationLocationArn(parameters.getDestinationLocationArn()); + + String cloudWatchLogGroupArn = parameters.getCloudWatchLogGroupArn(); + if (StringUtils.isNotEmpty(cloudWatchLogGroupArn)) { + builder.cloudWatchLogGroupArn(cloudWatchLogGroupArn); + } + castParamPropertyPackage(parameters, builder); + + CreateTaskResponse task = client.createTask(builder.build()); + if (task.sdkHttpResponse().isSuccessful()) { + taskArn = task.taskArn(); + } + logger.info("finished createDatasyncTask ......"); + return doubleCheckTaskStatus(TaskStatus.AVAILABLE, taskFinishFlags); + } + + public Boolean startDatasyncTask() { + logger.info("startDatasyncTask ......"); + StartTaskExecutionRequest start = StartTaskExecutionRequest.builder().taskArn(taskArn).build(); + StartTaskExecutionResponse response = client.startTaskExecution(start); + if (response.sdkHttpResponse().isSuccessful()) { + taskExecArn = response.taskExecutionArn(); + } + return doubleCheckExecStatus(TaskExecutionStatus.LAUNCHING, doneStatus); + } + + + public Boolean cancelDatasyncTask() { + logger.info("cancelTask ......"); + CancelTaskExecutionRequest cancel = CancelTaskExecutionRequest.builder().taskExecutionArn(taskExecArn).build(); + CancelTaskExecutionResponse response = client.cancelTaskExecution(cancel); + if (response.sdkHttpResponse().isSuccessful()) { + return true; + } + return false; + } + + public TaskStatus queryDatasyncTaskStatus() { + logger.info("queryDatasyncTaskStatus ......"); + + DescribeTaskRequest request = DescribeTaskRequest.builder().taskArn(taskArn).build(); + DescribeTaskResponse describe = client.describeTask(request); + + if (describe.sdkHttpResponse().isSuccessful()) { + logger.info("queryDatasyncTaskStatus ......{}", describe.statusAsString()); + return describe.status(); + } + return null; + } + + public TaskExecutionStatus queryDatasyncTaskExecStatus() { + logger.info("queryDatasyncTaskExecStatus ......"); + DescribeTaskExecutionRequest request = DescribeTaskExecutionRequest.builder().taskExecutionArn(taskExecArn).build(); + DescribeTaskExecutionResponse describe = client.describeTaskExecution(request); + + if (describe.sdkHttpResponse().isSuccessful()) { + logger.info("queryDatasyncTaskExecStatus ......{}", describe.statusAsString()); + return describe.status(); + } + return null; + } + + public Boolean doubleCheckTaskStatus(TaskStatus exceptStatus, TaskStatus[] stopStatus) { + + List stopStatusSet = Arrays.asList(stopStatus); + int maxRetry = 5; + while (maxRetry > 0) { + TaskStatus status = queryDatasyncTaskStatus(); + + if (status == null) { + maxRetry--; + continue; + } + + if (exceptStatus.equals(status)) { + logger.info("double check success"); + return true; + } else if (stopStatusSet.contains(status)) { + break; + } + } + logger.warn("double check error"); + return false; + } + + public Boolean doubleCheckExecStatus(TaskExecutionStatus exceptStatus, TaskExecutionStatus[] stopStatus) { + + List stopStatusSet = Arrays.asList(stopStatus); + int maxRetry = 5; + while (maxRetry > 0) { + TaskExecutionStatus status = queryDatasyncTaskExecStatus(); + + if (status == null) { + maxRetry--; + continue; + } + + if (exceptStatus.equals(status)) { + logger.info("double check success"); + return true; + } else if (stopStatusSet.contains(status)) { + break; + } + } + logger.warn("double check error"); + return false; + } + + @SneakyThrows + public Boolean doubleCheckFinishStatus(TaskExecutionStatus expectStatus, TaskExecutionStatus[] stopStatus) { + + List stopStatusSet = Arrays.asList(stopStatus); + while (true) { + TaskExecutionStatus status = queryDatasyncTaskExecStatus(); + + if (status == null) { + continue; + } + + if (expectStatus.equals(status)) { + logger.info("double check finish status success"); + return true; + } else if (stopStatusSet.contains(status)) { + break; + } + logger.debug("wait 10s to recheck finish status...."); + Thread.sleep(10000); + } + logger.warn("double check error"); + return false; + } + + private static void castParamPropertyPackage(DatasyncParameters parameters, CreateTaskRequest.Builder builder){ + List tags = parameters.getTags(); + if (tags != null && tags.size() > 0) { + List collect = tags.stream().map(e -> TagListEntry.builder().key(e.getKey()).value(e.getValue()).build()).collect(Collectors.toList()); + builder.tags(collect); + } + DatasyncParameters.Options options = parameters.getOptions(); + if (options != null) { + Options option = Options.builder().build(); + try { + BeanUtils.copyProperties(option, options); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + builder.options(option); + } + List excludes = parameters.getExcludes(); + if (excludes != null && excludes.size() > 0) { + List collect = excludes.stream().map(e->FilterRule.builder().filterType(e.getFilterType()).value(e.getValue()).build()).collect(Collectors.toList()); + builder.excludes(collect); + } + List includes = parameters.getIncludes(); + if (includes != null && includes.size() > 0) { + List collect = includes.stream().map(e->FilterRule.builder().filterType(e.getFilterType()).value(e.getValue()).build()).collect(Collectors.toList()); + builder.excludes(collect); + } + if (parameters.getSchedule() != null) { + builder.schedule(TaskSchedule.builder().scheduleExpression(parameters.getSchedule().getScheduleExpression()).build()); + } + } +} \ No newline at end of file diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncParameters.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncParameters.java new file mode 100644 index 0000000000..21e271ad7d --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncParameters.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.datasync; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters; +import org.apache.dolphinscheduler.spi.utils.StringUtils; + +import java.util.List; + +@Setter +@Getter +@NoArgsConstructor +@ToString +public class DatasyncParameters extends AbstractParameters { + + private String destinationLocationArn; + private String sourceLocationArn; + private String name; + private String cloudWatchLogGroupArn; + + private boolean jsonFormat; + private String json; + @JsonProperty("Options") + private Options options; + @JsonProperty("Schedule") + private TaskSchedule schedule; + @JsonProperty("Excludes") + private List excludes; + @JsonProperty("Includes") + private List includes; + @JsonProperty("Tags") + private List tags; + + @Override + public boolean checkParameters() { + if (jsonFormat) { + return StringUtils.isNotEmpty(json); + } else { + return StringUtils.isNotEmpty(destinationLocationArn) && StringUtils.isNotEmpty(sourceLocationArn) && StringUtils.isNotEmpty(name); + } + } + + @Setter + @Getter + @NoArgsConstructor + @ToString + public class Options{ + private String verifyMode; + private String overwriteMode; + private String atime; + private String mtime; + private String uid; + private String gid; + private String preserveDeletedFiles; + private String preserveDevices; + private String posixPermissions; + private Long bytesPerSecond; + private String taskQueueing; + private String logLevel; + private String transferMode; + private String securityDescriptorCopyFlags; + private String objectTags; + } + @Setter + @Getter + @NoArgsConstructor + @ToString + public static class TaskSchedule{ + private String scheduleExpression; + } + @Setter + @Getter + @NoArgsConstructor + @ToString + public static class FilterRule{ + private String filterType; + private String value; + } + @Setter + @Getter + @NoArgsConstructor + @ToString + public static class TagListEntry{ + private String key; + private String value; + } +} \ No newline at end of file diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTask.java new file mode 100644 index 0000000000..6fba880279 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTask.java @@ -0,0 +1,162 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.datasync; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.json.JsonMapper; +import org.apache.dolphinscheduler.plugin.task.api.AbstractRemoteTask; +import org.apache.dolphinscheduler.plugin.task.api.TaskConstants; +import org.apache.dolphinscheduler.plugin.task.api.TaskException; +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.spi.utils.JSONUtils; +import org.apache.dolphinscheduler.spi.utils.StringUtils; +import software.amazon.awssdk.services.datasync.model.TaskExecutionStatus; + +import java.util.Collections; +import java.util.List; + +import static com.fasterxml.jackson.databind.DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT; +import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; +import static com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL; +import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS; + +public class DatasyncTask extends AbstractRemoteTask { + + private static final ObjectMapper objectMapper = + JsonMapper.builder().configure(FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true) + .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true) + .configure(REQUIRE_SETTERS_FOR_GETTERS, true) + .propertyNamingStrategy(new PropertyNamingStrategies.UpperCamelCaseStrategy()).build(); + + private final TaskExecutionContext taskExecutionContext; + private DatasyncParameters parameters; + private DatasyncHook hook; + + public DatasyncTask(TaskExecutionContext taskExecutionContext) { + super(taskExecutionContext); + this.taskExecutionContext = taskExecutionContext; + } + + @Override + public List getApplicationIds() throws TaskException { + return Collections.emptyList(); + } + + @Override + public void init() { + logger.info("Datasync task params {}", taskExecutionContext.getTaskParams()); + + parameters = JSONUtils.parseObject(taskExecutionContext.getTaskParams(), DatasyncParameters.class); + initParams(); + + hook = new DatasyncHook(); + } + + /** + * init datasync hook + */ + public void initParams() throws TaskException { + if (parameters.isJsonFormat() && StringUtils.isNotEmpty(parameters.getJson())) { + try { + parameters = objectMapper.readValue(parameters.getJson(), DatasyncParameters.class); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + //parameters = JSONUtils.parseObject(parameters.getJson(), DatasyncParameters.class); + logger.info("Datasync convert task params {}", parameters); + } + } + + @Override + public void submitApplication() throws TaskException { + try { + int exitStatusCode = checkCreateTask(); + if (exitStatusCode == TaskConstants.EXIT_CODE_FAILURE) { + //if create task failure go end + setExitStatusCode(exitStatusCode); + return; + } + //start task + exitStatusCode = startDatasyncTask(); + setExitStatusCode(exitStatusCode); + } catch (Exception e) { + setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE); + throw new TaskException("datasync task error", e); + } + //set taskExecArn to the appIds if start success + setAppIds(hook.getTaskExecArn()); + } + + @Override + public void cancelApplication() throws TaskException { + checkApplicationId(); + hook.cancelDatasyncTask(); + } + + @Override + public void trackApplicationStatus() throws TaskException { + checkApplicationId(); + Boolean isFinishedSuccessfully = null; + isFinishedSuccessfully = hook.doubleCheckFinishStatus(TaskExecutionStatus.SUCCESS, DatasyncHook.doneStatus); + if (!isFinishedSuccessfully) { + exitStatusCode = TaskConstants.EXIT_CODE_FAILURE; + } else { + exitStatusCode = TaskConstants.EXIT_CODE_SUCCESS; + } + } + + /** + * check datasync applicationId or get it from appId + */ + private void checkApplicationId() { + String taskExecArn = hook.getTaskExecArn(); + if (StringUtils.isEmpty(taskExecArn)) { + if (StringUtils.isEmpty(getAppIds())) { + throw new TaskException("datasync taskExecArn is null, not created yet"); + } + hook.setTaskExecArn(getAppIds()); + } + } + + public int checkCreateTask() { + + Boolean isCreateSuccessfully = hook.createDatasyncTask(parameters); + if (!isCreateSuccessfully) { + return TaskConstants.EXIT_CODE_FAILURE; + } else { + return TaskConstants.EXIT_CODE_SUCCESS; + } + } + + public int startDatasyncTask() { + Boolean isStartSuccessfully = hook.startDatasyncTask(); + if (!isStartSuccessfully) { + return TaskConstants.EXIT_CODE_FAILURE; + } + return TaskConstants.EXIT_CODE_SUCCESS; + } + + @Override + public DatasyncParameters getParameters() { + return parameters; + } + +} \ No newline at end of file diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskChannel.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskChannel.java new file mode 100644 index 0000000000..555eda934e --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskChannel.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.datasync; + +import org.apache.dolphinscheduler.plugin.task.api.TaskChannel; +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters; +import org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode; +import org.apache.dolphinscheduler.plugin.task.api.parameters.resource.ResourceParametersHelper; +import org.apache.dolphinscheduler.spi.utils.JSONUtils; + +public class DatasyncTaskChannel implements TaskChannel { + + @Override + public void cancelApplication(boolean status) { + + } + + @Override + public DatasyncTask createTask(TaskExecutionContext taskRequest) { + return new DatasyncTask(taskRequest); + } + + @Override + public AbstractParameters parseParameters(ParametersNode parametersNode) { + return JSONUtils.parseObject(parametersNode.getTaskParams(), DatasyncParameters.class); + } + + @Override + public ResourceParametersHelper getResources(String parameters) { + return null; + } +} \ No newline at end of file diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskChannelFactory.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskChannelFactory.java new file mode 100644 index 0000000000..a14b24f13f --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskChannelFactory.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.datasync; + +import com.google.auto.service.AutoService; +import org.apache.dolphinscheduler.plugin.task.api.TaskChannel; +import org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactory; +import org.apache.dolphinscheduler.spi.params.base.PluginParams; + +import java.util.Collections; +import java.util.List; + +@AutoService(TaskChannelFactory.class) +public class DatasyncTaskChannelFactory implements TaskChannelFactory { + + @Override + public TaskChannel create() { + return new DatasyncTaskChannel(); + } + + @Override + public String getName() { + return "DATASYNC"; + } + + @Override + public List getParams() { + return Collections.emptyList(); + } +} \ No newline at end of file diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/test/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskTest.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/test/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskTest.java new file mode 100644 index 0000000000..7b66abd969 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/test/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskTest.java @@ -0,0 +1,234 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.datasync; + +import static org.mockito.Mockito.mockStatic; +import static org.powermock.api.mockito.PowerMockito.doReturn; +import static org.powermock.api.mockito.PowerMockito.mock; +import static org.powermock.api.mockito.PowerMockito.spy; +import static org.powermock.api.mockito.PowerMockito.when; + +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.spi.utils.JSONUtils; +import org.apache.dolphinscheduler.spi.utils.PropertyUtils; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; + +import static org.mockito.Mockito.any; + +import org.powermock.api.support.membermodification.MemberModifier; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import software.amazon.awssdk.http.SdkHttpResponse; +import software.amazon.awssdk.services.datasync.DataSyncClient; +import software.amazon.awssdk.services.datasync.model.CancelTaskExecutionRequest; +import software.amazon.awssdk.services.datasync.model.CancelTaskExecutionResponse; +import software.amazon.awssdk.services.datasync.model.CreateTaskRequest; +import software.amazon.awssdk.services.datasync.model.CreateTaskResponse; +import software.amazon.awssdk.services.datasync.model.StartTaskExecutionRequest; +import software.amazon.awssdk.services.datasync.model.StartTaskExecutionResponse; +import software.amazon.awssdk.services.datasync.model.TaskExecutionStatus; +import software.amazon.awssdk.services.datasync.model.TaskStatus; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({ + JSONUtils.class, + PropertyUtils.class, + DatasyncHook.class +}) +@PowerMockIgnore({"javax.*"}) +public class DatasyncTaskTest { + + private static final String mockExeArn = "arn:aws:datasync:ap-northeast-3:523202806641:task/task-017642db08fdf6a55/execution/exec-0ac3607778dfc31f5"; + + private static final String mockTaskArn = "arn:aws:datasync:ap-northeast-3:523202806641:task/task-071ca64ff4c2f0d4a"; + + DatasyncHook datasyncHook; + + DatasyncTask datasyncTask; + + @Mock + DataSyncClient client; + MockedStatic datasyncHookMockedStatic; + @Before + public void before() throws IllegalAccessException { + client = mock(DataSyncClient.class); + datasyncHookMockedStatic = mockStatic(DatasyncHook.class); + when(DatasyncHook.createClient()).thenReturn(client); + + DatasyncParameters DatasyncParameters = new DatasyncParameters(); + datasyncTask = initTask(DatasyncParameters); + MemberModifier.field(DatasyncTask.class, "hook").set(datasyncTask, datasyncHook); + } + + @Test + public void testCreateTaskJson() { + String jsonData = "{\n" + + " \"CloudWatchLogGroupArn\": \"arn:aws:logs:ap-northeast-3:523202806641:log-group:/aws/datasync:*\",\n" + + " \"DestinationLocationArn\": \"arn:aws:datasync:ap-northeast-3:523202806641:location/loc-01cf61e102e58e365\",\n" + + " \"Excludes\": [ \n" + + " { \n" + + " \"FilterType\": \"exType1\",\n" + + " \"Value\": \"exValue1\"\n" + + " }\n" + + " ],\n" + + " \"Includes\": [ \n" + + " { \n" + + " \"FilterType\": \"inType1\",\n" + + " \"Value\": \"inValue1\"\n" + + " }\n" + + " ],\n" + + " \"Name\": \"task001\",\n" + + " \"Options\": { \n" + + " \"Atime\": \"aTime\",\n" + + " \"BytesPerSecond\": 10,\n" + + " \"Gid\": \"string\",\n" + + " \"LogLevel\": \"string\",\n" + + " \"Mtime\": \"string\",\n" + + " \"ObjectTags\": \"string\",\n" + + " \"OverwriteMode\": \"string\",\n" + + " \"PosixPermissions\": \"string\",\n" + + " \"PreserveDeletedFiles\": \"string\",\n" + + " \"PreserveDevices\": \"string\",\n" + + " \"SecurityDescriptorCopyFlags\": \"string\",\n" + + " \"TaskQueueing\": \"string\",\n" + + " \"TransferMode\": \"string\",\n" + + " \"Uid\": \"string\",\n" + + " \"VerifyMode\": \"string\"\n" + + " },\n" + + " \"Schedule\": { \n" + + " \"ScheduleExpression\": \"* * * * * ?\"\n" + + " },\n" + + " \"SourceLocationArn\": \"arn:aws:datasync:ap-northeast-3:523202806641:location/loc-04ceafb4aaf7a1a0d\",\n" + + " \"Tags\": [ \n" + + " { \n" + + " \"Key\": \"tagKey1\",\n" + + " \"Value\": \"tagValue1\"\n" + + " }\n" + + " ]\n" + + "}"; + DatasyncParameters DatasyncParameters = new DatasyncParameters(); + DatasyncParameters.setJsonFormat(true); + DatasyncParameters.setJson(jsonData); + + DatasyncTask DatasyncTask = initTask(DatasyncParameters); + DatasyncParameters datasyncParameters = DatasyncTask.getParameters(); + Assert.assertEquals("arn:aws:logs:ap-northeast-3:523202806641:log-group:/aws/datasync:*", datasyncParameters.getCloudWatchLogGroupArn()); + Assert.assertEquals("task001", datasyncParameters.getName()); + Assert.assertEquals("arn:aws:datasync:ap-northeast-3:523202806641:location/loc-04ceafb4aaf7a1a0d", datasyncParameters.getSourceLocationArn()); + Assert.assertEquals("arn:aws:datasync:ap-northeast-3:523202806641:location/loc-01cf61e102e58e365", datasyncParameters.getDestinationLocationArn()); + Assert.assertEquals("inType1", datasyncParameters.getIncludes().get(0).getFilterType()); + Assert.assertEquals("inValue1", datasyncParameters.getIncludes().get(0).getValue()); + Assert.assertEquals("exType1", datasyncParameters.getExcludes().get(0).getFilterType()); + Assert.assertEquals("exValue1", datasyncParameters.getExcludes().get(0).getValue()); + Assert.assertEquals("tagKey1", datasyncParameters.getTags().get(0).getKey()); + Assert.assertEquals("tagValue1", datasyncParameters.getTags().get(0).getValue()); + Assert.assertEquals("* * * * * ?", datasyncParameters.getSchedule().getScheduleExpression()); + Assert.assertEquals("aTime", datasyncParameters.getOptions().getAtime()); + Assert.assertEquals(Long.valueOf(10), datasyncParameters.getOptions().getBytesPerSecond()); + datasyncHookMockedStatic.close(); + } + + @Test + public void testCheckCreateTask() { + DatasyncHook hook = spy(new DatasyncHook()); + CreateTaskResponse response = mock(CreateTaskResponse.class); + when(client.createTask((CreateTaskRequest) any())).thenReturn(response); + SdkHttpResponse sdkMock = mock(SdkHttpResponse.class); + when(response.sdkHttpResponse()).thenReturn(sdkMock); + when(sdkMock.isSuccessful()).thenReturn(true); + when(response.taskArn()).thenReturn(mockTaskArn); + + doReturn(true).when(hook).doubleCheckTaskStatus(any(), any()); + hook.createDatasyncTask(datasyncTask.getParameters()); + Assert.assertEquals(mockTaskArn, hook.getTaskArn()); + datasyncHookMockedStatic.close(); + } + + @Test + public void testStartTask() { + DatasyncHook hook = spy(new DatasyncHook()); + StartTaskExecutionResponse response = mock(StartTaskExecutionResponse.class); + when(client.startTaskExecution((StartTaskExecutionRequest) any())).thenReturn(response); + SdkHttpResponse sdkMock = mock(SdkHttpResponse.class); + when(response.sdkHttpResponse()).thenReturn(sdkMock); + when(sdkMock.isSuccessful()).thenReturn(true); + when(response.taskExecutionArn()).thenReturn(mockExeArn); + doReturn(true).when(hook).doubleCheckExecStatus(any(), any()); + hook.startDatasyncTask(); + Assert.assertEquals(mockExeArn, hook.getTaskExecArn()); + datasyncHookMockedStatic.close(); + } + + @Test + public void testCancelTask() { + DatasyncHook hook = spy(new DatasyncHook()); + CancelTaskExecutionResponse response = mock(CancelTaskExecutionResponse.class); + when(client.cancelTaskExecution((CancelTaskExecutionRequest) any())).thenReturn(response); + SdkHttpResponse sdkMock = mock(SdkHttpResponse.class); + when(response.sdkHttpResponse()).thenReturn(sdkMock); + when(sdkMock.isSuccessful()).thenReturn(true); + Assert.assertEquals(true, hook.cancelDatasyncTask()); + datasyncHookMockedStatic.close(); + } + + @Test + public void testDescribeTask() { + DatasyncHook hook = spy(new DatasyncHook()); + doReturn(null).when(hook).queryDatasyncTaskStatus(); + Assert.assertEquals(false, hook.doubleCheckTaskStatus(TaskStatus.AVAILABLE, DatasyncHook.taskFinishFlags)); + + doReturn(TaskStatus.AVAILABLE).when(hook).queryDatasyncTaskStatus(); + Assert.assertEquals(true, hook.doubleCheckTaskStatus(TaskStatus.AVAILABLE, DatasyncHook.taskFinishFlags)); + datasyncHookMockedStatic.close(); + } + + @Test + public void testDescribeTaskExec() { + DatasyncHook hook = spy(new DatasyncHook()); + doReturn(null).when(hook).queryDatasyncTaskExecStatus(); + Assert.assertEquals(false, hook.doubleCheckExecStatus(TaskExecutionStatus.SUCCESS, DatasyncHook.doneStatus)); + + doReturn(TaskExecutionStatus.SUCCESS).when(hook).queryDatasyncTaskExecStatus(); + Assert.assertEquals(true, hook.doubleCheckExecStatus(TaskExecutionStatus.SUCCESS, DatasyncHook.doneStatus)); + datasyncHookMockedStatic.close(); + } + + private DatasyncTask initTask(DatasyncParameters DatasyncParameters) { + TaskExecutionContext taskExecutionContext = createContext(DatasyncParameters); + DatasyncTask datasyncTask = new DatasyncTask(taskExecutionContext); + datasyncTask.init(); + return datasyncTask; + } + + public TaskExecutionContext createContext(DatasyncParameters DatasyncParameters) { + String parameters = JSONUtils.toJsonString(DatasyncParameters); + TaskExecutionContext taskExecutionContext = Mockito.mock(TaskExecutionContext.class); + Mockito.when(taskExecutionContext.getTaskParams()).thenReturn(parameters); + Mockito.when(taskExecutionContext.getExecutePath()).thenReturn("/tmp/dolphinscheduler_datasync_%s"); + return taskExecutionContext; + } +} \ No newline at end of file diff --git a/dolphinscheduler-task-plugin/pom.xml b/dolphinscheduler-task-plugin/pom.xml index 757b912f9d..0f92c2e4b3 100644 --- a/dolphinscheduler-task-plugin/pom.xml +++ b/dolphinscheduler-task-plugin/pom.xml @@ -63,6 +63,7 @@ dolphinscheduler-task-pytorch dolphinscheduler-task-hivecli dolphinscheduler-task-dms + dolphinscheduler-task-datasync diff --git a/dolphinscheduler-ui/public/images/task-icons/datasync.png b/dolphinscheduler-ui/public/images/task-icons/datasync.png new file mode 100644 index 0000000000000000000000000000000000000000..e4292823597afae786d20b9d36b0e2a4b8242912 GIT binary patch literal 24850 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

M9}>P8wRV5F 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 VtN%AKo1p*z002ovPDHLkV1jlSg&+U` literal 0 HcmV?d00001 diff --git a/dolphinscheduler-ui/public/images/task-icons/datasync_hover.png b/dolphinscheduler-ui/public/images/task-icons/datasync_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a3d1416dbf8a9064b48ce2adb4a97a9a1f6026 GIT binary patch literal 159573 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

;(xxh`}ERezyF0&VJZj*1LUk2E>M3i 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 DyCz+Y literal 0 HcmV?d00001 diff --git a/dolphinscheduler-ui/src/store/project/task-type.ts b/dolphinscheduler-ui/src/store/project/task-type.ts index 40549e9042..b4ee0fd883 100644 --- a/dolphinscheduler-ui/src/store/project/task-type.ts +++ b/dolphinscheduler-ui/src/store/project/task-type.ts @@ -137,6 +137,10 @@ export const TASK_TYPES_MAP = { DMS: { alias: 'DMS', helperLinkDisable: true + }, + DATASYNC: { + alias: 'DATASYNC', + helperLinkDisable: true } } as { [key in TaskType]: { diff --git a/dolphinscheduler-ui/src/store/project/types.ts b/dolphinscheduler-ui/src/store/project/types.ts index 784af6eb63..19c2015d17 100644 --- a/dolphinscheduler-ui/src/store/project/types.ts +++ b/dolphinscheduler-ui/src/store/project/types.ts @@ -53,6 +53,7 @@ type TaskType = | 'PYTORCH' | 'HIVECLI' | 'DMS' + | 'DATASYNC' type ProgramType = 'JAVA' | 'SCALA' | 'PYTHON' type DependentResultType = { diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts index 9e6143dcba..584359b593 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts @@ -81,3 +81,4 @@ export { useChunjunDeployMode } from './use-chunjun-deploy-mode' export { usePytorch } from './use-pytorch' export { useHiveCli } from './use-hive-cli' export { useDms } from './use-dms' +export { useDatasync } from './use-datasync' diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasync.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasync.ts new file mode 100644 index 0000000000..3288c90d1d --- /dev/null +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasync.ts @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { IJsonItem } from '../types' +import { watch, ref } from 'vue' +import { useCustomParams } from '.' + +export function useDatasync(model: { [field: string]: any }): IJsonItem[] { + + const jsonSpan = ref(0) + const destinationLocationArnSpan = ref(0) + const sourceLocationArnSpan = ref(0) + const nameSpan = ref(0) + const cloudWatchLogGroupArnSpan = ref(0) + + const resetSpan = () => { + jsonSpan.value = model.jsonFormat ? 24 : 0 + destinationLocationArnSpan.value = model.jsonFormat ? 0 : 24 + sourceLocationArnSpan.value = model.jsonFormat ? 0 : 24 + nameSpan.value = model.jsonFormat ? 0 : 24 + cloudWatchLogGroupArnSpan.value = model.jsonFormat ? 0 : 24 + } + + watch( + () => [model.jsonFormat], + () => { + resetSpan() + } + ) + + resetSpan() + + return [ + { + type: 'switch', + field: 'jsonFormat', + name: 'jsonFormat', + span: 12 + }, + { + type: 'editor', + field: 'json', + name: 'json', + span: jsonSpan + }, + { + type: 'input', + field: 'destinationLocationArn', + name: 'destinationLocationArn', + span: destinationLocationArnSpan + }, + { + type: 'input', + field: 'sourceLocationArn', + name: 'sourceLocationArn', + span: sourceLocationArnSpan + }, + { + type: 'input', + field: 'name', + name: 'name', + span: nameSpan + }, + { + type: 'input', + field: 'cloudWatchLogGroupArn', + name: 'cloudWatchLogGroupArn', + span: cloudWatchLogGroupArnSpan + }, + ...useCustomParams({ model, field: 'localParams', isSimple: false }) + ] +} \ No newline at end of file diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts index 465e794195..a11ea1da0c 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts @@ -446,6 +446,15 @@ export function formatParams(data: INodeData): { taskParams.replicationTaskArn = data.replicationTaskArn } + if (data.taskType === 'DATASYNC') { + taskParams.jsonFormat = data.jsonFormat + taskParams.json = data.json + taskParams.destinationLocationArn = data.destinationLocationArn + taskParams.sourceLocationArn = data.sourceLocationArn + taskParams.name = data.name + taskParams.cloudWatchLogGroupArn = data.cloudWatchLogGroupArn + } + let timeoutNotifyStrategy = '' if (data.timeoutNotifyStrategy) { if (data.timeoutNotifyStrategy.length === 1) { diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts index 7a157c5cc9..8debfe6e9f 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts @@ -47,6 +47,7 @@ import { useChunjun } from './use-chunjun' import { usePytorch } from './use-pytorch' import { useHiveCli } from './use-hive-cli' import { useDms } from './use-dms' +import {useDatasync} from "./use-datasync"; export default { SHELL: useShell, @@ -80,5 +81,6 @@ export default { JAVA: useJava, PYTORCH: usePytorch, HIVECLI: useHiveCli, - DMS: useDms + DMS: useDms, + DATASYNC: useDatasync } diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-datasync.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-datasync.ts new file mode 100644 index 0000000000..0dc5737870 --- /dev/null +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-datasync.ts @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { reactive } from 'vue' +import * as Fields from '../fields/index' +import type { IJsonItem, INodeData, ITaskData } from '../types' + +export function useDatasync({ + projectCode, + from = 0, + readonly, + data +}: { + projectCode: number + from?: number + readonly?: boolean + data?: ITaskData +}) { + const model = reactive({ + name: '', + taskType: 'DATASYNC', + flag: 'YES', + description: '', + timeoutFlag: false, + localParams: [], + environmentCode: null, + failRetryInterval: 1, + failRetryTimes: 0, + workerGroup: 'default', + delayTime: 0, + timeout: 30, + timeoutNotifyStrategy: ['WARN'], + } as INodeData) + + let extra: IJsonItem[] = [] + if (from === 1) { + extra = [ + Fields.useTaskType(model, readonly), + Fields.useProcessName({ + model, + projectCode, + isCreate: !data?.id, + from, + processName: data?.processName + }) + ] + } + + return { + json: [ + Fields.useName(from), + ...extra, + Fields.useRunFlag(), + Fields.useDescription(), + Fields.useTaskPriority(), + Fields.useWorkerGroup(), + Fields.useEnvironmentName(model, !model.id), + ...Fields.useTaskGroup(model, projectCode), + ...Fields.useFailed(), + ...Fields.useResourceLimit(), + Fields.useDelayTime(model), + ...Fields.useTimeoutAlarm(model), + ...Fields.useDatasync(model), + Fields.usePreTasks() + ] as IJsonItem[], + model + } +} \ No newline at end of file diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts index 989f053bd8..49eccf4c53 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts @@ -383,6 +383,11 @@ interface ITaskParams { replicationInstanceArn?: string tableMappings?: string replicationTaskArn?: string + jsonFormat?: boolean + destinationLocationArn?: string + sourceLocationArn?: string + name?: string + cloudWatchLogGroupArn?: string } interface INodeData diff --git a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts index 637478579c..e1b4ccbd8b 100644 --- a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts +++ b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts @@ -47,6 +47,7 @@ export type TaskType = | 'PYTORCH' | 'HIVECLI' | 'DMS' + | 'DATASYNC' export type TaskExecuteType = 'STREAM' | 'BATCH' @@ -165,6 +166,10 @@ export const TASK_TYPES_MAP = { DMS: { alias: 'DMS', helperLinkDisable: true + }, + DATASYNC: { + alias: 'DATASYNC', + helperLinkDisable: true } } as { [key in TaskType]: { diff --git a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss index c729342d7c..b864c03b2c 100644 --- a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss +++ b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss @@ -195,6 +195,9 @@ $bgLight: #ffffff; &.icon-dms { background-image: url('/images/task-icons/dms.png'); } + &.icon-datasync { + background-image: url('/images/task-icons/datasync_hover.png'); + } } &:hover { @@ -293,6 +296,9 @@ $bgLight: #ffffff; &.icon-dms { background-image: url('/images/task-icons/dms_hover.png'); } + &.icon-datasync { + background-image: url('/images/task-icons/datasync.png'); + } } } diff --git a/tools/dependencies/known-dependencies.txt b/tools/dependencies/known-dependencies.txt index 32a0e0dc94..06ec6d81c1 100644 --- a/tools/dependencies/known-dependencies.txt +++ b/tools/dependencies/known-dependencies.txt @@ -6,18 +6,23 @@ SparseBitSet-1.2.jar accessors-smart-2.4.8.jar activation-1.1.jar animal-sniffer-annotations-1.19.jar +annotations-2.17.282.jar annotations-13.0.jar +apache-client-2.17.282.jar asm-9.1.jar aspectjweaver-1.9.7.jar +auth-2.17.282.jar audience-annotations-0.12.0.jar automaton-1.11-8.jar avro-1.7.7.jar +aws-core-2.17.282.jar aws-java-sdk-core-1.12.300.jar aws-java-sdk-emr-1.12.300.jar aws-java-sdk-kms-1.12.300.jar aws-java-sdk-s3-1.12.300.jar aws-java-sdk-sagemaker-1.12.300.jar aws-java-sdk-dms-1.12.300.jar +aws-json-protocol-2.17.282.jar bcpkix-jdk15on-1.68.jar bcprov-jdk15on-1.68.jar bonecp-0.8.0.RELEASE.jar @@ -58,9 +63,11 @@ curvesapi-1.06.jar datanucleus-api-jdo-4.2.4.jar datanucleus-core-4.1.17.jar datanucleus-rdbms-4.1.19.jar +datasync-2.17.282.jar derby-10.14.2.0.jar dnsjava-2.1.7.jar druid-1.2.4.jar +eventstream-1.0.1.jar error_prone_annotations-2.5.1.jar failureaccess-1.0.1.jar generex-1.0.2.jar @@ -93,6 +100,7 @@ httpclient-4.5.13.jar httpcore-4.4.15.jar httpcore-nio-4.4.15.jar httpmime-4.5.13.jar +http-client-spi-2.17.282.jar ion-java-1.0.2.jar j2objc-annotations-1.3.jar jackson-annotations-2.13.4.jar @@ -153,6 +161,7 @@ jsch-0.1.55.jar json-1.8.jar json-path-2.7.0.jar json-smart-2.4.8.jar +json-utils-2.17.282.jar jsp-api-2.1.jar jsqlparser-4.4.jar jsr305-3.0.0.jar @@ -207,6 +216,7 @@ logging-interceptor-4.9.3.jar lz4-1.3.0.jar mapstruct-1.3.1.Final.jar metrics-core-4.2.11.jar +metrics-spi-2.17.282.jar micrometer-core-1.9.3.jar micrometer-registry-prometheus-1.9.3.jar mssql-jdbc-6.1.0.jre8.jar @@ -220,12 +230,16 @@ mybatis-spring-2.0.7.jar netty-all-4.1.53.Final.jar netty-buffer-4.1.53.Final.jar netty-codec-4.1.53.Final.jar +netty-codec-http-4.1.53.Final.jar +netty-codec-http2-4.1.53.Final.jar netty-common-4.1.53.Final.jar netty-handler-4.1.53.Final.jar +netty-nio-client-2.17.282.jar netty-resolver-4.1.53.Final.jar netty-tcnative-2.0.48.Final.jar netty-tcnative-classes-2.0.53.Final.jar netty-transport-4.1.53.Final.jar +netty-transport-classes-epoll-4.1.79.Final.jar netty-transport-native-epoll-4.1.53.Final.jar netty-transport-native-unix-common-4.1.53.Final.jar nimbus-jose-jwt-9.8.1.jar @@ -241,7 +255,9 @@ poi-ooxml-4.1.2.jar poi-ooxml-schemas-4.1.2.jar postgresql-42.4.1.jar presto-jdbc-0.238.1.jar +profiles-2.17.282.jar protobuf-java-2.5.0.jar +protocol-core-2.17.282.jar protostuff-api-1.7.2.jar protostuff-collectionschema-1.7.2.jar protostuff-core-1.7.2.jar @@ -249,8 +265,11 @@ protostuff-runtime-1.7.2.jar py4j-0.10.9.jar quartz-2.3.2.jar re2j-1.1.jar +reactive-streams-1.0.4.jar reflections-0.9.12.jar +regions-2.17.282.jar reload4j-1.2.18.3.jar +sdk-core-2.17.282.jar simpleclient-0.15.0.jar simpleclient_common-0.15.0.jar simpleclient_tracer_common-0.15.0.jar @@ -318,10 +337,12 @@ swagger-annotations-2.1.2.jar swagger-models-1.5.20.jar swagger-models-2.1.2.jar tephra-api-0.6.0.jar +third-party-jackson-core-2.17.282.jar token-provider-1.0.1.jar tomcat-embed-el-9.0.65.jar transaction-api-1.1.jar unirest-java-3.7.04-standalone.jar +utils-2.17.282.jar websocket-api-9.4.48.v20220622.jar websocket-client-9.4.48.v20220622.jar websocket-common-9.4.48.v20220622.jar