This is an automated email from the ASF dual-hosted git repository.
menghaoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 369e939 Fixed NPE when scaling job config is invalid. (#8969)
369e939 is described below
commit 369e9398ab0a62502e92bdca0aadeb914ff60be0
Author: 邱鹿 Lucas <[email protected]>
AuthorDate: Mon Jan 11 10:35:13 2021 +0800
Fixed NPE when scaling job config is invalid. (#8969)
* Fixed NPE when job config is invalid.
* remove useless import
Co-authored-by: qiulu3 <Lucas209910>
---
.../org/apache/shardingsphere/scaling/web/HttpServerHandler.java | 8 +++++---
.../org/apache/shardingsphere/scaling/core/job/ScalingJob.java | 2 +-
.../scaling/core/service/impl/StandaloneScalingJobService.java | 3 +++
.../shardingsphere/scaling/core/utils/TaskConfigurationUtil.java | 2 +-
4 files changed, 10 insertions(+), 5 deletions(-)
diff --git
a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/main/java/org/apache/shardingsphere/scaling/web/HttpServerHandler.java
b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/main/java/org/apache/shardingsphere/scaling/web/HttpServerHandler.java
index 1b4a26d..ae69bc5 100644
---
a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/main/java/org/apache/shardingsphere/scaling/web/HttpServerHandler.java
+++
b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/main/java/org/apache/shardingsphere/scaling/web/HttpServerHandler.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.scaling.web;
-import com.google.common.base.Preconditions;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.LongSerializationPolicy;
@@ -91,8 +90,11 @@ public final class HttpServerHandler extends
SimpleChannelInboundHandler<FullHtt
private void startJob(final ChannelHandlerContext context, final String
requestBody) {
Optional<ScalingJob> scalingJob =
SCALING_JOB_SERVICE.start(GSON.fromJson(requestBody,
ScalingConfiguration.class));
- Preconditions.checkState(scalingJob.isPresent());
- response(ResponseContentUtil.build(scalingJob.get()), context,
HttpResponseStatus.OK);
+ if (scalingJob.isPresent()) {
+ response(ResponseContentUtil.build(scalingJob.get()), context,
HttpResponseStatus.OK);
+ return;
+ }
+ response(ResponseContentUtil.handleBadRequest("Invalid scaling job
config!"), context, HttpResponseStatus.BAD_REQUEST);
}
private void listJobs(final ChannelHandlerContext context) {
diff --git
a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/ScalingJob.java
b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/ScalingJob.java
index 8267f41..6cb9d9a 100644
---
a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/ScalingJob.java
+++
b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/ScalingJob.java
@@ -68,7 +68,7 @@ public final class ScalingJob {
this.scalingConfig = scalingConfig;
shardingItem = scalingConfig.getJobConfiguration().getShardingItem();
taskConfigs.addAll(TaskConfigurationUtil.toTaskConfigs(scalingConfig));
- databaseType =
taskConfigs.get(0).getDumperConfig().getDataSourceConfig().getDatabaseType().getName();
+ databaseType = taskConfigs.isEmpty() ? null :
taskConfigs.get(0).getDumperConfig().getDataSourceConfig().getDatabaseType().getName();
}
private static SnowflakeKeyGenerateAlgorithm initIdAutoIncreaseGenerator()
{
diff --git
a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/service/impl/StandaloneScalingJobService.java
b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/service/impl/StandaloneScalingJobService.java
index 49ee135..a393ce4 100644
---
a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/service/impl/StandaloneScalingJobService.java
+++
b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/service/impl/StandaloneScalingJobService.java
@@ -54,6 +54,9 @@ public final class StandaloneScalingJobService extends
AbstractScalingJobService
@Override
public Optional<ScalingJob> start(final ScalingConfiguration
scalingConfig) {
ScalingJob scalingJob = new ScalingJob(scalingConfig);
+ if (scalingJob.getTaskConfigs().isEmpty()) {
+ return Optional.empty();
+ }
scalingJobMap.put(scalingJob.getJobId(), scalingJob);
scalingJobPreparer.prepare(scalingJob);
if
(!JobStatus.PREPARING_FAILURE.name().equals(scalingJob.getStatus())) {
diff --git
a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/utils/TaskConfigurationUtil.java
b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/utils/TaskConfigurationUtil.java
index e581ffc..7108112 100644
---
a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/utils/TaskConfigurationUtil.java
+++
b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/utils/TaskConfigurationUtil.java
@@ -250,7 +250,7 @@ public final class TaskConfigurationUtil {
List<String> oldActualDataNodes = new
InlineExpressionParser(oldShardingRuleConfigMap.get(each).getActualDataNodes()).splitAndEvaluate();
List<String> newActualDataNodes = new
InlineExpressionParser(newShardingRuleConfigMap.get(each).getActualDataNodes()).splitAndEvaluate();
if (!CollectionUtils.isEqualCollection(oldActualDataNodes,
newActualDataNodes) || includeModifiedDataSources(newActualDataNodes,
modifiedDataSources)) {
-
result.add(newShardingRuleConfigMap.get(each).getActualDataNodes());
+
result.add(oldShardingRuleConfigMap.get(each).getActualDataNodes());
}
});
return result;