Преглед изворни кода

chore(rebalance): move apps from lib-ee, add READMEs

Ilya Averyanov пре 2 година
родитељ
комит
8d83dc12e7
47 измењених фајлова са 263 додато и 18 уклоњено
  1. 94 0
      apps/emqx_eviction_agent/BSL.txt
  2. 35 0
      apps/emqx_eviction_agent/README.md
  3. 0 0
      apps/emqx_eviction_agent/etc/emqx_eviction_agent.conf
  4. 0 0
      apps/emqx_eviction_agent/rebar.config
  5. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent.app.src
  6. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent.appup.src
  7. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent.erl
  8. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent_api.erl
  9. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent_app.erl
  10. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent_channel.erl
  11. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent_cli.erl
  12. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent_conn_sup.erl
  13. 0 0
      apps/emqx_eviction_agent/src/emqx_eviction_agent_sup.erl
  14. 0 0
      apps/emqx_eviction_agent/src/proto/emqx_eviction_agent_proto_v1.erl
  15. 0 0
      apps/emqx_eviction_agent/test/emqx_eviction_agent_SUITE.erl
  16. 0 0
      apps/emqx_eviction_agent/test/emqx_eviction_agent_api_SUITE.erl
  17. 0 0
      apps/emqx_eviction_agent/test/emqx_eviction_agent_channel_SUITE.erl
  18. 0 0
      apps/emqx_eviction_agent/test/emqx_eviction_agent_cli_SUITE.erl
  19. 0 0
      apps/emqx_eviction_agent/test/emqx_eviction_agent_test_helpers.erl
  20. 94 0
      apps/emqx_node_rebalance/BSL.txt
  21. 40 0
      apps/emqx_node_rebalance/README.md
  22. 0 0
      apps/emqx_node_rebalance/etc/emqx_node_rebalance.conf
  23. 0 0
      apps/emqx_node_rebalance/include/emqx_node_rebalance.hrl
  24. 0 0
      apps/emqx_node_rebalance/rebar.config
  25. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance.app.src
  26. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance.appup.src
  27. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance.erl
  28. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance_agent.erl
  29. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance_api.erl
  30. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance_app.erl
  31. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance_cli.erl
  32. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance_evacuation.erl
  33. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance_evacuation_persist.erl
  34. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance_status.erl
  35. 0 0
      apps/emqx_node_rebalance/src/emqx_node_rebalance_sup.erl
  36. 0 0
      apps/emqx_node_rebalance/src/proto/emqx_node_rebalance_api_proto_v1.erl
  37. 0 0
      apps/emqx_node_rebalance/src/proto/emqx_node_rebalance_evacuation_proto_v1.erl
  38. 0 0
      apps/emqx_node_rebalance/src/proto/emqx_node_rebalance_proto_v1.erl
  39. 0 0
      apps/emqx_node_rebalance/src/proto/emqx_node_rebalance_status_proto_v1.erl
  40. 0 0
      apps/emqx_node_rebalance/test/emqx_node_rebalance_SUITE.erl
  41. 0 0
      apps/emqx_node_rebalance/test/emqx_node_rebalance_agent_SUITE.erl
  42. 0 0
      apps/emqx_node_rebalance/test/emqx_node_rebalance_api_SUITE.erl
  43. 0 0
      apps/emqx_node_rebalance/test/emqx_node_rebalance_cli_SUITE.erl
  44. 0 0
      apps/emqx_node_rebalance/test/emqx_node_rebalance_evacuation_SUITE.erl
  45. 0 0
      apps/emqx_node_rebalance/test/emqx_node_rebalance_evacuation_persist_SUITE.erl
  46. 0 9
      lib-ee/emqx_eviction_agent/README.md
  47. 0 9
      lib-ee/emqx_node_rebalance/README.md

+ 94 - 0
apps/emqx_eviction_agent/BSL.txt

