Skip to content

Commit 488df91

Browse files
committed
fix: handle conflict
2 parents e6afbce + 4cbcd6b commit 488df91

File tree

16 files changed

+350
-52
lines changed

16 files changed

+350
-52
lines changed

linkis-computation-governance/linkis-entrance/src/main/scala/org/apache/linkis/entrance/utils/SafeUtils.scala

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,23 @@ object SafeUtils extends Logging {
6262
"import\\s+os\\.getresuid|" +
6363
"import\\s+os\\.getresgid"
6464

65-
private val ANNOTATION_PATTERN = "#.*$"
65+
private val ANNOTATION_PATTERN = "^\\s*#.*$"
6666

6767
private val SAFETY_PASS = "SAFETY_PASS"
6868

6969
def isCodeSafe(code: String): Boolean = {
7070
var isSafe = true
71+
// 在匹配高危代码前,先移除注释
72+
val commentPattern = Pattern.compile(ANNOTATION_PATTERN, Pattern.MULTILINE)
73+
val mather = commentPattern.matcher(code)
74+
val cleanCode = mather.replaceAll("")
7175
val code_pattern =
7276
Pattern.compile(DANGEROUS_CODE_PATTERN, Pattern.DOTALL | Pattern.CASE_INSENSITIVE)
73-
val code_matcher = code_pattern.matcher(code)
77+
val code_matcher = code_pattern.matcher(cleanCode)
7478
while (code_matcher.find) {
7579
isSafe = false
76-
val annotation_pattern = Pattern.compile(ANNOTATION_PATTERN, Pattern.MULTILINE)
77-
val annotation_matcher = annotation_pattern.matcher(code)
78-
while (annotation_matcher.find)
79-
if (annotation_matcher.group.contains(SAFETY_PASS)) isSafe = true
80+
while (mather.find)
81+
if (mather.group.contains(SAFETY_PASS)) isSafe = true
8082
}
8183
isSafe
8284
}

linkis-engineconn-plugins/jdbc/src/main/scala/org/apache/linkis/manager/engineplugin/jdbc/executor/JDBCEngineConnExecutor.scala

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -310,26 +310,25 @@ class JDBCEngineConnExecutor(override val outputPrintLimit: Int, val id: Int)
310310
JDBCEngineConnConstant.JDBC_ENGINE_RUN_TIME_DS_PARAM_USERNAME,
311311
""
312312
)
313+
val proxyUser: String =
314+
globalConfig.getOrDefault(JDBCEngineConnConstant.JDBC_PROXY_USER, execSqlUser)
313315
logger.info(
314-
s"use conn param get dataSourceInfo: executeUser:${execSqlUser} ip:${connHost}, port:${connPort}, dsType:${connDsType}, connUser: ${userName}"
316+
s"use conn param get dataSourceInfo: executeUser:${execSqlUser} ip:${connHost}, port:${connPort}, dsType:${connDsType}, createUser:${execSqlUser} connUser: ${proxyUser}"
315317
)
316318
if (
317319
StringUtils.isBlank(connHost) || StringUtils
318-
.isBlank(connPort) || StringUtils.isBlank(connDsType) || StringUtils.isBlank(userName)
320+
.isBlank(connPort) || StringUtils.isBlank(connDsType) || StringUtils.isBlank(
321+
execSqlUser
322+
) || StringUtils.isBlank(proxyUser)
319323
) {
320324
throw new JDBCGetDatasourceInfoException(
321325
JDBC_GET_DATASOURCEINFO_ERROR.getErrorCode,
322326
JDBC_GET_DATASOURCEINFO_ERROR.getErrorDesc + " 缺失部分连接参数"
323327
)
324328
}
325-
if (!execSqlUser.equals(userName)) {
326-
throw new JDBCGetDatasourceInfoException(
327-
JDBC_GET_DATASOURCEINFO_ERROR.getErrorCode,
328-
JDBC_GET_DATASOURCEINFO_ERROR.getErrorDesc + " 执行用户和连接用户不匹配"
329-
)
330-
}
331329
dataSourceInfo = JDBCMultiDatasourceParser.queryDatasourceInfoByConnParams(
332-
userName,
330+
execSqlUser,
331+
proxyUser,
333332
connHost,
334333
connPort,
335334
connDsType

linkis-engineconn-plugins/jdbc/src/main/scala/org/apache/linkis/manager/engineplugin/jdbc/executor/JDBCMultiDatasourceParser.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,15 +293,17 @@ object JDBCMultiDatasourceParser extends Logging {
293293
}
294294

295295
def queryDatasourceInfoByConnParams(
296-
userName: String,
296+
createUser: String,
297+
proxyUser: String,
297298
ip: String,
298299
port: String,
299300
datasourceTypeName: String
300301
): util.Map[String, String] = {
301302
val dataSourceClient = new LinkisDataSourceRemoteClient()
302303
val action: GetInfoPublishedByUserIpPortAction = GetInfoPublishedByUserIpPortAction.builder
303304
.setDatasourceTypeName(datasourceTypeName)
304-
.setUser(userName)
305+
.setUser(createUser)
306+
.setDatasourceUser(proxyUser)
305307
.setIp(ip)
306308
.setPort(port)
307309
.build // ignore parameter 'system'

linkis-orchestrator/linkis-orchestrator-core/src/main/scala/org/apache/linkis/orchestrator/strategy/async/AsyncExecTaskRunnerImpl.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ class AsyncExecTaskRunnerImpl(override val task: ExecTask)
7575
case succeed: SucceedTaskResponse =>
7676
logger.info(s"Succeed to execute ExecTask(${task.getIDInfo})")
7777
transientStatus(ExecutionNodeStatus.Succeed)
78+
case failedTaskResponse: DefaultFailedTaskResponse =>
79+
logger.info(s"DefaultFailed to execute ExecTask(${task.getIDInfo})")
80+
failedTaskResponse.errorIndex =
81+
task.params.getOrElse("execute.error.code.index", "-1").toInt
82+
transientStatus(ExecutionNodeStatus.Failed)
7883
case failedTaskResponse: FailedTaskResponse =>
7984
logger.info(s"Failed to execute ExecTask(${task.getIDInfo})")
8085
transientStatus(ExecutionNodeStatus.Failed)
@@ -84,13 +89,11 @@ class AsyncExecTaskRunnerImpl(override val task: ExecTask)
8489
}
8590
} { case e: Throwable =>
8691
logger.error(s"Failed to execute task ${task.getIDInfo}", e)
87-
val response: DefaultFailedTaskResponse = new DefaultFailedTaskResponse(
92+
this.taskResponse = new DefaultFailedTaskResponse(
8893
e.getMessage,
8994
OrchestratorErrorCodeSummary.EXECUTION_ERROR_CODE,
9095
e
9196
)
92-
response.errorIndex = task.params.getOrElse("execute.error.code.index", "-1").toInt
93-
this.taskResponse = response
9497
transientStatus(ExecutionNodeStatus.Failed)
9598
}
9699
OrchestratorLoggerUtils.removeJobIdMDC()

linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,5 +122,5 @@ void updateVersionId(
122122
@Param("dataSourceId") Long datasourceId, @Param("versionId") long versionId);
123123

124124
List<DataSource> selectDatasourcesByType(
125-
@Param("datasourceTypeName") String datasourceTypeName, @Param("userName") String userName);
125+
@Param("datasourceTypeName") String datasourceTypeName, @Param("owner") String owner);
126126
}

linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceCoreRestfulApi.java

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -221,17 +221,27 @@ public Message insertJsonInfo(@RequestBody DataSource dataSource, HttpServletReq
221221
})
222222
@RequestMapping(value = "/info/json/create", method = RequestMethod.POST)
223223
public Message insertJson(@RequestBody DataSource dataSource, HttpServletRequest request) {
224-
String userName = ModuleUserUtils.getOperationUser(request, "insertJsonCreate");
225-
if (!DatasourceConf.INSERT_DATAESOURCE_LIMIT
226-
.getValue()
227-
.contains(dataSource.getDataSourceTypeName())) {
228-
return Message.error("Data source creation only supports starrocks");
224+
ModuleUserUtils.getOperationUser(request, "insertJsonCreate");
225+
String owner = dataSource.getCreateUser();
226+
String dataSourceTypeName = dataSource.getDataSourceTypeName();
227+
// 参数校验
228+
if (StringUtils.isBlank(owner)) {
229+
return Message.error("Parameter createUser cannot be empty (参数 createUser 不能为空)");
229230
}
231+
if (StringUtils.isBlank(dataSourceTypeName)) {
232+
return Message.error(
233+
"Parameter dataSourceTypeName cannot be empty (参数 dataSourceTypeName 不能为空)");
234+
}
235+
// 限制仅支持starrocks
236+
if (!DatasourceConf.INSERT_DATAESOURCE_LIMIT.getValue().contains(dataSourceTypeName)) {
237+
return Message.error("DataSource Create Only Support starrocks");
238+
}
239+
// 参数调整
230240
dataSource.setDataSourceName(
231241
String.join(
232242
"_",
233-
dataSource.getDataSourceTypeName(),
234-
userName,
243+
dataSourceTypeName,
244+
owner,
235245
DateTypeUtils.dateFormatSecondLocal().get().format(new Date())));
236246
if (dataSourceInfoService.existDataSource(dataSource.getDataSourceName())) {
237247
return Message.error(
@@ -241,8 +251,11 @@ public Message insertJson(@RequestBody DataSource dataSource, HttpServletRequest
241251
+ dataSource.getDataSourceName()
242252
+ " 已经存在]");
243253
}
254+
DataSourceType dataSourceType = getDatasoutceTypeID(dataSourceTypeName, request);
255+
if (dataSourceType != null)
256+
dataSource.setDataSourceTypeId(Long.valueOf(dataSourceType.getId()));
244257
// 创建数据源
245-
insertDatasource(dataSource, userName);
258+
insertDatasource(dataSource, owner);
246259
Map<String, Object> stringHashMap = new HashMap<>();
247260
stringHashMap.put("connectParams", dataSource.getConnectParams());
248261
stringHashMap.put("comment", "初始化版本");
@@ -277,22 +290,22 @@ public Message insertJson(@RequestBody DataSource dataSource, HttpServletRequest
277290
required = true,
278291
dataType = "String",
279292
example = "1650426189000"),
280-
@ApiImplicitParam(name = "createUser", required = true, dataType = "String", example = "hive"),
293+
@ApiImplicitParam(name = "createUser", required = true, dataType = "String"),
281294
@ApiImplicitParam(name = "dataSourceDesc", required = true, dataType = "String"),
282295
@ApiImplicitParam(name = "dataSourceName", required = true, dataType = "String"),
283296
@ApiImplicitParam(name = "dataSourceTypeId", required = true, dataType = "String"),
284297
@ApiImplicitParam(name = "labels", required = true, dataType = "String"),
285298
@ApiImplicitParam(name = "connectParams", required = true, dataType = "List"),
286-
@ApiImplicitParam(name = "host", dataType = "String", example = "127.0.0.1"),
299+
@ApiImplicitParam(name = "host", dataType = "String"),
287300
@ApiImplicitParam(name = "password", dataType = "String"),
288-
@ApiImplicitParam(name = "port", dataType = "String", example = "9523"),
301+
@ApiImplicitParam(name = "port", dataType = "String"),
289302
@ApiImplicitParam(name = "subSystem", dataType = "String"),
290303
@ApiImplicitParam(name = "username", dataType = "String"),
291-
@ApiImplicitParam(name = "expire", dataType = "boolean", example = "false"),
292-
@ApiImplicitParam(name = "file", dataType = "String", example = "adn"),
293-
@ApiImplicitParam(name = "modifyTime", dataType = "String", example = "1657611440000"),
294-
@ApiImplicitParam(name = "modifyUser", dataType = "String", example = "hadoop"),
295-
@ApiImplicitParam(name = "versionId", dataType = "String", example = "18")
304+
@ApiImplicitParam(name = "expire", dataType = "boolean"),
305+
@ApiImplicitParam(name = "file", dataType = "String"),
306+
@ApiImplicitParam(name = "modifyTime", dataType = "String"),
307+
@ApiImplicitParam(name = "modifyUser", dataType = "String"),
308+
@ApiImplicitParam(name = "versionId", dataType = "String")
296309
})
297310
@ApiOperationSupport(ignoreParameters = {"dataSource"})
298311
@RequestMapping(value = "/info/{dataSourceId}/json", method = RequestMethod.PUT)
@@ -542,29 +555,33 @@ public Message getPublishedInfoByDataSourceName(
542555
@ApiImplicitParams({
543556
@ApiImplicitParam(name = "datasourceTypeName", required = true, dataType = "String"),
544557
@ApiImplicitParam(name = "ip", required = true, dataType = "String"),
558+
@ApiImplicitParam(name = "datasourceUser", required = true, dataType = "String"),
545559
@ApiImplicitParam(name = "port", required = true, dataType = "String")
546560
})
547561
@RequestMapping(
548-
value = "/publishedInfo/{datasourceTypeName}/{ip}/{port}",
562+
value = "/publishedInfo/{datasourceTypeName}/{owner}/{ip}/{port}",
549563
method = RequestMethod.GET)
550564
public Message getPublishedInfoByIpPort(
551565
@PathVariable("datasourceTypeName") String datasourceTypeName,
552566
@PathVariable("ip") String ip,
553567
@PathVariable("port") String port,
568+
@PathVariable("owner") String owner,
569+
@PathVariable("datasourceUser") String datasourceUser,
554570
HttpServletRequest request)
555571
throws UnsupportedEncodingException {
556572
return RestfulApiHelper.doAndResponse(
557573
() -> {
558-
String userName =
559-
ModuleUserUtils.getOperationUser(
560-
request, "getPublishedInfoByIpPort ip:" + ip + ",port:" + port);
574+
ModuleUserUtils.getOperationUser(
575+
request, "getPublishedInfoByIpPort ip:" + ip + ",port:" + port);
576+
if (StringUtils.isBlank(owner)) {
577+
return Message.error("Parameter owner cannot be empty (参数 owner 不能为空)");
578+
}
561579
DataSource dataSource =
562-
dataSourceInfoService.getDataSourcePublishInfo(
563-
datasourceTypeName, ip, port, userName);
580+
dataSourceInfoService.getDataSourcePublishInfo(datasourceTypeName, ip, port, owner, datasourceUser);
564581
if (dataSource == null) {
565582
return Message.error("No Exists The DataSource [不存在该数据源]");
566583
}
567-
if (!AuthContext.hasPermission(dataSource, userName)) {
584+
if (!AuthContext.hasPermission(dataSource, owner)) {
568585
return Message.error("Don't have query permission for data source [没有数据源的查询权限]");
569586
}
570587
List<DataSourceParamKeyDefinition> keyDefinitionList =

linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceInfoService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,12 @@ public interface DataSourceInfoService {
7878
* @param datasourceTypeName
7979
* @param ip
8080
* @param port
81-
* @param userName
81+
* @param owner
82+
* @param datasourceUser
8283
* @return
8384
*/
8485
DataSource getDataSourcePublishInfo(
85-
String datasourceTypeName, String ip, String port, String userName);
86+
String datasourceTypeName, String ip, String port, String owner, String datasourceUser);
8687

8788
/**
8889
* Get data source

linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceInfoServiceImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,10 @@ public DataSource getDataSourcePublishInfo(String dataSourceName) {
126126

127127
@Override
128128
public DataSource getDataSourcePublishInfo(
129-
String datasourceTypeName, String ip, String port, String userName) {
129+
String datasourceTypeName, String ip, String port, String owner, String datasourceUser) {
130130
DataSource dataSource = null;
131131
List<DataSource> dataSourceList =
132-
dataSourceDao.selectDatasourcesByType(datasourceTypeName, userName);
132+
dataSourceDao.selectDatasourcesByType(datasourceTypeName, owner);
133133
if (CollectionUtils.isNotEmpty(dataSourceList)) {
134134
for (DataSource dataSourceInfo : dataSourceList) {
135135
if (null == dataSourceInfo.getPublishedVersionId()) {
@@ -138,7 +138,7 @@ public DataSource getDataSourcePublishInfo(
138138
String parameter =
139139
dataSourceVersionDao.selectOneVersion(
140140
dataSourceInfo.getId(), dataSourceInfo.getPublishedVersionId());
141-
if (parameter.contains(ip) && parameter.contains(port)) {
141+
if (parameter.contains(ip) && parameter.contains(port)&& parameter.contains(datasourceUser)) {
142142
dataSource = dataSourceInfo;
143143
dataSource.setParameter(parameter);
144144
}

linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/resources/mapper/common/DataSouceMapper.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@
253253
<![CDATA[ FROM `linkis_ps_dm_datasource_type` t
254254
INNER JOIN `linkis_ps_dm_datasource` d ON t.`id` = d.`datasource_type_id`]]>
255255
<where>
256-
t.`name` = #{datasourceTypeName} and d.`create_user` = #{userName}
256+
t.`name` = #{datasourceTypeName} and d.`create_user` = #{owner}
257257
</where>
258258
</select>
259259

linkis-public-enhancements/linkis-pes-client/src/main/java/org/apache/linkis/datasource/client/errorcode/DatasourceClientErrorCodeSummary.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public enum DatasourceClientErrorCodeSummary implements LinkisErrorCode {
3030
SYSTEM_NEEDED(31000, "system is needed(系统为空)!"),
3131
IP_NEEDED(31000, "ip is needed(ip为空)!"),
3232
PORT_NEEDED(31000, "port is needed(port为空)!"),
33+
OWNER_NEEDED(31000, "owner is needed(owner为空)!"),
3334
DATASOURCE_NEEDED(31000, "datasourceTypeName is needed(datasourceTypeName为空)!"),
3435
CANNOT_SOURCE(
3536
31000, "Cannot encode the name of data source:{0} for request(无法对请求的数据源名称进行编码:{0})"),

0 commit comments

Comments
 (0)