Unverified Commit 421d0219 authored by lgcareer's avatar lgcareer Committed by GitHub
Browse files

Merge pull request #471 from lgcareer/branch-1.0.2

add verify resource file is exists in hdfs
parents 7b058f55 33be5ff9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -195,9 +195,9 @@ public class ResourcesController extends BaseController{
    ) {
        try {
            logger.info("login user {}, verfiy resource alias: {},resource type: {}",
                    loginUser.getUserName(), alias);
                    loginUser.getUserName(), alias,type);

            return resourceService.verifyResourceName(alias, type);
            return resourceService.verifyResourceName(alias,type,loginUser);
        } catch (Exception e) {
            logger.error(VERIFY_RESOURCE_BY_NAME_AND_TYPE_ERROR.getMsg(), e);
            return error(Status.VERIFY_RESOURCE_BY_NAME_AND_TYPE_ERROR.getCode(), Status.VERIFY_RESOURCE_BY_NAME_AND_TYPE_ERROR.getMsg());
+1 −0
Original line number Diff line number Diff line
@@ -174,6 +174,7 @@ public enum Status {
    RESOURCE_SUFFIX_FORBID_CHANGE(20008, "resource suffix not allowed to be modified"),
    UDF_RESOURCE_SUFFIX_NOT_JAR(20009, "UDF resource suffix name must be jar"),
    HDFS_COPY_FAIL(20009, "hdfs copy {0} -> {1} fail"),
    RESOURCE_FILE_EXIST(20010, "resource file {0} already exists in hdfs,please delete it or change name!"),



+52 −0
Original line number Diff line number Diff line
@@ -420,6 +420,41 @@ public class ResourcesService extends BaseService {
        return result;
    }

    /**
     * verify resource by name and type
     * @param name
     * @param type
     * @param loginUser
     * @return
     */
    public Result verifyResourceName(String name, ResourceType type,User loginUser) {
        Result result = new Result();
        putMsg(result, Status.SUCCESS);
        Resource resource = resourcesMapper.queryResourceByNameAndType(name, type.ordinal());
        if (resource != null) {
            logger.error("resource type:{} name:{} has exist, can't create again.", type, name);
            putMsg(result, Status.RESOURCE_EXIST);
        } else {
            // query tenant
            String tenantCode = tenantMapper.queryById(loginUser.getTenantId()).getTenantCode();

            try {
                String hdfsFilename = getHdfsFileName(type,tenantCode,name);
                if(HadoopUtils.getInstance().exists(hdfsFilename)){
                    logger.error("resource type:{} name:{} has exist in hdfs {}, can't create again.", type, name,hdfsFilename);
                    putMsg(result, Status.RESOURCE_FILE_EXIST,hdfsFilename);
                }

            } catch (Exception e) {
                logger.error(e.getMessage(),e);
                putMsg(result,Status.HDFS_OPERATION_ERROR);
            }
        }


        return result;
    }

    /**
     * verify resource by name and type
     *
@@ -815,6 +850,23 @@ public class ResourcesService extends BaseService {
        return hdfsFileName;
    }

    /**
     * get hdfs file name
     *
     * @param resourceType
     * @param tenantCode
     * @param hdfsFileName
     * @return
     */
    private String getHdfsFileName(ResourceType resourceType, String tenantCode, String hdfsFileName) {
        if (resourceType.equals(ResourceType.FILE)) {
            hdfsFileName = HadoopUtils.getHdfsFilename(tenantCode, hdfsFileName);
        } else if (resourceType.equals(ResourceType.UDF)) {
            hdfsFileName = HadoopUtils.getHdfsUdfFilename(tenantCode, hdfsFileName);
        }
        return hdfsFileName;
    }

    /**
     * get authorized resource list
     *
+2 −16
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package cn.escheduler.server.worker.task.sql;

import cn.escheduler.alert.utils.MailUtils;
import cn.escheduler.api.enums.Status;
import cn.escheduler.common.Constants;
import cn.escheduler.common.enums.DbType;
import cn.escheduler.common.enums.ShowType;
@@ -197,7 +196,7 @@ public class SqlTask extends AbstractTask {
        }

        // special characters need to be escaped, ${} needs to be escaped
        String rgex = "'?\\$\\{(.*?)\\}'?";
        String rgex = "['\"]*\\$\\{(.*?)\\}['\"]*";
        setSqlParamsMap(sql,rgex,sqlParamsMap,paramsMap);

        // replace the ${} of the SQL statement with the Placeholder
@@ -328,6 +327,7 @@ public class SqlTask extends AbstractTask {
                ParameterUtils.setInParameter(key,stmt,prop.getType(),prop.getValue());
            }
        }
        logger.info("prepare statement replace sql:{}",stmt.toString());
        return stmt;
    }

@@ -417,19 +417,5 @@ public class SqlTask extends AbstractTask {
            logPrint.append(sqlParamsMap.get(i).getValue()+"("+sqlParamsMap.get(i).getType()+")");
        }
        logger.info(logPrint.toString());

        //direct print style
        Pattern pattern = Pattern.compile(rgex);
        Matcher m = pattern.matcher(content);
        int index = 1;
        StringBuffer sb = new StringBuffer("replaced sql , direct:");
        while (m.find()) {

            m.appendReplacement(sb, sqlParamsMap.get(index).getValue());

            index ++;
        }
        m.appendTail(sb);
        logger.info(sb.toString());
    }
}