@@ -0,0 +1,94 @@
+Business Source License 1.1
+
+Licensor:             Hangzhou EMQ Technologies Co., Ltd.
+Licensed Work:        EMQX Enterprise Edition
+                      The Licensed Work is (c) 2023
+                      Hangzhou EMQ Technologies Co., Ltd.
+Additional Use Grant: Students and educators are granted right to copy,
+                      modify, and create derivative work for research
+                      or education.
+Change Date:          2027-02-01
+Change License:       Apache License, Version 2.0
+
+For information about alternative licensing arrangements for the Software,
+please contact Licensor: https://www.emqx.com/en/contact
+
+Notice
+
+The Business Source License (this document, or the “License”) is not an Open
+Source license. However, the Licensed Work will eventually be made available
+under an Open Source License, as stated in this License.
+
+License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
+“Business Source License” is a trademark of MariaDB Corporation Ab.
+
+-----------------------------------------------------------------------------
+
+Business Source License 1.1
+
+Terms
+
+The Licensor hereby grants you the right to copy, modify, create derivative
+works, redistribute, and make non-production use of the Licensed Work. The
+Licensor may make an Additional Use Grant, above, permitting limited
+production use.
+
+Effective on the Change Date, or the fourth anniversary of the first publicly
+available distribution of a specific version of the Licensed Work under this
+License, whichever comes first, the Licensor hereby grants you rights under
+the terms of the Change License, and the rights granted in the paragraph
+above terminate.
+
+If your use of the Licensed Work does not comply with the requirements
+currently in effect as described in this License, you must purchase a
+commercial license from the Licensor, its affiliated entities, or authorized
+resellers, or you must refrain from using the Licensed Work.
+
+All copies of the original and modified Licensed Work, and derivative works
+of the Licensed Work, are subject to this License. This License applies
+separately for each version of the Licensed Work and the Change Date may vary
+for each version of the Licensed Work released by Licensor.
+
+You must conspicuously display this License on each original or modified copy
+of the Licensed Work. If you receive the Licensed Work in original or
+modified form from a third party, the terms and conditions set forth in this
+License apply to your use of that work.
+
+Any use of the Licensed Work in violation of this License will automatically
+terminate your rights under this License for the current and all other
+versions of the Licensed Work.
+
+This License does not grant you any right in any trademark or logo of
+Licensor or its affiliates (provided that you may use a trademark or logo of
+Licensor as expressly required by this License).
+
+TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
+AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
+EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
+TITLE.
+
+MariaDB hereby grants you permission to use this License’s text to license
+your works, and to refer to it using the trademark “Business Source License”,
+as long as you comply with the Covenants of Licensor below.
+
+Covenants of Licensor
+
+In consideration of the right to use this License’s text and the “Business
+Source License” name and trademark, Licensor covenants to MariaDB, and to all
+other recipients of the licensed work to be provided by Licensor:
+
+1. To specify as the Change License the GPL Version 2.0 or any later version,
+   or a license that is compatible with GPL Version 2.0 or a later version,
+   where “compatible” means that software provided under the Change License can
+   be included in a program with software provided under GPL Version 2.0 or a
+   later version. Licensor may specify additional Change Licenses without
+   limitation.
+
+2. To either: (a) specify an additional grant of rights to use that does not
+   impose any additional restriction on the right granted in this License, as
+   the Additional Use Grant; or (b) insert the text “None”.
+
+3. To specify a Change Date.
+
+4. Not to modify this License in any other way.

+ 35 - 0
apps/emqx_eviction_agent/README.md

