diff --git a/.licenserc.yaml b/.licenserc.yaml index c74ecac1cd2df..0ff72b2eb104a 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -12,6 +12,11 @@ header: - "tools" - "benchmark" - "src/common/compress/tests" + - "src/binaries/query/ee_main.rs" + - "src/binaries/meta/ee_main.rs" + # All files under ee directory should be Elastic V2 License + - "src/meta/ee" + - "src/query/ee" # Ignore hidden files - ".cargo" - ".databend" diff --git a/Cargo.lock b/Cargo.lock index 8d889d55ca554..74812d4517f3e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1813,6 +1813,14 @@ dependencies = [ "serde", ] +[[package]] +name = "common-license" +version = "0.1.0" +dependencies = [ + "common-base", + "common-exception", +] + [[package]] name = "common-management" version = "0.1.0" @@ -3203,6 +3211,7 @@ dependencies = [ "common-tracing", "databend-meta", "databend-query", + "enterprise-query", "limits-rs", "opendal", "poem", @@ -3704,6 +3713,25 @@ dependencies = [ "thiserror", ] +[[package]] +name = "enterprise-meta" +version = "0.1.0" +dependencies = [ + "common-building", +] + +[[package]] +name = "enterprise-query" +version = "0.1.0" +dependencies = [ + "async-backtrace", + "common-base", + "common-building", + "common-config", + "common-exception", + "common-license", +] + [[package]] name = "enum-as-inner" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index 3378d4071373c..47e2f2f3d817d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ members = [ "src/common/storage", "src/common/profile", "src/common/vector", + "src/common/license", # Query "src/query/ast", "src/query/codegen", @@ -71,6 +72,8 @@ members = [ "src/query/users", # databend-query "src/query/service", + # enterprise + "src/query/ee", # Meta "src/meta/api", "src/meta/app", @@ -81,6 +84,7 @@ members = [ "src/meta/stoerr", "src/meta/store", "src/meta/types", + "src/meta/ee", # meta proto "src/meta/proto-conv", "src/meta/protos", diff --git a/LICENSE b/LICENSE index c57acf913648e..4ad6854e21844 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,5 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +Databend is released under a combination of two licenses: - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +1. [Apache-2.0](licenses/apache.md). The portion licensed by Apache License 2.0 allows any use of Databend, excluding enterprise features. - 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 2021 Datafuse Labs - - 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. +2. [Elactic](licenses/elastic_v2.md). The portion licensed by Elastic License 2.0 allows you to use enterprise features with a paid license key. Please contact us at https://www.databend.com/contact-us/ for more details. \ No newline at end of file diff --git a/README.md b/README.md index 9711cd78643de..ea182346ecfb4 100644 --- a/README.md +++ b/README.md @@ -231,7 +231,9 @@ For general help in using Databend, please refer to the official documentation. ## License -Databend is licensed under [Apache 2.0](LICENSE). +Currently, Databend is released under a combination of two licenses: the [Apache License 2.0](licenses/apache.md) and the [Elastic License 2.0](licenses/elastic_v2.md). The latter is for our enterprise features under the `ee` directory + +When contributing to a Databend feature, you can find the relevant license in the comments at the top of each file. ## Acknowledgement diff --git a/licenses/apache.md b/licenses/apache.md new file mode 100644 index 0000000000000..c57acf913648e --- /dev/null +++ b/licenses/apache.md @@ -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 2021 Datafuse Labs + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/elastic_v2.md b/licenses/elastic_v2.md new file mode 100644 index 0000000000000..92503a721787c --- /dev/null +++ b/licenses/elastic_v2.md @@ -0,0 +1,93 @@ +Elastic License 2.0 + +URL: https://www.elastic.co/licensing/elastic-license + +## Acceptance + +By using the software, you agree to all of the terms and conditions below. + +## Copyright License + +The licensor grants you a non-exclusive, royalty-free, worldwide, +non-sublicensable, non-transferable license to use, copy, distribute, make +available, and prepare derivative works of the software, in each case subject to +the limitations and conditions below. + +## Limitations + +You may not provide the software to third parties as a hosted or managed +service, where the service provides users with access to any substantial set of +the features or functionality of the software. + +You may not move, change, disable, or circumvent the license key functionality +in the software, and you may not remove or obscure any functionality in the +software that is protected by the license key. + +You may not alter, remove, or obscure any licensing, copyright, or other notices +of the licensor in the software. Any use of the licensor’s trademarks is subject +to applicable law. + +## Patents + +The licensor grants you a license, under any patent claims the licensor can +license, or becomes able to license, to make, have made, use, sell, offer for +sale, import and have imported the software, in each case subject to the +limitations and conditions in this license. This license does not cover any +patent claims that you cause to be infringed by modifications or additions to +the software. If you or your company make any written claim that the software +infringes or contributes to infringement of any patent, your patent license for +the software granted under these terms ends immediately. If your company makes +such a claim, your patent license ends immediately for work on behalf of your +company. + +## Notices + +You must ensure that anyone who gets a copy of any part of the software from you +also gets a copy of these terms. + +If you modify the software, you must include in any modified copies of the +software prominent notices stating that you have modified the software. + +## No Other Rights + +These terms do not imply any licenses other than those expressly granted in +these terms. + +## Termination + +If you use the software in violation of these terms, such use is not licensed, +and your licenses will automatically terminate. If the licensor provides you +with a notice of your violation, and you cease all violation of this license no +later than 30 days after you receive that notice, your licenses will be +reinstated retroactively. However, if you violate these terms after such +reinstatement, any additional violation of these terms will cause your licenses +to terminate automatically and permanently. + +## No Liability + +*As far as the law allows, the software comes as is, without any warranty or +condition, and the licensor will not be liable to you for any damages arising +out of these terms or the use or nature of the software, under any kind of +legal claim.* + +## Definitions + +The **licensor** is the entity offering these terms, and the **software** is the +software the licensor makes available under these terms, including any portion +of it. + +**you** refers to the individual or entity agreeing to these terms. + +**your company** is any legal entity, sole proprietorship, or other kind of +organization that you work for, plus all organizations that have control over, +are under the control of, or are under common control with that +organization. **control** means ownership of substantially all the assets of an +entity, or the power to direct its management and policies by vote, contract, or +otherwise. Control can be direct or indirect. + +**your licenses** are all the licenses granted to you for the software under +these terms. + +**use** means anything you do with the software requiring one of your licenses. + +**trademark** means trademarks, service marks, and similar rights. \ No newline at end of file diff --git a/licenses/elastic_v2_header.txt b/licenses/elastic_v2_header.txt new file mode 100644 index 0000000000000..185326e8863d2 --- /dev/null +++ b/licenses/elastic_v2_header.txt @@ -0,0 +1,13 @@ +Copyright 2023 Databend Cloud, Inc. + + Licensed under the Elastic 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 + + https://www.elastic.co/licensing/elastic-license + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/scripts/build/build-debug.sh b/scripts/build/build-debug.sh index 4abec3218f5f0..9356fbf1f05f9 100755 --- a/scripts/build/build-debug.sh +++ b/scripts/build/build-debug.sh @@ -8,5 +8,5 @@ SCRIPT_PATH="$(cd "$(dirname "$0")" >/dev/null 2>&1 && pwd)" cd "$SCRIPT_PATH/../.." || exit echo "Build(DEBUG) start..." -cargo build --bin=databend-query --bin=databend-meta --bin=databend-metactl --bin=open-sharing +cargo build --bin=databend-query --bin=databend-meta --bin=databend-metactl --bin=open-sharing --bin=databend-query-oss --bin=databend-meta-oss echo "All done..." diff --git a/src/binaries/Cargo.toml b/src/binaries/Cargo.toml index 3f80bfa8758de..0f06e38e4f3b9 100644 --- a/src/binaries/Cargo.toml +++ b/src/binaries/Cargo.toml @@ -53,6 +53,8 @@ common-storage = { path = "../common/storage" } common-tracing = { path = "../common/tracing" } databend-meta = { path = "../meta/service" } databend-query = { path = "../query/service" } +enterprise-query = { path = "../query/ee" } +# enterprise-meta = { path = "../meta/ee" } sharing-endpoint = { path = "../query/sharing-endpoint" } storages-common-table-meta = { path = "../query/storages/common/table-meta" } @@ -83,7 +85,13 @@ url = "2.3.1" [[bin]] name = "databend-meta" -path = "meta/main.rs" +path = "meta/ee_main.rs" +doctest = false +test = false + +[[bin]] +name = "databend-meta-oss" +path = "meta/oss_main.rs" doctest = false test = false @@ -101,7 +109,13 @@ test = false [[bin]] name = "databend-query" -path = "query/main.rs" +path = "query/ee_main.rs" +doctest = false +test = false + +[[bin]] +name = "databend-query-oss" +path = "query/oss_main.rs" doctest = false test = false diff --git a/src/binaries/meta/ee_main.rs b/src/binaries/meta/ee_main.rs new file mode 100644 index 0000000000000..2632960fff6c3 --- /dev/null +++ b/src/binaries/meta/ee_main.rs @@ -0,0 +1,30 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// 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. + +#![allow(clippy::uninlined_format_args)] +mod entry; +mod kvapi; + +use common_base::mem_allocator::GlobalAllocator; +use databend_meta::configs::Config; + +#[global_allocator] +pub static GLOBAL_ALLOCATOR: GlobalAllocator = GlobalAllocator; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let conf = Config::load()?; + conf.validate()?; + entry::entry(conf).await +} diff --git a/src/binaries/meta/main.rs b/src/binaries/meta/entry.rs similarity index 96% rename from src/binaries/meta/main.rs rename to src/binaries/meta/entry.rs index a2c9398db6dd2..989788eec8e33 100644 --- a/src/binaries/meta/main.rs +++ b/src/binaries/meta/entry.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Datafuse Labs. +// Copyright 2023 Datafuse Labs. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,18 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![allow(clippy::uninlined_format_args)] - use std::env; use std::ops::Deref; use std::sync::Arc; use std::time::Duration; use anyerror::AnyError; -use common_base::base::tokio; use common_base::base::StopHandle; use common_base::base::Stoppable; -use common_base::mem_allocator::GlobalAllocator; use common_grpc::RpcClientConf; use common_meta_raft_store::ondisk::OnDisk; use common_meta_raft_store::ondisk::DATA_VERSION; @@ -45,25 +41,15 @@ use databend_meta::meta_service::MetaNode; use databend_meta::version::METASRV_COMMIT_VERSION; use databend_meta::version::METASRV_SEMVER; use databend_meta::version::MIN_METACLI_SEMVER; +use tokio::time::sleep; use tracing::info; use tracing::warn; -mod kvapi; - -pub use kvapi::KvApiCommand; - -use crate::tokio::time::sleep; - -#[global_allocator] -pub static GLOBAL_ALLOCATOR: GlobalAllocator = GlobalAllocator; +use crate::kvapi::KvApiCommand; const CMD_KVAPI_PREFIX: &str = "kvapi::"; -#[tokio::main] -async fn main() -> anyhow::Result<()> { - let conf = Config::load()?; - conf.validate()?; - +pub async fn entry(conf: Config) -> anyhow::Result<()> { if run_cmd(&conf).await { return Ok(()); } @@ -216,6 +202,63 @@ async fn main() -> anyhow::Result<()> { Ok(()) } +async fn do_register(meta_node: &Arc, conf: &Config) -> Result<(), MetaAPIError> { + let node_id = meta_node.sto.id; + let raft_endpoint = conf.raft_config.raft_api_advertise_host_endpoint(); + let node = Node::new(node_id, raft_endpoint) + .with_grpc_advertise_address(conf.grpc_api_advertise_address()); + + println!("Register this node: {{{}}}", node); + println!(); + + let ent = LogEntry { + txid: None, + time_ms: None, + cmd: Cmd::AddNode { + node_id, + node, + overriding: true, + }, + }; + info!("Raft log entry for updating node: {:?}", ent); + + meta_node.write(ent).await?; + info!("Done register"); + Ok(()) +} + +async fn run_kvapi_command(conf: &Config, op: &str) { + match KvApiCommand::from_config(conf, op) { + Ok(kv_cmd) => { + let rpc_conf = RpcClientConf { + endpoints: vec![conf.grpc_api_address.clone()], + username: conf.username.clone(), + password: conf.password.clone(), + ..Default::default() + }; + let client = match MetaStoreProvider::new(rpc_conf).create_meta_store().await { + Ok(s) => Arc::new(s), + Err(e) => { + eprintln!("{}", e); + return; + } + }; + + match kv_cmd.execute(client).await { + Ok(res) => { + println!("{}", res); + } + Err(e) => { + eprintln!("{}", e); + } + } + } + Err(e) => { + eprintln!("{}", e); + } + } +} + /// The meta service GRPC API address can be changed by administrator in the config file. /// /// Thus every time a meta server starts up, re-register the node info to broadcast its latest grpc address @@ -301,63 +344,6 @@ async fn register_node(meta_node: &Arc, conf: &Config) -> Result<(), a unreachable!("Tried too many times registering node") } -async fn do_register(meta_node: &Arc, conf: &Config) -> Result<(), MetaAPIError> { - let node_id = meta_node.sto.id; - let raft_endpoint = conf.raft_config.raft_api_advertise_host_endpoint(); - let node = Node::new(node_id, raft_endpoint) - .with_grpc_advertise_address(conf.grpc_api_advertise_address()); - - println!("Register this node: {{{}}}", node); - println!(); - - let ent = LogEntry { - txid: None, - time_ms: None, - cmd: Cmd::AddNode { - node_id, - node, - overriding: true, - }, - }; - info!("Raft log entry for updating node: {:?}", ent); - - meta_node.write(ent).await?; - info!("Done register"); - Ok(()) -} - -async fn run_kvapi_command(conf: &Config, op: &str) { - match KvApiCommand::from_config(conf, op) { - Ok(kv_cmd) => { - let rpc_conf = RpcClientConf { - endpoints: vec![conf.grpc_api_address.clone()], - username: conf.username.clone(), - password: conf.password.clone(), - ..Default::default() - }; - let client = match MetaStoreProvider::new(rpc_conf).create_meta_store().await { - Ok(s) => Arc::new(s), - Err(e) => { - eprintln!("{}", e); - return; - } - }; - - match kv_cmd.execute(client).await { - Ok(res) => { - println!("{}", res); - } - Err(e) => { - eprintln!("{}", e); - } - } - } - Err(e) => { - eprintln!("{}", e); - } - } -} - async fn run_cmd(conf: &Config) -> bool { if conf.cmd.is_empty() { return false; diff --git a/src/binaries/meta/oss_main.rs b/src/binaries/meta/oss_main.rs new file mode 100644 index 0000000000000..3c77272adeee1 --- /dev/null +++ b/src/binaries/meta/oss_main.rs @@ -0,0 +1,29 @@ +// Copyright 2022 Datafuse Labs. +// +// 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. + +mod entry; +mod kvapi; + +use common_base::mem_allocator::GlobalAllocator; +use databend_meta::configs::Config; + +#[global_allocator] +pub static GLOBAL_ALLOCATOR: GlobalAllocator = GlobalAllocator; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let conf = Config::load()?; + conf.validate()?; + entry::entry(conf).await +} diff --git a/src/binaries/query/ee_main.rs b/src/binaries/query/ee_main.rs new file mode 100644 index 0000000000000..eee22a4f04d6a --- /dev/null +++ b/src/binaries/query/ee_main.rs @@ -0,0 +1,53 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// 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. + +#![allow(clippy::uninlined_format_args)] +#![feature(try_blocks)] + +mod entry; +mod local; + +use common_base::mem_allocator::GlobalAllocator; +use common_base::runtime::Runtime; +use common_config::InnerConfig; +use common_exception::Result; +use enterprise_query::enterprise_services::EnterpriseServices; + +use crate::entry::init_services; +use crate::entry::start_services; + +#[global_allocator] +pub static GLOBAL_ALLOCATOR: GlobalAllocator = GlobalAllocator; + +fn main() { + match Runtime::with_default_worker_threads() { + Err(cause) => { + eprintln!("Databend Query start failure, cause: {:?}", cause); + std::process::exit(cause.code() as i32); + } + Ok(rt) => { + if let Err(cause) = rt.block_on(async_backtrace::location!().frame(main_entrypoint())) { + eprintln!("Databend Query start failure, cause: {:?}", cause); + std::process::exit(cause.code() as i32); + } + } + } +} + +pub async fn main_entrypoint() -> Result<()> { + let conf: InnerConfig = InnerConfig::load()?; + init_services(&conf).await?; + EnterpriseServices::init(conf.clone()).await?; + start_services(&conf).await +} diff --git a/src/binaries/query/main.rs b/src/binaries/query/entry.rs similarity index 91% rename from src/binaries/query/main.rs rename to src/binaries/query/entry.rs index 5db3ecab53515..5a3b9ec64a4de 100644 --- a/src/binaries/query/main.rs +++ b/src/binaries/query/entry.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Datafuse Labs. +// Copyright 2023 Datafuse Labs. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,15 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#![allow(clippy::uninlined_format_args)] -#![feature(try_blocks)] - -mod local; - use std::env; use common_base::mem_allocator::GlobalAllocator; -use common_base::runtime::Runtime; use common_base::runtime::GLOBAL_MEM_STAT; use common_base::set_alloc_error_hook; use common_config::InnerConfig; @@ -44,28 +38,35 @@ use databend_query::servers::ShutdownHandle; use databend_query::GlobalServices; use tracing::info; -#[global_allocator] -pub static GLOBAL_ALLOCATOR: GlobalAllocator = GlobalAllocator; +use crate::local; + +async fn run_cmd(conf: &InnerConfig) -> Result { + if conf.cmd.is_empty() { + return Ok(false); + } -fn main() { - match Runtime::with_default_worker_threads() { - Err(cause) => { - eprintln!("Databend Query start failure, cause: {:?}", cause); - std::process::exit(cause.code() as i32); + match conf.cmd.as_str() { + "ver" => { + println!("version: {}", *QUERY_SEMVER); + println!("min-compatible-metasrv-version: {}", MIN_METASRV_SEMVER); } - Ok(rt) => { - if let Err(cause) = rt.block_on(async_backtrace::location!().frame(main_entrypoint())) { - eprintln!("Databend Query start failure, cause: {:?}", cause); - std::process::exit(cause.code() as i32); - } + "local" => { + println!("exec local query: {}", conf.local.sql); + local::query_local(conf).await? + } + _ => { + eprintln!("Invalid cmd: {}", conf.cmd); + eprintln!("Available cmds:"); + eprintln!(" --cmd ver"); + eprintln!(" Print version and the min compatible databend-meta version"); } } -} -async fn main_entrypoint() -> Result<()> { - let conf: InnerConfig = InnerConfig::load()?; + Ok(true) +} - if run_cmd(&conf).await? { +pub async fn init_services(conf: &InnerConfig) -> Result<()> { + if run_cmd(conf).await? { return Ok(()); } @@ -89,8 +90,10 @@ async fn main_entrypoint() -> Result<()> { )); } // Make sure global services have been inited. - GlobalServices::init(conf.clone()).await?; + GlobalServices::init(conf.clone()).await +} +pub async fn start_services(conf: &InnerConfig) -> Result<()> { if conf.query.max_memory_limit_enabled { let size = conf.query.max_server_memory_usage as i64; info!("Set memory limit: {}", size); @@ -188,7 +191,7 @@ async fn main_entrypoint() -> Result<()> { // Admin HTTP API service. { let address = conf.query.admin_api_address.clone(); - let mut srv = HttpService::create(&conf); + let mut srv = HttpService::create(conf); let listening = srv.start(address.parse()?).await?; shutdown_handle.add_service(srv); info!("Listening for Admin HTTP API: {}", listening); @@ -218,7 +221,7 @@ async fn main_entrypoint() -> Result<()> { // Cluster register. { ClusterDiscovery::instance() - .register_to_metastore(&conf) + .register_to_metastore(conf) .await?; info!( "Databend query has been registered:{:?} to metasrv:{:?}.", @@ -257,7 +260,7 @@ async fn main_entrypoint() -> Result<()> { println!(" config: {}", GlobalAllocator::conf()); println!("Cluster: {}", { - let cluster = ClusterDiscovery::instance().discover(&conf).await?; + let cluster = ClusterDiscovery::instance().discover(conf).await?; let nodes = cluster.nodes.len(); if nodes > 1 { format!("[{}] nodes", nodes) @@ -335,31 +338,6 @@ async fn main_entrypoint() -> Result<()> { Ok(()) } -async fn run_cmd(conf: &InnerConfig) -> Result { - if conf.cmd.is_empty() { - return Ok(false); - } - - match conf.cmd.as_str() { - "ver" => { - println!("version: {}", *QUERY_SEMVER); - println!("min-compatible-metasrv-version: {}", MIN_METASRV_SEMVER); - } - "local" => { - println!("exec local query: {}", conf.local.sql); - local::query_local(conf).await? - } - _ => { - eprintln!("Invalid cmd: {}", conf.cmd); - eprintln!("Available cmds:"); - eprintln!(" --cmd ver"); - eprintln!(" Print version and the min compatible databend-meta version"); - } - } - - Ok(true) -} - #[cfg(not(target_os = "macos"))] fn check_max_open_files() { let limits = match limits_rs::get_own_limits() { diff --git a/src/binaries/query/oss_main.rs b/src/binaries/query/oss_main.rs new file mode 100644 index 0000000000000..32e64997c4ee3 --- /dev/null +++ b/src/binaries/query/oss_main.rs @@ -0,0 +1,51 @@ +// Copyright 2023 Datafuse Labs. +// +// 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. + +#![allow(clippy::uninlined_format_args)] +#![feature(try_blocks)] + +mod entry; +mod local; + +use common_base::mem_allocator::GlobalAllocator; +use common_base::runtime::Runtime; +use common_config::InnerConfig; +use common_exception::Result; + +use crate::entry::init_services; +use crate::entry::start_services; + +#[global_allocator] +pub static GLOBAL_ALLOCATOR: GlobalAllocator = GlobalAllocator; + +fn main() { + match Runtime::with_default_worker_threads() { + Err(cause) => { + eprintln!("Databend Query start failure, cause: {:?}", cause); + std::process::exit(cause.code() as i32); + } + Ok(rt) => { + if let Err(cause) = rt.block_on(async_backtrace::location!().frame(main_entrypoint())) { + eprintln!("Databend Query start failure, cause: {:?}", cause); + std::process::exit(cause.code() as i32); + } + } + } +} + +async fn main_entrypoint() -> Result<()> { + let conf: InnerConfig = InnerConfig::load()?; + init_services(&conf).await?; + start_services(&conf).await +} diff --git a/src/common/license/Cargo.toml b/src/common/license/Cargo.toml new file mode 100644 index 0000000000000..461d563412cb3 --- /dev/null +++ b/src/common/license/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "common-license" +version = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +publish = { workspace = true } +edition = { workspace = true } + +[lib] +doctest = false +test = false + +[dependencies] +# Workspace dependencies +common-base = { path = "../base" } +common-exception = { path = "../exception" } diff --git a/src/common/license/src/lib.rs b/src/common/license/src/lib.rs new file mode 100644 index 0000000000000..bad6bccffcd46 --- /dev/null +++ b/src/common/license/src/lib.rs @@ -0,0 +1,15 @@ +// Copyright 2023 Datafuse Labs. +// +// 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. + +pub mod license_manager; diff --git a/src/common/license/src/license_manager.rs b/src/common/license/src/license_manager.rs new file mode 100644 index 0000000000000..ca0cbb3bb7b74 --- /dev/null +++ b/src/common/license/src/license_manager.rs @@ -0,0 +1,36 @@ +// Copyright 2023 Datafuse Labs. +// +// 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. + +use std::sync::Arc; + +use common_base::base::GlobalInstance; +use common_exception::Result; + +pub trait LicenseManager { + fn init() -> Result<()> + where Self: Sized; + fn instance() -> Arc> + where Self: Sized; + fn is_active(&self) -> bool; +} + +pub struct LicenseManagerWrapper { + pub manager: Box, +} +unsafe impl Send for LicenseManagerWrapper {} +unsafe impl Sync for LicenseManagerWrapper {} + +pub fn get_license_manager() -> Arc { + GlobalInstance::get() +} diff --git a/src/meta/README.md b/src/meta/README.md index e4f97a7943df9..a4baef3f27107 100644 --- a/src/meta/README.md +++ b/src/meta/README.md @@ -13,3 +13,4 @@ Databend Meta is a transactional metadata service. - [`sled-store`](./sled-store/) wrapped sled-related operational interfaces. - [`store`](./store/), impl with either a local embedded meta store, or a grpc-client of meta service. - [`types`](./types/): defines the rust types for metadata. +- [`ee`](./ee/) contains enterprise functionalities. diff --git a/src/meta/ee/Cargo.toml b/src/meta/ee/Cargo.toml new file mode 100644 index 0000000000000..e1e8330ce36e5 --- /dev/null +++ b/src/meta/ee/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "enterprise-meta" +description = "enterprise features for databend-meta" +version = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +publish = { workspace = true } +edition = { workspace = true } + +[lib] +doctest = false +test = false + +[dependencies] + +[build-dependencies] +common-building = { path = "../../common/building" } + +[package.metadata.cargo-machete] +ignored = ["match-template"] diff --git a/src/meta/ee/build.rs b/src/meta/ee/build.rs new file mode 100644 index 0000000000000..f6e8f3d4904cf --- /dev/null +++ b/src/meta/ee/build.rs @@ -0,0 +1,17 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// 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. + +fn main() { + common_building::setup(); +} diff --git a/src/meta/ee/src/lib.rs b/src/meta/ee/src/lib.rs new file mode 100644 index 0000000000000..34619a369351f --- /dev/null +++ b/src/meta/ee/src/lib.rs @@ -0,0 +1,13 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. diff --git a/src/query/README.md b/src/query/README.md index 20c93b49f9d97..edc95fef8b347 100644 --- a/src/query/README.md +++ b/src/query/README.md @@ -20,3 +20,4 @@ Databend Query is a Distributed Query Engine at scale. - [`storages`](./storages/) relates to table engines, including the commonly used fuse engine and indexes etc. - [`streams`](./streams/) contains data sources and streams. - [`users`](./users/), role-based access and control. +- [`ee`](ee/) contains enterprise functionalities. diff --git a/src/query/ee/Cargo.toml b/src/query/ee/Cargo.toml new file mode 100644 index 0000000000000..ba4b548ccde04 --- /dev/null +++ b/src/query/ee/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "enterprise-query" +description = "A real-time Cloud Distributed Query Engine" +version = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +publish = { workspace = true } +edition = { workspace = true } + +[lib] +doctest = false +test = false + +[dependencies] +# Workspace dependencies +common-base = { path = "../../common/base" } +common-config = { path = "../config" } +common-exception = { path = "../../common/exception" } +common-license = { path = "../../common/license" } + +async-backtrace = { workspace = true } + +[build-dependencies] +common-building = { path = "../../common/building" } + +[package.metadata.cargo-machete] +ignored = ["match-template"] diff --git a/src/query/ee/build.rs b/src/query/ee/build.rs new file mode 100644 index 0000000000000..f6e8f3d4904cf --- /dev/null +++ b/src/query/ee/build.rs @@ -0,0 +1,17 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// 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. + +fn main() { + common_building::setup(); +} diff --git a/src/query/ee/src/enterprise_services.rs b/src/query/ee/src/enterprise_services.rs new file mode 100644 index 0000000000000..5e7acc470cf8b --- /dev/null +++ b/src/query/ee/src/enterprise_services.rs @@ -0,0 +1,28 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// 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. + +use common_config::InnerConfig; +use common_exception::Result; +use common_license::license_manager::LicenseManager; + +use crate::license::license_mgr::RealLicenseManager; + +pub struct EnterpriseServices; +impl EnterpriseServices { + #[async_backtrace::framed] + pub async fn init(_config: InnerConfig) -> Result<()> { + RealLicenseManager::init()?; + Ok(()) + } +} diff --git a/src/query/ee/src/lib.rs b/src/query/ee/src/lib.rs new file mode 100644 index 0000000000000..a700987c0ee61 --- /dev/null +++ b/src/query/ee/src/lib.rs @@ -0,0 +1,16 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// 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. + +pub mod enterprise_services; +pub mod license; diff --git a/src/query/ee/src/license/license_mgr.rs b/src/query/ee/src/license/license_mgr.rs new file mode 100644 index 0000000000000..f3263b5519904 --- /dev/null +++ b/src/query/ee/src/license/license_mgr.rs @@ -0,0 +1,41 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// 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. + +use std::sync::Arc; + +use common_base::base::GlobalInstance; +use common_exception::Result; +use common_license::license_manager::LicenseManager; +use common_license::license_manager::LicenseManagerWrapper; + +pub struct RealLicenseManager {} + +impl LicenseManager for RealLicenseManager { + fn init() -> Result<()> { + let rm = RealLicenseManager {}; + let wrapper = LicenseManagerWrapper { + manager: Box::new(rm), + }; + GlobalInstance::set(Arc::new(wrapper)); + Ok(()) + } + + fn instance() -> Arc> { + GlobalInstance::get() + } + + fn is_active(&self) -> bool { + true + } +} diff --git a/src/query/ee/src/license/mod.rs b/src/query/ee/src/license/mod.rs new file mode 100644 index 0000000000000..35a565c03e9f1 --- /dev/null +++ b/src/query/ee/src/license/mod.rs @@ -0,0 +1,15 @@ +// Copyright 2023 Databend Cloud, Inc. +// +// Licensed under the Elastic 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 +// +// https://www.elastic.co/licensing/elastic-license +// +// 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. + +pub mod license_mgr;