Commit Graph

3163 Commits

Author SHA1 Message Date
BoYiZhang
d70d8a6054
[Feature-3222][datasource] Store password in ciphertext instead (#3330)
* fix bug

Delete invalid field: executorcores

Modify verification prompt

* fix bug

Delete invalid field: executorcores

Modify verification prompt

* fix bug

Delete invalid field: executorcores

Modify verification prompt

* dag  add close button

* reset last version

* reset last version

* dag add close buttion

dag add close buttion

* update  CLICK_SAVE_WORKFLOW_BUTTON  xpath

* updae CLICK_SAVE_WORKFLOW_BUTTON xpath

* updae CLICK_SAVE_WORKFLOW_BUTTON xpath

* updae CLICK_SAVE_WORKFLOW_BUTTON xpath

* Update CreateWorkflowLocator.java

modify submit workflow button

* Update CreateWorkflowLocator.java

* Update CreateWorkflowLocator.java

modify CLICK_ADD_BUTTON

* Update CreateWorkflowLocator.java

delete print

* Update CreateWorkflowLocator.java

1

* Update CreateWorkflowLocator.java

1

* Setting '-XX:+DisableExplicitGC ' causes netty memory leaks

in addition

update '- XX: largepagesizeinbytes = 128M' to '- XX: largepagesizeinbytes = 10M'

* Update dag.vue

* Update dag.vue

* Update dag.vue

* Update CreateWorkflowLocator.java

* Revert "Setting '-XX:+DisableExplicitGC ' causes netty memory leaks"

This reverts commit 3a2cba7a

* Setting '-XX:+DisableExplicitGC ' causes netty memory leaks

in addition

update '- XX: largepagesizeinbytes = 128M' to '- XX: largepagesizeinbytes = 10M'

* Store password in ciphertext instead

* Store password in ciphertext instead

* Store password in ciphertext instead

* Store password in ciphertext instead

* Store password in ciphertext instead

* update test unit

* add test unit

* add test unit

* update e2e test

* update unit test

* update unit test

Co-authored-by: dailidong <dailidong66@gmail.com>
Co-authored-by: xingchun-chen <55787491+xingchun-chen@users.noreply.github.com>
2020-08-01 14:28:12 +08:00
dailidong
6d903e266f
[Feature][server] add embeded zookeeper server in dolphinscheduler-daemon.sh (#3293)
* update README about DolphinScheduler

* Update issue templates

* update

* regularize api pom xml
update rpc maven compile to 1.8

* regularize api pom xml

* change commons.lang3.StringUtils to common.utils.StringUtils

* update pom.xml

* update

* correct equals method

* jasper-runtime is needed when api server start

* jasper-runtime jar is needed when api server start

* combine logback config of master/worker/alert/api server to one logback.xml

* remove tomcat runtime jar

* add UT

* add license

* remove jasper-runtime jar, not need anymore

* sovle jar conflict, remove servlet-api 2.5 jar

* remove servlet 2.5

* add embedded database h2 and update embedded zookeeper

* delete logs

* add license

* change log level to INFO

* simplify and optimize config

* add development state

* simplify common config

* add worker group config

* add worker group config

* add worker group config

* this command just for getting a quick experience,not recommended for production. this operation will start a standalone zookeeper server

* Merge remote-tracking branch 'upstream/dev' into dev

* add logback for zookeeper

* Update logback-zookeeper.xml

Co-authored-by: lidongdai <escheduler@outlook.com>
Co-authored-by: dailidong <dolphinschedule@gmail.com>
Co-authored-by: qiaozhanwei <qiaozhanwei@outlook.com>
2020-07-31 17:37:02 +08:00
xsbai
87eb7c8211
adds waterdrop plugin (#3073)
* add plugin waterdrop

* add plugin waterdrop

* add plugin waterdrop

* fix deploy mode error

* Update en_US.js

fix conflict

* Update en_US.js

fix conflict

* Update en_US.js

Add missing commas

* Update zh_CN.js

Add missing commas

* Update waterdrop.vue

Fix the no resource hint

* Update zh_CN.js

Add 'Please select the waterdrop resources'

* Update en_US.js

Add  'Please select the waterdrop resources'

* Update waterdrop.vue

fix bug when click the waterdrop node again, it still show the `client` mode in deploy mode

Co-authored-by: dailidong <dailidong66@gmail.com>
2020-07-30 23:20:59 +08:00
RedemptionC
0c5754c3f2
add feature : query top n success process instance order by running duration (#3315)
* add feature : query top n success process instance order by running duration

* add feature : add params check

* add feature : remove code smell

* add feature : remove code smell

* add feature : add param check

* add feature : add param check
improve handleEscape method in ParameterUtils.java

* top n : add  java doc and format code
2020-07-30 18:38:59 +08:00
zixi0825
5fe31546ba
[Fix][all] fix spell error (#3289)
* fix spell error

* test unit test

Co-authored-by: sunchaohe <sunzhaohe@linklogis.com>
2020-07-30 18:33:16 +08:00
zhuangchong
583a615519
[Improvement][install] The new shell script is used to view the server processes of nodes #3347 (#3348)
* dev 开发环境变量

* add status-all.sh ,used to view the server processes of nodes.

* update.

* update.

* update.

* add status-all.sh ,used to view the server processes of nodes.

Co-authored-by: unknown <zhuangchong-phq@sinosig.com>
2020-07-30 18:30:57 +08:00
chendapao
afd9139c3f
[Feature]use zk own del func (#3310)
* use zk own del func

* Update remove-zk-node.sh

Co-authored-by: dailidong <dailidong66@gmail.com>
2020-07-30 18:26:27 +08:00
Yichao Yang
d006bd3ba5
[Improvement][api] Refactor the transaction rollbackfor runtimeexception (#3313)
* [Improvement][api] Refactor the transaction rollbackfor runtimeexception

* Remove the unused import
2020-07-30 15:12:14 +08:00
Yichao Yang
d79af50809
[Fix-3077][ui] Fix the edit name duplicated verify (#3346) 2020-07-30 15:04:57 +08:00
LiemLin
f27c62a5db
workflow lineage (#2421)
* workflow lineage

* workflow lineage unit test

* stash

* add apache license

* Update .env

* code optimize

* add unit test

* add apache license

* add apache license

* optimized code

* add postgresql support and optimized code

* Update pom.xml

* Update en_US.js

* Update zh_CN.js

* remove mock code

* inport i18n

* Update pom.xml

* Delete .env

* add env file

Co-authored-by: linhaiqiang <haiqiang.lin@five-star.cn>
Co-authored-by: dailidong <dailidong66@gmail.com>
Co-authored-by: becarchal <yangbin_57@sina.com>
2020-07-30 13:32:29 +08:00
CalvinKirs
3a0d4da27e
[Test][server] Fix Test ContextConfiguration error. (#3304)
* [FIX_BUG]fix test error

* small change

* add test

* reformat

* fix test no qualifying bean
2020-07-30 13:28:27 +08:00
felix.wang
b555d0a086
[Improvement][common] HttpClient singleton mode #3332 (#3350)
* Optimize the httpclient

* Optimize the httpclient singleton

* Merge branch 'github-local/dev' into feature/httpClientsingleton

# Conflicts:
#	dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HttpUtils.java
#	dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HttpUtilsTest.java

* Merge branch 'github-local/dev' into feature/httpClientsingleton

# Conflicts:
#	dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HttpUtils.java
#	dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HttpUtilsTest.java

* Merge branch 'github-local/dev' into feature/httpClientsingleton

# Conflicts:
#	dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/HttpUtils.java
#	dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/HttpUtilsTest.java
2020-07-30 13:24:54 +08:00
Yichao Yang
a532d8ed69
[Fix-3338][ui] Fix the warning when user do not fill the node blank (#3349)
* [Fix-3338][ui] Fix the warning when user do not fill the node blank

* Update formModel.vue
2020-07-30 13:14:05 +08:00
zixi0825
78856fb08e
remove the duplicate function in MasterExecThread (#3329)
Co-authored-by: sunchaohe <sunzhaohe@linklogis.com>
2020-07-29 19:15:03 +08:00
Yichao Yang
afeeb34d2e
[Improvement][style] Add code import style automatic formatter (#3333) 2020-07-29 19:13:17 +08:00
felix.wang
e026d303ea
Optimize the httpclient (#3337) 2020-07-29 19:03:44 +08:00
谌启成
e2a117032d
[Fix-3295][api] Add default value for request RequestParam (#3341) 2020-07-29 19:01:53 +08:00
xingchun-chen
5f725aa28b
Merge pull request #3331 from lenboo/dev-complement
[FIX-1336] [master] serial complement data can have multiple process instances
2020-07-29 15:37:49 +08:00
lenboo
6c2e7d74d1 merge from dev 2020-07-28 19:02:39 +08:00
lenboo
82295eea52 fix bug#1336 set start/end time before complement the next process 2020-07-28 17:57:49 +08:00
bao liang
624f0aeab9
fix bug#1336 serial complement data can have multiple process instances (#3317)
Co-authored-by: lenboo <baoliang@analysys.com.cn>
2020-07-28 11:12:51 +08:00
lenboo
39182568b2 fix bug#1336 serial complement data can have multiple process instances 2020-07-27 15:43:08 +08:00
Yichao Yang
0577dc9780
[Test-3288][server] Fix github ci unit test oom (#3305)
* [Improvement] Test github action oom

* Optimize the test case performance

* Remove the unused import
2020-07-25 19:24:16 +08:00
shi-hailong
8d70c3b7c1
Update dolphinscheduler.conf (#3296)
/ui下的资源访问不应该发送到api-server
2020-07-24 17:09:58 +08:00
tswstarplanet
5b7efd2d33
[Feature-3134]Refactor to use a shared singleton Curator Zookeeper Client (#3244)
* [Feature-3134]Refactor to use a shared singleton Curator Zookeeper Client

* autowire CuratorZookeeperClient to ZookeeperOperator

* [Improvement] Add the issue specifications reference (#3221)

* log zookeeper address when the connect state change

* resume the operation of add connect state listener in MasterRegistry

Co-authored-by: Yichao Yang <1048262223@qq.com>
2020-07-23 11:02:30 +08:00
BoYiZhang
32e8a9d50c
[bugfix] Default JVM parameter bug (#3212)
* fix bug

Delete invalid field: executorcores

Modify verification prompt

* fix bug

Delete invalid field: executorcores

Modify verification prompt

* fix bug

Delete invalid field: executorcores

Modify verification prompt

* dag  add close button

* reset last version

* reset last version

* dag add close buttion

dag add close buttion

* update  CLICK_SAVE_WORKFLOW_BUTTON  xpath

* updae CLICK_SAVE_WORKFLOW_BUTTON xpath

* updae CLICK_SAVE_WORKFLOW_BUTTON xpath

* updae CLICK_SAVE_WORKFLOW_BUTTON xpath

* Update CreateWorkflowLocator.java

modify submit workflow button

* Update CreateWorkflowLocator.java

* Update CreateWorkflowLocator.java

modify CLICK_ADD_BUTTON

* Update CreateWorkflowLocator.java

delete print

* Update CreateWorkflowLocator.java

1

* Update CreateWorkflowLocator.java

1

* Setting '-XX:+DisableExplicitGC ' causes netty memory leaks

in addition

update '- XX: largepagesizeinbytes = 128M' to '- XX: largepagesizeinbytes = 10M'

* Update dag.vue

* Update dag.vue

* Update dag.vue

* Update CreateWorkflowLocator.java

* Revert "Setting '-XX:+DisableExplicitGC ' causes netty memory leaks"

This reverts commit 3a2cba7a

* Setting '-XX:+DisableExplicitGC ' causes netty memory leaks

in addition

update '- XX: largepagesizeinbytes = 128M' to '- XX: largepagesizeinbytes = 10M'

* Update dolphinscheduler-daemon.sh

Co-authored-by: dailidong <dailidong66@gmail.com>
Co-authored-by: xingchun-chen <55787491+xingchun-chen@users.noreply.github.com>
2020-07-23 10:59:51 +08:00
t1mon
07c8193bb5
[Feature-2930][api] Displays path and host on the instance log panel. #2930 (#3154)
* Optimize PropertyUtils instantiation.

* Fix info error.

* [Feature-2930][api] Displays path and host on the instance log panel. #2930

* [update] Add log-head in download log.

* [update] clear code smell.
2020-07-23 10:57:56 +08:00
xingchun-chen
1814e22bb3
Merge pull request #3272 from break60/dev
[bugFix][ui]Default assignment of delete condition judgment node
2020-07-22 16:47:24 +08:00
break60
338f33413e Default assignment of delete condition judgment node 2020-07-22 14:38:14 +08:00
xingchun-chen
aefb60a743
Merge pull request #3269 from break60/dev
[bugFix][ui]Fix the problem that the label of DAG creation task is not displayed,…
2020-07-22 13:57:37 +08:00
break60
339d494023 Fix the problem that the label of DAG creation task is not displayed, the workflow cannot be formatted after saving, and the drawer style is global 2020-07-22 13:37:10 +08:00
JinyLeeChina
0f6f138dc8
[BugFixed] issue #3258 (#3265)
* 'ExecutionStatus'

* '3258'

* Update WorkerGroupServiceTest.java

* Delete UserState.java

* Delete ResourceSyncService.java

* Delete core-site.xml

* Delete hdfs-site.xml

Co-authored-by: dailidong <dailidong66@gmail.com>
Co-authored-by: qiaozhanwei <qiaozhanwei@outlook.com>
2020-07-22 11:50:19 +08:00
wangyanphp
ed7ac40b83
[Fix-3236][DagHelper]getFlowNodeListPost/getFlowNodeListPre time complexity O(N^N) (#3249)
* getFlowNodeListPost/getFlowNodeListPre time complexity is O(N^N); This might solve the problem

Change-Id: I07e45c831c7df0089a94a003ca8a2c07e9746892

* getFlowNodeListPost/getFlowNodeListPre time complexity is O(N^N); This might solve the problem

Change-Id: I96f5a8c0ba18656de8981f513470cfdb6bc2f467

Co-authored-by: wangyan.61 <wangyan.61@bytedance.com>
2020-07-22 11:25:42 +08:00
LEI SHENG
6f2667bf1a
[Fix-3240][worker] Cannot find a (Map) Key deserializer for type (#3245)
* fix the bug #2923 (Hive JDBC connection parameter ignored) , the hive jdbc connection url ;

* fix the bug index out of bound and add some test case

* add the Licensed

* fix the checkstyle and import StringBuilder

* put HiveDataSourceTest.java to root pom maven-surefire-plugin to avoiding the sonar 0.0% Coverage.

* Update HiveDataSource.java

* fix the bug #3240  [worker] Cannot find a (Map) Key deserializer for type

* [DS-3245][fix]  change toString  use JsonString

- change the method of  UdfFunc.toString use JsonString

This closes #3245

* [DS-3245][fix]  change toString  use JsonString

- fix the junit test for full

This closes #3245

* [DS-3245][fix]  change toString  use JsonString

- fix the sonarcloud merge error, Swap these 2 arguments so they are in the correct order: expected value, actual value.

This closes #3245

* [DS-3245][fix]  move the Class UdfFuncDeserializer to UdfFunc.java

move the class UdfFuncDeserializer.java to UdfFunc.java

This closes #3245

* [DS-3245][fix]  move the Class UdfFuncDeserializer to UdfFunc.java

add blank line

This closes #3245

* [DS-3245][fix]  add the unit test of UdfFunc

add the unit test of UdfFunc.java

This closes #3245

* [DS-3245][fix]  add the unit test of UdfFunc

remove the UdfFuncTest.java from maven-surefire-plugin list

This closes #3245

* [DS-3245][fix]  add the unit test of UdfFunc

add the UdfFuncTest to the root pom maven-surefire-plugin

This closes #3245

Co-authored-by: dailidong <dailidong66@gmail.com>
2020-07-21 18:54:07 +08:00
xingchun-chen
252abbdaed
Merge pull request #3261 from break60/dev
[bugFix][ui] When modifying the dag, if the DAG is not saved, it cannot be formatted
2020-07-21 18:02:47 +08:00
break60
1c16c4f968 When modifying the dag, if the DAG is not saved, it cannot be formatted 2020-07-21 17:42:58 +08:00
xingchun-chen
d1878ac1d7
Merge pull request #3259 from break60/dev
[bugfix #3045][ui]Delete the pid of the master and worker processes
2020-07-21 17:29:01 +08:00
break60
52fe78a83f Delete the pid of the master and worker processes 2020-07-21 13:53:37 +08:00
xingchun-chen
e03f1e2dbe
Merge pull request #3255 from break60/dev
[bugFix][ui]Click Cancel, the node data is restored to the original data
2020-07-21 13:51:50 +08:00
break60
edf1115f16 fix 2020-07-21 10:22:20 +08:00
break60
8d66fa171e Note e2e timing 2020-07-21 09:47:08 +08:00
break60
cca7860765 Click Cancel, the node data is restored to the original data 2020-07-21 09:29:57 +08:00
break60
854e241b45 Merge branch 'dev' of https://github.com/apache/incubator-dolphinscheduler into dev 2020-07-21 09:23:07 +08:00
break60
a03d5483a8
[Feature-3223][ui]Click DAG connection to add label function (#3224)
* Click DAG connection to add label function
2020-07-21 09:21:53 +08:00
break60
d9b7839ef4 fix 2020-07-20 18:15:50 +08:00
break60
217e7f6e1e Merge branch 'dev' of https://github.com/apache/incubator-dolphinscheduler into dev 2020-07-20 08:51:59 +08:00
Yichao Yang
8ba3620710
[Improvement] Add the issue specifications reference (#3221) 2020-07-20 07:24:12 +08:00
break60
a3a7e22cc2 fix 2020-07-17 17:52:57 +08:00
break60
353379d420 Merge branch 'dev' of https://github.com/apache/incubator-dolphinscheduler into dev 2020-07-17 17:52:27 +08:00
xingchun-chen
1b54c76ed8
[test-2995][e2e]add rerun workflow and optimize testCase (#3220)
* add LoginTest license

* Delete useless packages

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* e2e add project and workflow case

* Update worker_group_id to worker_group in init.sql

* Update worker_group_id to worker_group in init.sql

* Update worker_group_id to worker_group

* Increase dataX environment variable, sslTrust default value

* modify dataX environment variable

* update e2e chrome version

* add alert manage testcase and Optimize test case execution order

* add e2e to create and to  edit  queue

* update e2e chrome version

* add e2e token testcase

* add e2e token testcase

* add e2e to run workflow testcase

* add e2e timing testcase

* add e2e timing testcase

* add e2e timing testcase

* add e2e timing testcase

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/AlertManagePage.java
#	e2e/src/test/java/org/apache/dolphinscheduler/page/security/QueueManagePage.java

* edit user

* edit user

* edit user

* edit user

* edit user

* Update TimingLocator.java

* modify ci log

* Update ci_e2e.yml

modify ci logs

* Update ci_e2e.yml

modify ci logs

* Update ci_e2e.yml

modify ci logs

* Update ci_e2e.yml

* Update ci_e2e.yml

modify ci logs

* Update ci_e2e.yml

modify ci logs

* Update ci_e2e.yml

modify ci logs

* Update ci_e2e.yml

modify ci logs

* Update ci_e2e.yml

modify artifact version

* Update ci_e2e.yml

* Update ci_e2e.yml

modify /var/lib/docker/volumes  permissions

* Update ci_e2e.yml

modify ci logs

* Update ci_e2e.yml

Modify log file permissions

* Update ci_e2e.yml

modify logs

* Update ci_e2e.yml

modify logs

* Update ci_e2e.yml

modify logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* Update ci_e2e.yml

modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* Update ci_e2e.yml

modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify ci logs

* modify tenant

* modify alert wait time

* modify queue wait time

* modify alert wait time

* modify alert wait time

* modify alert wait time

* modify alert wait time

* modify alert wait time

* modify alert wait time

* modify button xpath

* modify queue xpath

* Ignore edit user

* modify alert wait time

* print delete user log

* modify the xpath of delete user button

* modify timing wait time

* add process instance

* add process instance

* modify timing wait time

* modify rerun assert

* modify alert wait time

* Optimize test cases
 

Co-authored-by: chenxingchun <438044805@qq.com>
Co-authored-by: dailidong <dailidong66@gmail.com>
2020-07-17 17:04:28 +08:00