@@ -0,0 +1,35 @@
+# EMQX Eviction Agent
+
+`emqx_eviction_agent` is a part of the node evacuation/node rebalance feature in EMQX.
+It is a low-level application that encapsulates working with actual MQTT connections.
+
+## Application Responsibilities
+
+`emqx_eviction_agent` application:
+
+* Blocks incoming connection to the node it is running on.
+* Serves as a facade for connection/session eviction operations.
+* Reports blocking status via HTTP API.
+
+The `emqx_eviction_agent` is relatively passive and has no eviction/rebalancing logic. It allows
+`emqx_node_rebalance` to perform eviction/rebalancing operations using high-level API, without having to deal with
+MQTT connections directly.
+
+## EMQX Integration
+
+`emqx_eviction_agent` interacts with the following EMQX components:
+* `emqx_cm` - to get the list of active MQTT connections;
+* `emqx_hooks` subsystem - to block/unblock incoming connections;
+* `emqx_channel` and the corresponding connection modules to perform the eviction.
+
+## User Facing API
+
+The application provided a very simple API (CLI and HTTP) to inspect the current blocking status.
+
+# Documentation
+
+The rebalancing concept is described in the corresponding [EIP](https://github.com/emqx/eip/blob/main/active/0020-node-rebalance.md).
+
+# Contributing
+
+Please see our [contributing.md](../../CONTRIBUTING.md).

lib-ee/emqx_eviction_agent/etc/emqx_eviction_agent.conf → apps/emqx_eviction_agent/etc/emqx_eviction_agent.conf


lib-ee/emqx_eviction_agent/rebar.config → apps/emqx_eviction_agent/rebar.config


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent.app.src → apps/emqx_eviction_agent/src/emqx_eviction_agent.app.src


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent.appup.src → apps/emqx_eviction_agent/src/emqx_eviction_agent.appup.src


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent.erl → apps/emqx_eviction_agent/src/emqx_eviction_agent.erl


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent_api.erl → apps/emqx_eviction_agent/src/emqx_eviction_agent_api.erl


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent_app.erl → apps/emqx_eviction_agent/src/emqx_eviction_agent_app.erl


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent_channel.erl → apps/emqx_eviction_agent/src/emqx_eviction_agent_channel.erl


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent_cli.erl → apps/emqx_eviction_agent/src/emqx_eviction_agent_cli.erl


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent_conn_sup.erl → apps/emqx_eviction_agent/src/emqx_eviction_agent_conn_sup.erl


lib-ee/emqx_eviction_agent/src/emqx_eviction_agent_sup.erl → apps/emqx_eviction_agent/src/emqx_eviction_agent_sup.erl


lib-ee/emqx_eviction_agent/src/proto/emqx_eviction_agent_proto_v1.erl → apps/emqx_eviction_agent/src/proto/emqx_eviction_agent_proto_v1.erl


lib-ee/emqx_eviction_agent/test/emqx_eviction_agent_SUITE.erl → apps/emqx_eviction_agent/test/emqx_eviction_agent_SUITE.erl


lib-ee/emqx_eviction_agent/test/emqx_eviction_agent_api_SUITE.erl → apps/emqx_eviction_agent/test/emqx_eviction_agent_api_SUITE.erl


lib-ee/emqx_eviction_agent/test/emqx_eviction_agent_channel_SUITE.erl → apps/emqx_eviction_agent/test/emqx_eviction_agent_channel_SUITE.erl


lib-ee/emqx_eviction_agent/test/emqx_eviction_agent_cli_SUITE.erl → apps/emqx_eviction_agent/test/emqx_eviction_agent_cli_SUITE.erl


lib-ee/emqx_eviction_agent/test/emqx_eviction_agent_test_helpers.erl → apps/emqx_eviction_agent/test/emqx_eviction_agent_test_helpers.erl


+ 94 - 0
apps/emqx_node_rebalance/BSL.txt

@@ -0,0 +1,94 @@
+Business Source License 1.1
+
+Licensor:             Hangzhou EMQ Technologies Co., Ltd.
+Licensed Work:        EMQX Enterprise Edition
+                      The Licensed Work is (c) 2023
+                      Hangzhou EMQ Technologies Co., Ltd.
+Additional Use Grant: Students and educators are granted right to copy,
+                      modify, and create derivative work for research
+                      or education.
+Change Date:          2027-02-01
+Change License:       Apache License, Version 2.0
+
+For information about alternative licensing arrangements for the Software,
+please contact Licensor: https://www.emqx.com/en/contact
+
+Notice
+
+The Business Source License (this document, or the “License”) is not an Open
+Source license. However, the Licensed Work will eventually be made available
+under an Open Source License, as stated in this License.
+
+License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
+“Business Source License” is a trademark of MariaDB Corporation Ab.
+
+-----------------------------------------------------------------------------
+
+Business Source License 1.1
+
+Terms
+
+The Licensor hereby grants you the right to copy, modify, create derivative
+works, redistribute, and make non-production use of the Licensed Work. The
+Licensor may make an Additional Use Grant, above, permitting limited
+production use.
+
+Effective on the Change Date, or the fourth anniversary of the first publicly
+available distribution of a specific version of the Licensed Work under this
+License, whichever comes first, the Licensor hereby grants you rights under
+the terms of the Change License, and the rights granted in the paragraph
+above terminate.
+
+If your use of the Licensed Work does not comply with the requirements
+currently in effect as described in this License, you must purchase a
+commercial license from the Licensor, its affiliated entities, or authorized
+resellers, or you must refrain from using the Licensed Work.
+
+All copies of the original and modified Licensed Work, and derivative works
+of the Licensed Work, are subject to this License. This License applies
+separately for each version of the Licensed Work and the Change Date may vary
+for each version of the Licensed Work released by Licensor.
+
+You must conspicuously display this License on each original or modified copy
+of the Licensed Work. If you receive the Licensed Work in original or
+modified form from a third party, the terms and conditions set forth in this
+License apply to your use of that work.
+
+Any use of the Licensed Work in violation of this License will automatically
+terminate your rights under this License for the current and all other
+versions of the Licensed Work.
+
+This License does not grant you any right in any trademark or logo of
+Licensor or its affiliates (provided that you may use a trademark or logo of
+Licensor as expressly required by this License).
+
+TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
+AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
+EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
+TITLE.
+
+MariaDB hereby grants you permission to use this License’s text to license
+your works, and to refer to it using the trademark “Business Source License”,
+as long as you comply with the Covenants of Licensor below.
+
+Covenants of Licensor
+
+In consideration of the right to use this License’s text and the “Business
+Source License” name and trademark, Licensor covenants to MariaDB, and to all
+other recipients of the licensed work to be provided by Licensor:
+
+1. To specify as the Change License the GPL Version 2.0 or any later version,
+   or a license that is compatible with GPL Version 2.0 or a later version,
+   where “compatible” means that software provided under the Change License can
+   be included in a program with software provided under GPL Version 2.0 or a
+   later version. Licensor may specify additional Change Licenses without
+   limitation.
+
+2. To either: (a) specify an additional grant of rights to use that does not
+   impose any additional restriction on the right granted in this License, as
+   the Additional Use Grant; or (b) insert the text “None”.
+
+3. To specify a Change Date.
+
+4. Not to modify this License in any other way.

+ 40 - 0
apps/emqx_node_rebalance/README.md

@@ -0,0 +1,40 @@
+# EMQX Node Rebalance
+
+`emqx_node_rebalance` is a part of the node evacuation/node rebalance feature in EMQX.
+It implements high-level scenarios for node evacuation and rebalancing.
+
+## Application Responsibilities
+
+`emqx_node_rebalance` application's core concept is a _rebalance coordinator_.
+_Rebalance сoordinator_ is an entity that implements the rebalancing logic and orchestrates the rebalancing process.
+In particular, it:
+
+* Enables/Disables Eviction Agent on nodes.
+* Sends connection/session eviction commands to Eviction Agents according to the evacuation logic.
+
+We have two implementations of the _rebalance coordinator_:
+* `emqx_node_rebalance` - a coordinator that implements node rebalancing;
+* `emqx_node_rebalance_evacuation` - a coordinator that implements node evacuation.
+
+## EMQX Integration
+
+`emqx_node_rebalance` is a high-level application that is loosely coupled with the rest of the system.
+It uses Eviction Agent to perform the required operations.
+
+## User Facing API
+
+The application provides API (CLI and HTTP) to perform the following operations:
+* Start/Stop rebalancing across a set of nodes or the whole cluster;
+* Start/Stop evacuation of a node;
+* Get the current rebalancing status of a local node.
+* Get the current rebalancing status of the whole cluster.
+
+Also, an HTTP endpoint is provided for liveness probes.
+
+# Documentation
+
+The rebalancing concept is described in the corresponding [EIP](https://github.com/emqx/eip/blob/main/active/0020-node-rebalance.md).
+
+# Contributing
+
+Please see our [contributing.md](../../CONTRIBUTING.md).

lib-ee/emqx_node_rebalance/etc/emqx_node_rebalance.conf → apps/emqx_node_rebalance/etc/emqx_node_rebalance.conf


lib-ee/emqx_node_rebalance/include/emqx_node_rebalance.hrl → apps/emqx_node_rebalance/include/emqx_node_rebalance.hrl


lib-ee/emqx_node_rebalance/rebar.config → apps/emqx_node_rebalance/rebar.config


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance.app.src → apps/emqx_node_rebalance/src/emqx_node_rebalance.app.src


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance.appup.src → apps/emqx_node_rebalance/src/emqx_node_rebalance.appup.src


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance.erl


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance_agent.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance_agent.erl


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance_api.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance_api.erl


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance_app.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance_app.erl


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance_cli.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance_cli.erl


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance_evacuation.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance_evacuation.erl


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance_evacuation_persist.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance_evacuation_persist.erl


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance_status.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance_status.erl


lib-ee/emqx_node_rebalance/src/emqx_node_rebalance_sup.erl → apps/emqx_node_rebalance/src/emqx_node_rebalance_sup.erl


lib-ee/emqx_node_rebalance/src/proto/emqx_node_rebalance_api_proto_v1.erl → apps/emqx_node_rebalance/src/proto/emqx_node_rebalance_api_proto_v1.erl


lib-ee/emqx_node_rebalance/src/proto/emqx_node_rebalance_evacuation_proto_v1.erl → apps/emqx_node_rebalance/src/proto/emqx_node_rebalance_evacuation_proto_v1.erl


lib-ee/emqx_node_rebalance/src/proto/emqx_node_rebalance_proto_v1.erl → apps/emqx_node_rebalance/src/proto/emqx_node_rebalance_proto_v1.erl


lib-ee/emqx_node_rebalance/src/proto/emqx_node_rebalance_status_proto_v1.erl → apps/emqx_node_rebalance/src/proto/emqx_node_rebalance_status_proto_v1.erl


lib-ee/emqx_node_rebalance/test/emqx_node_rebalance_SUITE.erl → apps/emqx_node_rebalance/test/emqx_node_rebalance_SUITE.erl


lib-ee/emqx_node_rebalance/test/emqx_node_rebalance_agent_SUITE.erl → apps/emqx_node_rebalance/test/emqx_node_rebalance_agent_SUITE.erl


lib-ee/emqx_node_rebalance/test/emqx_node_rebalance_api_SUITE.erl → apps/emqx_node_rebalance/test/emqx_node_rebalance_api_SUITE.erl


lib-ee/emqx_node_rebalance/test/emqx_node_rebalance_cli_SUITE.erl → apps/emqx_node_rebalance/test/emqx_node_rebalance_cli_SUITE.erl


lib-ee/emqx_node_rebalance/test/emqx_node_rebalance_evacuation_SUITE.erl → apps/emqx_node_rebalance/test/emqx_node_rebalance_evacuation_SUITE.erl


lib-ee/emqx_node_rebalance/test/emqx_node_rebalance_evacuation_persist_SUITE.erl → apps/emqx_node_rebalance/test/emqx_node_rebalance_evacuation_persist_SUITE.erl


+ 0 - 9
lib-ee/emqx_eviction_agent/README.md

@@ -1,9 +0,0 @@
-emqx_eviction_agent
-=====
-
-An OTP library
-
-Build
------
-
-    $ rebar3 compile

+ 0 - 9
lib-ee/emqx_node_rebalance/README.md

@@ -1,9 +0,0 @@
-emqx_node_rebalance
-=====
-
-An OTP library
-
-Build
------
-
-    $ rebar3 compile