This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 6b127cb3a13 Refactor KeyGenerateAlgorithm interface for algorithm
reuse (#29256)
6b127cb3a13 is described below
commit 6b127cb3a134dd9e93e29063444df624f04bcf22
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Dec 6 10:43:12 2023 +0800
Refactor KeyGenerateAlgorithm interface for algorithm reuse (#29256)
* Refactor KeyGenerateAlgorithm interface for algorithm reuse
* Modify unit test and fixture
---
.../InsertClauseShardingConditionEngine.java | 18 ++++----
.../shardingsphere/sharding/rule/ShardingRule.java | 14 +++---
.../AutoIncrementKeyGenerateAlgorithmFixture.java | 8 +++-
.../sharding/rule/ShardingRuleTest.java | 17 +++++--
.../keygen/DistSQLKeyGenerateAlgorithmFixture.java | 10 +++-
.../core/algorithm/KeyGenerateAlgorithm.java | 11 +++--
.../keygen/core/context/KeyGenerateContext.java | 26 ++++++-----
.../algorithm/SnowflakeKeyGenerateAlgorithm.java | 13 +++++-
.../SnowflakeKeyGenerateAlgorithmTest.java | 54 +++++++++++-----------
.../uuid/algorithm/UUIDKeyGenerateAlgorithm.java | 13 +++++-
.../algorithm/UUIDKeyGenerateAlgorithmTest.java | 5 +-
.../IncrementKeyGenerateAlgorithmFixture.java | 8 +++-
.../ResetIncrementKeyGenerateAlgorithmFixture.java | 8 +++-
...ITAutoIncrementKeyGenerateAlgorithmFixture.java | 8 +++-
.../e2e/fixture/ITKeyGenerateAlgorithmFixture.java | 8 +++-
.../general/PostgreSQLMigrationGeneralE2EIT.java | 4 +-
.../primarykey/IndexesMigrationE2EIT.java | 14 +++---
.../pipeline/cases/task/MySQLIncrementTask.java | 5 +-
.../cases/task/PostgreSQLIncrementTask.java | 6 ++-
.../framework/helper/PipelineCaseHelper.java | 15 +++---
.../util/AutoIncrementKeyGenerateAlgorithm.java | 8 +++-
.../keygen/RewriteKeyGenerateAlgorithmFixture.java | 9 +++-
22 files changed, 188 insertions(+), 94 deletions(-)
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
index d0ae2515d2d..cc5ee932804 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
@@ -18,16 +18,17 @@
package org.apache.shardingsphere.sharding.route.engine.condition.engine;
import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.infra.exception.dialect.exception.data.InsertColumnsAndValuesMismatchedException;
-import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.table.NoSuchTableException;
import
org.apache.shardingsphere.infra.binder.context.segment.insert.keygen.GeneratedKeyContext;
import
org.apache.shardingsphere.infra.binder.context.segment.insert.values.InsertValueContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import
org.apache.shardingsphere.infra.exception.dialect.exception.data.InsertColumnsAndValuesMismatchedException;
+import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.table.NoSuchTableException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.sharding.route.engine.condition.ExpressionConditionUtils;
import
org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition;
import
org.apache.shardingsphere.sharding.route.engine.condition.value.ListShardingConditionValue;
@@ -47,8 +48,6 @@ import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
/**
* Sharding condition engine for insert clause.
@@ -173,7 +172,10 @@ public final class InsertClauseShardingConditionEngine {
Optional<GeneratedKeyContext> generatedKey =
sqlStatementContext.getGeneratedKeyContext();
String tableName =
sqlStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
if (generatedKey.isPresent() && generatedKey.get().isGenerated() &&
shardingRule.findTableRule(tableName).isPresent()) {
-
generatedKey.get().getGeneratedValues().addAll(generateKeys(tableName,
sqlStatementContext.getValueListCount()));
+ String schemaName =
+
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName()));
+ generatedKey.get().getGeneratedValues()
+ .addAll(shardingRule.generateKeys(new
KeyGenerateContext(database.getName(), schemaName, tableName,
generatedKey.get().getColumnName()), sqlStatementContext.getValueListCount()));
generatedKey.get().setSupportAutoIncrement(shardingRule.isSupportAutoIncrement(tableName));
if
(shardingRule.findShardingColumn(generatedKey.get().getColumnName(),
tableName).isPresent()) {
appendGeneratedKeyCondition(generatedKey.get(), tableName,
shardingConditions);
@@ -181,10 +183,6 @@ public final class InsertClauseShardingConditionEngine {
}
}
- private Collection<Comparable<?>> generateKeys(final String tableName,
final int valueListCount) {
- return IntStream.range(0, valueListCount).mapToObj(each ->
shardingRule.generateKey(tableName)).collect(Collectors.toList());
- }
-
private void appendGeneratedKeyCondition(final GeneratedKeyContext
generatedKey, final String tableName, final List<ShardingCondition>
shardingConditions) {
Iterator<Comparable<?>> generatedValuesIterator =
generatedKey.getGeneratedValues().iterator();
for (ShardingCondition each : shardingConditions) {
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index e1f69d89567..67f2b46ac2e 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.datanode.DataNode;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.expr.core.InlineExpressionParserFactory;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.InstanceContextAware;
@@ -34,9 +35,9 @@ import
org.apache.shardingsphere.infra.rule.identifier.scope.DatabaseRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.TableNamesMapper;
-import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.keygen.core.exception.algorithm.GenerateKeyStrategyNotFoundException;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
@@ -615,13 +616,14 @@ public final class ShardingRule implements DatabaseRule,
DataNodeContainedRule,
}
/**
- * Find the Generated key of logic table.
+ * Find the generated keys of logic table.
*
- * @param logicTableName logic table name
- * @return generated key
+ * @param keyGenerateContext key generate context
+ * @param keyGenerateCount key generate count
+ * @return generated keys
*/
- public Comparable<?> generateKey(final String logicTableName) {
- return getKeyGenerateAlgorithm(logicTableName).generateKey();
+ public Collection<? extends Comparable<?>> generateKeys(final
KeyGenerateContext keyGenerateContext, final int keyGenerateCount) {
+ return
getKeyGenerateAlgorithm(keyGenerateContext.getTableName()).generateKeys(keyGenerateContext,
keyGenerateCount);
}
private KeyGenerateAlgorithm getKeyGenerateAlgorithm(final String
logicTableName) {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/fixture/AutoIncrementKeyGenerateAlgorithmFixture.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/fixture/AutoIncrementKeyGenerateAlgorithmFixture.java
index a2533d6c055..4358fcc60f1 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/fixture/AutoIncrementKeyGenerateAlgorithmFixture.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/fixture/AutoIncrementKeyGenerateAlgorithmFixture.java
@@ -19,8 +19,12 @@ package
org.apache.shardingsphere.sharding.algorithm.keygen.fixture;
import lombok.Getter;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
@Getter
public final class AutoIncrementKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm {
@@ -28,8 +32,8 @@ public final class AutoIncrementKeyGenerateAlgorithmFixture
implements KeyGenera
private final AtomicInteger count = new AtomicInteger();
@Override
- public Comparable<?> generateKey() {
- return count.incrementAndGet();
+ public Collection<Comparable<?>> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ return IntStream.range(0, keyGenerateCount).mapToObj(each ->
count.incrementAndGet()).collect(Collectors.toList());
}
@Override
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
index 8ec0df9b69f..3dbd2fea9a3 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
@@ -29,6 +29,7 @@ import
org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.keygen.core.exception.algorithm.GenerateKeyStrategyNotFoundException;
import
org.apache.shardingsphere.keygen.snowflake.algorithm.SnowflakeKeyGenerateAlgorithm;
import
org.apache.shardingsphere.keygen.uuid.algorithm.UUIDKeyGenerateAlgorithm;
@@ -316,7 +317,9 @@ class ShardingRuleTest {
@Test
void assertGenerateKeyFailure() {
- assertThrows(GenerateKeyStrategyNotFoundException.class, () ->
createMaximumShardingRule().generateKey("table_0"));
+ KeyGenerateContext generateContext = mock(KeyGenerateContext.class);
+ when(generateContext.getTableName()).thenReturn("table_0");
+ assertThrows(GenerateKeyStrategyNotFoundException.class, () ->
createMaximumShardingRule().generateKeys(generateContext, 1));
}
@Test
@@ -394,12 +397,20 @@ class ShardingRuleTest {
@Test
void assertGenerateKeyWithDefaultKeyGenerator() {
- assertThat(createMinimumShardingRule().generateKey("logic_table"),
instanceOf(Long.class));
+ KeyGenerateContext generateContext = mock(KeyGenerateContext.class);
+ when(generateContext.getTableName()).thenReturn("logic_table");
+ Collection<? extends Comparable<?>> actual =
createMinimumShardingRule().generateKeys(generateContext, 1);
+ assertThat(actual.size(), is(1));
+ assertThat(actual.iterator().next(), instanceOf(Long.class));
}
@Test
void assertGenerateKeyWithKeyGenerator() {
- assertThat(createMaximumShardingRule().generateKey("logic_table"),
instanceOf(String.class));
+ KeyGenerateContext generateContext = mock(KeyGenerateContext.class);
+ when(generateContext.getTableName()).thenReturn("logic_table");
+ Collection<? extends Comparable<?>> actual =
createMaximumShardingRule().generateKeys(generateContext, 1);
+ assertThat(actual.size(), is(1));
+ assertThat(actual.iterator().next(), instanceOf(String.class));
}
@Test
diff --git
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/keygen/DistSQLKeyGenerateAlgorithmFixture.java
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/keygen/DistSQLKeyGenerateAlgorithmFixture.java
index 4bbd012d604..66884564b46 100644
---
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/keygen/DistSQLKeyGenerateAlgorithmFixture.java
+++
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/fixture/keygen/DistSQLKeyGenerateAlgorithmFixture.java
@@ -18,12 +18,18 @@
package org.apache.shardingsphere.sharding.distsql.fixture.keygen;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
public final class DistSQLKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm {
@Override
- public Comparable<?> generateKey() {
- return 0L;
+ public Collection<Comparable<?>> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ return IntStream.range(0, keyGenerateCount).mapToObj(each ->
0L).collect(Collectors.toList());
+
}
@Override
diff --git
a/infra/algorithm/key-generator/core/src/main/java/org/apache/shardingsphere/keygen/core/algorithm/KeyGenerateAlgorithm.java
b/infra/algorithm/key-generator/core/src/main/java/org/apache/shardingsphere/keygen/core/algorithm/KeyGenerateAlgorithm.java
index 638636a960b..538b3acf43c 100644
---
a/infra/algorithm/key-generator/core/src/main/java/org/apache/shardingsphere/keygen/core/algorithm/KeyGenerateAlgorithm.java
+++
b/infra/algorithm/key-generator/core/src/main/java/org/apache/shardingsphere/keygen/core/algorithm/KeyGenerateAlgorithm.java
@@ -18,6 +18,9 @@
package org.apache.shardingsphere.keygen.core.algorithm;
import org.apache.shardingsphere.infra.algorithm.ShardingSphereAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+
+import java.util.Collection;
/**
* Key generate algorithm.
@@ -25,11 +28,13 @@ import
org.apache.shardingsphere.infra.algorithm.ShardingSphereAlgorithm;
public interface KeyGenerateAlgorithm extends ShardingSphereAlgorithm {
/**
- * Generate key.
+ * Generate keys.
*
- * @return generated key
+ * @param keyGenerateContext key generate context
+ * @param keyGenerateCount key generate count
+ * @return generated keys
*/
- Comparable<?> generateKey();
+ Collection<? extends Comparable<?>> generateKeys(KeyGenerateContext
keyGenerateContext, int keyGenerateCount);
/**
* Judge whether support auto increment or not.
diff --git
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/fixture/keygen/RewriteKeyGenerateAlgorithmFixture.java
b/infra/algorithm/key-generator/core/src/main/java/org/apache/shardingsphere/keygen/core/context/KeyGenerateContext.java
similarity index 67%
copy from
test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/fixture/keygen/RewriteKeyGenerateAlgorithmFixture.java
copy to
infra/algorithm/key-generator/core/src/main/java/org/apache/shardingsphere/keygen/core/context/KeyGenerateContext.java
index 40820915117..b7d3577ff02 100644
---
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/fixture/keygen/RewriteKeyGenerateAlgorithmFixture.java
+++
b/infra/algorithm/key-generator/core/src/main/java/org/apache/shardingsphere/keygen/core/context/KeyGenerateContext.java
@@ -15,19 +15,23 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.it.rewrite.fixture.keygen;
+package org.apache.shardingsphere.keygen.core.context;
-import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
-public final class RewriteKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm {
+/**
+ * Key generate context.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class KeyGenerateContext {
+
+ private final String databaseName;
+
+ private final String schemaName;
- @Override
- public Long generateKey() {
- return 1L;
- }
+ private final String tableName;
- @Override
- public String getType() {
- return "REWRITE.FIXTURE";
- }
+ private final String columnName;
}
diff --git
a/infra/algorithm/key-generator/type/snowflake/src/main/java/org/apache/shardingsphere/keygen/snowflake/algorithm/SnowflakeKeyGenerateAlgorithm.java
b/infra/algorithm/key-generator/type/snowflake/src/main/java/org/apache/shardingsphere/keygen/snowflake/algorithm/SnowflakeKeyGenerateAlgorithm.java
index 95fe29dcca2..23ca0c2c350 100644
---
a/infra/algorithm/key-generator/type/snowflake/src/main/java/org/apache/shardingsphere/keygen/snowflake/algorithm/SnowflakeKeyGenerateAlgorithm.java
+++
b/infra/algorithm/key-generator/type/snowflake/src/main/java/org/apache/shardingsphere/keygen/snowflake/algorithm/SnowflakeKeyGenerateAlgorithm.java
@@ -23,12 +23,15 @@ import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePrecondition
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.InstanceContextAware;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.keygen.core.exception.algorithm.KeyGenerateAlgorithmInitializationException;
import
org.apache.shardingsphere.keygen.snowflake.exception.SnowflakeClockMoveBackException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
+import java.util.Collection;
+import java.util.LinkedList;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
@@ -118,7 +121,15 @@ public final class SnowflakeKeyGenerateAlgorithm
implements KeyGenerateAlgorithm
}
@Override
- public synchronized Long generateKey() {
+ public Collection<Long> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ Collection<Long> result = new LinkedList<>();
+ for (int index = 0; index < keyGenerateCount; index++) {
+ result.add(generateKey());
+ }
+ return result;
+ }
+
+ private synchronized Long generateKey() {
long currentMillis = timeService.getCurrentMillis();
if (waitTolerateTimeDifferenceIfNeed(currentMillis)) {
currentMillis = timeService.getCurrentMillis();
diff --git
a/infra/algorithm/key-generator/type/snowflake/src/test/java/org/apache/shardingsphere/keygen/snowflake/algorithm/SnowflakeKeyGenerateAlgorithmTest.java
b/infra/algorithm/key-generator/type/snowflake/src/test/java/org/apache/shardingsphere/keygen/snowflake/algorithm/SnowflakeKeyGenerateAlgorithmTest.java
index d5ff80bed73..a58832cce56 100644
---
a/infra/algorithm/key-generator/type/snowflake/src/test/java/org/apache/shardingsphere/keygen/snowflake/algorithm/SnowflakeKeyGenerateAlgorithmTest.java
+++
b/infra/algorithm/key-generator/type/snowflake/src/test/java/org/apache/shardingsphere/keygen/snowflake/algorithm/SnowflakeKeyGenerateAlgorithmTest.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.infra.lock.LockContext;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.keygen.core.exception.algorithm.KeyGenerateAlgorithmInitializationException;
import
org.apache.shardingsphere.keygen.snowflake.exception.SnowflakeClockMoveBackException;
import org.apache.shardingsphere.keygen.snowflake.fixture.FixedTimeService;
@@ -40,11 +41,12 @@ import org.mockito.internal.configuration.plugins.Plugins;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Set;
-import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -82,7 +84,7 @@ class SnowflakeKeyGenerateAlgorithmTest {
}
Set<Comparable<?>> actual = new HashSet<>(taskNumber, 1F);
for (int i = 0; i < taskNumber; i++) {
- actual.add(executor.submit((Callable<Comparable<?>>)
algorithm::generateKey).get());
+ actual.addAll(executor.submit(() ->
algorithm.generateKeys(mock(KeyGenerateContext.class), 1)).get());
}
assertThat(actual.size(), is(taskNumber));
}
@@ -96,9 +98,7 @@ class SnowflakeKeyGenerateAlgorithmTest {
}
List<Comparable<?>> expected = Arrays.asList(0L, 4194305L, 4194306L,
8388608L, 8388609L, 12582913L, 12582914L, 16777216L, 16777217L, 20971521L);
List<Comparable<?>> actual = new ArrayList<>(DEFAULT_KEY_AMOUNT);
- for (int i = 0; i < DEFAULT_KEY_AMOUNT; i++) {
- actual.add(algorithm.generateKey());
- }
+ actual.addAll(algorithm.generateKeys(mock(KeyGenerateContext.class),
DEFAULT_KEY_AMOUNT));
assertThat(actual, is(expected));
}
@@ -109,11 +109,14 @@ class SnowflakeKeyGenerateAlgorithmTest {
if (algorithm instanceof InstanceContextAware) {
((InstanceContextAware) algorithm).setInstanceContext(INSTANCE);
}
- assertThat(algorithm.generateKey(), is(0L));
- assertThat(algorithm.generateKey(), is(1L));
- assertThat(algorithm.generateKey(), is(2L));
- assertThat(algorithm.generateKey(), is(3L));
- assertThat(algorithm.generateKey(), is(4L));
+ Collection<? extends Comparable<?>> actual =
algorithm.generateKeys(mock(KeyGenerateContext.class), 5);
+ assertThat(actual.size(), is(5));
+ Iterator<? extends Comparable<?>> iterator = actual.iterator();
+ assertThat(iterator.next(), is(0L));
+ assertThat(iterator.next(), is(1L));
+ assertThat(iterator.next(), is(2L));
+ assertThat(iterator.next(), is(3L));
+ assertThat(iterator.next(), is(4L));
}
@Test
@@ -123,19 +126,19 @@ class SnowflakeKeyGenerateAlgorithmTest {
if (algorithm instanceof InstanceContextAware) {
((InstanceContextAware) algorithm).setInstanceContext(INSTANCE);
}
- String actualGenerateKey0 =
Long.toBinaryString(Long.parseLong(algorithm.generateKey().toString()));
+ String actualGenerateKey0 =
Long.toBinaryString(Long.parseLong(algorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next().toString()));
assertThat(Integer.parseInt(actualGenerateKey0.substring(actualGenerateKey0.length()
- 3), 2), is(0));
Awaitility.await().pollDelay(2L, TimeUnit.MILLISECONDS).until(() ->
true);
- String actualGenerateKey1 =
Long.toBinaryString(Long.parseLong(algorithm.generateKey().toString()));
+ String actualGenerateKey1 =
Long.toBinaryString(Long.parseLong(algorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next().toString()));
assertThat(Integer.parseInt(actualGenerateKey1.substring(actualGenerateKey1.length()
- 3), 2), is(1));
Awaitility.await().pollDelay(2L, TimeUnit.MILLISECONDS).until(() ->
true);
- String actualGenerateKey2 =
Long.toBinaryString(Long.parseLong(algorithm.generateKey().toString()));
+ String actualGenerateKey2 =
Long.toBinaryString(Long.parseLong(algorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next().toString()));
assertThat(Integer.parseInt(actualGenerateKey2.substring(actualGenerateKey2.length()
- 3), 2), is(2));
Awaitility.await().pollDelay(2L, TimeUnit.MILLISECONDS).until(() ->
true);
- String actualGenerateKey3 =
Long.toBinaryString(Long.parseLong(algorithm.generateKey().toString()));
+ String actualGenerateKey3 =
Long.toBinaryString(Long.parseLong(algorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next().toString()));
assertThat(Integer.parseInt(actualGenerateKey3.substring(actualGenerateKey3.length()
- 3), 2), is(3));
Awaitility.await().pollDelay(2L, TimeUnit.MILLISECONDS).until(() ->
true);
- String actualGenerateKey4 =
Long.toBinaryString(Long.parseLong(algorithm.generateKey().toString()));
+ String actualGenerateKey4 =
Long.toBinaryString(Long.parseLong(algorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next().toString()));
assertThat(Integer.parseInt(actualGenerateKey4.substring(actualGenerateKey4.length()
- 3), 2), is(0));
}
@@ -150,9 +153,7 @@ class SnowflakeKeyGenerateAlgorithmTest {
setLastMillis(algorithm, timeService.getCurrentMillis() + 2);
List<Comparable<?>> expected = Arrays.asList(4194304L, 8388609L,
8388610L, 12582912L, 12582913L, 16777217L, 16777218L, 20971520L, 20971521L,
25165825L);
List<Comparable<?>> actual = new ArrayList<>(DEFAULT_KEY_AMOUNT);
- for (int i = 0; i < DEFAULT_KEY_AMOUNT; i++) {
- actual.add(algorithm.generateKey());
- }
+ actual.addAll(algorithm.generateKeys(mock(KeyGenerateContext.class),
DEFAULT_KEY_AMOUNT));
assertThat(actual, is(expected));
}
@@ -169,9 +170,7 @@ class SnowflakeKeyGenerateAlgorithmTest {
}
private void batchGenerate(final KeyGenerateAlgorithm algorithm) {
- for (int i = 0; i < DEFAULT_KEY_AMOUNT; i++) {
- algorithm.generateKey();
- }
+ algorithm.generateKeys(mock(KeyGenerateContext.class),
DEFAULT_KEY_AMOUNT);
}
@Test
@@ -186,9 +185,7 @@ class SnowflakeKeyGenerateAlgorithmTest {
setSequence(algorithm, (1 << DEFAULT_SEQUENCE_BITS) - 1L);
List<Comparable<?>> expected = Arrays.asList(4194304L, 4194305L,
4194306L, 8388608L, 8388609L, 8388610L, 12582913L, 12582914L, 12582915L,
16777216L);
List<Comparable<?>> actual = new ArrayList<>(DEFAULT_KEY_AMOUNT);
- for (int i = 0; i < DEFAULT_KEY_AMOUNT; i++) {
- actual.add(algorithm.generateKey());
- }
+ actual.addAll(algorithm.generateKeys(mock(KeyGenerateContext.class),
DEFAULT_KEY_AMOUNT));
assertThat(actual, is(expected));
}
@@ -213,7 +210,8 @@ class SnowflakeKeyGenerateAlgorithmTest {
@Test
void assertSetMaxVibrationOffsetFailureWhenNegative() {
assertThrows(KeyGenerateAlgorithmInitializationException.class,
- () -> TypedSPILoader.getService(KeyGenerateAlgorithm.class,
"SNOWFLAKE", PropertiesBuilder.build(new Property("max-vibration-offset",
"-1"))).generateKey());
+ () -> TypedSPILoader.getService(KeyGenerateAlgorithm.class,
"SNOWFLAKE", PropertiesBuilder.build(new Property("max-vibration-offset",
"-1")))
+ .generateKeys(mock(KeyGenerateContext.class), 1));
}
@Test
@@ -227,7 +225,8 @@ class SnowflakeKeyGenerateAlgorithmTest {
@Test
void assertSetMaxVibrationOffsetFailureWhenOutOfRange() {
assertThrows(KeyGenerateAlgorithmInitializationException.class,
- () -> TypedSPILoader.getService(KeyGenerateAlgorithm.class,
"SNOWFLAKE", PropertiesBuilder.build(new Property("max-vibration-offset",
"4096"))).generateKey());
+ () -> TypedSPILoader.getService(KeyGenerateAlgorithm.class,
"SNOWFLAKE", PropertiesBuilder.build(new Property("max-vibration-offset",
"4096")))
+ .generateKeys(mock(KeyGenerateContext.class), 1));
}
@Test
@@ -239,6 +238,7 @@ class SnowflakeKeyGenerateAlgorithmTest {
@Test
void assertMaxTolerateTimeDifferenceMillisecondsWhenNegative() {
assertThrows(KeyGenerateAlgorithmInitializationException.class,
- () -> TypedSPILoader.getService(KeyGenerateAlgorithm.class,
"SNOWFLAKE", PropertiesBuilder.build(new
Property("max-tolerate-time-difference-milliseconds", "-1"))).generateKey());
+ () -> TypedSPILoader.getService(KeyGenerateAlgorithm.class,
"SNOWFLAKE", PropertiesBuilder.build(new
Property("max-tolerate-time-difference-milliseconds", "-1")))
+ .generateKeys(mock(KeyGenerateContext.class), 1));
}
}
diff --git
a/infra/algorithm/key-generator/type/uuid/src/main/java/org/apache/shardingsphere/keygen/uuid/algorithm/UUIDKeyGenerateAlgorithm.java
b/infra/algorithm/key-generator/type/uuid/src/main/java/org/apache/shardingsphere/keygen/uuid/algorithm/UUIDKeyGenerateAlgorithm.java
index 01cfa43b9c4..11b3866255b 100644
---
a/infra/algorithm/key-generator/type/uuid/src/main/java/org/apache/shardingsphere/keygen/uuid/algorithm/UUIDKeyGenerateAlgorithm.java
+++
b/infra/algorithm/key-generator/type/uuid/src/main/java/org/apache/shardingsphere/keygen/uuid/algorithm/UUIDKeyGenerateAlgorithm.java
@@ -18,7 +18,10 @@
package org.apache.shardingsphere.keygen.uuid.algorithm;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+import java.util.Collection;
+import java.util.LinkedList;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
@@ -28,8 +31,16 @@ import java.util.concurrent.ThreadLocalRandom;
public final class UUIDKeyGenerateAlgorithm implements KeyGenerateAlgorithm {
@Override
- public String generateKey() {
+ public Collection<String> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ Collection<String> result = new LinkedList<>();
ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();
+ for (int index = 0; index < keyGenerateCount; index++) {
+ result.add(generateKey(threadLocalRandom));
+ }
+ return result;
+ }
+
+ private String generateKey(final ThreadLocalRandom threadLocalRandom) {
return new UUID(threadLocalRandom.nextLong(),
threadLocalRandom.nextLong()).toString().replace("-", "");
}
diff --git
a/infra/algorithm/key-generator/type/uuid/src/test/java/org/apache/shardingsphere/keygen/uuid/algorithm/UUIDKeyGenerateAlgorithmTest.java
b/infra/algorithm/key-generator/type/uuid/src/test/java/org/apache/shardingsphere/keygen/uuid/algorithm/UUIDKeyGenerateAlgorithmTest.java
index b8c65e0eff7..7984c3cbae7 100644
---
a/infra/algorithm/key-generator/type/uuid/src/test/java/org/apache/shardingsphere/keygen/uuid/algorithm/UUIDKeyGenerateAlgorithmTest.java
+++
b/infra/algorithm/key-generator/type/uuid/src/test/java/org/apache/shardingsphere/keygen/uuid/algorithm/UUIDKeyGenerateAlgorithmTest.java
@@ -17,10 +17,12 @@
package org.apache.shardingsphere.keygen.uuid.algorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import org.junit.jupiter.api.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
class UUIDKeyGenerateAlgorithmTest {
@@ -28,6 +30,7 @@ class UUIDKeyGenerateAlgorithmTest {
@Test
void assertGenerateKey() {
- assertThat(uuidKeyGenerateAlgorithm.generateKey().length(), is(32));
+
assertThat(uuidKeyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).size(), is(1));
+
assertThat(uuidKeyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next().toString().length(), is(32));
}
}
diff --git
a/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/fixture/keygen/IncrementKeyGenerateAlgorithmFixture.java
b/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/fixture/keygen/IncrementKeyGenerateAlgorithmFixture.java
index fa7a62222e3..0ffef02cad2 100644
---
a/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/fixture/keygen/IncrementKeyGenerateAlgorithmFixture.java
+++
b/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/fixture/keygen/IncrementKeyGenerateAlgorithmFixture.java
@@ -18,16 +18,20 @@
package org.apache.shardingsphere.test.e2e.driver.fixture.keygen;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
public final class IncrementKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm {
private final AtomicInteger count = new AtomicInteger();
@Override
- public Comparable<?> generateKey() {
- return count.incrementAndGet();
+ public Collection<Comparable<?>> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ return IntStream.range(0, keyGenerateCount).mapToObj(each ->
count.incrementAndGet()).collect(Collectors.toList());
}
@Override
diff --git
a/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/fixture/keygen/ResetIncrementKeyGenerateAlgorithmFixture.java
b/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/fixture/keygen/ResetIncrementKeyGenerateAlgorithmFixture.java
index 86fbc1e85b5..dfe814a3856 100644
---
a/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/fixture/keygen/ResetIncrementKeyGenerateAlgorithmFixture.java
+++
b/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/fixture/keygen/ResetIncrementKeyGenerateAlgorithmFixture.java
@@ -19,8 +19,12 @@ package
org.apache.shardingsphere.test.e2e.driver.fixture.keygen;
import lombok.Getter;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
public final class ResetIncrementKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm {
@@ -28,8 +32,8 @@ public final class ResetIncrementKeyGenerateAlgorithmFixture
implements KeyGener
private static final AtomicInteger COUNT = new AtomicInteger();
@Override
- public Comparable<?> generateKey() {
- return COUNT.incrementAndGet();
+ public Collection<Comparable<?>> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ return IntStream.range(0, keyGenerateCount).mapToObj(each ->
COUNT.incrementAndGet()).collect(Collectors.toList());
}
@Override
diff --git
a/test/e2e/fixture/src/test/java/org/apache/shardingsphere/test/e2e/fixture/ITAutoIncrementKeyGenerateAlgorithmFixture.java
b/test/e2e/fixture/src/test/java/org/apache/shardingsphere/test/e2e/fixture/ITAutoIncrementKeyGenerateAlgorithmFixture.java
index 2610a331769..a6bbe57d40d 100644
---
a/test/e2e/fixture/src/test/java/org/apache/shardingsphere/test/e2e/fixture/ITAutoIncrementKeyGenerateAlgorithmFixture.java
+++
b/test/e2e/fixture/src/test/java/org/apache/shardingsphere/test/e2e/fixture/ITAutoIncrementKeyGenerateAlgorithmFixture.java
@@ -18,16 +18,20 @@
package org.apache.shardingsphere.test.e2e.fixture;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+import java.util.Collection;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
public final class ITAutoIncrementKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm {
private final AtomicLong idGenerator = new AtomicLong(1L);
@Override
- public Long generateKey() {
- return idGenerator.getAndIncrement();
+ public Collection<Comparable<?>> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ return IntStream.range(0, keyGenerateCount).mapToObj(each ->
idGenerator.getAndIncrement()).collect(Collectors.toList());
}
@Override
diff --git
a/test/e2e/fixture/src/test/java/org/apache/shardingsphere/test/e2e/fixture/ITKeyGenerateAlgorithmFixture.java
b/test/e2e/fixture/src/test/java/org/apache/shardingsphere/test/e2e/fixture/ITKeyGenerateAlgorithmFixture.java
index ecb8baedbc9..e45b91550a4 100644
---
a/test/e2e/fixture/src/test/java/org/apache/shardingsphere/test/e2e/fixture/ITKeyGenerateAlgorithmFixture.java
+++
b/test/e2e/fixture/src/test/java/org/apache/shardingsphere/test/e2e/fixture/ITKeyGenerateAlgorithmFixture.java
@@ -20,8 +20,12 @@ package org.apache.shardingsphere.test.e2e.fixture;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.InstanceContextAware;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+import java.util.Collection;
import java.util.Properties;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
public final class ITKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm, InstanceContextAware {
@@ -33,8 +37,8 @@ public final class ITKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm
}
@Override
- public Long generateKey() {
- return 1L;
+ public Collection<Comparable<?>> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ return IntStream.range(0, keyGenerateCount).mapToObj(each ->
1L).collect(Collectors.toList());
}
@Override
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
index fa75ea6ec13..c6630b38117 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
@@ -22,6 +22,7 @@ import org.apache.commons.lang3.tuple.Pair;
import
org.apache.shardingsphere.data.pipeline.scenario.migration.MigrationJobType;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.keygen.snowflake.algorithm.SnowflakeKeyGenerateAlgorithm;
import
org.apache.shardingsphere.test.e2e.data.pipeline.cases.PipelineContainerComposer;
import
org.apache.shardingsphere.test.e2e.data.pipeline.cases.migration.AbstractMigrationE2EIT;
@@ -45,6 +46,7 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
@PipelineE2ESettings(database = {
@PipelineE2EDatabaseSettings(type = "PostgreSQL", scenarioFiles =
"env/scenario/general/postgresql.xml"),
@@ -101,7 +103,7 @@ class PostgreSQLMigrationGeneralE2EIT extends
AbstractMigrationE2EIT {
private void checkOrderMigration(final PipelineContainerComposer
containerComposer, final String jobId) throws SQLException {
containerComposer.waitIncrementTaskFinished(String.format("SHOW
MIGRATION STATUS '%s'", jobId));
stopMigrationByJobId(containerComposer, jobId);
- long recordId = new SnowflakeKeyGenerateAlgorithm().generateKey();
+ long recordId = new
SnowflakeKeyGenerateAlgorithm().generateKeys(mock(KeyGenerateContext.class),
1).iterator().next();
containerComposer.sourceExecuteWithLog(String.format("INSERT INTO %s
(order_id,user_id,status) VALUES (%s, %s, '%s')",
String.join(".", PipelineContainerComposer.SCHEMA_NAME,
SOURCE_TABLE_NAME), recordId, 1, "afterStop"));
startMigrationByJobId(containerComposer, jobId);
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/primarykey/IndexesMigrationE2EIT.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/primarykey/IndexesMigrationE2EIT.java
index 02d96b941df..a4544592799 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/primarykey/IndexesMigrationE2EIT.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/primarykey/IndexesMigrationE2EIT.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.database.postgresql.type.PostgreSQLDataba
import
org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.keygen.uuid.algorithm.UUIDKeyGenerateAlgorithm;
import
org.apache.shardingsphere.test.e2e.data.pipeline.cases.PipelineContainerComposer;
import
org.apache.shardingsphere.test.e2e.data.pipeline.cases.migration.AbstractMigrationE2EIT;
@@ -50,6 +51,7 @@ import java.util.function.Consumer;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
/**
* E2E IT for different types of indexes, includes:
@@ -94,9 +96,9 @@ class IndexesMigrationE2EIT extends AbstractMigrationE2EIT {
// TODO PostgreSQL update delete events not support if table
without unique keys at increment task.
final Consumer<DataSource> incrementalTaskFn = dataSource -> {
if (containerComposer.getDatabaseType() instanceof
MySQLDatabaseType) {
- doCreateUpdateDelete(containerComposer,
keyGenerateAlgorithm.generateKey());
+ doCreateUpdateDelete(containerComposer,
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next());
}
- Object orderId = keyGenerateAlgorithm.generateKey();
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next();
insertOneOrder(containerComposer, orderId);
containerComposer.assertOrderRecordExist(dataSource,
"t_order", orderId);
};
@@ -171,10 +173,10 @@ class IndexesMigrationE2EIT extends
AbstractMigrationE2EIT {
return;
}
KeyGenerateAlgorithm keyGenerateAlgorithm = new
UUIDKeyGenerateAlgorithm();
- Object uniqueKey = keyGenerateAlgorithm.generateKey();
+ Object uniqueKey =
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next();
assertMigrationSuccess(containerComposer, sql, "user_id",
keyGenerateAlgorithm, consistencyCheckAlgorithmType, dataSource -> {
insertOneOrder(containerComposer, uniqueKey);
- doCreateUpdateDelete(containerComposer,
keyGenerateAlgorithm.generateKey());
+ doCreateUpdateDelete(containerComposer,
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next());
containerComposer.assertOrderRecordExist(dataSource,
"t_order", uniqueKey);
});
}
@@ -194,10 +196,10 @@ class IndexesMigrationE2EIT extends
AbstractMigrationE2EIT {
return;
}
KeyGenerateAlgorithm keyGenerateAlgorithm = new
AutoIncrementKeyGenerateAlgorithm();
- Object uniqueKey = keyGenerateAlgorithm.generateKey();
+ Object uniqueKey =
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next();
assertMigrationSuccess(containerComposer, sql, "user_id",
keyGenerateAlgorithm, consistencyCheckAlgorithmType, dataSource -> {
insertOneOrder(containerComposer, uniqueKey);
- doCreateUpdateDelete(containerComposer,
keyGenerateAlgorithm.generateKey());
+ doCreateUpdateDelete(containerComposer,
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next());
containerComposer.assertOrderRecordExist(dataSource,
"t_order", uniqueKey);
});
}
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/task/MySQLIncrementTask.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/task/MySQLIncrementTask.java
index 5d9377152f0..d47185155ee 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/task/MySQLIncrementTask.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/task/MySQLIncrementTask.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.test.e2e.data.pipeline.cases.task;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.test.e2e.data.pipeline.cases.base.BaseIncrementTask;
import
org.apache.shardingsphere.test.e2e.data.pipeline.util.DataSourceExecuteUtils;
@@ -27,6 +28,8 @@ import javax.sql.DataSource;
import java.time.Instant;
import java.util.concurrent.ThreadLocalRandom;
+import static org.mockito.Mockito.mock;
+
@RequiredArgsConstructor
@Slf4j
// TODO remove later
@@ -59,7 +62,7 @@ public final class MySQLIncrementTask extends
BaseIncrementTask {
private Object insertOrder() {
ThreadLocalRandom random = ThreadLocalRandom.current();
- Object[] orderInsertDate = new
Object[]{primaryKeyGenerateAlgorithm.generateKey(), random.nextInt(0, 6),
+ Object[] orderInsertDate = new
Object[]{primaryKeyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next(), random.nextInt(0, 6),
random.nextInt(1, 99), "中文测试"};
DataSourceExecuteUtils.execute(dataSource, String.format("INSERT INTO
%s (order_id,user_id,t_unsigned_int,status) VALUES (?, ?, ?, ?)",
orderTableName), orderInsertDate);
return orderInsertDate[0];
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/task/PostgreSQLIncrementTask.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/task/PostgreSQLIncrementTask.java
index e574eb68e83..fbbf0add4f2 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/task/PostgreSQLIncrementTask.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/task/PostgreSQLIncrementTask.java
@@ -21,6 +21,7 @@ import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.keygen.snowflake.algorithm.SnowflakeKeyGenerateAlgorithm;
import
org.apache.shardingsphere.test.e2e.data.pipeline.cases.base.BaseIncrementTask;
import
org.apache.shardingsphere.test.e2e.data.pipeline.framework.helper.PipelineCaseHelper;
@@ -32,6 +33,8 @@ import javax.sql.DataSource;
import java.time.Instant;
import java.util.concurrent.ThreadLocalRandom;
+import static org.mockito.Mockito.mock;
+
@RequiredArgsConstructor
@Slf4j
// TODO remove later
@@ -68,7 +71,8 @@ public final class PostgreSQLIncrementTask extends
BaseIncrementTask {
private Object insertOrder() {
ThreadLocalRandom random = ThreadLocalRandom.current();
- Object[] orderInsertDate = new
Object[]{KEY_GENERATE_ALGORITHM.generateKey(), random.nextInt(0, 6), "'中文'" +
System.currentTimeMillis(), PipelineCaseHelper.generateJsonString(5, true),
+ Object[] orderInsertDate = new
Object[]{KEY_GENERATE_ALGORITHM.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next(), random.nextInt(0, 6), "'中文'" + System.currentTimeMillis(),
+ PipelineCaseHelper.generateJsonString(5, true),
PipelineCaseHelper.generateJsonString(10, false)};
String insertSQL = String.format("INSERT INTO %s
(order_id,user_id,status,t_json,t_jsonb) VALUES (?, ?, ?, ?, ?)",
getTableNameWithSchema(orderTableName));
log.info("insert order sql:{}", insertSQL);
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/framework/helper/PipelineCaseHelper.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/framework/helper/PipelineCaseHelper.java
index b70464dda11..058c0a7c1ee 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/framework/helper/PipelineCaseHelper.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/framework/helper/PipelineCaseHelper.java
@@ -29,6 +29,7 @@ import
org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import
org.apache.shardingsphere.infra.database.opengauss.type.OpenGaussDatabaseType;
import
org.apache.shardingsphere.infra.database.postgresql.type.PostgreSQLDatabaseType;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
import
org.apache.shardingsphere.test.e2e.data.pipeline.util.AutoIncrementKeyGenerateAlgorithm;
import java.math.BigDecimal;
@@ -46,6 +47,8 @@ import java.util.List;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
+import static org.mockito.Mockito.mock;
+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Slf4j
public final class PipelineCaseHelper {
@@ -83,7 +86,7 @@ public final class PipelineCaseHelper {
if (databaseType instanceof MySQLDatabaseType) {
for (int i = 0; i < insertRows; i++) {
int randomInt = generateInt(-100, 100);
- Object orderId = keyGenerateAlgorithm.generateKey();
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next();
int randomUnsignedInt = generateInt(0, 100);
LocalDateTime now = LocalDateTime.now();
Object[] addObjs = {orderId, generateInt(0, 100),
generateString(6), randomInt, randomInt, randomInt,
@@ -96,7 +99,7 @@ public final class PipelineCaseHelper {
}
if (databaseType instanceof PostgreSQLDatabaseType) {
for (int i = 0; i < insertRows; i++) {
- Object orderId = keyGenerateAlgorithm.generateKey();
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next();
result.add(new Object[]{orderId, generateInt(0, 100),
generateString(6), generateInt(-128, 127),
BigDecimal.valueOf(generateDouble()), true,
"bytea".getBytes(), generateString(2), generateString(2), generateFloat(),
generateDouble(),
generateJsonString(8, false), generateJsonString(12,
true), emojiText, LocalDate.now(),
@@ -106,7 +109,7 @@ public final class PipelineCaseHelper {
}
if (databaseType instanceof OpenGaussDatabaseType) {
for (int i = 0; i < insertRows; i++) {
- Object orderId = keyGenerateAlgorithm.generateKey();
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next();
byte[] bytesValue = {Byte.MIN_VALUE, -1, 0, 1, Byte.MAX_VALUE};
result.add(new Object[]{orderId, generateInt(0, 1000),
"'status'" + i, generateInt(-1000, 9999), generateInt(0, 100), generateFloat(),
generateDouble(),
BigDecimal.valueOf(generateDouble()), false,
generateString(6), "texts", bytesValue, bytesValue, LocalDate.now(),
LocalTime.now(), "2001-10-01",
@@ -166,9 +169,9 @@ public final class PipelineCaseHelper {
private static List<Object[]> generateOrderItemInsertData(final
KeyGenerateAlgorithm keyGenerateAlgorithm, final int insertRows) {
List<Object[]> result = new ArrayList<>(insertRows);
for (int i = 0; i < insertRows; i++) {
- Object orderId = keyGenerateAlgorithm.generateKey();
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next();
int userId = generateInt(0, 100);
- result.add(new Object[]{keyGenerateAlgorithm.generateKey(),
orderId, userId, "SUCCESS"});
+ result.add(new
Object[]{keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next(), orderId, userId, "SUCCESS"});
}
return result;
}
@@ -187,7 +190,7 @@ public final class PipelineCaseHelper {
log.info("init data begin: {}", LocalDateTime.now());
try (PreparedStatement preparedStatement =
connection.prepareStatement(String.format("INSERT INTO %s
(order_id,user_id,status) VALUES (?,?,?)", tableName))) {
for (int i = 0; i < recordCount; i++) {
- preparedStatement.setObject(1,
keyGenerateAlgorithm.generateKey());
+ preparedStatement.setObject(1,
keyGenerateAlgorithm.generateKeys(mock(KeyGenerateContext.class),
1).iterator().next());
preparedStatement.setObject(2,
ThreadLocalRandom.current().nextInt(0, 6));
preparedStatement.setObject(3, "OK");
preparedStatement.addBatch();
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/util/AutoIncrementKeyGenerateAlgorithm.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/util/AutoIncrementKeyGenerateAlgorithm.java
index ea95b2413e9..06a80e96ce4 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/util/AutoIncrementKeyGenerateAlgorithm.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/util/AutoIncrementKeyGenerateAlgorithm.java
@@ -18,16 +18,20 @@
package org.apache.shardingsphere.test.e2e.data.pipeline.util;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
public final class AutoIncrementKeyGenerateAlgorithm implements
KeyGenerateAlgorithm {
private final AtomicInteger idGen = new AtomicInteger(1);
@Override
- public Integer generateKey() {
- return idGen.getAndIncrement();
+ public Collection<Integer> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ return IntStream.range(0, keyGenerateCount).mapToObj(each ->
idGen.getAndIncrement()).collect(Collectors.toList());
}
@Override
diff --git
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/fixture/keygen/RewriteKeyGenerateAlgorithmFixture.java
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/fixture/keygen/RewriteKeyGenerateAlgorithmFixture.java
index 40820915117..60a8bbebfe5 100644
---
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/fixture/keygen/RewriteKeyGenerateAlgorithmFixture.java
+++
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/fixture/keygen/RewriteKeyGenerateAlgorithmFixture.java
@@ -18,12 +18,17 @@
package org.apache.shardingsphere.test.it.rewrite.fixture.keygen;
import org.apache.shardingsphere.keygen.core.algorithm.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.keygen.core.context.KeyGenerateContext;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
public final class RewriteKeyGenerateAlgorithmFixture implements
KeyGenerateAlgorithm {
@Override
- public Long generateKey() {
- return 1L;
+ public Collection<Long> generateKeys(final KeyGenerateContext
keyGenerateContext, final int keyGenerateCount) {
+ return IntStream.range(0, keyGenerateCount).mapToObj(each ->
1L).collect(Collectors.toList());
}
@Override