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")
+  }
 }

Reply via email to