You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by pe...@apache.org on 2022/06/05 13:50:05 UTC
[incubator-linkis] branch dev-1.2.0 updated: [Feature-2212] Add the default DWSClientConfig constructor for LinkisDataSourceRemoteClient to simplify the client API for internal microservices to call data source services (#2213)
This is an automated email from the ASF dual-hosted git repository.
peacewong pushed a commit to branch dev-1.2.0
in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git
The following commit(s) were added to refs/heads/dev-1.2.0 by this push:
new 740d015d7 [Feature-2212] Add the default DWSClientConfig constructor for LinkisDataSourceRemoteClient to simplify the client API for internal microservices to call data source services (#2213)
740d015d7 is described below
commit 740d015d70c492c11f738728525faffe0a127814
Author: weixiao <le...@gmail.com>
AuthorDate: Sun Jun 5 21:50:01 2022 +0800
[Feature-2212] Add the default DWSClientConfig constructor for LinkisDataSourceRemoteClient to simplify the client API for internal microservices to call data source services (#2213)
* [Feature-2212] Add the default DWSClientConfig constructor for LinkisDataSourceRemoteClient to simplify the client API for internal microservices to call data source services
* [Feature-2212] Add the default DWSClientConfig constructor for LinkisDataSourceRemoteClient to simplify the client API for internal microservices to call data source services, add test code
---
db/linkis_dml.sql | 1 +
.../datasource/client/DataSourceRemoteClient.scala | 1 +
.../client/config/DatasourceClientConfig.scala | 12 +++++
.../client/impl/LinkisDataSourceRemoteClient.scala | 51 ++++++++++++++++++---
.../GetConnectParamsByDataSourceNameAction.scala | 2 +-
...n.scala => GetInfoByDataSourceNameAction.scala} | 52 +++++++++-------------
.../GetInfoByDataSourceNameResult.scala} | 18 +++++---
.../datasource/client/TestDataSourceClient.scala | 32 ++++++++++---
8 files changed, 122 insertions(+), 47 deletions(-)
diff --git a/db/linkis_dml.sql b/db/linkis_dml.sql
index 1dda5ca8f..2b0942913 100644
--- a/db/linkis_dml.sql
+++ b/db/linkis_dml.sql
@@ -447,6 +447,7 @@ INSERT INTO `linkis_mg_gateway_auth_token`(`token_name`,`legal_users`,`legal_hos
INSERT INTO `linkis_mg_gateway_auth_token`(`token_name`,`legal_users`,`legal_hosts`,`business_owner`,`create_time`,`update_time`,`elapse_day`,`update_by`) VALUES ('QUALITIS-AUTH','*','*','BDP',curdate(),curdate(),-1,'LINKIS');
INSERT INTO `linkis_mg_gateway_auth_token`(`token_name`,`legal_users`,`legal_hosts`,`business_owner`,`create_time`,`update_time`,`elapse_day`,`update_by`) VALUES ('VALIDATOR-AUTH','*','*','BDP',curdate(),curdate(),-1,'LINKIS');
INSERT INTO `linkis_mg_gateway_auth_token`(`token_name`,`legal_users`,`legal_hosts`,`business_owner`,`create_time`,`update_time`,`elapse_day`,`update_by`) VALUES ('LINKISCLI-AUTH','*','*','BDP',curdate(),curdate(),-1,'LINKIS');
+INSERT INTO `linkis_mg_gateway_auth_token`(`token_name`,`legal_users`,`legal_hosts`,`business_owner`,`create_time`,`update_time`,`elapse_day`,`update_by`) VALUES ('DSM-AUTH','*','*','BDP',curdate(),curdate(),-1,'LINKIS');
INSERT INTO `linkis_ps_dm_datasource_type` (`name`, `description`, `option`, `classifier`, `icon`, `layers`) VALUES ('mysql', 'mysql数据库', 'mysql数据库', '关系型数据库', '', 3);
INSERT INTO `linkis_ps_dm_datasource_type` (`name`, `description`, `option`, `classifier`, `icon`, `layers`) VALUES ('kafka', 'kafka', 'kafka', '消息队列', '', 2);
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala
index 66ccfdfbf..a0985a6e2 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala
@@ -24,6 +24,7 @@ trait DataSourceRemoteClient extends RemoteClient {
def getAllDataSourceTypes(action: GetAllDataSourceTypesAction): GetAllDataSourceTypesResult
def queryDataSourceEnv(action: QueryDataSourceEnvAction): QueryDataSourceEnvResult
def getInfoByDataSourceId(action: GetInfoByDataSourceIdAction): GetInfoByDataSourceIdResult
+ def getInfoByDataSourceName(action: GetInfoByDataSourceNameAction): GetInfoByDataSourceNameResult
def queryDataSource(action: QueryDataSourceAction): QueryDataSourceResult
def getConnectParams(action: GetConnectParamsByDataSourceIdAction): GetConnectParamsByDataSourceIdResult
def createDataSource(action: CreateDataSourceAction): CreateDataSourceResult
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
index c347edb59..015dcd88f 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
@@ -24,4 +24,16 @@ object DatasourceClientConfig {
var DATA_SOURCE_SERVICE_MODULE: CommonVars[String] = CommonVars.apply("wds.linkis.server.dsm.module.name", "data-source-manager")
+ val AUTH_TOKEN_KEY: CommonVars[String] = CommonVars[String]("wds.linkis.server.dsm.auth.token.key", "Token-Code")
+
+ val AUTH_TOKEN_VALUE: CommonVars[String] = CommonVars[String]("wds.linkis.server.dsm.auth.token.value", "DSM-AUTH")
+
+ val DATA_SOURCE_SERVICE_CLIENT_NAME: CommonVars[String] = CommonVars[String]("wds.linkis.server.dsm.client.name", "DataSource-Client")
+
+ val CONNECTION_MAX_SIZE: CommonVars[Int] = CommonVars[Int]("wds.linkis.server.dsm.connection.max.size", 10)
+
+ val CONNECTION_TIMEOUT: CommonVars[Int] = CommonVars[Int]("wds.linkis.server.dsm.connection.timeout", 30000)
+
+ val CONNECTION_READ_TIMEOUT: CommonVars[Int] = CommonVars[Int]("wds.linkis.server.dsm.connection.read.timeout", 10 * 60 * 1000)
+
}
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala
index 98f38c02b..2e5969ea3 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala
@@ -17,15 +17,54 @@
package org.apache.linkis.datasource.client.impl
+import org.apache.commons.lang.StringUtils
+import org.apache.linkis.common.conf.Configuration
+import org.apache.linkis.datasource.client.config.DatasourceClientConfig._
+import org.apache.linkis.datasource.client.exception.DataSourceClientBuilderException
import org.apache.linkis.datasource.client.request._
import org.apache.linkis.datasource.client.response._
import org.apache.linkis.datasource.client.{AbstractRemoteClient, DataSourceRemoteClient}
+import org.apache.linkis.httpclient.authentication.AuthenticationStrategy
import org.apache.linkis.httpclient.dws.DWSHttpClient
-import org.apache.linkis.httpclient.dws.config.DWSClientConfig
-
-
-class LinkisDataSourceRemoteClient(clientConfig: DWSClientConfig) extends AbstractRemoteClient with DataSourceRemoteClient {
- protected override val dwsHttpClient = new DWSHttpClient(clientConfig, "DataSource-Client")
+import org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy
+import org.apache.linkis.httpclient.dws.config.{DWSClientConfig, DWSClientConfigBuilder}
+
+import java.util.concurrent.TimeUnit
+
+
+class LinkisDataSourceRemoteClient(clientConfig: DWSClientConfig, clientName: String) extends AbstractRemoteClient with DataSourceRemoteClient {
+ def this() = this(null, null)
+
+ def this(clientConfig: DWSClientConfig) = this(clientConfig, null)
+
+ protected override val dwsHttpClient: DWSHttpClient = new DWSHttpClient(if (clientConfig != null) clientConfig else createClientConfig(), if (StringUtils.isEmpty(clientName)) DATA_SOURCE_SERVICE_CLIENT_NAME.getValue else clientName)
+
+ def createClientConfig(): DWSClientConfig = {
+ val serverUrl = Configuration.getGateWayURL()
+ if(StringUtils.isEmpty(serverUrl)) throw new DataSourceClientBuilderException("serverUrl cannot be null.")
+
+ val maxConnection: Int = CONNECTION_MAX_SIZE.getValue
+ val connectTimeout: Int = CONNECTION_TIMEOUT.getValue
+ val readTimeout: Int = CONNECTION_READ_TIMEOUT.getValue
+ val tokenKey: String = AUTH_TOKEN_KEY.getValue
+ val tokenValue: String = AUTH_TOKEN_VALUE.getValue
+
+ val authenticationStrategy: AuthenticationStrategy = new TokenAuthenticationStrategy()
+ DWSClientConfigBuilder.newBuilder()
+ .addServerUrl(serverUrl)
+ .connectionTimeout(connectTimeout)
+ .discoveryEnabled(false)
+ .discoveryFrequency(1, TimeUnit.MINUTES)
+ .loadbalancerEnabled(true)
+ .maxConnectionSize(maxConnection)
+ .retryEnabled(false)
+ .readTimeout(readTimeout)
+ .setAuthenticationStrategy(authenticationStrategy)
+ .setAuthTokenKey(tokenKey)
+ .setAuthTokenValue(tokenValue)
+ .setDWSVersion(Configuration.LINKIS_WEB_VERSION.getValue)
+ .build()
+ }
override def getAllDataSourceTypes(action: GetAllDataSourceTypesAction): GetAllDataSourceTypesResult = execute(action).asInstanceOf[GetAllDataSourceTypesResult]
@@ -33,6 +72,8 @@ class LinkisDataSourceRemoteClient(clientConfig: DWSClientConfig) extends Abstra
override def getInfoByDataSourceId(action: GetInfoByDataSourceIdAction): GetInfoByDataSourceIdResult = execute(action).asInstanceOf[GetInfoByDataSourceIdResult]
+ override def getInfoByDataSourceName(action: GetInfoByDataSourceNameAction): GetInfoByDataSourceNameResult = execute(action).asInstanceOf[GetInfoByDataSourceNameResult]
+
override def queryDataSource(action: QueryDataSourceAction): QueryDataSourceResult = execute(action).asInstanceOf[QueryDataSourceResult]
override def getConnectParams(action: GetConnectParamsByDataSourceIdAction): GetConnectParamsByDataSourceIdResult = execute(action).asInstanceOf[GetConnectParamsByDataSourceIdResult]
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala
index cade0d582..c698552f4 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala
@@ -62,7 +62,7 @@ object GetConnectParamsByDataSourceNameAction{
}
def build(): GetConnectParamsByDataSourceNameAction = {
- if (dataSourceName == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+ if (dataSourceName == null) throw new DataSourceClientBuilderException("dataSourceName is needed!")
if(system == null) throw new DataSourceClientBuilderException("system is needed!")
if(user == null) throw new DataSourceClientBuilderException("user is needed!")
// Use URIEncoder to encode the datSourceName
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceNameAction.scala
similarity index 55%
copy from linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala
copy to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceNameAction.scala
index cade0d582..860ab359a 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceNameAction.scala
@@ -17,31 +17,27 @@
package org.apache.linkis.datasource.client.request
-import java.net.URLEncoder
-import java.nio.charset.StandardCharsets
-
-import org.apache.linkis.datasource.client.exception.DataSourceClientBuilderException
import org.apache.linkis.datasource.client.config.DatasourceClientConfig.DATA_SOURCE_SERVICE_MODULE
+import org.apache.linkis.datasource.client.exception.DataSourceClientBuilderException
import org.apache.linkis.httpclient.request.GetAction
-/**
- * Get version parameters from data source
- */
-class GetConnectParamsByDataSourceNameAction extends GetAction with DataSourceAction{
+
+
+class GetInfoByDataSourceNameAction extends GetAction with DataSourceAction {
private var dataSourceName: String = _
- private var user: String = _
+ override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "info", "name", dataSourceName)
- override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "name", dataSourceName, "connect-params")
+ private var user: String = _
override def setUser(user: String): Unit = this.user = user
- override def getUser: String = user
+ override def getUser: String = this.user
}
-object GetConnectParamsByDataSourceNameAction{
+object GetInfoByDataSourceNameAction {
def builder(): Builder = new Builder
- class Builder private[GetConnectParamsByDataSourceNameAction]() {
+ class Builder private[GetInfoByDataSourceNameAction]() {
private var dataSourceName: String = _
private var system: String = _
private var user: String = _
@@ -61,23 +57,19 @@ object GetConnectParamsByDataSourceNameAction{
this
}
- def build(): GetConnectParamsByDataSourceNameAction = {
- if (dataSourceName == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
- if(system == null) throw new DataSourceClientBuilderException("system is needed!")
- if(user == null) throw new DataSourceClientBuilderException("user is needed!")
- // Use URIEncoder to encode the datSourceName
- var requestDataSourceName = this.dataSourceName
- try {
- requestDataSourceName = URLEncoder.encode(dataSourceName, StandardCharsets.UTF_8.name())
- } catch {
- case e: Exception =>
- throw new DataSourceClientBuilderException(s"Cannot encode the name of data source:[$dataSourceName] for request", e)
- }
- val getConnectParamsByDataSourceNameAction = new GetConnectParamsByDataSourceNameAction
- getConnectParamsByDataSourceNameAction.dataSourceName = requestDataSourceName
- getConnectParamsByDataSourceNameAction.setParameter("system", system)
- getConnectParamsByDataSourceNameAction.setUser(user)
- getConnectParamsByDataSourceNameAction
+ def build(): GetInfoByDataSourceNameAction = {
+ if (dataSourceName == null) throw new DataSourceClientBuilderException("dataSourceName is needed!")
+ if (system == null) throw new DataSourceClientBuilderException("system is needed!")
+ if (user == null) throw new DataSourceClientBuilderException("user is needed!")
+
+ val getInfoByDataSourceNameAction = new GetInfoByDataSourceNameAction
+ getInfoByDataSourceNameAction.dataSourceName = this.dataSourceName
+ getInfoByDataSourceNameAction.setParameter("system", system)
+ getInfoByDataSourceNameAction.setUser(user)
+ getInfoByDataSourceNameAction
}
}
+
}
+
+
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceNameResult.scala
similarity index 53%
copy from linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
copy to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceNameResult.scala
index c347edb59..6ea4fb3c2 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceNameResult.scala
@@ -15,13 +15,21 @@
* limitations under the License.
*/
-package org.apache.linkis.datasource.client.config
+package org.apache.linkis.datasource.client.response
-import org.apache.linkis.common.conf.CommonVars
+import org.apache.linkis.datasourcemanager.common.domain.DataSource
+import org.apache.linkis.httpclient.dws.DWSHttpClient
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
+import org.apache.linkis.httpclient.dws.response.DWSResult
-object DatasourceClientConfig {
- var METADATA_SERVICE_MODULE: CommonVars[String] = CommonVars.apply("wds.linkis.server.mdm.module.name", "metadatamanager")
+import scala.beans.BeanProperty
- var DATA_SOURCE_SERVICE_MODULE: CommonVars[String] = CommonVars.apply("wds.linkis.server.dsm.module.name", "data-source-manager")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/info/name/(\\S+)")
+class GetInfoByDataSourceNameResult extends DWSResult {
+ @BeanProperty var info: java.util.Map[String, Any] = _
+ def getDataSource: DataSource = {
+ val str = DWSHttpClient.jacksonJson.writeValueAsString(info)
+ DWSHttpClient.jacksonJson.readValue(str, classOf[DataSource])
+ }
}
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/test/java/org/apache/linkis/datasource/client/TestDataSourceClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/test/java/org/apache/linkis/datasource/client/TestDataSourceClient.scala
index 574c42c37..595e046a9 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/test/java/org/apache/linkis/datasource/client/TestDataSourceClient.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/test/java/org/apache/linkis/datasource/client/TestDataSourceClient.scala
@@ -19,7 +19,7 @@ package org.apache.linkis.datasource.client
import org.apache.linkis.datasource.client.impl.LinkisDataSourceRemoteClient
import org.apache.linkis.datasource.client.request._
-import org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy
+import org.apache.linkis.httpclient.dws.authentication.{StaticAuthenticationStrategy, TokenAuthenticationStrategy}
import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder
import java.util.concurrent.TimeUnit
@@ -27,7 +27,22 @@ import java.util.concurrent.TimeUnit
object TestDataSourceClient {
def main(args: Array[String]): Unit = {
val clientConfig = DWSClientConfigBuilder.newBuilder()
- .addServerUrl("http://127.0.0.1:9001")
+ .addServerUrl("http://127.0.0.1:9001") //set linkis-mg-gateway url: http://{ip}:{port}
+ .connectionTimeout(30000) //connection timtout
+ .discoveryEnabled(false) //disable discovery
+ .discoveryFrequency(1, TimeUnit.MINUTES) // discovery frequency
+ .loadbalancerEnabled(false) // enable loadbalance
+ .maxConnectionSize(5) // set max Connection
+ .retryEnabled(false) // set retry
+ .readTimeout(30000) //set read timeout
+ .setAuthenticationStrategy(new TokenAuthenticationStrategy()) //AuthenticationStrategy Linkis authen suppory static and Token
+ .setAuthTokenKey("Token-Code") // set submit user
+ .setAuthTokenValue("DSM-AUTH") // set passwd or token
+ .setDWSVersion("v1") //linkis rest version v1
+ .build()
+
+ /*val clientConfig = DWSClientConfigBuilder.newBuilder()
+ .addServerUrl("http://192.168.28.98:9001")
.connectionTimeout(30000)
.discoveryEnabled(false)
.discoveryFrequency(1, TimeUnit.MINUTES)
@@ -36,14 +51,19 @@ object TestDataSourceClient {
.retryEnabled(false)
.readTimeout(30000)
.setAuthenticationStrategy(new StaticAuthenticationStrategy())
- .setAuthTokenKey("hadoop")
- .setAuthTokenValue("hadoop")
+ .setAuthTokenKey("linkis")
+ .setAuthTokenValue("123456")
.setDWSVersion("v1")
- .build()
+ .build()*/
val dataSourceClient = new LinkisDataSourceRemoteClient(clientConfig)
- val getAllDataSourceTypesResult = dataSourceClient.getAllDataSourceTypes(GetAllDataSourceTypesAction.builder().setUser("hadoop").build()).getAllDataSourceType
+ val getDataSourceByName = dataSourceClient.getInfoByDataSourceName(GetInfoByDataSourceNameAction.builder()
+ .setDataSourceName("test_mysql")
+ .setUser("linkis")
+ .setSystem("").build()).getDataSource
+
+ val getAllDataSourceTypesResult = dataSourceClient.getAllDataSourceTypes(GetAllDataSourceTypesAction.builder().setUser("linkis").build()).getAllDataSourceType
val queryDataSourceEnvResult = dataSourceClient.queryDataSourceEnv(
QueryDataSourceEnvAction.builder()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org