You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/07/04 16:18:37 UTC
[shardingsphere-elasticjob-lite] branch master updated: Replace
JobSettings to YamlJobConfiguration #866 (#939)
This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob-lite.git
The following commit(s) were added to refs/heads/master by this push:
new 5def759 Replace JobSettings to YamlJobConfiguration #866 (#939)
5def759 is described below
commit 5def759c6e23e24e7ddf973dda6cf6955fb09355
Author: Haitao Wang <dr...@sina.com>
AuthorDate: Sun Jul 5 00:18:29 2020 +0800
Replace JobSettings to YamlJobConfiguration #866 (#939)
---
.../console/controller/JobConfigController.java | 22 ++--
.../lite/console/service/JobAPIService.java | 4 +-
.../console/service/impl/JobAPIServiceImpl.java | 6 +-
.../resources/console/js/status/job/job_config.js | 18 ++-
.../console/js/status/job/jobs_status_overview.js | 4 +-
.../lite/lifecycle/api/JobAPIFactory.java | 6 +-
.../api/{JobSettingsAPI.java => JobConfigAPI.java} | 26 ++--
.../lite/lifecycle/domain/JobSettings.java | 96 ---------------
.../internal/settings/JobConfigAPIImpl.java | 57 +++++++++
.../internal/settings/JobSettingsAPIImpl.java | 86 -------------
.../lite/lifecycle/api/JobAPIFactoryTest.java | 4 +-
.../internal/settings/JobConfigAPIImplTest.java | 133 +++++++++++++++++++++
.../internal/settings/JobSettingsAPIImplTest.java | 131 --------------------
13 files changed, 243 insertions(+), 350 deletions(-)
diff --git a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java
index 855cc03..eaa7ead 100644
--- a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java
+++ b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.elasticjob.lite.console.controller;
import org.apache.shardingsphere.elasticjob.lite.console.service.JobAPIService;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobSettings;
+import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@@ -45,33 +45,33 @@ public final class JobConfigController {
}
/**
- * Get job settings.
+ * Get job configuration.
*
* @param jobName job name
- * @return job settings
+ * @return job configuration
*/
@GetMapping(value = "/{jobName}", produces = MediaType.APPLICATION_JSON)
- public JobSettings getJobSettings(@PathVariable("jobName") final String jobName) {
- return jobAPIService.getJobSettingsAPI().getJobSettings(jobName);
+ public YamlJobConfiguration getJobConfig(@PathVariable("jobName") final String jobName) {
+ return jobAPIService.getJobConfigAPI().getJobConfig(jobName);
}
/**
- * Update job settings.
+ * Update job configuration.
*
- * @param jobSettings job settings
+ * @param yamlJobConfiguration job configuration
*/
@PutMapping(consumes = MediaType.APPLICATION_JSON)
- public void updateJobSettings(@RequestBody final JobSettings jobSettings) {
- jobAPIService.getJobSettingsAPI().updateJobSettings(jobSettings);
+ public void updateJobConfig(@RequestBody final YamlJobConfiguration yamlJobConfiguration) {
+ jobAPIService.getJobConfigAPI().updateJobConfig(yamlJobConfiguration);
}
/**
- * Remove job settings.
+ * Remove job configuration.
*
* @param jobName job name
*/
@DeleteMapping("/{jobName}")
public void removeJob(@PathVariable("jobName") final String jobName) {
- jobAPIService.getJobSettingsAPI().removeJobSettings(jobName);
+ jobAPIService.getJobConfigAPI().removeJobConfig(jobName);
}
}
diff --git a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java
index c071f2e..29c4e7c 100644
--- a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java
+++ b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.elasticjob.lite.console.service;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobOperateAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobSettingsAPI;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigAPI;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobStatisticsAPI;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ServerStatisticsAPI;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ShardingOperateAPI;
@@ -31,7 +31,7 @@ public interface JobAPIService {
*
* @return job settings API
*/
- JobSettingsAPI getJobSettingsAPI();
+ JobConfigAPI getJobConfigAPI();
/**
* Job operate API.
diff --git a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java
index 4a02c77..466a151 100644
--- a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java
+++ b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java
@@ -22,7 +22,7 @@ import org.apache.shardingsphere.elasticjob.lite.console.service.JobAPIService;
import org.apache.shardingsphere.elasticjob.lite.console.util.SessionRegistryCenterConfiguration;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobAPIFactory;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobOperateAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobSettingsAPI;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigAPI;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobStatisticsAPI;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ServerStatisticsAPI;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ShardingOperateAPI;
@@ -36,9 +36,9 @@ import org.springframework.stereotype.Service;
public final class JobAPIServiceImpl implements JobAPIService {
@Override
- public JobSettingsAPI getJobSettingsAPI() {
+ public JobConfigAPI getJobConfigAPI() {
RegistryCenterConfiguration regCenterConfig = SessionRegistryCenterConfiguration.getRegistryCenterConfiguration();
- return JobAPIFactory.createJobSettingsAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
+ return JobAPIFactory.createJobConfigAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
}
@Override
diff --git a/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js b/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
index 5360182..a2fcf05 100644
--- a/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
+++ b/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
@@ -68,7 +68,23 @@ function bindSubmitJobSettingsForm() {
var jobErrorHandler = $("#job-error-handler").val();
var description = $("#description").val();
var reconcileIntervalMinutes = $("#reconcile-interval-minutes").val();
- var postJson = {jobName: jobName, shardingTotalCount: shardingTotalCount, jobParameter: jobParameter, cron: cron, streamingProcess: streamingProcess, maxTimeDiffSeconds: maxTimeDiffSeconds, monitorExecution: monitorExecution, failover: failover, misfire: misfire, shardingItemParameters: shardingItemParameters, jobShardingStrategyType: jobShardingStrategyType, jobExecutorServiceHandler: jobExecutorServiceHandler, jobErrorHandler: jobErrorHandler, description: description, scri [...]
+ var postJson = {
+ jobName: jobName,
+ shardingTotalCount: shardingTotalCount,
+ jobParameter: jobParameter,
+ cron: cron,
+ shardingItemParameters: shardingItemParameters,
+ maxTimeDiffSeconds: maxTimeDiffSeconds,
+ monitorExecution: monitorExecution,
+ failover: failover,
+ misfire: misfire,
+ reconcileIntervalMinutes: reconcileIntervalMinutes,
+ jobShardingStrategyType: jobShardingStrategyType,
+ jobExecutorServiceHandler: jobExecutorServiceHandler,
+ jobErrorHandler: jobErrorHandler,
+ description: description,
+ props: {'streaming.process': streamingProcess, 'script.command.line': scriptCommandLine}
+ };
var jobParams = getJobParams();
if (jobParams.monitorExecution !== monitorExecution || jobParams.failover !== failover || jobParams.misfire !== misfire) {
showUpdateConfirmModal();
diff --git a/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js b/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
index 32aa66c..6b838ff 100644
--- a/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
+++ b/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
@@ -235,8 +235,8 @@ function renderJob(data) {
$("#job-error-handler").attr("value", data.jobErrorHandlerType);
$("#reconcile-interval-minutes").attr("value", data.reconcileIntervalMinutes);
$("#description").text(data.description);
- $("#streaming-process").attr("checked", data.streamingProcess);
+ $("#streaming-process").attr("checked", data.props['streaming.process'] === 'true');
$("#streaming-process-group").show();
- $("#script-command-line").attr("value", data.scriptCommandLine);
+ $("#script-command-line").attr("value", data.props['script.command.line']);
$("#script-commandLine-group").show();
}
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactory.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactory.java
index 8da3970..743b5a5 100644
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactory.java
+++ b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactory.java
@@ -22,7 +22,7 @@ import lombok.NoArgsConstructor;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.operate.JobOperateAPIImpl;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.operate.ShardingOperateAPIImpl;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.reg.RegistryCenterFactory;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings.JobSettingsAPIImpl;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings.JobConfigAPIImpl;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.statistics.JobStatisticsAPIImpl;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.statistics.ServerStatisticsAPIImpl;
import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.statistics.ShardingStatisticsAPIImpl;
@@ -41,8 +41,8 @@ public final class JobAPIFactory {
* @param digest registry center digest
* @return job settings API
*/
- public static JobSettingsAPI createJobSettingsAPI(final String connectString, final String namespace, final String digest) {
- return new JobSettingsAPIImpl(RegistryCenterFactory.createCoordinatorRegistryCenter(connectString, namespace, digest));
+ public static JobConfigAPI createJobConfigAPI(final String connectString, final String namespace, final String digest) {
+ return new JobConfigAPIImpl(RegistryCenterFactory.createCoordinatorRegistryCenter(connectString, namespace, digest));
}
/**
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobSettingsAPI.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobConfigAPI.java
similarity index 68%
rename from elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobSettingsAPI.java
rename to elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobConfigAPI.java
index 5a72e95..89b285d 100644
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobSettingsAPI.java
+++ b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobConfigAPI.java
@@ -17,32 +17,32 @@
package org.apache.shardingsphere.elasticjob.lite.lifecycle.api;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobSettings;
+import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
/**
* Job settings API.
*/
-public interface JobSettingsAPI {
-
+public interface JobConfigAPI {
+
/**
- * get job settings.
+ * get job configuration.
*
* @param jobName job name
- * @return job settings
+ * @return job configuration
*/
- JobSettings getJobSettings(String jobName);
-
+ YamlJobConfiguration getJobConfig(String jobName);
+
/**
- * Update job settings.
+ * Update job configuration.
*
- * @param jobSettings job settings
+ * @param yamlJobConfiguration job configuration
*/
- void updateJobSettings(JobSettings jobSettings);
-
+ void updateJobConfig(YamlJobConfiguration yamlJobConfiguration);
+
/**
- * Remove job settings.
+ * Remove job configuration.
*
* @param jobName job name
*/
- void removeJobSettings(String jobName);
+ void removeJobConfig(String jobName);
}
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java
deleted file mode 100644
index 93813d0..0000000
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.lifecycle.domain;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.DataflowJobExecutor;
-import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.ScriptJobExecutor;
-import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
-
-import java.io.Serializable;
-
-/**
- * Job settings.
- */
-@Getter
-@Setter
-public final class JobSettings implements Serializable {
-
- private static final long serialVersionUID = -6532210090618686688L;
-
- private String jobName;
-
- private String cron;
-
- private int shardingTotalCount;
-
- private String shardingItemParameters;
-
- private String jobParameter;
-
- private boolean monitorExecution;
-
- private boolean failover;
-
- private boolean misfire;
-
- private int maxTimeDiffSeconds;
-
- private int reconcileIntervalMinutes;
-
- private String jobShardingStrategyType;
-
- private String jobExecutorServiceHandlerType;
-
- private String jobErrorHandlerType;
-
- private String description;
-
- private boolean streamingProcess;
-
- private String scriptCommandLine;
-
- /**
- * To YAML job configuration.
- *
- * @return YAML job configuration
- */
- public YamlJobConfiguration toYamlJobConfiguration() {
- YamlJobConfiguration result = new YamlJobConfiguration();
- result.setJobName(jobName);
- result.setCron(cron);
- result.setShardingTotalCount(shardingTotalCount);
- result.setShardingItemParameters(shardingItemParameters);
- result.setJobParameter(jobParameter);
- result.setMonitorExecution(monitorExecution);
- result.setFailover(failover);
- result.setMisfire(misfire);
- result.setMaxTimeDiffSeconds(maxTimeDiffSeconds);
- result.setReconcileIntervalMinutes(reconcileIntervalMinutes);
- result.setJobShardingStrategyType(jobShardingStrategyType);
- result.setJobExecutorServiceHandlerType(jobExecutorServiceHandlerType);
- result.setJobErrorHandlerType(jobErrorHandlerType);
- result.setDescription(description);
- result.getProps().setProperty(DataflowJobExecutor.STREAM_PROCESS_KEY, Boolean.valueOf(streamingProcess).toString());
- if (null != scriptCommandLine) {
- result.getProps().setProperty(ScriptJobExecutor.SCRIPT_KEY, scriptCommandLine);
- }
- return result;
- }
-}
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImpl.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImpl.java
new file mode 100644
index 0000000..931ed4c
--- /dev/null
+++ b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
+import org.apache.shardingsphere.elasticjob.lite.internal.storage.JobNodePath;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigAPI;
+import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
+import org.apache.shardingsphere.elasticjob.lite.util.yaml.YamlEngine;
+
+/**
+ * Job Configuration API implementation class.
+ */
+@RequiredArgsConstructor
+public final class JobConfigAPIImpl implements JobConfigAPI {
+
+ private final CoordinatorRegistryCenter regCenter;
+
+ @Override
+ public YamlJobConfiguration getJobConfig(final String jobName) {
+ JobNodePath jobNodePath = new JobNodePath(jobName);
+ YamlJobConfiguration result = YamlEngine.unmarshal(regCenter.get(jobNodePath.getConfigNodePath()), YamlJobConfiguration.class);
+ return result;
+ }
+
+ @Override
+ public void updateJobConfig(final YamlJobConfiguration yamlJobConfiguration) {
+ Preconditions.checkArgument(!Strings.isNullOrEmpty(yamlJobConfiguration.getJobName()), "jobName can not be empty.");
+ Preconditions.checkArgument(!Strings.isNullOrEmpty(yamlJobConfiguration.getCron()), "cron can not be empty.");
+ Preconditions.checkArgument(yamlJobConfiguration.getShardingTotalCount() > 0, "shardingTotalCount should larger than zero.");
+ JobNodePath jobNodePath = new JobNodePath(yamlJobConfiguration.getJobName());
+ regCenter.update(jobNodePath.getConfigNodePath(), YamlEngine.marshal(yamlJobConfiguration));
+ }
+
+ @Override
+ public void removeJobConfig(final String jobName) {
+ regCenter.remove("/" + jobName);
+ }
+}
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java
deleted file mode 100644
index c277979..0000000
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.elasticjob.lite.api.job.config.JobConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.DataflowJobExecutor;
-import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.ScriptJobExecutor;
-import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.internal.storage.JobNodePath;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobSettingsAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobSettings;
-import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
-import org.apache.shardingsphere.elasticjob.lite.util.yaml.YamlEngine;
-
-/**
- * Job settings API implementation class.
- */
-@RequiredArgsConstructor
-public final class JobSettingsAPIImpl implements JobSettingsAPI {
-
- private final CoordinatorRegistryCenter regCenter;
-
- @Override
- public JobSettings getJobSettings(final String jobName) {
- JobSettings result = new JobSettings();
- JobNodePath jobNodePath = new JobNodePath(jobName);
- JobConfiguration jobConfig = YamlEngine.unmarshal(regCenter.get(jobNodePath.getConfigNodePath()), YamlJobConfiguration.class).toJobConfiguration();
- buildSimpleJobSettings(jobName, result, jobConfig);
- if (jobConfig.getProps().containsKey(DataflowJobExecutor.STREAM_PROCESS_KEY)) {
- result.setStreamingProcess(Boolean.parseBoolean(jobConfig.getProps().get(DataflowJobExecutor.STREAM_PROCESS_KEY).toString()));
- }
- if (jobConfig.getProps().containsKey(ScriptJobExecutor.SCRIPT_KEY)) {
- result.setScriptCommandLine(jobConfig.getProps().getProperty(ScriptJobExecutor.SCRIPT_KEY));
- }
- return result;
- }
-
- private void buildSimpleJobSettings(final String jobName, final JobSettings jobSettings, final JobConfiguration jobConfig) {
- jobSettings.setJobName(jobName);
- jobSettings.setShardingTotalCount(jobConfig.getShardingTotalCount());
- jobSettings.setCron(jobConfig.getCron());
- jobSettings.setShardingItemParameters(jobConfig.getShardingItemParameters());
- jobSettings.setJobParameter(jobConfig.getJobParameter());
- jobSettings.setMonitorExecution(jobConfig.isMonitorExecution());
- jobSettings.setMaxTimeDiffSeconds(jobConfig.getMaxTimeDiffSeconds());
- jobSettings.setFailover(jobConfig.isFailover());
- jobSettings.setMisfire(jobConfig.isMisfire());
- jobSettings.setJobShardingStrategyType(jobConfig.getJobShardingStrategyType());
- jobSettings.setJobExecutorServiceHandlerType(jobConfig.getJobExecutorServiceHandlerType());
- jobSettings.setJobErrorHandlerType(jobConfig.getJobErrorHandlerType());
- jobSettings.setReconcileIntervalMinutes(jobConfig.getReconcileIntervalMinutes());
- jobSettings.setDescription(jobConfig.getDescription());
- }
-
- @Override
- public void updateJobSettings(final JobSettings jobSettings) {
- Preconditions.checkArgument(!Strings.isNullOrEmpty(jobSettings.getJobName()), "jobName can not be empty.");
- Preconditions.checkArgument(!Strings.isNullOrEmpty(jobSettings.getCron()), "cron can not be empty.");
- Preconditions.checkArgument(jobSettings.getShardingTotalCount() > 0, "shardingTotalCount should larger than zero.");
- JobNodePath jobNodePath = new JobNodePath(jobSettings.getJobName());
- regCenter.update(jobNodePath.getConfigNodePath(), YamlEngine.marshal(jobSettings.toYamlJobConfiguration()));
- }
-
- @Override
- public void removeJobSettings(final String jobName) {
- regCenter.remove("/" + jobName);
- }
-}
diff --git a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactoryTest.java b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactoryTest.java
index aec080c..ed7b95a 100644
--- a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactoryTest.java
+++ b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactoryTest.java
@@ -26,8 +26,8 @@ import static org.junit.Assert.assertThat;
public final class JobAPIFactoryTest extends AbstractEmbedZookeeperBaseTest {
@Test
- public void assertCreateJobSettingsAPI() {
- assertThat(JobAPIFactory.createJobSettingsAPI(getConnectionString(), "namespace", null), instanceOf(JobSettingsAPI.class));
+ public void assertCreateJobConfigAPI() {
+ assertThat(JobAPIFactory.createJobConfigAPI(getConnectionString(), "namespace", null), instanceOf(JobConfigAPI.class));
}
@Test
diff --git a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImplTest.java b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImplTest.java
new file mode 100644
index 0000000..c6d7dc3
--- /dev/null
+++ b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImplTest.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings;
+
+import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.DataflowJobExecutor;
+import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.ScriptJobExecutor;
+import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigAPI;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.fixture.LifecycleYamlConstants;
+import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class JobConfigAPIImplTest {
+
+ private JobConfigAPI jobConfigAPI;
+
+ @Mock
+ private CoordinatorRegistryCenter regCenter;
+
+ @Before
+ public void setUp() {
+ jobConfigAPI = new JobConfigAPIImpl(regCenter);
+ }
+
+ @Test
+ public void assertGetDataflowJobConfig() {
+ when(regCenter.get("/test_job/config")).thenReturn(LifecycleYamlConstants.getDataflowJobYaml());
+ YamlJobConfiguration actual = jobConfigAPI.getJobConfig("test_job");
+ assertJobConfig(actual);
+ assertThat(actual.getProps().getProperty(DataflowJobExecutor.STREAM_PROCESS_KEY), is("true"));
+ verify(regCenter).get("/test_job/config");
+ }
+
+ @Test
+ public void assertGetScriptJobConfig() {
+ when(regCenter.get("/test_job/config")).thenReturn(LifecycleYamlConstants.getScriptJobYaml());
+ YamlJobConfiguration actual = jobConfigAPI.getJobConfig("test_job");
+ assertJobConfig(actual);
+ assertThat(actual.getProps().getProperty(ScriptJobExecutor.SCRIPT_KEY), is("echo"));
+ verify(regCenter).get("/test_job/config");
+ }
+
+ private void assertJobConfig(final YamlJobConfiguration yamlJobConfiguration) {
+ assertThat(yamlJobConfiguration.getJobName(), is("test_job"));
+ assertThat(yamlJobConfiguration.getShardingTotalCount(), is(3));
+ assertThat(yamlJobConfiguration.getCron(), is("0/1 * * * * ?"));
+ assertNull(yamlJobConfiguration.getShardingItemParameters());
+ assertThat(yamlJobConfiguration.getJobParameter(), is("param"));
+ assertThat(yamlJobConfiguration.isMonitorExecution(), is(true));
+ assertThat(yamlJobConfiguration.getMaxTimeDiffSeconds(), is(-1));
+ assertFalse(yamlJobConfiguration.isFailover());
+ assertTrue(yamlJobConfiguration.isMisfire());
+ assertNull(yamlJobConfiguration.getJobShardingStrategyType());
+ assertThat(yamlJobConfiguration.getReconcileIntervalMinutes(), is(10));
+ assertThat(yamlJobConfiguration.getDescription(), is(""));
+ }
+
+ @Test
+ public void assertUpdateJobConfig() {
+ YamlJobConfiguration jobConfiguration = new YamlJobConfiguration();
+ jobConfiguration.setJobName("test_job");
+ jobConfiguration.setCron("0/1 * * * * ?");
+ jobConfiguration.setShardingTotalCount(3);
+ jobConfiguration.setJobParameter("param");
+ jobConfiguration.setMonitorExecution(true);
+ jobConfiguration.setFailover(false);
+ jobConfiguration.setMisfire(true);
+ jobConfiguration.setMaxTimeDiffSeconds(-1);
+ jobConfiguration.setReconcileIntervalMinutes(10);
+ jobConfiguration.setDescription("");
+ jobConfiguration.getProps().setProperty(DataflowJobExecutor.STREAM_PROCESS_KEY, "true");
+ jobConfigAPI.updateJobConfig(jobConfiguration);
+ verify(regCenter).update("/test_job/config", LifecycleYamlConstants.getDataflowJobYaml());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void assertUpdateJobConfigIfJobNameIsEmpty() {
+ YamlJobConfiguration jobConfiguration = new YamlJobConfiguration();
+ jobConfiguration.setJobName("");
+ jobConfigAPI.updateJobConfig(jobConfiguration);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void assertUpdateJobConfigIfCronIsEmpty() {
+ YamlJobConfiguration jobConfiguration = new YamlJobConfiguration();
+ jobConfiguration.setJobName("test_job");
+ jobConfiguration.setCron("");
+ jobConfigAPI.updateJobConfig(jobConfiguration);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void assertUpdateJobConfigIfShardingTotalCountLessThanOne() {
+ YamlJobConfiguration jobConfiguration = new YamlJobConfiguration();
+ jobConfiguration.setJobName("test_job");
+ jobConfiguration.setCron("0/1 * * * * ?");
+ jobConfiguration.setShardingTotalCount(0);
+ jobConfigAPI.updateJobConfig(jobConfiguration);
+ }
+
+ @Test
+ public void assertRemoveJobSettings() {
+ jobConfigAPI.removeJobConfig("test_job");
+ verify(regCenter).remove("/test_job");
+ }
+}
diff --git a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java
deleted file mode 100644
index 57bccab..0000000
--- a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings;
-
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobSettingsAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobSettings;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.fixture.LifecycleYamlConstants;
-import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public final class JobSettingsAPIImplTest {
-
- private JobSettingsAPI jobSettingsAPI;
-
- @Mock
- private CoordinatorRegistryCenter regCenter;
-
- @Before
- public void setUp() {
- jobSettingsAPI = new JobSettingsAPIImpl(regCenter);
- }
-
- @Test
- public void assertGetDataflowJobSettings() {
- when(regCenter.get("/test_job/config")).thenReturn(LifecycleYamlConstants.getDataflowJobYaml());
- JobSettings actual = jobSettingsAPI.getJobSettings("test_job");
- assertJobSettings(actual);
- assertTrue(actual.isStreamingProcess());
- verify(regCenter).get("/test_job/config");
- }
-
- @Test
- public void assertGetScriptJobSettings() {
- when(regCenter.get("/test_job/config")).thenReturn(LifecycleYamlConstants.getScriptJobYaml());
- JobSettings actual = jobSettingsAPI.getJobSettings("test_job");
- assertJobSettings(actual);
- assertThat(actual.getScriptCommandLine(), is("echo"));
- verify(regCenter).get("/test_job/config");
- }
-
- private void assertJobSettings(final JobSettings jobSettings) {
- assertThat(jobSettings.getJobName(), is("test_job"));
- assertThat(jobSettings.getShardingTotalCount(), is(3));
- assertThat(jobSettings.getCron(), is("0/1 * * * * ?"));
- assertThat(jobSettings.getShardingItemParameters(), is(""));
- assertThat(jobSettings.getJobParameter(), is("param"));
- assertThat(jobSettings.isMonitorExecution(), is(true));
- assertThat(jobSettings.getMaxTimeDiffSeconds(), is(-1));
- assertFalse(jobSettings.isFailover());
- assertTrue(jobSettings.isMisfire());
- assertNull(jobSettings.getJobShardingStrategyType());
- assertThat(jobSettings.getReconcileIntervalMinutes(), is(10));
- assertThat(jobSettings.getDescription(), is(""));
- }
-
- @Test
- public void assertUpdateJobSettings() {
- JobSettings jobSettings = new JobSettings();
- jobSettings.setJobName("test_job");
- jobSettings.setCron("0/1 * * * * ?");
- jobSettings.setShardingTotalCount(3);
- jobSettings.setJobParameter("param");
- jobSettings.setMonitorExecution(true);
- jobSettings.setFailover(false);
- jobSettings.setMisfire(true);
- jobSettings.setMaxTimeDiffSeconds(-1);
- jobSettings.setReconcileIntervalMinutes(10);
- jobSettings.setDescription("");
- jobSettings.setStreamingProcess(true);
- jobSettingsAPI.updateJobSettings(jobSettings);
- verify(regCenter).update("/test_job/config", LifecycleYamlConstants.getDataflowJobYaml());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void assertUpdateJobSettingsIfJobNameIsEmpty() {
- JobSettings jobSettings = new JobSettings();
- jobSettings.setJobName("");
- jobSettingsAPI.updateJobSettings(jobSettings);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void assertUpdateJobSettingsIfCronIsEmpty() {
- JobSettings jobSettings = new JobSettings();
- jobSettings.setJobName("test_job");
- jobSettings.setCron("");
- jobSettingsAPI.updateJobSettings(jobSettings);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void assertUpdateJobSettingsIfShardingTotalCountLessThanOne() {
- JobSettings jobSettings = new JobSettings();
- jobSettings.setJobName("test_job");
- jobSettings.setCron("0/1 * * * * ?");
- jobSettings.setShardingTotalCount(0);
- jobSettingsAPI.updateJobSettings(jobSettings);
- }
-
- @Test
- public void assertRemoveJobSettings() {
- jobSettingsAPI.removeJobSettings("test_job");
- verify(regCenter).remove("/test_job");
- }
-}