This is an automated email from the ASF dual-hosted git repository.
ulyssesyou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-kyuubi.git
The following commit(s) were added to refs/heads/master by this push:
new faa2dd4 [KYUUBI #2008] Support engine type and subdomain in kyuubi-ctl
faa2dd4 is described below
commit faa2dd41224acab4da8f5e6052d096894957cfa3
Author: sychen <[email protected]>
AuthorDate: Fri Mar 4 17:09:19 2022 +0800
[KYUUBI #2008] Support engine type and subdomain in kyuubi-ctl
### _Why are the changes needed?_
Introduced engine type and subdomain, kyuubi-ctl does not support managing
engine.
Add two engine-related parameters(--engine-type --engine-subdomain).
https://github.com/apache/incubator-kyuubi/issues/2008
### _How was this patch tested?_
- [x] Add some test cases that check the changes thoroughly including
negative and positive cases if possible
- [x] Add screenshots for manual tests if appropriate
- [x] [Run
test](https://kyuubi.apache.org/docs/latest/develop_tools/testing.html#running-tests)
locally before make a pull request
Closes #2009 from cxzl25/KYUUBI-2008.
Closes #2008
213a8d9e [sychen] remove println
c3895b2e [sychen] fix style
fa1e8991 [sychen] fix ut
302ae757 [sychen] support engine type and subdomain
Authored-by: sychen <[email protected]>
Signed-off-by: ulysses-you <[email protected]>
---
.../org/apache/kyuubi/ctl/ServiceControlCli.scala | 13 ++++-
.../kyuubi/ctl/ServiceControlCliArguments.scala | 14 +++++
.../ctl/ServiceControlCliArgumentsParser.scala | 4 +-
.../ctl/ServiceControlCliArgumentsSuite.scala | 12 +++++
.../apache/kyuubi/ctl/ServiceControlCliSuite.scala | 61 +++++++++++++++++++++-
5 files changed, 101 insertions(+), 3 deletions(-)
diff --git
a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCli.scala
b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCli.scala
index d5e1118..5dc4fe8 100644
--- a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCli.scala
+++ b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCli.scala
@@ -23,6 +23,8 @@ import org.apache.curator.framework.CuratorFramework
import org.apache.curator.utils.ZKPaths
import org.apache.kyuubi.Logging
+import org.apache.kyuubi.config.KyuubiConf.ENGINE_SHARE_LEVEL_SUBDOMAIN
+import org.apache.kyuubi.config.KyuubiConf.ENGINE_TYPE
import org.apache.kyuubi.engine.ShareLevel
import org.apache.kyuubi.ha.HighAvailabilityConf._
import org.apache.kyuubi.ha.client.{ServiceDiscovery, ServiceNodeInfo,
ZooKeeperClientProvider}
@@ -227,7 +229,16 @@ object ServiceControlCli extends CommandLineUtils with
Logging {
case ServiceControlObject.SERVER =>
ZKPaths.makePath(null, args.cliArgs.namespace)
case ServiceControlObject.ENGINE =>
- ZKPaths.makePath(s"${args.cliArgs.namespace}_${ShareLevel.USER}",
args.cliArgs.user)
+ val engineType = Some(args.cliArgs.engineType)
+ .filter(_ != null).filter(_.nonEmpty)
+ .getOrElse(args.conf.get(ENGINE_TYPE))
+ val engineSubdomain = Some(args.cliArgs.engineSubdomain)
+ .filter(_ != null).filter(_.nonEmpty)
+
.getOrElse(args.conf.get(ENGINE_SHARE_LEVEL_SUBDOMAIN).getOrElse("default"))
+ ZKPaths.makePath(
+ s"${args.cliArgs.namespace}_${ShareLevel.USER}_${engineType}",
+ args.cliArgs.user,
+ engineSubdomain)
}
}
diff --git
a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCliArguments.scala
b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCliArguments.scala
index dabefcf..61171bf 100644
---
a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCliArguments.scala
+++
b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCliArguments.scala
@@ -69,6 +69,14 @@ class ServiceControlCliArguments(args: Seq[String], env:
Map[String, String] = s
.action((v, c) => c.copy(user = v))
.text("The user name this engine belong to.")
+ val engineTypeOps = opt[String]("engine-type").abbr("et")
+ .action((v, c) => c.copy(engineType = v))
+ .text("The engine type this engine belong to.")
+
+ val engineSubdomainOps = opt[String]("engine-subdomain").abbr("es")
+ .action((v, c) => c.copy(engineSubdomain = v))
+ .text("The engine subdomain this engine belong to.")
+
val serverCmd =
cmd("server").action((_, c) => c.copy(service =
ServiceControlObject.SERVER))
val engineCmd =
@@ -92,6 +100,8 @@ class ServiceControlCliArguments(args: Seq[String], env:
Map[String, String] = s
serverCmd.text("\tGet Kyuubi server info of domain"),
engineCmd
.children(userOps)
+ .children(engineTypeOps)
+ .children(engineSubdomainOps)
.text("\tGet Kyuubi engine info belong to a user.")),
note(""),
cmd("delete")
@@ -101,6 +111,8 @@ class ServiceControlCliArguments(args: Seq[String], env:
Map[String, String] = s
serverCmd.text("\tDelete the specified service node for a domain"),
engineCmd
.children(userOps)
+ .children(engineTypeOps)
+ .children(engineSubdomainOps)
.text("\tDelete the specified engine node for user.")),
note(""),
cmd("list")
@@ -110,6 +122,8 @@ class ServiceControlCliArguments(args: Seq[String], env:
Map[String, String] = s
serverCmd.text("\tList all the service nodes for a particular
domain"),
engineCmd
.children(userOps)
+ .children(engineTypeOps)
+ .children(engineSubdomainOps)
.text("\tList all the engine nodes for a user")),
checkConfig(f => {
if (f.action == null) failure("Must specify action command:
[create|get|delete|list].")
diff --git
a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCliArgumentsParser.scala
b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCliArgumentsParser.scala
index 86efde7..1073506 100644
---
a/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCliArgumentsParser.scala
+++
b/kyuubi-ctl/src/main/scala/org/apache/kyuubi/ctl/ServiceControlCliArgumentsParser.scala
@@ -36,7 +36,9 @@ abstract private[kyuubi] class
ServiceControlCliArgumentsParser {
host: String = null,
port: String = null,
version: String = null,
- verbose: Boolean = false)
+ verbose: Boolean = false,
+ engineType: String = null,
+ engineSubdomain: String = null)
/**
* Cli arguments parse rules.
diff --git
a/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ServiceControlCliArgumentsSuite.scala
b/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ServiceControlCliArgumentsSuite.scala
index fb3dfb4..b8b51ff 100644
---
a/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ServiceControlCliArgumentsSuite.scala
+++
b/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ServiceControlCliArgumentsSuite.scala
@@ -375,6 +375,10 @@ class ServiceControlCliArgumentsSuite extends
KyuubiFunSuite {
|Command: get engine
|${"\t"}Get Kyuubi engine info belong to a user.
| -u, --user <value> The user name this engine belong to.
+ | -et, --engine-type <value>
+ | The engine type this engine belong to.
+ | -es, --engine-subdomain <value>
+ | The engine subdomain this engine belong
to.
|
|Command: delete [server|engine] [options]
|${"\t"}Delete the specified service/engine node, host and port
needed.
@@ -383,6 +387,10 @@ class ServiceControlCliArgumentsSuite extends
KyuubiFunSuite {
|Command: delete engine
|${"\t"}Delete the specified engine node for user.
| -u, --user <value> The user name this engine belong to.
+ | -et, --engine-type <value>
+ | The engine type this engine belong to.
+ | -es, --engine-subdomain <value>
+ | The engine subdomain this engine belong
to.
|
|Command: list [server|engine] [options]
|${"\t"}List all the service/engine nodes for a particular domain.
@@ -391,6 +399,10 @@ class ServiceControlCliArgumentsSuite extends
KyuubiFunSuite {
|Command: list engine
|${"\t"}List all the engine nodes for a user
| -u, --user <value> The user name this engine belong to.
+ | -et, --engine-type <value>
+ | The engine type this engine belong to.
+ | -es, --engine-subdomain <value>
+ | The engine subdomain this engine belong
to.
|
| -h, --help Show help message and exit.""".stripMargin
diff --git
a/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ServiceControlCliSuite.scala
b/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ServiceControlCliSuite.scala
index 8226426..79165ba 100644
---
a/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ServiceControlCliSuite.scala
+++
b/kyuubi-ctl/src/test/scala/org/apache/kyuubi/ctl/ServiceControlCliSuite.scala
@@ -277,7 +277,8 @@ class ServiceControlCliSuite extends KyuubiFunSuite with
TestPrematureExit {
namespace,
"--user",
user)
- assert(getZkNamespace(new ServiceControlCliArguments(arg2)) ==
s"/${namespace}_USER/$user")
+ assert(getZkNamespace(new ServiceControlCliArguments(arg2)) ==
+ s"/${namespace}_USER_SPARK_SQL/$user/default")
}
test("test list zk service nodes info") {
@@ -404,4 +405,62 @@ class ServiceControlCliSuite extends KyuubiFunSuite with
TestPrematureExit {
testPrematureExit(args, getRenderedNodesInfoWithoutTitle(expectedNodes,
true))
}
}
+
+ test("test get zk namespace for different engine type and subdomain") {
+ val arg1 = Array(
+ "list",
+ "engine",
+ "--zk-quorum",
+ zkServer.getConnectString,
+ "--namespace",
+ namespace,
+ "--user",
+ user)
+ assert(getZkNamespace(new ServiceControlCliArguments(arg1)) ==
+ s"/${namespace}_USER_SPARK_SQL/$user/default")
+
+ val arg2 = Array(
+ "list",
+ "engine",
+ "--zk-quorum",
+ zkServer.getConnectString,
+ "--namespace",
+ namespace,
+ "--user",
+ user,
+ "--engine-type",
+ "FLINK_SQL")
+ assert(getZkNamespace(new ServiceControlCliArguments(arg2)) ==
+ s"/${namespace}_USER_FLINK_SQL/$user/default")
+
+ val arg3 = Array(
+ "list",
+ "engine",
+ "--zk-quorum",
+ zkServer.getConnectString,
+ "--namespace",
+ namespace,
+ "--user",
+ user,
+ "--engine-type",
+ "TRINO")
+ assert(getZkNamespace(new ServiceControlCliArguments(arg3)) ==
+ s"/${namespace}_USER_TRINO/$user/default")
+
+ val arg4 = Array(
+ "list",
+ "engine",
+ "--zk-quorum",
+ zkServer.getConnectString,
+ "--namespace",
+ namespace,
+ "--user",
+ user,
+ "--engine-type",
+ "SPARK_SQL",
+ "--engine-subdomain",
+ "sub_1")
+ assert(getZkNamespace(new ServiceControlCliArguments(arg4)) ==
+ s"/${namespace}_USER_SPARK_SQL/$user/sub_1")
+ }
}