This is an automated email from the ASF dual-hosted git repository.

zhonghongsheng 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 e37d0a86615 Optimize algorithm error code and message for sharding 
algorithm (#23367)
e37d0a86615 is described below

commit e37d0a8661563d6116f8a00b3473b1166e811d70
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri Jan 6 12:18:50 2023 +0800

    Optimize algorithm error code and message for sharding algorithm (#23367)
    
    * Optimize exception handle logic in sharding api module
    
    * Add new SnowflakeClockMoveBackException to handle exception
    
    * fix unit test
    
    * Add MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException, 
ShardingValueOffsetException to handle related exceptions
---
 .../user-manual/error-code/sql-error-code.cn.md       |  9 ++++++---
 .../user-manual/error-code/sql-error-code.en.md       |  7 +++++--
 .../keygen/KeyGenerateStrategyConfiguration.java      |  3 ---
 .../ComplexShardingStrategyConfiguration.java         |  4 ----
 .../sharding/HintShardingStrategyConfiguration.java   |  2 --
 .../StandardShardingStrategyConfiguration.java        |  2 --
 .../keygen/SnowflakeKeyGenerateAlgorithm.java         |  5 ++---
 .../complex/ComplexInlineShardingAlgorithm.java       |  6 +++---
 .../algorithm/sharding/mod/ModShardingAlgorithm.java  |  4 ++--
 .../range/BoundaryBasedRangeShardingAlgorithm.java    |  3 +--
 .../checker/ShardingRuleConfigurationChecker.java     | 19 +++++++++++++------
 .../keygen/SnowflakeClockMoveBackException.java}      | 12 ++++++------
 ...ShardingAlgorithmColumnAndValueSizeException.java} | 12 ++++++------
 .../ShardingValueOffsetException.java}                | 12 ++++++------
 ...on.java => MissingRequiredAlgorithmException.java} |  8 ++++----
 ...ava => MissingRequiredConfigurationException.java} |  8 ++++----
 .../keygen/SnowflakeKeyGenerateAlgorithmTest.java     |  3 ++-
 .../checker/ShardingRuleConfigurationCheckerTest.java |  4 ++--
 .../keygen/CosIdSnowflakeKeyGenerateAlgorithm.java    |  7 ++++---
 .../AbstractCosIdIntervalShardingAlgorithm.java       |  5 +++--
 .../sharding/mod/CosIdModShardingAlgorithm.java       |  5 +++--
 .../CosIdSnowflakeKeyGenerateAlgorithmTest.java       |  3 ++-
 22 files changed, 74 insertions(+), 69 deletions(-)

diff --git a/docs/document/content/user-manual/error-code/sql-error-code.cn.md 
b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
index 5db189f7494..f5d78c7e83e 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.cn.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
@@ -143,7 +143,7 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
 
 ### 数据分片
 
-| SQL State | Vendor Code | 错误信息                                               
                                                                          |
+| SQL State | Vendor Code | 错误信息                                               
                                                                       |
 | --------- 
