Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
DolphinScheduler
提交
7b857931
DolphinScheduler
项目概览
apache
/
DolphinScheduler
上一次同步 1 年多
通知
706
Star
9572
Fork
3514
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
DolphinScheduler
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
7b857931
编写于
8月 24, 2021
作者:
权妖
提交者:
GitHub
8月 24, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[FIX-#6007]Wrong complement date (#6026)
* [FIX-#6007]Wrong complement date * [style]Wrong complement date
上级
75f15df3
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
122 addition
and
43 deletion
+122
-43
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/entity/TaskExecutionContext.java
.../dolphinscheduler/server/entity/TaskExecutionContext.java
+14
-0
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
...phinscheduler/server/worker/runner/TaskExecuteThread.java
+22
-1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTask.java
.../dolphinscheduler/server/worker/task/datax/DataxTask.java
+8
-0
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
.../dolphinscheduler/server/worker/task/flink/FlinkTask.java
+11
-4
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java
...he/dolphinscheduler/server/worker/task/http/HttpTask.java
+8
-0
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
...dolphinscheduler/server/worker/task/mr/MapReduceTask.java
+14
-7
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/python/PythonTask.java
...olphinscheduler/server/worker/task/python/PythonTask.java
+11
-4
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/shell/ShellTask.java
.../dolphinscheduler/server/worker/task/shell/ShellTask.java
+7
-20
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
.../dolphinscheduler/server/worker/task/spark/SparkTask.java
+10
-5
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java
...ache/dolphinscheduler/server/worker/task/sql/SqlTask.java
+7
-1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sqoop/SqoopTask.java
.../dolphinscheduler/server/worker/task/sqoop/SqoopTask.java
+10
-1
未找到文件。
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/entity/TaskExecutionContext.java
浏览文件 @
7b857931
...
...
@@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.server.entity;
import
org.apache.dolphinscheduler.common.enums.ExecutionStatus
;
import
org.apache.dolphinscheduler.common.enums.TaskTimeoutStrategy
;
import
org.apache.dolphinscheduler.common.process.Property
;
import
org.apache.dolphinscheduler.common.utils.JSONUtils
;
import
org.apache.dolphinscheduler.remote.command.Command
;
import
org.apache.dolphinscheduler.remote.command.TaskExecuteRequestCommand
;
...
...
@@ -221,6 +222,19 @@ public class TaskExecutionContext implements Serializable {
*/
private
String
varPool
;
/**
* business param
*/
private
Map
<
String
,
Property
>
paramsMap
;
public
Map
<
String
,
Property
>
getParamsMap
()
{
return
paramsMap
;
}
public
void
setParamsMap
(
Map
<
String
,
Property
>
paramsMap
)
{
this
.
paramsMap
=
paramsMap
;
}
/**
* procedure TaskExecutionContext
*/
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskExecuteThread.java
浏览文件 @
7b857931
...
...
@@ -17,6 +17,10 @@
package
org.apache.dolphinscheduler.server.worker.runner
;
import
static
java
.
util
.
Calendar
.
DAY_OF_MONTH
;
import
org.apache.dolphinscheduler.common.Constants
;
import
org.apache.dolphinscheduler.common.enums.CommandType
;
import
org.apache.dolphinscheduler.common.enums.Event
;
import
org.apache.dolphinscheduler.common.enums.ExecutionStatus
;
import
org.apache.dolphinscheduler.common.enums.TaskType
;
...
...
@@ -153,6 +157,7 @@ public class TaskExecuteThread implements Runnable, Delayed {
task
=
TaskManager
.
newTask
(
taskExecutionContext
,
taskLogger
,
alertClientService
);
// task init
task
.
init
();
preBuildBusinessParams
();
//init varPool
task
.
getParameters
().
setVarPool
(
taskExecutionContext
.
getVarPool
());
// task handle
...
...
@@ -182,6 +187,23 @@ public class TaskExecuteThread implements Runnable, Delayed {
}
}
private
void
preBuildBusinessParams
()
{
Map
<
String
,
Property
>
paramsMap
=
new
HashMap
<>();
// replace variable TIME with $[YYYYmmddd...] in shell file when history run job and batch complement job
if
(
taskExecutionContext
.
getScheduleTime
()
!=
null
)
{
Date
date
=
taskExecutionContext
.
getScheduleTime
();
if
(
CommandType
.
COMPLEMENT_DATA
.
getCode
()
==
taskExecutionContext
.
getCmdTypeIfComplement
())
{
date
=
DateUtils
.
add
(
taskExecutionContext
.
getScheduleTime
(),
DAY_OF_MONTH
,
1
);
}
String
dateTime
=
DateUtils
.
format
(
date
,
Constants
.
PARAMETER_FORMAT_TIME
);
Property
p
=
new
Property
();
p
.
setValue
(
dateTime
);
p
.
setProp
(
Constants
.
PARAMETER_DATETIME
);
paramsMap
.
put
(
Constants
.
PARAMETER_DATETIME
,
p
);
}
taskExecutionContext
.
setParamsMap
(
paramsMap
);
}
/**
* when task finish, clear execute path.
*/
...
...
@@ -227,7 +249,6 @@ public class TaskExecuteThread implements Runnable, Delayed {
return
globalParamsMap
;
}
/**
* kill task
*/
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/datax/DataxTask.java
浏览文件 @
7b857931
...
...
@@ -39,6 +39,7 @@ import org.apache.dolphinscheduler.server.worker.task.AbstractTask;
import
org.apache.dolphinscheduler.server.worker.task.CommandExecuteResult
;
import
org.apache.dolphinscheduler.server.worker.task.ShellCommandExecutor
;
import
org.apache.commons.collections.MapUtils
;
import
org.apache.commons.io.FileUtils
;
import
java.io.File
;
...
...
@@ -56,6 +57,7 @@ import java.sql.ResultSet;
import
java.sql.ResultSetMetaData
;
import
java.sql.SQLException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
...
...
@@ -155,6 +157,12 @@ public class DataxTask extends AbstractTask {
// replace placeholder,and combine local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
taskExecutionContext
,
getParameters
());
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
taskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
taskExecutionContext
.
getParamsMap
());
}
// run datax procesDataSourceService.s
String
jsonFilePath
=
buildDataxJsonFile
(
paramsMap
);
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
浏览文件 @
7b857931
...
...
@@ -30,7 +30,10 @@ import org.apache.dolphinscheduler.server.utils.FlinkArgsUtils;
import
org.apache.dolphinscheduler.server.utils.ParamUtils
;
import
org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask
;
import
org.apache.commons.collections.MapUtils
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -81,12 +84,16 @@ public class FlinkTask extends AbstractYarnTask {
// combining local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
taskExecutionContext
,
getParameters
());
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
taskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
taskExecutionContext
.
getParamsMap
());
}
logger
.
info
(
"param Map : {}"
,
paramsMap
);
if
(
paramsMap
!=
null
)
{
args
=
ParameterUtils
.
convertParameterPlaceholders
(
args
,
ParamUtils
.
convert
(
paramsMap
));
logger
.
info
(
"param args : {}"
,
args
);
}
args
=
ParameterUtils
.
convertParameterPlaceholders
(
args
,
ParamUtils
.
convert
(
paramsMap
));
logger
.
info
(
"param args : {}"
,
args
);
flinkParameters
.
setMainArgs
(
args
);
}
}
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java
浏览文件 @
7b857931
...
...
@@ -33,6 +33,7 @@ import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
import
org.apache.dolphinscheduler.server.utils.ParamUtils
;
import
org.apache.dolphinscheduler.server.worker.task.AbstractTask
;
import
org.apache.commons.collections.MapUtils
;
import
org.apache.commons.io.Charsets
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.ParseException
;
...
...
@@ -49,6 +50,7 @@ import org.apache.http.util.EntityUtils;
import
java.io.IOException
;
import
java.nio.charset.StandardCharsets
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -138,6 +140,12 @@ public class HttpTask extends AbstractTask {
// replace placeholder,and combine local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
taskExecutionContext
,
getParameters
());
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
taskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
taskExecutionContext
.
getParamsMap
());
}
List
<
HttpProperty
>
httpPropertyList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
httpParameters
.
getHttpParams
()))
{
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
浏览文件 @
7b857931
...
...
@@ -31,7 +31,10 @@ import org.apache.dolphinscheduler.server.utils.MapReduceArgsUtils;
import
org.apache.dolphinscheduler.server.utils.ParamUtils
;
import
org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask
;
import
org.apache.commons.collections.MapUtils
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -85,14 +88,18 @@ public class MapReduceTask extends AbstractYarnTask {
// replace placeholder,and combine local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
taskExecutionContext
,
getParameters
());
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
taskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
taskExecutionContext
.
getParamsMap
());
}
if
(
paramsMap
!=
null
)
{
String
args
=
ParameterUtils
.
convertParameterPlaceholders
(
mapreduceParameters
.
getMainArgs
(),
ParamUtils
.
convert
(
paramsMap
));
mapreduceParameters
.
setMainArgs
(
args
);
if
(
mapreduceParameters
.
getProgramType
()
!=
null
&&
mapreduceParameters
.
getProgramType
()
==
ProgramType
.
PYTHON
)
{
String
others
=
ParameterUtils
.
convertParameterPlaceholders
(
mapreduceParameters
.
getOthers
(),
ParamUtils
.
convert
(
paramsMap
));
mapreduceParameters
.
setOthers
(
others
);
}
String
args
=
ParameterUtils
.
convertParameterPlaceholders
(
mapreduceParameters
.
getMainArgs
(),
ParamUtils
.
convert
(
paramsMap
));
mapreduceParameters
.
setMainArgs
(
args
);
if
(
mapreduceParameters
.
getProgramType
()
!=
null
&&
mapreduceParameters
.
getProgramType
()
==
ProgramType
.
PYTHON
)
{
String
others
=
ParameterUtils
.
convertParameterPlaceholders
(
mapreduceParameters
.
getOthers
(),
ParamUtils
.
convert
(
paramsMap
));
mapreduceParameters
.
setOthers
(
others
);
}
}
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/python/PythonTask.java
浏览文件 @
7b857931
...
...
@@ -30,6 +30,9 @@ import org.apache.dolphinscheduler.server.worker.task.AbstractTask;
import
org.apache.dolphinscheduler.server.worker.task.CommandExecuteResult
;
import
org.apache.dolphinscheduler.server.worker.task.PythonCommandExecutor
;
import
org.apache.commons.collections.MapUtils
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.slf4j.Logger
;
...
...
@@ -118,6 +121,12 @@ public class PythonTask extends AbstractTask {
// combining local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
taskExecutionContext
,
getParameters
());
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
taskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
taskExecutionContext
.
getParamsMap
());
}
try
{
rawPythonScript
=
VarPoolUtils
.
convertPythonScriptPlaceholders
(
rawPythonScript
);
...
...
@@ -125,10 +134,8 @@ public class PythonTask extends AbstractTask {
catch
(
StringIndexOutOfBoundsException
e
)
{
logger
.
error
(
"setShareVar field format error, raw python script : {}"
,
rawPythonScript
);
}
if
(
paramsMap
!=
null
)
{
rawPythonScript
=
ParameterUtils
.
convertParameterPlaceholders
(
rawPythonScript
,
ParamUtils
.
convert
(
paramsMap
));
}
rawPythonScript
=
ParameterUtils
.
convertParameterPlaceholders
(
rawPythonScript
,
ParamUtils
.
convert
(
paramsMap
));
logger
.
info
(
"raw python script : {}"
,
pythonParameters
.
getRawScript
());
logger
.
info
(
"task dir : {}"
,
taskDir
);
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/shell/ShellTask.java
浏览文件 @
7b857931
...
...
@@ -17,14 +17,10 @@
package
org.apache.dolphinscheduler.server.worker.task.shell
;
import
static
java
.
util
.
Calendar
.
DAY_OF_MONTH
;
import
org.apache.dolphinscheduler.common.Constants
;
import
org.apache.dolphinscheduler.common.enums.CommandType
;
import
org.apache.dolphinscheduler.common.process.Property
;
import
org.apache.dolphinscheduler.common.task.AbstractParameters
;
import
org.apache.dolphinscheduler.common.task.shell.ShellParameters
;
import
org.apache.dolphinscheduler.common.utils.DateUtils
;
import
org.apache.dolphinscheduler.common.utils.JSONUtils
;
import
org.apache.dolphinscheduler.common.utils.OSUtils
;
import
org.apache.dolphinscheduler.common.utils.ParameterUtils
;
...
...
@@ -34,6 +30,8 @@ import org.apache.dolphinscheduler.server.worker.task.AbstractTask;
import
org.apache.dolphinscheduler.server.worker.task.CommandExecuteResult
;
import
org.apache.dolphinscheduler.server.worker.task.ShellCommandExecutor
;
import
org.apache.commons.collections.MapUtils
;
import
java.io.File
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
...
...
@@ -41,7 +39,6 @@ import java.nio.file.StandardOpenOption;
import
java.nio.file.attribute.FileAttribute
;
import
java.nio.file.attribute.PosixFilePermission
;
import
java.nio.file.attribute.PosixFilePermissions
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
...
...
@@ -164,21 +161,11 @@ public class ShellTask extends AbstractTask {
private
String
parseScript
(
String
script
)
{
// combining local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
taskExecutionContext
,
getParameters
());
// replace variable TIME with $[YYYYmmddd...] in shell file when history run job and batch complement job
if
(
taskExecutionContext
.
getScheduleTime
()
!=
null
)
{
if
(
paramsMap
==
null
)
{
paramsMap
=
new
HashMap
<>();
}
Date
date
=
taskExecutionContext
.
getScheduleTime
();
if
(
CommandType
.
COMPLEMENT_DATA
.
getCode
()
==
taskExecutionContext
.
getCmdTypeIfComplement
())
{
date
=
DateUtils
.
add
(
taskExecutionContext
.
getScheduleTime
(),
DAY_OF_MONTH
,
1
);
}
String
dateTime
=
DateUtils
.
format
(
date
,
Constants
.
PARAMETER_FORMAT_TIME
);
Property
p
=
new
Property
();
p
.
setValue
(
dateTime
);
p
.
setProp
(
Constants
.
PARAMETER_DATETIME
);
paramsMap
.
put
(
Constants
.
PARAMETER_DATETIME
,
p
);
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
taskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
taskExecutionContext
.
getParamsMap
());
}
return
ParameterUtils
.
convertParameterPlaceholders
(
script
,
ParamUtils
.
convert
(
paramsMap
));
}
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
浏览文件 @
7b857931
...
...
@@ -30,7 +30,10 @@ import org.apache.dolphinscheduler.server.utils.ParamUtils;
import
org.apache.dolphinscheduler.server.utils.SparkArgsUtils
;
import
org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask
;
import
org.apache.commons.collections.MapUtils
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -110,12 +113,14 @@ public class SparkTask extends AbstractYarnTask {
// replace placeholder, and combining local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
taskExecutionContext
,
getParameters
());
String
command
=
null
;
if
(
null
!=
paramsMap
)
{
command
=
ParameterUtils
.
convertParameterPlaceholders
(
String
.
join
(
" "
,
args
),
ParamUtils
.
convert
(
paramsMap
));
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
taskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
taskExecutionContext
.
getParamsMap
());
}
String
command
=
ParameterUtils
.
convertParameterPlaceholders
(
String
.
join
(
" "
,
args
),
ParamUtils
.
convert
(
paramsMap
));
logger
.
info
(
"spark task command: {}"
,
command
);
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sql/SqlTask.java
浏览文件 @
7b857931
...
...
@@ -169,9 +169,15 @@ public class SqlTask extends AbstractTask {
// combining local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
taskExecutionContext
,
getParameters
());
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
taskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
taskExecutionContext
.
getParamsMap
());
}
// spell SQL according to the final user-defined variable
if
(
paramsMap
==
null
)
{
if
(
MapUtils
.
isEmpty
(
paramsMap
)
)
{
sqlBuilder
.
append
(
sql
);
return
new
SqlBinds
(
sqlBuilder
.
toString
(),
sqlParamsMap
);
}
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/sqoop/SqoopTask.java
浏览文件 @
7b857931
...
...
@@ -27,6 +27,9 @@ import org.apache.dolphinscheduler.server.utils.ParamUtils;
import
org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask
;
import
org.apache.dolphinscheduler.server.worker.task.sqoop.generator.SqoopJobGenerator
;
import
org.apache.commons.collections.MapUtils
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.slf4j.Logger
;
...
...
@@ -74,8 +77,14 @@ public class SqoopTask extends AbstractYarnTask {
// combining local and global parameters
Map
<
String
,
Property
>
paramsMap
=
ParamUtils
.
convert
(
sqoopTaskExecutionContext
,
getParameters
());
if
(
MapUtils
.
isEmpty
(
paramsMap
))
{
paramsMap
=
new
HashMap
<>();
}
if
(
MapUtils
.
isNotEmpty
(
sqoopTaskExecutionContext
.
getParamsMap
()))
{
paramsMap
.
putAll
(
sqoopTaskExecutionContext
.
getParamsMap
());
}
if
(
paramsMap
!=
null
)
{
if
(
MapUtils
.
isNotEmpty
(
paramsMap
)
)
{
String
resultScripts
=
ParameterUtils
.
convertParameterPlaceholders
(
script
,
ParamUtils
.
convert
(
paramsMap
));
logger
.
info
(
"sqoop script: {}"
,
resultScripts
);
return
resultScripts
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录