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;

Reply via email to