|-------------|------------------------------------------------------------------------------------------------------------------------------|
 | 44000     | 20000       | Can not find table rule with logic tables \`%s\`.  
                                                                          |
 | 44000     | 20001       | Can not get uniformed table structure for logic 
table \`%s\`, it has different meta data of actual tables are as follows: %s |
@@ -155,11 +155,12 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
 | 42S01     | 20007       | Index \`%s\` already exists.                       
                                                                          |
 | 42S02     | 20008       | Index \`%s\` does not exist.                       
                                                                          |
 | 42S01     | 20009       | View name has to bind to %s tables.                
                                                                          |
-| 44000     | 20010       | \`%s\` sharding algorithm does not exist in 
database \`%s\`.                                                                
 |
-| 44000     | 20011       | \`%s\` sharding configuration does not exist in 
database \`%s\`.                                                             |
+| 44000     | 20010       | \`%s\` algorithm does not exist in database 
\`%s\`.                                                                         
 |
+| 44000     | 20011       | \`%s\` configuration does not exist in database 
\`%s\`.                                                                      |
 | 44000     | 20020       | Sharding value can't be null in insert statement.  
                                                                          |
 | HY004     | 20021       | Found different types for sharding value \`%s\`.   
                                                                          |
 | HY004     | 20022       | Invalid %s, datetime pattern should be \`%s\`, 
value is \`%s\`.                                                              |
+| 44000     | 20023       | Sharding value %s subtract stop offset %d can not 
be less than start offset %d.                                              |
 | 0A000     | 20040       | Can not support operation \`%s\` with sharding 
table \`%s\`.                                                                 |
 | 44000     | 20041       | Can not update sharding value for table \`%s\`.    
                                                                          |
 | 0A000     | 20042       | The CREATE VIEW statement contains unsupported 
query statement.                                                              |
@@ -177,8 +178,10 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
 | HY000     | 20081       | Routed target \`%s\` does not exist, available 
targets are \`%s\`.                                                           |
 | 44000     | 20082       | Inline sharding algorithms expression \`%s\` and 
sharding column \`%s\` do not match.                                        |
 | HY000     | 20083       | Sharding algorithm \`%s\` initialization failed, 
reason is: %s.                                                              |
+| 44000     | 20084       | Complex inline algorithm need %d sharing columns, 
but only found %d.                                                         |
 | 44000     | 20090       | Can not find strategy for generate keys with table 
\`%s\`.                                                                   |
 | HY000     | 20091       | Key generate algorithm \`%s\` initialization 
failed, reason is: %s.                                                          
|
+| HY000     | 20092       | Clock is moving backwards, last time is %d 
milliseconds, current time is %d milliseconds.                                  
  |
 | HY000     | 20099       | Sharding plugin error, reason is: %s               
                                                                          |
 
 ### 读写分离
diff --git a/docs/document/content/user-manual/error-code/sql-error-code.en.md 
b/docs/document/content/user-manual/error-code/sql-error-code.en.md
index 6233a11532c..0f6c7f01b2f 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.en.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.en.md
@@ -155,11 +155,12 @@ SQL error codes provide by standard `SQL State`, `Vendor 
Code` and `Reason`, whi
 | 42S01     | 20007       | Index \`%s\` already exists.                       
                                                                          |
 | 42S02     | 20008       | Index \`%s\` does not exist.                       
                                                                          |
 | 42S01     | 20009       | View name has to bind to %s tables.                
                                                                          |
-| 44000     | 20010       | \`%s\` sharding algorithm does not exist in 
database \`%s\`.                                                                
 |
-| 44000     | 20011       | \`%s\` sharding configuration does not exist in 
database \`%s\`.                                                             |
+| 44000     | 20010       | \`%s\` algorithm does not exist in database 
\`%s\`.                                                                         
 |
+| 44000     | 20011       | \`%s\` configuration does not exist in database 
\`%s\`.                                                                      |
 | 44000     | 20020       | Sharding value can't be null in insert statement.  
                                                                          |
 | HY004     | 20021       | Found different types for sharding value \`%s\`.   
                                                                          |
 | HY004     | 20022       | Invalid %s, datetime pattern should be \`%s\`, 
value is \`%s\`.                                                              |
+| 44000     | 20023       | Sharding value %s subtract stop offset %d can not 
be less than start offset %d.                                              |
 | 0A000     | 20040       | Can not support operation \`%s\` with sharding 
table \`%s\`.                                                                 |
 | 44000     | 20041       | Can not update sharding value for table \`%s\`.    
                                                                          |
 | 0A000     | 20042       | The CREATE VIEW statement contains unsupported 
query statement.                                                              |
@@ -177,8 +178,10 @@ SQL error codes provide by standard `SQL State`, `Vendor 
Code` and `Reason`, whi
 | HY000     | 20081       | Routed target \`%s\` does not exist, available 
targets are \`%s\`.                                                           |
 | 44000     | 20082       | Inline sharding algorithms expression \`%s\` and 
sharding column \`%s\` do not match.                                        |
 | HY000     | 20083       | Sharding algorithm \`%s\` initialization failed, 
reason is: %s.                                                              |
+| 44000     | 20084       | Complex inline algorithm need %d sharing columns, 
but only found %d.                                                         |
 | 44000     | 20090       | Can not find strategy for generate keys with table 
\`%s\`.                                                                   |
 | HY000     | 20091       | Key generate algorithm \`%s\` initialization 
failed, reason is: %s.                                                          
|
+| HY000     | 20092       | Clock is moving backwards, last time is %d 
milliseconds, current time is %d milliseconds.                                  
  |
 | HY000     | 20099       | Sharding plugin error, reason is: %s               
                                                                          |
 
 ### Readwrite Splitting
diff --git 
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/keygen/KeyGenerateStrategyConfiguration.java
 
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/keygen/KeyGenerateStrategyConfiguration.java
index e4bf621c74d..539f1048db1 100644
--- 
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/keygen/KeyGenerateStrategyConfiguration.java
+++ 
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/keygen/KeyGenerateStrategyConfiguration.java
@@ -17,8 +17,6 @@
 
 package org.apache.shardingsphere.sharding.api.config.strategy.keygen;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
 import lombok.Getter;
 
 /**
@@ -32,7 +30,6 @@ public final class KeyGenerateStrategyConfiguration {
     private final String keyGeneratorName;
     
     public KeyGenerateStrategyConfiguration(final String column, final String 
keyGeneratorName) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(column), "Column is 
required.");
         this.column = column;
         this.keyGeneratorName = keyGeneratorName;
     }
diff --git 
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/ComplexShardingStrategyConfiguration.java
 
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/ComplexShardingStrategyConfiguration.java
index ce4ddceeee6..e00567cd584 100644
--- 
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/ComplexShardingStrategyConfiguration.java
+++ 
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/ComplexShardingStrategyConfiguration.java
@@ -17,8 +17,6 @@
 
 package org.apache.shardingsphere.sharding.api.config.strategy.sharding;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
 import lombok.Getter;
 
 /**
@@ -32,8 +30,6 @@ public final class ComplexShardingStrategyConfiguration 
implements ShardingStrat
     private final String shardingAlgorithmName;
     
     public ComplexShardingStrategyConfiguration(final String shardingColumns, 
final String shardingAlgorithmName) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(shardingColumns), 
"Sharding columns are required.");
-        Preconditions.checkNotNull(shardingAlgorithmName, "Sharding algorithm 
name is required.");
         this.shardingColumns = shardingColumns;
         this.shardingAlgorithmName = shardingAlgorithmName;
     }
diff --git 
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/HintShardingStrategyConfiguration.java
 
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/HintShardingStrategyConfiguration.java
index 30f14a80b6e..2563cc30e04 100644
--- 
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/HintShardingStrategyConfiguration.java
+++ 
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/HintShardingStrategyConfiguration.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sharding.api.config.strategy.sharding;
 
-import com.google.common.base.Preconditions;
 import lombok.Getter;
 
 /**
@@ -29,7 +28,6 @@ public final class HintShardingStrategyConfiguration 
implements ShardingStrategy
     private final String shardingAlgorithmName;
     
     public HintShardingStrategyConfiguration(final String 
shardingAlgorithmName) {
-        Preconditions.checkNotNull(shardingAlgorithmName, "Sharding algorithm 
name is required.");
         this.shardingAlgorithmName = shardingAlgorithmName;
     }
     
diff --git 
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/StandardShardingStrategyConfiguration.java
 
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/StandardShardingStrategyConfiguration.java
index 013a216bd17..ac240fa7b9e 100644
--- 
a/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/StandardShardingStrategyConfiguration.java
+++ 
b/features/sharding/api/src/main/java/org/apache/shardingsphere/sharding/api/config/strategy/sharding/StandardShardingStrategyConfiguration.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sharding.api.config.strategy.sharding;
 
-import com.google.common.base.Preconditions;
 import lombok.Getter;
 
 /**
@@ -31,7 +30,6 @@ public final class StandardShardingStrategyConfiguration 
implements ShardingStra
     private final String shardingAlgorithmName;
     
     public StandardShardingStrategyConfiguration(final String shardingColumn, 
final String shardingAlgorithmName) {
-        Preconditions.checkNotNull(shardingAlgorithmName, "Sharding algorithm 
name is required.");
         this.shardingColumn = shardingColumn;
         this.shardingAlgorithmName = shardingAlgorithmName;
     }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithm.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithm.java
index 6381673d19c..453e9f09cfb 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithm.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithm.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sharding.algorithm.keygen;
 
-import com.google.common.base.Preconditions;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.SneakyThrows;
@@ -25,6 +24,7 @@ import 
org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.instance.InstanceContextAware;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.sharding.exception.algorithm.keygen.KeyGenerateAlgorithmInitializationException;
+import 
org.apache.shardingsphere.sharding.exception.algorithm.keygen.SnowflakeClockMoveBackException;
 import org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm;
 
 import java.util.Calendar;
@@ -142,8 +142,7 @@ public final class SnowflakeKeyGenerateAlgorithm implements 
KeyGenerateAlgorithm
             return false;
         }
         long timeDifferenceMilliseconds = lastMilliseconds - 
currentMilliseconds;
-        Preconditions.checkState(timeDifferenceMilliseconds < 
maxTolerateTimeDifferenceMilliseconds,
-                "Clock is moving backwards, last time is %d milliseconds, 
current time is %d milliseconds", lastMilliseconds, currentMilliseconds);
+        ShardingSpherePreconditions.checkState(timeDifferenceMilliseconds < 
maxTolerateTimeDifferenceMilliseconds, () -> new 
SnowflakeClockMoveBackException(lastMilliseconds, currentMilliseconds));
         Thread.sleep(timeDifferenceMilliseconds);
         return true;
     }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
index ff1d34bf570..f6454374aed 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sharding.algorithm.sharding.complex;
 
-import com.google.common.base.Preconditions;
 import groovy.lang.Closure;
 import groovy.util.Expando;
 import lombok.Getter;
@@ -26,6 +25,7 @@ import 
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.
 import org.apache.shardingsphere.infra.util.expr.InlineExpressionParser;
 import 
org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingAlgorithm;
 import 
org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingValue;
+import 
org.apache.shardingsphere.sharding.exception.algorithm.sharding.MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException;
 import 
org.apache.shardingsphere.sharding.exception.algorithm.sharding.ShardingAlgorithmInitializationException;
 
 import java.util.Arrays;
@@ -89,8 +89,8 @@ public final class ComplexInlineShardingAlgorithm implements 
ComplexKeysSharding
             return availableTargetNames;
         }
         Map<String, Collection<Comparable<?>>> columnNameAndShardingValuesMap 
= shardingValue.getColumnNameAndShardingValuesMap();
-        Preconditions.checkArgument(shardingColumns.isEmpty() || 
shardingColumns.size() == columnNameAndShardingValuesMap.size(),
-                "Complex inline need %s sharing columns, but only found %s", 
shardingColumns.size(), columnNameAndShardingValuesMap.size());
+        ShardingSpherePreconditions.checkState(shardingColumns.isEmpty() || 
shardingColumns.size() == columnNameAndShardingValuesMap.size(),
+                () -> new 
MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException(shardingColumns.size(),
 columnNameAndShardingValuesMap.size()));
         Collection<Map<String, Comparable<?>>> combine = 
combine(columnNameAndShardingValuesMap);
         return 
combine.stream().map(this::doSharding).collect(Collectors.toList());
     }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
index 8fd1633a13f..ab9b0929653 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/mod/ModShardingAlgorithm.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sharding.algorithm.sharding.mod;
 
-import com.google.common.base.Preconditions;
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.sharding.algorithm.sharding.ShardingAutoTableAlgorithmUtil;
@@ -26,6 +25,7 @@ import 
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingV
 import 
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
 import 
org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;
 import 
org.apache.shardingsphere.sharding.exception.algorithm.sharding.ShardingAlgorithmInitializationException;
+import 
org.apache.shardingsphere.sharding.exception.data.ShardingValueOffsetException;
 
 import java.math.BigInteger;
 import java.util.Collection;
@@ -136,7 +136,7 @@ public final class ModShardingAlgorithm implements 
StandardShardingAlgorithm<Com
     }
     
     private BigInteger cutShardingValue(final Comparable<?> shardingValue) {
-        Preconditions.checkArgument(shardingValue.toString().length() - 
stopOffset > startOffset, "Sharding value subtract stop offset can not be less 
than start offset.");
+        
ShardingSpherePreconditions.checkState(shardingValue.toString().length() - 
stopOffset > startOffset, () -> new ShardingValueOffsetException(shardingValue, 
startOffset, stopOffset));
         return 0 == startOffset && 0 == stopOffset ? 
getBigInteger(shardingValue) : new 
BigInteger(shardingValue.toString().substring(startOffset, 
shardingValue.toString().length() - stopOffset));
     }
     
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/BoundaryBasedRangeShardingAlgorithm.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/BoundaryBasedRangeShardingAlgorithm.java
index b41831681ad..3d3409c6e26 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/BoundaryBasedRangeShardingAlgorithm.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/range/BoundaryBasedRangeShardingAlgorithm.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sharding.algorithm.sharding.range;
 
-import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Range;
 import com.google.common.primitives.Longs;
@@ -43,7 +42,7 @@ public final class BoundaryBasedRangeShardingAlgorithm 
extends AbstractRangeShar
         
ShardingSpherePreconditions.checkState(props.containsKey(SHARDING_RANGES_KEY), 
() -> new ShardingAlgorithmInitializationException(getType(), "Sharding ranges 
cannot be null."));
         List<Long> partitionRanges = 
Splitter.on(",").trimResults().splitToList(props.getProperty(SHARDING_RANGES_KEY))
                 
.stream().map(Longs::tryParse).filter(Objects::nonNull).sorted().collect(Collectors.toList());
-        Preconditions.checkArgument(!partitionRanges.isEmpty(), "Sharding 
ranges is not valid.");
+        ShardingSpherePreconditions.checkState(!partitionRanges.isEmpty(), () 
-> new ShardingAlgorithmInitializationException(getType(), "Sharding ranges can 
not be empty."));
         Map<Integer, Range<Comparable<?>>> result = new 
HashMap<>(partitionRanges.size() + 1, 1);
         for (int i = 0; i < partitionRanges.size(); i++) {
             Long rangeValue = partitionRanges.get(i);
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationChecker.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationChecker.java
index 1c169caf38f..fddb18f168d 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationChecker.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationChecker.java
@@ -27,11 +27,12 @@ import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleC
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ComplexShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
 import org.apache.shardingsphere.sharding.constant.ShardingOrder;
-import 
org.apache.shardingsphere.sharding.exception.metadata.MissingRequiredShardingAlgorithmException;
-import 
org.apache.shardingsphere.sharding.exception.metadata.MissingRequiredShardingConfigurationException;
+import 
org.apache.shardingsphere.sharding.exception.metadata.MissingRequiredAlgorithmException;
+import 
org.apache.shardingsphere.sharding.exception.metadata.MissingRequiredConfigurationException;
 
 import javax.sql.DataSource;
 import java.util.Collection;
@@ -72,15 +73,16 @@ public final class ShardingRuleConfigurationChecker 
implements RuleConfiguration
     }
     
     private void checkLogicTable(final String databaseName, final String 
logicTable) {
-        
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(logicTable), () 
-> new MissingRequiredShardingConfigurationException("logicTable", 
databaseName));
+        
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(logicTable), () 
-> new MissingRequiredConfigurationException("Sharding logic table", 
databaseName));
     }
     
     private void checkKeyGenerateStrategy(final String databaseName, final 
KeyGenerateStrategyConfiguration keyGenerateStrategy, final Collection<String> 
keyGenerators) {
         if (null == keyGenerateStrategy) {
             return;
         }
+        
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(keyGenerateStrategy.getColumn()),
 () -> new MissingRequiredConfigurationException("Key generate column", 
databaseName));
         
ShardingSpherePreconditions.checkState(keyGenerators.contains(keyGenerateStrategy.getKeyGeneratorName()),
-                () -> new 
MissingRequiredShardingAlgorithmException(keyGenerateStrategy.getKeyGeneratorName(),
 databaseName));
+                () -> new 
MissingRequiredAlgorithmException(keyGenerateStrategy.getKeyGeneratorName(), 
databaseName));
     }
     
     private void checkAuditStrategy(final String databaseName, final 
ShardingAuditStrategyConfiguration auditStrategy, final Collection<String> 
auditors) {
@@ -88,15 +90,20 @@ public final class ShardingRuleConfigurationChecker 
implements RuleConfiguration
             return;
         }
         
ShardingSpherePreconditions.checkState(auditors.containsAll(auditStrategy.getAuditorNames()),
-                () -> new 
MissingRequiredShardingAlgorithmException(Joiner.on(",").join(auditStrategy.getAuditorNames()),
 databaseName));
+                () -> new 
MissingRequiredAlgorithmException(Joiner.on(",").join(auditStrategy.getAuditorNames()),
 databaseName));
     }
     
     private void checkShardingStrategy(final String databaseName, final 
ShardingStrategyConfiguration shardingStrategy, final Collection<String> 
shardingAlgorithms) {
         if (null == shardingStrategy || shardingStrategy instanceof 
NoneShardingStrategyConfiguration) {
             return;
         }
+        if (shardingStrategy instanceof ComplexShardingStrategyConfiguration) {
+            
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(((ComplexShardingStrategyConfiguration)
 shardingStrategy).getShardingColumns()),
+                    () -> new MissingRequiredConfigurationException("Complex 
sharding columns", databaseName));
+        }
+        
ShardingSpherePreconditions.checkNotNull(shardingStrategy.getShardingAlgorithmName(),
 () -> new MissingRequiredConfigurationException("Sharding algorithm name", 
databaseName));
         
ShardingSpherePreconditions.checkState(shardingAlgorithms.contains(shardingStrategy.getShardingAlgorithmName()),
-                () -> new 
MissingRequiredShardingAlgorithmException(shardingStrategy.getShardingAlgorithmName(),
 databaseName));
+                () -> new 
MissingRequiredAlgorithmException(shardingStrategy.getShardingAlgorithmName(), 
databaseName));
     }
     
     @Override
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/algorithm/keygen/SnowflakeClockMoveBackException.java
similarity index 64%
copy from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
copy to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/algorithm/keygen/SnowflakeClockMoveBackException.java
index f63c80a83be..6580470afdc 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/algorithm/keygen/SnowflakeClockMoveBackException.java
@@ -15,19 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.exception.metadata;
+package org.apache.shardingsphere.sharding.exception.algorithm.keygen;
 
 import 
org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpenSQLState;
 import org.apache.shardingsphere.sharding.exception.ShardingSQLException;
 
 /**
- * Missing required sharding configuration exception.
+ * Snowflake clock move back exception.
  */
-public final class MissingRequiredShardingConfigurationException extends 
ShardingSQLException {
+public final class SnowflakeClockMoveBackException extends 
ShardingSQLException {
     
-    private static final long serialVersionUID = -7307832800220432407L;
+    private static final long serialVersionUID = -2435731376659956566L;
     
-    public MissingRequiredShardingConfigurationException(final String 
configKey, final String databaseName) {
-        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 11, "`%s` sharding 
configuration does not exist in database `%s`.", configKey, databaseName);
+    public SnowflakeClockMoveBackException(final long lastMilliseconds, final 
long currentMilliseconds) {
+        super(XOpenSQLState.GENERAL_ERROR, 92, "Clock is moving backwards, 
last time is %d milliseconds, current time is %d milliseconds.", 
lastMilliseconds, currentMilliseconds);
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/algorithm/sharding/MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException.java
similarity index 60%
copy from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
copy to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/algorithm/sharding/MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException.java
index f63c80a83be..c2e4f3f16b1 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/algorithm/sharding/MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException.java
@@ -15,19 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.exception.metadata;
+package org.apache.shardingsphere.sharding.exception.algorithm.sharding;
 
 import 
org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpenSQLState;
 import org.apache.shardingsphere.sharding.exception.ShardingSQLException;
 
 /**
- * Missing required sharding configuration exception.
+ * Mismatched complex inline sharding algorithm's column and value exception.
  */
-public final class MissingRequiredShardingConfigurationException extends 
ShardingSQLException {
+public final class 
MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException extends 
ShardingSQLException {
     
-    private static final long serialVersionUID = -7307832800220432407L;
+    private static final long serialVersionUID = -3667110081810167498L;
     
-    public MissingRequiredShardingConfigurationException(final String 
configKey, final String databaseName) {
-        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 11, "`%s` sharding 
configuration does not exist in database `%s`.", configKey, databaseName);
+    public 
MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException(final int 
shardingColumnSize, final int shardingValueSize) {
+        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 84, "Complex inline 
algorithm need %d sharing columns, but only found %d.", shardingColumnSize, 
shardingValueSize);
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/data/ShardingValueOffsetException.java
similarity index 64%
copy from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
copy to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/data/ShardingValueOffsetException.java
index f63c80a83be..3416315b5cc 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/data/ShardingValueOffsetException.java
@@ -15,19 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.exception.metadata;
+package org.apache.shardingsphere.sharding.exception.data;
 
 import 
org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpenSQLState;
 import org.apache.shardingsphere.sharding.exception.ShardingSQLException;
 
 /**
- * Missing required sharding configuration exception.
+ * Sharding value offset exception.
  */
-public final class MissingRequiredShardingConfigurationException extends 
ShardingSQLException {
+public final class ShardingValueOffsetException extends ShardingSQLException {
     
-    private static final long serialVersionUID = -7307832800220432407L;
+    private static final long serialVersionUID = 734610922729978886L;
     
-    public MissingRequiredShardingConfigurationException(final String 
configKey, final String databaseName) {
-        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 11, "`%s` sharding 
configuration does not exist in database `%s`.", configKey, databaseName);
+    public ShardingValueOffsetException(final Comparable<?> shardingValue, 
final int startOffset, final int stopOffset) {
+        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 23, "Sharding value %s 
subtract stop offset %d can not be less than start offset %d.", shardingValue, 
startOffset, stopOffset);
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingAlgorithmException.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredAlgorithmException.java
similarity index 73%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingAlgorithmException.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredAlgorithmException.java
index e5c358b513a..60966120db4 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingAlgorithmException.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredAlgorithmException.java
@@ -21,13 +21,13 @@ import 
org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpe
 import org.apache.shardingsphere.sharding.exception.ShardingSQLException;
 
 /**
- * Missing required sharding algorithm exception.
+ * Missing required algorithm exception.
  */
-public final class MissingRequiredShardingAlgorithmException extends 
ShardingSQLException {
+public final class MissingRequiredAlgorithmException extends 
ShardingSQLException {
     
     private static final long serialVersionUID = -1844741171173351747L;
     
-    public MissingRequiredShardingAlgorithmException(final String 
algorithmName, final String databaseName) {
-        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 10, "`%s` sharding 
algorithm does not exist in database `%s`.", algorithmName, databaseName);
+    public MissingRequiredAlgorithmException(final String algorithmName, final 
String databaseName) {
+        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 10, "`%s` algorithm does 
not exist in database `%s`.", algorithmName, databaseName);
     }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredConfigurationException.java
similarity index 73%
rename from 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
rename to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredConfigurationException.java
index f63c80a83be..b6bd1ad9499 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredShardingConfigurationException.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/metadata/MissingRequiredConfigurationException.java
@@ -21,13 +21,13 @@ import 
org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpe
 import org.apache.shardingsphere.sharding.exception.ShardingSQLException;
 
 /**
- * Missing required sharding configuration exception.
+ * Missing required configuration exception.
  */
-public final class MissingRequiredShardingConfigurationException extends 
ShardingSQLException {
+public final class MissingRequiredConfigurationException extends 
ShardingSQLException {
     
     private static final long serialVersionUID = -7307832800220432407L;
     
-    public MissingRequiredShardingConfigurationException(final String 
configKey, final String databaseName) {
-        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 11, "`%s` sharding 
configuration does not exist in database `%s`.", configKey, databaseName);
+    public MissingRequiredConfigurationException(final String configKey, final 
String databaseName) {
+        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 11, "`%s` configuration 
does not exist in database `%s`.", configKey, databaseName);
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithmTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithmTest.java
index cdbf073d410..f373da62162 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithmTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithmTest.java
@@ -31,6 +31,7 @@ import 
org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import 
org.apache.shardingsphere.sharding.algorithm.keygen.fixture.FixedTimeService;
 import 
org.apache.shardingsphere.sharding.algorithm.keygen.fixture.WorkerIdGeneratorFixture;
 import 
org.apache.shardingsphere.sharding.exception.algorithm.keygen.KeyGenerateAlgorithmInitializationException;
+import 
org.apache.shardingsphere.sharding.exception.algorithm.keygen.SnowflakeClockMoveBackException;
 import org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
@@ -155,7 +156,7 @@ public final class SnowflakeKeyGenerateAlgorithmTest {
         assertThat(actual, is(expected));
     }
     
-    @Test(expected = IllegalStateException.class)
+    @Test(expected = SnowflakeClockMoveBackException.class)
     public void assertGenerateKeyWithClockCallBackBeyondTolerateTime() {
         TimeService timeService = new FixedTimeService(1);
         SnowflakeKeyGenerateAlgorithm.setTimeService(timeService);
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
index 2d08388c8f7..a63d6f361f9 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
@@ -26,7 +26,7 @@ import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfi
 import 
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
-import 
org.apache.shardingsphere.sharding.exception.metadata.MissingRequiredShardingAlgorithmException;
+import 
org.apache.shardingsphere.sharding.exception.metadata.MissingRequiredConfigurationException;
 import org.junit.Test;
 
 import java.util.Collections;
@@ -50,7 +50,7 @@ public final class ShardingRuleConfigurationCheckerTest {
     }
     
     @SuppressWarnings("unchecked")
-    @Test(expected = MissingRequiredShardingAlgorithmException.class)
+    @Test(expected = MissingRequiredConfigurationException.class)
     public void assertCheckTableConfigurationFailed() {
         ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
         
ruleConfig.setTables(Collections.singletonList(createShardingTableRuleConfiguration(null,
 null, null)));
diff --git 
a/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
 
b/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
index 75768dc2c11..d67061e9282 100644
--- 
a/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
+++ 
b/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
@@ -17,16 +17,17 @@
 
 package org.apache.shardingsphere.sharding.cosid.algorithm.keygen;
 
-import com.google.common.base.Preconditions;
 import lombok.Getter;
 import me.ahoo.cosid.converter.Radix62IdConverter;
 import me.ahoo.cosid.snowflake.ClockSyncSnowflakeId;
 import me.ahoo.cosid.snowflake.MillisecondSnowflakeId;
 import me.ahoo.cosid.snowflake.SnowflakeId;
 import me.ahoo.cosid.snowflake.StringSnowflakeId;
-import org.apache.shardingsphere.infra.instance.InstanceContextAware;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
+import org.apache.shardingsphere.infra.instance.InstanceContextAware;
+import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.sharding.cosid.algorithm.CosIdAlgorithmConstants;
+import org.apache.shardingsphere.sharding.exception.ShardingPluginException;
 import org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm;
 
 import java.util.Calendar;
@@ -94,7 +95,7 @@ public final class CosIdSnowflakeKeyGenerateAlgorithm 
implements KeyGenerateAlgo
     }
     
     private SnowflakeId getSnowflakeId() {
-        Preconditions.checkNotNull(snowflakeId, "Instance context not set 
yet.");
+        ShardingSpherePreconditions.checkNotNull(snowflakeId, () -> new 
ShardingPluginException("Instance context not set yet."));
         return snowflakeId;
     }
     
diff --git 
a/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/AbstractCosIdIntervalShardingAlgorithm.java
 
b/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/AbstractCosIdIntervalShardingAlgorithm.java
index 4ab4d8b5e42..4e476accf4f 100644
--- 
a/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/AbstractCosIdIntervalShardingAlgorithm.java
+++ 
b/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/interval/AbstractCosIdIntervalShardingAlgorithm.java
@@ -17,17 +17,18 @@
 
 package org.apache.shardingsphere.sharding.cosid.algorithm.sharding.interval;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.BoundType;
 import com.google.common.collect.Range;
 import lombok.AccessLevel;
 import lombok.Getter;
 import me.ahoo.cosid.sharding.IntervalStep;
 import me.ahoo.cosid.sharding.IntervalTimeline;
+import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
 import 
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
 import 
org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;
 import 
org.apache.shardingsphere.sharding.cosid.algorithm.CosIdAlgorithmConstants;
+import org.apache.shardingsphere.sharding.exception.ShardingPluginException;
 
 import java.time.LocalDateTime;
 import java.time.ZoneId;
@@ -87,7 +88,7 @@ public abstract class 
AbstractCosIdIntervalShardingAlgorithm<T extends Comparabl
     }
     
     private String getRequiredValue(final Properties props, final String key) {
-        Preconditions.checkArgument(props.containsKey(key), "%s can not be 
null.", key);
+        ShardingSpherePreconditions.checkState(props.containsKey(key), () -> 
new ShardingPluginException("%s can not be null.", key));
         return props.getProperty(key);
     }
     
diff --git 
a/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/mod/CosIdModShardingAlgorithm.java
 
b/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/mod/CosIdModShardingAlgorithm.java
index f56c176f195..d7324119be1 100644
--- 
a/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/mod/CosIdModShardingAlgorithm.java
+++ 
b/features/sharding/plugin/cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/sharding/mod/CosIdModShardingAlgorithm.java
@@ -17,13 +17,14 @@
 
 package org.apache.shardingsphere.sharding.cosid.algorithm.sharding.mod;
 
-import com.google.common.base.Preconditions;
 import lombok.Getter;
 import me.ahoo.cosid.sharding.ModCycle;
+import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
 import 
org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
 import 
org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;
 import 
org.apache.shardingsphere.sharding.cosid.algorithm.CosIdAlgorithmConstants;
+import org.apache.shardingsphere.sharding.exception.ShardingPluginException;
 
 import java.util.Collection;
 import java.util.Properties;
@@ -50,7 +51,7 @@ public final class CosIdModShardingAlgorithm<T extends Number 
& Comparable<T>> i
     }
     
     private String getRequiredValue(final Properties props, final String key) {
-        Preconditions.checkArgument(props.containsKey(key), "%s can not be 
null.", key);
+        ShardingSpherePreconditions.checkState(props.containsKey(key), () -> 
new ShardingPluginException("%s can not be null.", key));
         return props.getProperty(key);
     }
     
diff --git 
a/features/sharding/plugin/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithmTest.java
 
b/features/sharding/plugin/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithmTest.java
index b702ebd2e0e..e5cf1d15cae 100644
--- 
a/features/sharding/plugin/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithmTest.java
+++ 
b/features/sharding/plugin/cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithmTest.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.infra.instance.mode.ModeContextManager;
 import org.apache.shardingsphere.infra.lock.LockContext;
 import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import 
org.apache.shardingsphere.sharding.cosid.algorithm.keygen.fixture.WorkerIdGeneratorFixture;
+import org.apache.shardingsphere.sharding.exception.ShardingPluginException;
 import org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
@@ -133,7 +134,7 @@ public final class CosIdSnowflakeKeyGenerateAlgorithmTest {
         assertThat(actualState.getSequence(), is(1L));
     }
     
-    @Test(expected = NullPointerException.class)
+    @Test(expected = ShardingPluginException.class)
     public void assertGenerateKeyWhenNoneInstanceContext() {
         ((KeyGenerateAlgorithm) 
ShardingSphereAlgorithmFactory.createAlgorithm(new 
AlgorithmConfiguration("COSID_SNOWFLAKE", new Properties()), 
KeyGenerateAlgorithm.class)).generateKey();
     }

Reply via email to