This is an automated email from the ASF dual-hosted git repository.
casion pushed a commit to branch dev-1.3.2
in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git
The following commit(s) were added to refs/heads/dev-1.3.2 by this push:
new 6f18fb061 Udf function transformation (#3828)
6f18fb061 is described below
commit 6f18fb0619b48317258409e782d3a30501e10939
Author: huangKai-2323 <[email protected]>
AuthorDate: Wed Nov 30 22:47:03 2022 +0800
Udf function transformation (#3828)
---
.../org/apache/linkis/udf/api/UDFRestfulApi.java | 88 +++++++++++++++++++++-
.../java/org/apache/linkis/udf/dao/UDFDao.java | 3 +
.../org/apache/linkis/udf/dao/UDFVersionDao.java | 3 +
.../java/org/apache/linkis/udf/dao/impl/UDFDao.xml | 21 ++++++
.../apache/linkis/udf/dao/impl/UDFVersionDao.xml | 7 ++
.../org/apache/linkis/udf/service/UDFService.java | 20 ++++-
.../linkis/udf/service/impl/UDFServiceImpl.java | 42 ++++++++++-
.../apache/linkis/udf/utils/UdfConfiguration.scala | 6 ++
8 files changed, 185 insertions(+), 5 deletions(-)
diff --git
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/api/UDFRestfulApi.java
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/api/UDFRestfulApi.java
index dc73007a2..81f24565d 100644
---
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/api/UDFRestfulApi.java
+++
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/api/UDFRestfulApi.java
@@ -25,6 +25,7 @@ import org.apache.linkis.udf.excepiton.UDFException;
import org.apache.linkis.udf.service.UDFService;
import org.apache.linkis.udf.service.UDFTreeService;
import org.apache.linkis.udf.utils.ConstantVar;
+import org.apache.linkis.udf.utils.UdfConfiguration;
import org.apache.linkis.udf.vo.*;
import org.apache.commons.collections.CollectionUtils;
@@ -217,9 +218,7 @@ public class UDFRestfulApi {
udfvo.setCreateUser(userName);
udfvo.setCreateTime(new Date());
udfvo.setUpdateTime(new Date());
- udfService.addUDF(udfvo, userName);
- message = Message.ok();
- // message.data("udf", udfvo);
+ message = Message.ok().data("udfId", udfService.addUDF(udfvo, userName));
} catch (Exception e) {
logger.error("Failed to add UDF: ", e);
message = Message.error(e.getMessage());
@@ -924,4 +923,87 @@ public class UDFRestfulApi {
}
return message;
}
+
+ /** get UDF info by nameList */
+ @ApiOperation(value = "getUdfList", notes = "get user directory", response =
Message.class)
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "nameList", required = true, dataType = "String",
value = "category"),
+ @ApiImplicitParam(
+ name = "createUser",
+ required = true,
+ dataType = "String",
+ value = "category"),
+ })
+ @RequestMapping(path = "/getUdfByNameList", method = RequestMethod.GET)
+ public Message getUdfList(
+ HttpServletRequest req,
+ @RequestParam("nameList") String nameList,
+ @RequestParam("createUser") String createUser) {
+ Message message = null;
+ try {
+ // String userName = ModuleUserUtils.getOperationUser(req,
"getUdfByNameList ");
+ String userName = "hadoop";
+ if (StringUtils.isEmpty(userName)) {
+ throw new UDFException("username is empty!");
+ }
+ if (StringUtils.isEmpty(nameList)) {
+ throw new UDFException("nameList is empty!");
+ }
+ if (!UdfConfiguration.nameRegexPattern().matcher(nameList).matches()) {
+ throw new UDFException("nameList is invalid!");
+ }
+ if (StringUtils.isEmpty(createUser)) {
+ throw new UDFException("creator is empty!");
+ }
+ List<String> collect =
Arrays.stream(nameList.split(",")).collect(Collectors.toList());
+ List<UDFAddVo> udfInfoList = udfService.getUdfByNameList(collect,
createUser);
+ message = Message.ok().data("infoList", udfInfoList);
+ } catch (Throwable e) {
+ logger.error("Failed to get user udfinfo : ", e);
+ message = Message.error(e.getMessage());
+ }
+ return message;
+ }
+
+ /** get version info by udfName && createUser */
+ @ApiOperation(value = "versionInfo", notes = "version list", response =
Message.class)
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "udfName", required = true, dataType = "String",
value = "udf name"),
+ @ApiImplicitParam(
+ name = "createUser",
+ required = true,
+ dataType = "String",
+ value = "create user")
+ })
+ @RequestMapping(path = "/versionInfo", method = RequestMethod.GET)
+ public Message versionInfo(
+ HttpServletRequest req,
+ @RequestParam("udfName") String udfName,
+ @RequestParam("createUser") String createUser) {
+ Message message = null;
+ try {
+ String userName = ModuleUserUtils.getOperationUser(req, "versionInfo ");
+ if (StringUtils.isEmpty(userName)) {
+ throw new UDFException("userName is empty!");
+ }
+ if (StringUtils.isEmpty(udfName)) {
+ throw new UDFException("udfName is empty!");
+ }
+ if (StringUtils.isEmpty(createUser)) {
+ throw new UDFException("createUser is empty!");
+ }
+ if (!UdfConfiguration.nameRegexPattern().matcher(udfName).matches()) {
+ throw new UDFException("udfName is invalid!");
+ }
+ if (!UdfConfiguration.nameRegexPattern().matcher(createUser).matches()) {
+ throw new UDFException("createUser is invalid!");
+ }
+ UDFVersionVo versionList = udfService.getUdfVersionInfo(udfName,
createUser);
+ message = Message.ok().data("versionInfo", versionList);
+ } catch (Throwable e) {
+ logger.error("Failed to get udf versionInfo: ", e);
+ message = Message.error(e.getMessage());
+ }
+ return message;
+ }
}
diff --git
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFDao.java
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFDao.java
index b94e42876..98028be80 100644
---
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFDao.java
+++
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFDao.java
@@ -132,4 +132,7 @@ public interface UDFDao {
List<UDFInfoVo> getLatesetPublishedUDF(
@Param("userName") String userName,
@Param("categoryCodes") Collection<Integer> categoryCodes);
+
+ List<UDFAddVo> getUdfInfoByNameList(
+ @Param("udfNameList") Collection<String> udfNameList,
@Param("createUser") String createUser);
}
diff --git
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFVersionDao.java
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFVersionDao.java
index 2c9d0a8e9..efb73e992 100644
---
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFVersionDao.java
+++
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFVersionDao.java
@@ -56,4 +56,7 @@ public interface UDFVersionDao {
@Param("newUser") String newUser);
void updateUDFVersion(UDFVersion udfVersion);
+
+ UDFVersionVo getUdfVersionInfoByName(
+ @Param("udfName") String udfName, @Param("createUser") String
createUser);
}
diff --git
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFDao.xml
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFDao.xml
index 081a2d108..17133345b 100644
---
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFDao.xml
+++
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFDao.xml
@@ -365,4 +365,25 @@
<select id="getSharedUDFIdsByUser" resultType="java.lang.Long">
select udf_id from linkis_ps_udf_shared_info where
user_name=#{userName}
</select>
+
+ <select id="getUdfInfoByNameList"
resultType="org.apache.linkis.udf.vo.UDFAddVo">
+ select
a.*,b.description,b.path,b.register_format,b.use_format,b.bml_resource_version
from(
+ select pu.*,put.name as directory
+ from linkis_ps_udf_baseinfo pu join linkis_ps_udf_tree put on
pu.tree_id=put.id
+ <where>
+ <if test="1 == 1">1 = 1</if>
+ <if test="createUser != null">and pu.create_user =
#{createUser}</if>
+ <if test="udfNameList != null">and pu.udf_name in
+ <foreach collection="udfNameList" open="(" close=")"
item="item" separator=",">
+ #{item}
+ </foreach>
+ </if>
+ </where>
+ ) a join
+ (select
udf_id,description,path,register_format,use_format,bml_resource_version
+ from linkis_ps_udf_version as puv1 where bml_resource_version =
(select max(puv2.bml_resource_version)
+ from linkis_ps_udf_version as puv2 where puv1.udf_id =puv2.udf_id)
+ ) b on a.id=b.udf_id
+ order by id desc
+ </select>
</mapper>
\ No newline at end of file
diff --git
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFVersionDao.xml
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFVersionDao.xml
index 7e8ab6d5e..71f1ad203 100644
---
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFVersionDao.xml
+++
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFVersionDao.xml
@@ -104,4 +104,11 @@
description=#{description,jdbcType=VARCHAR}
WHERE id = #{id,jdbcType=BIGINT}
</update>
+
+ <select id="getUdfVersionInfoByName"
resultType="org.apache.linkis.udf.vo.UDFVersionVo">
+ select
+ puv.*, is_expire, create_user
+ from linkis_ps_udf_baseinfo pu join linkis_ps_udf_version puv on
pu.id=puv.udf_id and pu.udf_name=#{udfName} and pu.create_user=#{createUser}
+ order by puv.bml_resource_version desc limit 1
+ </select>
</mapper>
\ No newline at end of file
diff --git
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/UDFService.java
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/UDFService.java
index 325d71522..5b25b744e 100644
---
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/UDFService.java
+++
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/UDFService.java
@@ -28,7 +28,7 @@ import com.github.pagehelper.PageInfo;
public interface UDFService {
- void addUDF(UDFAddVo udfInfo, String userName) throws Exception;
+ long addUDF(UDFAddVo udfInfo, String userName) throws Exception;
void updateUDF(UDFUpdateVo udfUpdateVo, String userName) throws Exception;
@@ -115,4 +115,22 @@ public interface UDFService {
List<String> getUserDirectory(String user, String category);
List<UDFInfoVo> getAllUDFSByUserName(String userName) throws UDFException;
+
+ /**
+ * * Get udf information according to udfnameList
+ *
+ * @param userNameList
+ * @param createUser
+ * @return
+ */
+ List<UDFAddVo> getUdfByNameList(List<String> userNameList, String
createUser);
+
+ /**
+ * * Get the udf version information according to udfname and creator
+ *
+ * @param udfName
+ * @param createUser
+ * @return
+ */
+ UDFVersionVo getUdfVersionInfo(String udfName, String createUser);
}
diff --git
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/impl/UDFServiceImpl.java
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/impl/UDFServiceImpl.java
index f4ad874fb..5446d9148 100644
---
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/impl/UDFServiceImpl.java
+++
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/impl/UDFServiceImpl.java
@@ -108,7 +108,7 @@ public class UDFServiceImpl implements UDFService {
@Override
@Transactional(rollbackFor = Exception.class)
- public void addUDF(UDFAddVo udfVo, String userName) throws Exception {
+ public long addUDF(UDFAddVo udfVo, String userName) throws Exception {
logger.info(userName + " add udfVo: " + udfVo.getUdfName());
// 锁同一用户
CommonLock commonLock = new CommonLock();
@@ -186,6 +186,7 @@ public class UDFServiceImpl implements UDFService {
addLoadInfo(udfInfo.getId(), userName);
}
logger.info("end for " + userName + " add udfVo: " + udfVo.getUdfName());
+ return udfInfo.getId();
} finally {
commonLockService.unlock(commonLock);
}
@@ -1048,4 +1049,43 @@ public class UDFServiceImpl implements UDFService {
udfDao.deleteLoadInfo(udfId, oldsharedUser);
}
}
+
+ @Override
+ public List<UDFAddVo> getUdfByNameList(List<String> udfNameList, String
creator) {
+ logger.info("begin to get managerPages.");
+ List<UDFAddVo> retList = new ArrayList<>();
+ retList = udfDao.getUdfInfoByNameList(udfNameList, creator);
+ retList.forEach(
+ udfInfo -> {
+ String createUser = udfInfo.getCreateUser();
+ boolean ismanager = isUDFManager(createUser);
+ List<Long> loadedUdf = udfDao.getLoadedUDFIds(createUser);
+ udfInfo.setLoad(loadedUdf.contains(udfInfo.getId()));
+ boolean canExpire = false;
+ if (Boolean.TRUE.equals(udfInfo.getShared())) {
+ long loadCount = udfDao.getUserLoadCountByUdfId(udfInfo.getId(),
createUser);
+ if (loadCount > 0) {
+ canExpire = true;
+ }
+ }
+ boolean finalCanExpire = canExpire;
+ udfInfo.setOperationStatus(
+ new HashMap<String, Boolean>() {
+ {
+ put("canUpdate", true);
+ put("canDelete", !finalCanExpire);
+ put("canExpire", finalCanExpire);
+ put("canShare", ismanager);
+ put("canPublish", ismanager &&
Boolean.TRUE.equals(udfInfo.getShared()));
+ put("canHandover", true);
+ }
+ });
+ });
+ return retList;
+ }
+
+ @Override
+ public UDFVersionVo getUdfVersionInfo(String udfName, String createUser) {
+ return udfVersionDao.getUdfVersionInfoByName(udfName, createUser);
+ }
}
diff --git
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/scala/org/apache/linkis/udf/utils/UdfConfiguration.scala
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/scala/org/apache/linkis/udf/utils/UdfConfiguration.scala
index d6da301f5..30275ed74 100644
---
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/scala/org/apache/linkis/udf/utils/UdfConfiguration.scala
+++
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/scala/org/apache/linkis/udf/utils/UdfConfiguration.scala
@@ -19,6 +19,8 @@ package org.apache.linkis.udf.utils
import org.apache.linkis.common.conf.CommonVars
+import java.util.regex.Pattern
+
object UdfConfiguration {
val UDF_HIVE_EXEC_PATH = CommonVars(
@@ -30,4 +32,8 @@ object UdfConfiguration {
val UDF_SHARE_PATH = CommonVars("wds.linkis.udf.share.path",
"/mnt/bdap/udf/")
val UDF_SHARE_PROXY_USER = CommonVars("wds.linkis.udf.share.proxy.user",
"hadoop")
+ val NAME_REGEX: String = "^[a-zA-Z\\-\\d_\\.=/,]+$"
+
+ val nameRegexPattern: Pattern = Pattern.compile(NAME_REGEX)
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]