mirror of
https://gitee.com/dolphinscheduler/DolphinScheduler.git
synced 2024-11-30 03:08:01 +08:00
[Feature][Registry] Support etcd as registry (#10981)
This commit is contained in:
parent
6f3b0b2432
commit
2eb8b9f7f0
@ -38,6 +38,9 @@
|
||||
<zookeeper.version>3.4.14</zookeeper.version>
|
||||
<curator.version>4.3.0</curator.version>
|
||||
<curator-test.version>2.12.0</curator-test.version>
|
||||
<jetcd.version>0.5.11</jetcd.version>
|
||||
<jetcd.test.version>0.7.1</jetcd.test.version>
|
||||
<io.grpc.version>1.41.0</io.grpc.version>
|
||||
<commons-codec.version>1.11</commons-codec.version>
|
||||
<commons-logging.version>1.1.1</commons-logging.version>
|
||||
<commons-lang3.version>3.12.0</commons-lang3.version>
|
||||
@ -243,6 +246,26 @@
|
||||
<version>${curator-test.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Etcd -->
|
||||
<dependency>
|
||||
<groupId>io.etcd</groupId>
|
||||
<artifactId>jetcd-core</artifactId>
|
||||
<version>${jetcd.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.etcd</groupId>
|
||||
<artifactId>jetcd-test</artifactId>
|
||||
<version>${jetcd.test.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.grpc</groupId>
|
||||
<artifactId>grpc-bom</artifactId>
|
||||
<version>${io.grpc.version}</version>
|
||||
<scope>import</scope>
|
||||
<type>pom</type>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
|
@ -445,6 +445,21 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
|
||||
websocket-common 9.4.48.v20220622: https://mvnrepository.com/artifact/org.eclipse.jetty.websocket/websocket-common/9.4.48.v20220622, Apache 2.0
|
||||
zeppelin-client 0.10.1: https://mvnrepository.com/artifact/org.apache.zeppelin/zeppelin-client/0.10.1, Apache 2.0
|
||||
zeppelin-common 0.10.1: https://mvnrepository.com/artifact/org.apache.zeppelin/zeppelin-common/0.10.1, Apache 2.0
|
||||
jetcd-common 0.5.11: https://mvnrepository.com/artifact/io.etcd/jetcd-common/0.5.11, Apache 2.0
|
||||
jetcd-core 0.5.11: https://mvnrepository.com/artifact/io.etcd/jetcd-core/0.5.11, Apache 2.0
|
||||
grpc-api 1.41.0: https://mvnrepository.com/artifact/io.grpc/grpc-api/1.41.0 Apache 2.0
|
||||
grpc-context 1.41.0: https://mvnrepository.com/artifact/io.grpc/grpc-context/1.41.0 Apache 2.0
|
||||
grpc-core 1.41.0: https://mvnrepository.com/artifact/io.grpc/grpc-core/1.41.0 Apache 2.0
|
||||
grpc-grpclb 1.41.0: https://mvnrepository.com/artifact/io.grpc/grpc-grpclb/1.41.0 Apache 2.0
|
||||
grpc-netty 1.41.0: https://mvnrepository.com/artifact/io.grpc/grpc-netty/1.41.0 Apache 2.0
|
||||
grpc-protobuf 1.41.0: https://mvnrepository.com/artifact/io.grpc/grpc-protobuf/1.41.0 Apache 2.0
|
||||
grpc-protobuf-lite 1.41.0: https://mvnrepository.com/artifact/io.grpc/grpc-protobuf-lite/1.41.0 Apache 2.0
|
||||
grpc-stub 1.41.0: https://mvnrepository.com/artifact/io.grpc/grpc-stub/1.41.0 Apache 2.0
|
||||
failsafe 2.4.4: https://mvnrepository.com/artifact/net.jodah/failsafe/2.4.4 Apache 2.0
|
||||
auto-service-annotations 1.0.1: https://mvnrepository.com/artifact/com.google.auto.service/auto-service-annotations/1.0.1 Apache 2.0
|
||||
annotations 4.1.1.4: https://mvnrepository.com/artifact/com.google.android/annotations/4.1.1.4 Apache 2.0
|
||||
perfmark-api 0.23.0: https://mvnrepository.com/artifact/io.perfmark/perfmark-api/0.23.0 Apache 2.0
|
||||
proto-google-common-protos 2.0.1: https://mvnrepository.com/artifact/com.google.api.grpc/proto-google-common-protos/2.0.1 Apache 2.0
|
||||
kotlin 1.6.21: https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib, Apache 2.0
|
||||
JetBrains annotations: https://mvnrepository.com/artifact/org.jetbrains/annotations, Apache 2.0
|
||||
|
||||
@ -471,6 +486,8 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
|
||||
janino 3.1.7: https://mvnrepository.com/artifact/org.codehaus.janino/janino/3.1.7, BSD 3-clause
|
||||
commons-compiler 3.1.7: https://mvnrepository.com/artifact/org.codehaus.janino/janino/3.1.7, BSD 3-clause
|
||||
automaton 1.11-8 https://mvnrepository.com/artifact/dk.brics.automaton/automaton/1.11-8, BSD 2-clause
|
||||
protobuf-java 3.17.2: https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/3.17.2 BSD 3-clause
|
||||
protobuf-java-util 3.17.2: https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util/3.17.2 BSD 3-clause
|
||||
|
||||
========================================================================
|
||||
CDDL licenses
|
||||
|
@ -1990,3 +1990,131 @@ Xmlbeans NOTICE
|
||||
- W3C XML Schema documents Copyright 2001-2003 (c) World Wide Web
|
||||
Consortium (Massachusetts Institute of Technology, European Research
|
||||
Consortium for Informatics and Mathematics, Keio University)
|
||||
|
||||
=========================================================================
|
||||
|
||||
jetcd NOTICE
|
||||
|
||||
=========================================================================
|
||||
|
||||
CoreOS Project
|
||||
Copyright 2018 CoreOS, Inc
|
||||
|
||||
This product includes software developed at CoreOS, Inc.
|
||||
(http://www.coreos.com/).
|
||||
|
||||
=========================================================================
|
||||
|
||||
grpc NOTICE
|
||||
|
||||
=========================================================================
|
||||
|
||||
Copyright 2014 The gRPC Authors
|
||||
|
||||
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.
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
This product contains a modified portion of 'OkHttp', an open source
|
||||
HTTP & SPDY client for Android and Java applications, which can be obtained
|
||||
at:
|
||||
|
||||
* LICENSE:
|
||||
* okhttp/third_party/okhttp/LICENSE (Apache License 2.0)
|
||||
* HOMEPAGE:
|
||||
* https://github.com/square/okhttp
|
||||
* LOCATION_IN_GRPC:
|
||||
* okhttp/third_party/okhttp
|
||||
|
||||
This product contains a modified portion of 'Envoy', an open source
|
||||
cloud-native high-performance edge/middle/service proxy, which can be
|
||||
obtained at:
|
||||
|
||||
* LICENSE:
|
||||
* xds/third_party/envoy/LICENSE (Apache License 2.0)
|
||||
* NOTICE:
|
||||
* xds/third_party/envoy/NOTICE
|
||||
* HOMEPAGE:
|
||||
* https://www.envoyproxy.io
|
||||
* LOCATION_IN_GRPC:
|
||||
* xds/third_party/envoy
|
||||
|
||||
This product contains a modified portion of 'protoc-gen-validate (PGV)',
|
||||
an open source protoc plugin to generate polyglot message validators,
|
||||
which can be obtained at:
|
||||
|
||||
* LICENSE:
|
||||
* xds/third_party/protoc-gen-validate/LICENSE (Apache License 2.0)
|
||||
* NOTICE:
|
||||
* xds/third_party/protoc-gen-validate/NOTICE
|
||||
* HOMEPAGE:
|
||||
* https://github.com/envoyproxy/protoc-gen-validate
|
||||
* LOCATION_IN_GRPC:
|
||||
* xds/third_party/protoc-gen-validate
|
||||
|
||||
This product contains a modified portion of 'udpa',
|
||||
an open source universal data plane API, which can be obtained at:
|
||||
|
||||
* LICENSE:
|
||||
* xds/third_party/udpa/LICENSE (Apache License 2.0)
|
||||
* HOMEPAGE:
|
||||
* https://github.com/cncf/udpa
|
||||
* LOCATION_IN_GRPC:
|
||||
* xds/third_party/udpa
|
||||
|
||||
=========================================================================
|
||||
|
||||
perfmark NOTICE
|
||||
|
||||
=========================================================================
|
||||
|
||||
Copyright 2019 Google LLC
|
||||
|
||||
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.
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
This product contains a modified portion of 'Catapult', an open source
|
||||
Trace Event viewer for Chome, Linux, and Android applications, which can
|
||||
be obtained at:
|
||||
|
||||
* LICENSE:
|
||||
* traceviewer/src/main/resources/io/perfmark/traceviewer/third_party/catapult/LICENSE (New BSD License)
|
||||
* HOMEPAGE:
|
||||
* https://github.com/catapult-project/catapult
|
||||
|
||||
This product contains a modified portion of 'Polymer', a library for Web
|
||||
Components, which can be obtained at:
|
||||
* LICENSE:
|
||||
* traceviewer/src/main/resources/io/perfmark/traceviewer/third_party/polymer/LICENSE (New BSD License)
|
||||
* HOMEPAGE:
|
||||
* https://github.com/Polymer/polymer
|
||||
|
||||
|
||||
This product contains a modified portion of 'ASM', an open source
|
||||
Java Bytecode library, which can be obtained at:
|
||||
|
||||
* LICENSE:
|
||||
* agent/src/main/resources/io/perfmark/agent/third_party/asm/LICENSE (BSD style License)
|
||||
* HOMEPAGE:
|
||||
* https://asm.ow2.io/
|
@ -0,0 +1,13 @@
|
||||
Copyright 2013 Google LLC
|
||||
|
||||
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.
|
177
dolphinscheduler-dist/release-docs/licenses/LICENSE-failsafe.txt
Normal file
177
dolphinscheduler-dist/release-docs/licenses/LICENSE-failsafe.txt
Normal file
@ -0,0 +1,177 @@
|
||||
|
||||
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
|
202
dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc.txt
Normal file
202
dolphinscheduler-dist/release-docs/licenses/LICENSE-grpc.txt
Normal file
@ -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.
|
202
dolphinscheduler-dist/release-docs/licenses/LICENSE-jetcd.txt
Normal file
202
dolphinscheduler-dist/release-docs/licenses/LICENSE-jetcd.txt
Normal file
@ -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.
|
@ -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.
|
@ -0,0 +1,42 @@
|
||||
This license applies to all parts of Protocol Buffers except the following:
|
||||
|
||||
- Atomicops support for generic gcc, located in
|
||||
src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
|
||||
This file is copyrighted by Red Hat Inc.
|
||||
|
||||
- Atomicops support for AIX/POWER, located in
|
||||
src/google/protobuf/stubs/atomicops_internals_power.h.
|
||||
This file is copyrighted by Bloomberg Finance LP.
|
||||
|
||||
Copyright 2014, Google Inc. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Code generated by the Protocol Buffer compiler is owned by the owner
|
||||
of the input file used when generating it. This code is not
|
||||
standalone and requires a support library to be linked with it. This
|
||||
support library is itself covered by the above license.
|
@ -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.
|
33
dolphinscheduler-registry/README.md
Normal file
33
dolphinscheduler-registry/README.md
Normal file
@ -0,0 +1,33 @@
|
||||
## Function
|
||||
DS use registry to do the below three things:
|
||||
|
||||
1. Store the metadata of master/worker so that it can get notify when nodes up and down.
|
||||
2. Store the metadata of worker to do load balance.
|
||||
3. Acquire a global lock when do failover.
|
||||
|
||||
So for DS, the registry need to notify the server when the server subscribe data have added/deleted/updated, support a way to create/release a global lock,
|
||||
delete the server's metadata when server down.
|
||||
|
||||
|
||||
## How to use
|
||||
At present, we have implements three registry: Zookeeper(Default),Etcd,Mysql. If you
|
||||
want to use them, you should config it at resource/application.yaml. The configuration details
|
||||
can be viewed in the README of plugin under Module dolphinscheduler-registry-plugins
|
||||
|
||||
## Module
|
||||
|
||||
### dolphinscheduler-registry-all
|
||||
This module is used for exporting the implemention of registry.
|
||||
If you want to add new registry,you should add the dependency in the pom.xml
|
||||
|
||||
### dolphinscheduler-registry-api
|
||||
This module contains the relevant interfaces involved in the use of the registry.
|
||||
The following are several important interfaces
|
||||
1. Registry Interface: If you want to implement your own registry, you just need to implement this interface
|
||||
2. ConnectionListener Interface: This interface is responsible for the connection status between the client and the registry,
|
||||
The connection state can be viewed in ConnectionState.java
|
||||
3. SubscribeListener Interface: This interface is responsible for monitoring the state changes of child nodes under the specified prefix.
|
||||
Event content can be viewed in event.java
|
||||
|
||||
### dolphinscheduler-registry-plugins
|
||||
This module contains all registry implementations in DS
|
@ -38,5 +38,10 @@
|
||||
<artifactId>dolphinscheduler-registry-mysql</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.dolphinscheduler</groupId>
|
||||
<artifactId>dolphinscheduler-registry-etcd</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -19,6 +19,10 @@
|
||||
|
||||
package org.apache.dolphinscheduler.registry.api;
|
||||
|
||||
/**
|
||||
* when the connect state between client and registry center changed,
|
||||
* the {@code onUpdate} function is triggered
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface ConnectionListener {
|
||||
void onUpdate(ConnectionState newState);
|
||||
|
@ -19,6 +19,9 @@
|
||||
|
||||
package org.apache.dolphinscheduler.registry.api;
|
||||
|
||||
/**
|
||||
* Connection state between client and registry center(Etcd, MySql, Zookeeper)
|
||||
*/
|
||||
public enum ConnectionState {
|
||||
CONNECTED,
|
||||
RECONNECTED,
|
||||
|
@ -20,9 +20,13 @@
|
||||
package org.apache.dolphinscheduler.registry.api;
|
||||
|
||||
public class Event {
|
||||
// The prefix which is watched
|
||||
private String key;
|
||||
// The full path where the event was generated
|
||||
private String path;
|
||||
// The value corresponding to the path
|
||||
private String data;
|
||||
// The event type {ADD, REMOVE, UPDATE}
|
||||
private Type type;
|
||||
|
||||
public Event(String key, String path, String data, Type type) {
|
||||
|
@ -19,12 +19,15 @@
|
||||
|
||||
package org.apache.dolphinscheduler.registry.api;
|
||||
|
||||
import lombok.NonNull;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.time.Duration;
|
||||
import java.util.Collection;
|
||||
|
||||
import lombok.NonNull;
|
||||
|
||||
/**
|
||||
* Registry
|
||||
*/
|
||||
public interface Registry extends Closeable {
|
||||
|
||||
/**
|
||||
@ -37,21 +40,56 @@ public interface Registry extends Closeable {
|
||||
|
||||
boolean subscribe(String path, SubscribeListener listener);
|
||||
|
||||
/**
|
||||
* Remove the path from the subscribe list.
|
||||
*/
|
||||
void unsubscribe(String path);
|
||||
|
||||
/**
|
||||
* Add a connection listener to collection.
|
||||
*/
|
||||
void addConnectionStateListener(ConnectionListener listener);
|
||||
|
||||
/**
|
||||
* @return the value
|
||||
*/
|
||||
String get(String key);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param key
|
||||
* @param value
|
||||
* @param deleteOnDisconnect if true, when the connection state is disconnected, the key will be deleted
|
||||
*/
|
||||
void put(String key, String value, boolean deleteOnDisconnect);
|
||||
|
||||
/**
|
||||
* This function will delete the keys whose prefix is {@param key}
|
||||
* @param key the prefix of deleted key
|
||||
* @throws if the key not exists, there is a registryException
|
||||
*/
|
||||
void delete(String key);
|
||||
|
||||
/**
|
||||
* @return {@code true} if key exists.
|
||||
* E.g: registry contains the following keys:[/test/test1/test2,]
|
||||
* if the key: /test
|
||||
* Return: test1
|
||||
*/
|
||||
Collection<String> children(String key);
|
||||
|
||||
/**
|
||||
* @return if key exists,return true
|
||||
*/
|
||||
boolean exists(String key);
|
||||
|
||||
/**
|
||||
* Acquire the lock of the prefix {@param key}
|
||||
*/
|
||||
boolean acquireLock(String key);
|
||||
|
||||
/**
|
||||
* Release the lock of the prefix {@param key}
|
||||
*/
|
||||
boolean releaseLock(String key);
|
||||
}
|
||||
|
@ -0,0 +1,27 @@
|
||||
# Introduction
|
||||
|
||||
This module is the etcd registry plugin module, this plugin will use etcd as the registry center.
|
||||
|
||||
# How to use
|
||||
|
||||
If you want to set the registry center as etcd, you need to set the registry properties in master/worker/api's appplication.yml
|
||||
```yaml
|
||||
registry:
|
||||
type: etcd
|
||||
endpoints: "http://etcd0:2379, http://etcd1:2379, http://etcd2:2379"
|
||||
# The options below have default values
|
||||
namespace: dolphinscheduler
|
||||
connectionTimeout: 9s
|
||||
# The unit is milliseconds
|
||||
retryDelay: 60ms
|
||||
retryMaxDelay: 300ms
|
||||
retryMaxDuration: 1500ms
|
||||
# The following options are set according to personal needs
|
||||
user: ""
|
||||
password: ""
|
||||
authority: ""
|
||||
loadBalancerPolicy: ""
|
||||
```
|
||||
|
||||
After do this config, you can start your DolphinScheduler cluster, your cluster will use etcd as registry center to
|
||||
store server metadata.
|
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>dolphinscheduler-registry-plugins</artifactId>
|
||||
<groupId>org.apache.dolphinscheduler</groupId>
|
||||
<version>dev-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>dolphinscheduler-registry-etcd</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.dolphinscheduler</groupId>
|
||||
<artifactId>dolphinscheduler-registry-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.etcd</groupId>
|
||||
<artifactId>jetcd-core</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-codec-http2</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-handler</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-handler-proxy</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.etcd</groupId>
|
||||
<artifactId>jetcd-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-all</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -0,0 +1,115 @@
|
||||
/*
|
||||
* 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.registry.etcd;
|
||||
|
||||
import org.apache.dolphinscheduler.registry.api.ConnectionListener;
|
||||
import org.apache.dolphinscheduler.registry.api.ConnectionState;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
|
||||
import io.etcd.jetcd.Client;
|
||||
|
||||
public class EtcdConnectionStateListener implements AutoCloseable {
|
||||
private final List<ConnectionListener> connectionListeners = Collections.synchronizedList(new ArrayList<>());
|
||||
// A thread pool that periodically obtains connection status
|
||||
private final ScheduledExecutorService scheduledExecutorService;
|
||||
// monitored client
|
||||
private final Client client;
|
||||
// The state of the last monitor
|
||||
private volatile ConnectionState connectionState;
|
||||
|
||||
public EtcdConnectionStateListener(Client client) {
|
||||
this.client = client;
|
||||
this.scheduledExecutorService = Executors.newScheduledThreadPool(
|
||||
1,
|
||||
new ThreadFactoryBuilder().setNameFormat("EtcdConnectionStateListenerThread").setDaemon(true).build());
|
||||
}
|
||||
|
||||
public void addConnectionListener(ConnectionListener connectionListener) {
|
||||
connectionListeners.add(connectionListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
connectionListeners.clear();
|
||||
scheduledExecutorService.shutdownNow();
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply for a lease through the client, if there is no exception, the connection is normal
|
||||
* @return the current connection state
|
||||
* @throws if there is an exception, return is DISCONNECTED
|
||||
*/
|
||||
private ConnectionState currentConnectivityState() {
|
||||
try {
|
||||
client.getLeaseClient().grant(1).get().getID();
|
||||
return ConnectionState.CONNECTED;
|
||||
} catch (ExecutionException e) {
|
||||
return ConnectionState.DISCONNECTED;
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
return ConnectionState.DISCONNECTED;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Periodically execute thread to get connection status
|
||||
*/
|
||||
public void start() {
|
||||
long initialDelay = 500L;
|
||||
long delay = 500L;
|
||||
this.scheduledExecutorService.scheduleWithFixedDelay(() -> {
|
||||
ConnectionState currentConnectionState = currentConnectivityState();
|
||||
if (currentConnectionState == connectionState) {
|
||||
return;
|
||||
}
|
||||
if (connectionState == ConnectionState.CONNECTED) {
|
||||
if (currentConnectionState == ConnectionState.DISCONNECTED) {
|
||||
connectionState = ConnectionState.DISCONNECTED;
|
||||
triggerListener(ConnectionState.DISCONNECTED);
|
||||
}
|
||||
} else if (connectionState == ConnectionState.DISCONNECTED) {
|
||||
if (currentConnectionState == ConnectionState.CONNECTED) {
|
||||
connectionState = ConnectionState.CONNECTED;
|
||||
triggerListener(ConnectionState.RECONNECTED);
|
||||
}
|
||||
} else if (connectionState == null) {
|
||||
connectionState = currentConnectionState;
|
||||
triggerListener(connectionState);
|
||||
}
|
||||
},
|
||||
initialDelay,
|
||||
delay,
|
||||
TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
// notify all listeners
|
||||
private void triggerListener(ConnectionState connectionState) {
|
||||
for (ConnectionListener connectionListener : connectionListeners) {
|
||||
connectionListener.onUpdate(connectionState);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,344 @@
|
||||
/*
|
||||
* 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.registry.etcd;
|
||||
|
||||
import org.apache.dolphinscheduler.registry.api.ConnectionListener;
|
||||
import org.apache.dolphinscheduler.registry.api.Event;
|
||||
import org.apache.dolphinscheduler.registry.api.Registry;
|
||||
import org.apache.dolphinscheduler.registry.api.RegistryException;
|
||||
import org.apache.dolphinscheduler.registry.api.SubscribeListener;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
|
||||
import io.etcd.jetcd.ByteSequence;
|
||||
import io.etcd.jetcd.Client;
|
||||
import io.etcd.jetcd.ClientBuilder;
|
||||
import io.etcd.jetcd.KeyValue;
|
||||
import io.etcd.jetcd.Lease;
|
||||
import io.etcd.jetcd.Lock;
|
||||
import io.etcd.jetcd.Util;
|
||||
import io.etcd.jetcd.Watch;
|
||||
import io.etcd.jetcd.options.DeleteOption;
|
||||
import io.etcd.jetcd.options.GetOption;
|
||||
import io.etcd.jetcd.options.PutOption;
|
||||
import io.etcd.jetcd.options.WatchOption;
|
||||
import io.etcd.jetcd.support.Observers;
|
||||
import io.etcd.jetcd.watch.WatchEvent;
|
||||
import lombok.NonNull;
|
||||
|
||||
/**
|
||||
* This is one of the implementation of {@link Registry}, with this implementation, you need to rely on Etcd cluster to
|
||||
* store the DolphinScheduler master/worker's metadata and do the server registry/unRegistry.
|
||||
*/
|
||||
@Component
|
||||
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "etcd")
|
||||
public class EtcdRegistry implements Registry {
|
||||
private static Logger LOGGER = LoggerFactory.getLogger(EtcdRegistry.class);
|
||||
private final Client client;
|
||||
private EtcdConnectionStateListener etcdConnectionStateListener;
|
||||
public static final String FOLDER_SEPARATOR = "/";
|
||||
// save the lock info for thread
|
||||
// key:lockKey Value:leaseId
|
||||
private static final ThreadLocal<Map<String, Long>> threadLocalLockMap = new ThreadLocal<>();
|
||||
|
||||
private final Map<String, Watch.Watcher> watcherMap = new ConcurrentHashMap<>();
|
||||
|
||||
private static final long TIME_TO_LIVE_SECONDS = 30L;
|
||||
public EtcdRegistry(EtcdRegistryProperties registryProperties) {
|
||||
ClientBuilder clientBuilder = Client.builder()
|
||||
.endpoints(Util.toURIs(Splitter.on(",").trimResults().splitToList(registryProperties.getEndpoints())))
|
||||
.namespace(byteSequence(registryProperties.getNamespace()))
|
||||
.connectTimeout(registryProperties.getConnectionTimeout())
|
||||
.retryChronoUnit(ChronoUnit.MILLIS)
|
||||
.retryDelay(registryProperties.getRetryDelay().toMillis())
|
||||
.retryMaxDelay(registryProperties.getRetryMaxDelay().toMillis())
|
||||
.retryMaxDuration(registryProperties.getRetryMaxDuration());
|
||||
if (StringUtils.hasLength(registryProperties.getUser()) && StringUtils.hasLength(registryProperties.getPassword())) {
|
||||
clientBuilder.user(byteSequence(registryProperties.getUser()));
|
||||
clientBuilder.password(byteSequence(registryProperties.getPassword()));
|
||||
}
|
||||
if (StringUtils.hasLength(registryProperties.getLoadBalancerPolicy())) {
|
||||
clientBuilder.loadBalancerPolicy(registryProperties.getLoadBalancerPolicy());
|
||||
}
|
||||
if (StringUtils.hasLength(registryProperties.getAuthority())) {
|
||||
clientBuilder.authority(registryProperties.getAuthority());
|
||||
}
|
||||
client = clientBuilder.build();
|
||||
LOGGER.info("Started Etcd Registry...");
|
||||
etcdConnectionStateListener = new EtcdConnectionStateListener(client);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the etcd Connection stateListeer
|
||||
*/
|
||||
@PostConstruct
|
||||
public void start() {
|
||||
LOGGER.info("Starting Etcd ConnectionListener...");
|
||||
etcdConnectionStateListener.start();
|
||||
LOGGER.info("Started Etcd ConnectionListener...");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connectUntilTimeout(@NonNull Duration timeout) throws RegistryException {
|
||||
// The connectTimeout has been set in the constructor
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param path The prefix of the key being listened to
|
||||
* @param listener
|
||||
* @return if subcribe Returns true if no exception was thrown
|
||||
*/
|
||||
@Override
|
||||
public boolean subscribe(String path, SubscribeListener listener) {
|
||||
try {
|
||||
ByteSequence watchKey = byteSequence(path);
|
||||
WatchOption watchOption = WatchOption.newBuilder().isPrefix(true).build();
|
||||
watcherMap.computeIfAbsent(path, $ -> client.getWatchClient().watch(watchKey, watchOption,watchResponse -> {
|
||||
for (WatchEvent event : watchResponse.getEvents()) {
|
||||
listener.notify(new EventAdaptor(event, path));
|
||||
}
|
||||
}));
|
||||
} catch (Exception e) {
|
||||
throw new RegistryException("Failed to subscribe listener for key: " + path, e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws throws an exception if the unsubscribe path does not exist
|
||||
* @param path The prefix of the key being listened to
|
||||
*/
|
||||
@Override
|
||||
public void unsubscribe(String path) {
|
||||
try {
|
||||
watcherMap.get(path).close();
|
||||
watcherMap.remove(path);
|
||||
} catch (Exception e) {
|
||||
throw new RegistryException("Failed to unsubscribe listener for key: " + path, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addConnectionStateListener(ConnectionListener listener) {
|
||||
etcdConnectionStateListener.addConnectionListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return Returns the value corresponding to the key
|
||||
* @throws throws an exception if the key does not exist
|
||||
*/
|
||||
@Override
|
||||
public String get(String key) {
|
||||
try {
|
||||
List<KeyValue> keyValues = client.getKVClient().get(byteSequence(key)).get().getKvs();
|
||||
return keyValues.iterator().next().getValue().toString(StandardCharsets.UTF_8);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new RegistryException("etcd get data error", e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RegistryException("etcd get data error, key = " + key, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param deleteOnDisconnect Does the put data disappear when the client disconnects
|
||||
*/
|
||||
@Override
|
||||
public void put(String key, String value, boolean deleteOnDisconnect) {
|
||||
try {
|
||||
if (deleteOnDisconnect) {
|
||||
// keep the key by lease, if disconnected, the lease will expire and the key will delete
|
||||
long leaseId = client.getLeaseClient().grant(TIME_TO_LIVE_SECONDS).get().getID();
|
||||
client.getLeaseClient().keepAlive(leaseId, Observers.observer(response -> {
|
||||
}));
|
||||
PutOption putOption = PutOption.newBuilder().withLeaseId(leaseId).build();
|
||||
client.getKVClient().put(byteSequence(key), byteSequence(value),putOption).get();
|
||||
} else {
|
||||
client.getKVClient().put(byteSequence(key), byteSequence(value)).get();
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new RegistryException("Failed to put registry key: " + key, e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RegistryException("Failed to put registry key: " + key, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* delete all keys that contain the prefix {@Code key}
|
||||
*/
|
||||
@Override
|
||||
public void delete(String key) {
|
||||
try {
|
||||
DeleteOption deleteOption = DeleteOption.newBuilder().isPrefix(true).build();
|
||||
client.getKVClient().delete(byteSequence(key), deleteOption).get();
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new RegistryException("Failed to delete registry key: " + key, e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RegistryException("Failed to delete registry key: " + key, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all child objects, split by "/"
|
||||
*/
|
||||
@Override
|
||||
public Collection<String> children(String key) {
|
||||
// Make sure the string end with '/'
|
||||
// eg:change key = /nodes to /nodes/
|
||||
String prefix = key.endsWith(FOLDER_SEPARATOR) ? key : key + FOLDER_SEPARATOR;
|
||||
GetOption getOption = GetOption.newBuilder().isPrefix(true).withSortField(GetOption.SortTarget.KEY).withSortOrder(GetOption.SortOrder.ASCEND).build();
|
||||
try {
|
||||
List<KeyValue> keyValues = client.getKVClient().get(byteSequence(prefix),getOption).get().getKvs();
|
||||
return keyValues.stream().map(e -> getSubNodeKeyName(prefix, e.getKey().toString(StandardCharsets.UTF_8))).distinct().collect(Collectors.toList());
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new RegistryException("etcd get children error", e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RegistryException("etcd get children error, key: " + key, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If "/" exists in the child object, get the string prefixed with "/"
|
||||
*/
|
||||
private String getSubNodeKeyName(final String prefix, final String fullPath) {
|
||||
String pathWithoutPrefix = fullPath.substring(prefix.length());
|
||||
return pathWithoutPrefix.contains(FOLDER_SEPARATOR) ? pathWithoutPrefix.substring(0, pathWithoutPrefix.indexOf(FOLDER_SEPARATOR)) : pathWithoutPrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean exists(String key) {
|
||||
GetOption getOption = GetOption.newBuilder().withCountOnly(true).build();
|
||||
try {
|
||||
if (client.getKVClient().get(byteSequence(key),getOption).get().getCount() >= 1) {
|
||||
return true;
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new RegistryException("etcd check key is existed error", e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RegistryException("etcd check key is existed error, key: " + key, e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the lock with a lease
|
||||
*/
|
||||
@Override
|
||||
public boolean acquireLock(String key) {
|
||||
Lock lockClient = client.getLockClient();
|
||||
Lease leaseClient = client.getLeaseClient();
|
||||
// get the lock with a lease
|
||||
try {
|
||||
long leaseId = leaseClient.grant(TIME_TO_LIVE_SECONDS).get().getID();
|
||||
// keep the lease
|
||||
client.getLeaseClient().keepAlive(leaseId, Observers.observer(response -> {
|
||||
}));
|
||||
lockClient.lock(byteSequence(key),leaseId).get();
|
||||
|
||||
// save the leaseId for release Lock
|
||||
if (null == threadLocalLockMap.get()) {
|
||||
threadLocalLockMap.set(new HashMap<>());
|
||||
}
|
||||
threadLocalLockMap.get().put(key,leaseId);
|
||||
return true;
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new RegistryException("etcd get lock error", e);
|
||||
} catch (ExecutionException e) {
|
||||
throw new RegistryException("etcd get lock error, lockKey: " + key, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* release the lock by revoking the leaseId
|
||||
*/
|
||||
@Override
|
||||
public boolean releaseLock(String key) {
|
||||
try {
|
||||
Long leaseId = threadLocalLockMap.get().get(key);
|
||||
client.getLeaseClient().revoke(leaseId);
|
||||
threadLocalLockMap.get().remove(key);
|
||||
if (threadLocalLockMap.get().isEmpty()) {
|
||||
threadLocalLockMap.remove();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RegistryException("etcd release lock error, lockKey: " + key, e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
// When the client closes, the watch also closes.
|
||||
client.close();
|
||||
}
|
||||
|
||||
private static ByteSequence byteSequence(String val) {
|
||||
return ByteSequence.from(val, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
static final class EventAdaptor extends Event {
|
||||
public EventAdaptor(WatchEvent event, String key) {
|
||||
key(key);
|
||||
|
||||
switch (event.getEventType()) {
|
||||
case PUT:
|
||||
type(Type.ADD);
|
||||
break;
|
||||
case DELETE:
|
||||
type(Type.REMOVE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
KeyValue keyValue = event.getKeyValue();
|
||||
if (keyValue != null) {
|
||||
path(keyValue.getKey().toString(StandardCharsets.UTF_8));
|
||||
data(keyValue.getValue().toString(StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* 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.registry.etcd;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Configuration
|
||||
@ConditionalOnProperty(prefix = "registry", name = "type", havingValue = "etcd")
|
||||
@ConfigurationProperties(prefix = "registry")
|
||||
public class EtcdRegistryProperties {
|
||||
private String endpoints;
|
||||
private String namespace = "dolphinscheduler";
|
||||
private Duration connectionTimeout = Duration.ofSeconds(9);
|
||||
|
||||
// auth
|
||||
private String user;
|
||||
private String password;
|
||||
private String authority;
|
||||
|
||||
// RetryPolicy
|
||||
private Duration retryDelay = Duration.ofMillis(60);
|
||||
private Duration retryMaxDelay = Duration.ofMillis(300);
|
||||
private Duration retryMaxDuration = Duration.ofMillis(1500);
|
||||
|
||||
// loadBalancerPolicy
|
||||
private String loadBalancerPolicy;
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* 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.registry.etcd;
|
||||
|
||||
import org.apache.dolphinscheduler.registry.api.Event;
|
||||
import org.apache.dolphinscheduler.registry.api.SubscribeListener;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import io.etcd.jetcd.test.EtcdClusterExtension;
|
||||
|
||||
public class EtcdRegistryTest {
|
||||
private static final Logger logger = LoggerFactory.getLogger(EtcdRegistryTest.class);
|
||||
|
||||
@RegisterExtension
|
||||
public static final EtcdClusterExtension server = EtcdClusterExtension.builder()
|
||||
.withNodes(1)
|
||||
.withImage("ibmcom/etcd:3.2.24")
|
||||
.build();
|
||||
public static EtcdRegistry registry;
|
||||
|
||||
@BeforeClass
|
||||
public static void before() throws Exception {
|
||||
EtcdRegistryProperties properties = new EtcdRegistryProperties();
|
||||
server.restart();
|
||||
properties.setEndpoints(String.valueOf(server.clientEndpoints().get(0)));
|
||||
registry = new EtcdRegistry(properties);
|
||||
registry.put("/sub", "sub", false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void persistTest() {
|
||||
registry.put("/nodes/m1", "", false);
|
||||
registry.put("/nodes/m2", "", false);
|
||||
Assert.assertEquals(Arrays.asList("m1", "m2"), registry.children("/nodes"));
|
||||
Assert.assertTrue(registry.exists("/nodes/m1"));
|
||||
registry.delete("/nodes/m2");
|
||||
Assert.assertFalse(registry.exists("/nodes/m2"));
|
||||
registry.delete("/nodes");
|
||||
Assert.assertFalse(registry.exists("/nodes/m1"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lockTest() {
|
||||
CountDownLatch preCountDownLatch = new CountDownLatch(1);
|
||||
CountDownLatch allCountDownLatch = new CountDownLatch(2);
|
||||
List<String> testData = new ArrayList<>();
|
||||
new Thread(() -> {
|
||||
registry.acquireLock("/lock");
|
||||
preCountDownLatch.countDown();
|
||||
logger.info(Thread.currentThread().getName() + " :I got the lock, but I don't want to work. I want to rest for a while");
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
logger.info(Thread.currentThread().getName() + " :I'm going to start working");
|
||||
testData.add("thread1");
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
} finally {
|
||||
logger.info(Thread.currentThread().getName() + " :I have finished my work, now I release the lock");
|
||||
registry.releaseLock("/lock");
|
||||
allCountDownLatch.countDown();
|
||||
}
|
||||
}).start();
|
||||
try {
|
||||
preCountDownLatch.await(5,TimeUnit.SECONDS);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
new Thread(() -> {
|
||||
try {
|
||||
logger.info(Thread.currentThread().getName() + " :I am trying to acquire the lock");
|
||||
registry.acquireLock("/lock");
|
||||
logger.info(Thread.currentThread().getName() + " :I got the lock and I started working");
|
||||
|
||||
testData.add("thread2");
|
||||
} finally {
|
||||
registry.releaseLock("/lock");
|
||||
allCountDownLatch.countDown();
|
||||
}
|
||||
|
||||
}).start();
|
||||
try {
|
||||
allCountDownLatch.await(5, TimeUnit.SECONDS);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
Assert.assertEquals(testData, Arrays.asList("thread1", "thread2"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void subscribeTest() {
|
||||
boolean status = registry.subscribe("/sub", new TestListener());
|
||||
// The following add and delete operations are used for debugging
|
||||
registry.put("/sub/m1", "tt", false);
|
||||
registry.put("/sub/m2", "tt", false);
|
||||
registry.delete("/sub/m2");
|
||||
registry.delete("/sub");
|
||||
Assert.assertTrue(status);
|
||||
|
||||
}
|
||||
|
||||
static class TestListener implements SubscribeListener {
|
||||
@Override
|
||||
public void notify(Event event) {
|
||||
logger.info("I'm test listener");
|
||||
}
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void after() throws IOException {
|
||||
registry.close();
|
||||
}
|
||||
}
|
@ -26,6 +26,7 @@ import org.apache.dolphinscheduler.registry.api.ConnectionState;
|
||||
import org.apache.dolphinscheduler.registry.api.Registry;
|
||||
import org.apache.dolphinscheduler.registry.api.RegistryException;
|
||||
import org.apache.dolphinscheduler.registry.api.SubscribeListener;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
@ -0,0 +1,27 @@
|
||||
# Introduction
|
||||
|
||||
This module is the zookeeper registry plugin module, this plugin will use zookeeper as the registry center.
|
||||
|
||||
# How to use
|
||||
|
||||
If you want to set the registry center as zookeeper,you need to set the registry properties in master/worker/api's appplication.yml
|
||||
|
||||
```yaml
|
||||
registry:
|
||||
type: zookeeper
|
||||
zookeeper:
|
||||
namespace: dolphinscheduler
|
||||
connect-string: localhost:2181
|
||||
retry-policy:
|
||||
base-sleep-time: 60ms
|
||||
max-sleep: 300ms
|
||||
max-retries: 5
|
||||
session-timeout: 30s
|
||||
connection-timeout: 9s
|
||||
block-until-connected: 600ms
|
||||
# The following options are set according to personal needs
|
||||
digest: ~
|
||||
```
|
||||
|
||||
After do this config, you can start your DolphinScheduler cluster, your cluster will use zookeeper as registry center to
|
||||
store server metadata.
|
@ -27,6 +27,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
@ -86,7 +87,7 @@ public class ZookeeperRegistryTest {
|
||||
allCountDownLatch.countDown();
|
||||
}
|
||||
}).start();
|
||||
preCountDownLatch.await();
|
||||
preCountDownLatch.await(5, TimeUnit.SECONDS);
|
||||
new Thread(() -> {
|
||||
try {
|
||||
logger.info(Thread.currentThread().getName() + " :I am trying to acquire the lock");
|
||||
@ -100,7 +101,7 @@ public class ZookeeperRegistryTest {
|
||||
}
|
||||
|
||||
}).start();
|
||||
allCountDownLatch.await();
|
||||
allCountDownLatch.await(5, TimeUnit.SECONDS);
|
||||
Assert.assertEquals(testData, Arrays.asList("thread1", "thread2"));
|
||||
|
||||
}
|
||||
|
@ -33,5 +33,6 @@
|
||||
<modules>
|
||||
<module>dolphinscheduler-registry-zookeeper</module>
|
||||
<module>dolphinscheduler-registry-mysql</module>
|
||||
<module>dolphinscheduler-registry-etcd</module>
|
||||
</modules>
|
||||
</project>
|
||||
|
@ -299,5 +299,22 @@ xmlbeans-3.1.0.jar
|
||||
xmlenc-0.52.jar
|
||||
zeppelin-client-0.10.1.jar
|
||||
zeppelin-common-0.10.1.jar
|
||||
jetcd-common-0.5.11.jar
|
||||
jetcd-core-0.5.11.jar
|
||||
grpc-api-1.41.0.jar
|
||||
grpc-context-1.41.0.jar
|
||||
grpc-core-1.41.0.jar
|
||||
grpc-grpclb-1.41.0.jar
|
||||
grpc-netty-1.41.0.jar
|
||||
grpc-protobuf-1.41.0.jar
|
||||
grpc-protobuf-lite-1.41.0.jar
|
||||
grpc-stub-1.41.0.jar
|
||||
failsafe-2.4.4.jar
|
||||
auto-service-annotations-1.0.1.jar
|
||||
annotations-4.1.1.4.jar
|
||||
perfmark-api-0.23.0.jar
|
||||
proto-google-common-protos-2.0.1.jar
|
||||
protobuf-java-3.17.2.jar
|
||||
protobuf-java-util-3.17.2.jar
|
||||
zjsonpatch-0.3.0.jar
|
||||
zookeeper-3.4.14.jar
|
||||
|
Loading…
Reference in New Issue
Block a user