You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/07/07 06:45:35 UTC
[shardingsphere] branch master updated: Optimize worker-id into properties of key generate algorithm (#18916)
This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new ba633c59cd2 Optimize worker-id into properties of key generate algorithm (#18916)
ba633c59cd2 is described below
commit ba633c59cd2b013a0e1f49be685f4bddb740aeb6
Author: gin <ja...@163.com>
AuthorDate: Thu Jul 7 14:45:28 2022 +0800
Optimize worker-id into properties of key generate algorithm (#18916)
---
.../keygen/SnowflakeKeyGenerateAlgorithm.java | 37 ++++++++++++++--------
.../keygen/fixture/WorkerIdGeneratorFixture.java | 7 ++++
.../keygen/CosIdSnowflakeKeyGenerateAlgorithm.java | 18 ++++++++++-
.../keygen/fixture/WorkerIdGeneratorFixture.java | 7 ++++
.../infra/instance/InstanceContext.java | 15 +++++++--
.../infra/instance/workerid/WorkerIdGenerator.java | 36 ++++++++++++++++++++-
.../instance/fixture/WorkerIdGeneratorFixture.java | 7 ++++
.../builder/global/GlobalRulesBuilderTest.java | 14 +++++---
.../generator/ClusterWorkerIdGenerator.java | 21 ++++++++++--
.../generator/MemoryWorkerIdGenerator.java | 9 +++++-
.../generator/StandaloneWorkerIdGenerator.java | 15 ++++++++-
11 files changed, 161 insertions(+), 25 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithm.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithm.java
index 8c8ccfa79bd..f2ab00ef081 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithm.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/keygen/SnowflakeKeyGenerateAlgorithm.java
@@ -43,6 +43,8 @@ public final class SnowflakeKeyGenerateAlgorithm implements KeyGenerateAlgorithm
public static final long EPOCH;
+ private static final String WORKER_ID_KEY = "worker-id";
+
private static final String MAX_VIBRATION_OFFSET_KEY = "max-vibration-offset";
private static final String MAX_TOLERATE_TIME_DIFFERENCE_MILLISECONDS_KEY = "max-tolerate-time-difference-milliseconds";
@@ -71,6 +73,8 @@ public final class SnowflakeKeyGenerateAlgorithm implements KeyGenerateAlgorithm
@Getter
private Properties props;
+ private long workerId;
+
private int maxVibrationOffset;
private int maxTolerateTimeDifferenceMilliseconds;
@@ -81,9 +85,6 @@ public final class SnowflakeKeyGenerateAlgorithm implements KeyGenerateAlgorithm
private volatile long lastMilliseconds;
- @Setter
- private InstanceContext instanceContext;
-
static {
Calendar calendar = Calendar.getInstance();
calendar.set(2016, Calendar.NOVEMBER, 1);
@@ -101,6 +102,25 @@ public final class SnowflakeKeyGenerateAlgorithm implements KeyGenerateAlgorithm
maxTolerateTimeDifferenceMilliseconds = getMaxTolerateTimeDifferenceMilliseconds(props);
}
+ @Override
+ public void setInstanceContext(final InstanceContext instanceContext) {
+ workerId = initWorkerId(instanceContext);
+ }
+
+ private long initWorkerId(final InstanceContext instanceContext) {
+ long result = null == instanceContext ? parseWorkerId() : instanceContext.generateWorkerId(props);
+ rangeValidate(result);
+ return result;
+ }
+
+ private long parseWorkerId() {
+ return null == props ? DEFAULT_WORKER_ID : Long.parseLong(props.getOrDefault(WORKER_ID_KEY, DEFAULT_WORKER_ID).toString());
+ }
+
+ private void rangeValidate(final long workerId) {
+ Preconditions.checkArgument(workerId >= 0L && workerId < WORKER_ID_MAX_VALUE, "Illegal worker id.");
+ }
+
private int getMaxVibrationOffset(final Properties props) {
int result = Integer.parseInt(props.getOrDefault(MAX_VIBRATION_OFFSET_KEY, DEFAULT_VIBRATION_VALUE).toString());
Preconditions.checkArgument(result >= 0 && result <= SEQUENCE_MASK, "Illegal max vibration offset.");
@@ -126,7 +146,7 @@ public final class SnowflakeKeyGenerateAlgorithm implements KeyGenerateAlgorithm
sequence = sequenceOffset;
}
lastMilliseconds = currentMilliseconds;
- return ((currentMilliseconds - EPOCH) << TIMESTAMP_LEFT_SHIFT_BITS) | (getWorkerId() << WORKER_ID_LEFT_SHIFT_BITS) | sequence;
+ return ((currentMilliseconds - EPOCH) << TIMESTAMP_LEFT_SHIFT_BITS) | (workerId << WORKER_ID_LEFT_SHIFT_BITS) | sequence;
}
@SneakyThrows(InterruptedException.class)
@@ -154,15 +174,6 @@ public final class SnowflakeKeyGenerateAlgorithm implements KeyGenerateAlgorithm
sequenceOffset = sequenceOffset >= maxVibrationOffset ? 0 : sequenceOffset + 1;
}
- private long getWorkerId() {
- if (null == instanceContext) {
- return DEFAULT_WORKER_ID;
- }
- long result = instanceContext.getWorkerId();
- Preconditions.checkArgument(result >= 0L && result < WORKER_ID_MAX_VALUE, "Illegal worker id.");
- return result;
- }
-
@Override
public String getType() {
return "SNOWFLAKE";
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
index 8612313eb37..f9d76e364fa 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.sharding.algorithm.keygen.fixture;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
+import java.util.Properties;
+
@RequiredArgsConstructor
public final class WorkerIdGeneratorFixture implements WorkerIdGenerator {
@@ -29,4 +31,9 @@ public final class WorkerIdGeneratorFixture implements WorkerIdGenerator {
public long generate() {
return fixtureWorkerId;
}
+
+ @Override
+ public long generate(final Properties props) {
+ return fixtureWorkerId;
+ }
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-plugin/shardingsphere-sharding-cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-plugin/shardingsphere-sharding-cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
index b2ce6e730ac..48764f7ff23 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-plugin/shardingsphere-sharding-cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-plugin/shardingsphere-sharding-cosid/src/main/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/CosIdSnowflakeKeyGenerateAlgorithm.java
@@ -43,6 +43,12 @@ public final class CosIdSnowflakeKeyGenerateAlgorithm implements KeyGenerateAlgo
public static final String EPOCH_KEY = "epoch";
+ public static final String WORKER_ID_KEY = "worker-id";
+
+ public static final long DEFAULT_WORKER_ID = 0L;
+
+ public static final long WORKER_ID_MAX_VALUE = 1L << 10;
+
@Getter
private Properties props;
@@ -79,12 +85,22 @@ public final class CosIdSnowflakeKeyGenerateAlgorithm implements KeyGenerateAlgo
@Override
public void setInstanceContext(final InstanceContext instanceContext) {
- long workerId = instanceContext.getWorkerId();
+ long workerId = initWorkerId(instanceContext);
MillisecondSnowflakeId millisecondSnowflakeId =
new MillisecondSnowflakeId(epoch, MillisecondSnowflakeId.DEFAULT_TIMESTAMP_BIT, MillisecondSnowflakeId.DEFAULT_MACHINE_BIT, MillisecondSnowflakeId.DEFAULT_SEQUENCE_BIT, workerId);
snowflakeId = new StringSnowflakeId(new ClockSyncSnowflakeId(millisecondSnowflakeId), Radix62IdConverter.PAD_START);
}
+ private long initWorkerId(final InstanceContext instanceContext) {
+ long result = null == instanceContext ? Long.parseLong(props.getOrDefault(WORKER_ID_KEY, DEFAULT_WORKER_ID).toString()) : instanceContext.generateWorkerId(props);
+ rangeValidate(result);
+ return result;
+ }
+
+ private void rangeValidate(final long workerId) {
+ Preconditions.checkArgument(workerId >= 0L && workerId < WORKER_ID_MAX_VALUE, "Illegal worker id.");
+ }
+
@Override
public Comparable<?> generateKey() {
if (asString) {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-plugin/shardingsphere-sharding-cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-plugin/shardingsphere-sharding-cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
index ac4469c5f03..57010608c06 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-plugin/shardingsphere-sharding-cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-plugin/shardingsphere-sharding-cosid/src/test/java/org/apache/shardingsphere/sharding/cosid/algorithm/keygen/fixture/WorkerIdGeneratorFixture.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.sharding.cosid.algorithm.keygen.fixture;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
+import java.util.Properties;
+
@RequiredArgsConstructor
public final class WorkerIdGeneratorFixture implements WorkerIdGenerator {
@@ -29,4 +31,9 @@ public final class WorkerIdGeneratorFixture implements WorkerIdGenerator {
public long generate() {
return fixtureWorkerId;
}
+
+ @Override
+ public long generate(final Properties props) {
+ return fixtureWorkerId;
+ }
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
index ebef3b2a871..9f2eb4c4fad 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/InstanceContext.java
@@ -30,6 +30,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
+import java.util.Properties;
/**
* Instance context.
@@ -52,7 +53,6 @@ public final class InstanceContext {
this.workerIdGenerator = workerIdGenerator;
this.modeConfiguration = modeConfiguration;
this.lockContext = lockContext;
- getWorkerId();
lockContext.initLockState(this);
}
@@ -105,15 +105,26 @@ public final class InstanceContext {
* Get worker id.
*
* @return worker id
+ * @deprecated remove it when worker-id refactor was completed
*/
+ @Deprecated
public long getWorkerId() {
if (null == instance.getWorkerId()) {
- // TODO process generate failed
Optional.of(workerIdGenerator.generate()).ifPresent(instance::setWorkerId);
}
return instance.getWorkerId();
}
+ /**
+ * Generate worker id.
+ *
+ * @param props props
+ * @return worker id
+ */
+ public long generateWorkerId(final Properties props) {
+ return workerIdGenerator.generate(props);
+ }
+
/**
* Add compute node instance.
*
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/workerid/WorkerIdGenerator.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/workerid/WorkerIdGenerator.java
index 331a67d9e36..1b2d3b1c280 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/workerid/WorkerIdGenerator.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/instance/workerid/WorkerIdGenerator.java
@@ -17,15 +17,49 @@
package org.apache.shardingsphere.infra.instance.workerid;
+import java.util.Optional;
+import java.util.Properties;
+
/**
* Worker id generator.
*/
public interface WorkerIdGenerator {
+ String WORKER_ID_KEY = "worker-id";
+
+ long DEFAULT_WORKER_ID = 0;
+
/**
* Generate worker id.
- *
+ *
* @return worker id
+ * @deprecated remove it when worker-id refactor was completed
*/
+ @Deprecated
long generate();
+
+ /**
+ * Generate worker id.
+ *
+ * @param props props
+ * @return worker id
+ */
+ long generate(Properties props);
+
+ /**
+ * Parse worker id.
+ *
+ * @param props props
+ * @return worker id
+ */
+ default Optional<Long> parseWorkerId(final Properties props) {
+ if (null == props) {
+ return Optional.of(DEFAULT_WORKER_ID);
+ }
+ Object workerId = props.get(WORKER_ID_KEY);
+ if (null == workerId) {
+ return Optional.empty();
+ }
+ return Optional.of(Long.parseLong(workerId.toString()));
+ }
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/instance/fixture/WorkerIdGeneratorFixture.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/instance/fixture/WorkerIdGeneratorFixture.java
index 7f72b3d5d2c..ead4fa2527a 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/instance/fixture/WorkerIdGeneratorFixture.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/instance/fixture/WorkerIdGeneratorFixture.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.infra.instance.fixture;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
+import java.util.Properties;
+
@RequiredArgsConstructor
public final class WorkerIdGeneratorFixture implements WorkerIdGenerator {
@@ -29,4 +31,9 @@ public final class WorkerIdGeneratorFixture implements WorkerIdGenerator {
public long generate() {
return fixtureWorkerId;
}
+
+ @Override
+ public long generate(final Properties props) {
+ return fixtureWorkerId;
+ }
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
index 7aec9d7151b..05d23973e97 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaData;
+import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
import org.apache.shardingsphere.infra.lock.LockContext;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -38,6 +39,7 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public final class GlobalRulesBuilderTest {
@@ -58,13 +60,17 @@ public final class GlobalRulesBuilderTest {
private InstanceContext buildInstanceContext() {
ComputeNodeInstance computeNodeInstance = new ComputeNodeInstance(new JDBCInstanceMetaData(UUID.randomUUID().toString()));
ModeConfiguration modeConfiguration = new ModeConfiguration("Standalone", null, false);
- InstanceContext instanceContext = new InstanceContext(computeNodeInstance, () -> 0, modeConfiguration, mock(LockContext.class));
- return instanceContext;
+ return new InstanceContext(computeNodeInstance, createWorkerIdGenerator(), modeConfiguration, mock(LockContext.class));
}
@SneakyThrows
private ShardingSphereDatabase buildShardingSphereDatabase() {
- ShardingSphereDatabase shardingSphereDatabase = ShardingSphereDatabase.create("logic_db", new MySQLDatabaseType());
- return shardingSphereDatabase;
+ return ShardingSphereDatabase.create("logic_db", new MySQLDatabaseType());
+ }
+
+ private WorkerIdGenerator createWorkerIdGenerator() {
+ WorkerIdGenerator result = mock(WorkerIdGenerator.class);
+ when(result.generate()).thenReturn(0L);
+ return result;
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/workerid/generator/ClusterWorkerIdGenerator.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/workerid/generator/ClusterWorkerIdGenerator.java
index ec032a0471f..ceeabe48a47 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/workerid/generator/ClusterWorkerIdGenerator.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/workerid/generator/ClusterWorkerIdGenerator.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.workerid.generator;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
import org.apache.shardingsphere.mode.manager.cluster.coordinator.RegistryCenter;
@@ -25,10 +26,12 @@ import org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.worke
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import java.util.Optional;
+import java.util.Properties;
/**
* Worker id generator for cluster mode.
*/
+@Slf4j
@RequiredArgsConstructor
public final class ClusterWorkerIdGenerator implements WorkerIdGenerator {
@@ -43,9 +46,23 @@ public final class ClusterWorkerIdGenerator implements WorkerIdGenerator {
return registryCenter.getComputeNodeStatusService().loadInstanceWorkerId(instanceMetaData.getId()).orElseGet(this::reGenerate);
}
- private Long reGenerate() {
- Long result = Long.valueOf(Optional.ofNullable(repository.getSequentialId(WorkerIdNode.getWorkerIdGeneratorPath(instanceMetaData.getId()), "")).orElse("0"));
+ @Override
+ public long generate(final Properties props) {
+ long result = generate();
+ checkConfigured(result, props);
+ return result;
+ }
+
+ private long reGenerate() {
+ long result = Long.parseLong(Optional.ofNullable(repository.getSequentialId(WorkerIdNode.getWorkerIdGeneratorPath(instanceMetaData.getId()), "")).orElse("0"));
registryCenter.getComputeNodeStatusService().persistInstanceWorkerId(instanceMetaData.getId(), result);
return result;
}
+
+ private void checkConfigured(final long generatedWorkerId, final Properties props) {
+ Optional<Long> configuredWorkerId = parseWorkerId(props);
+ if (configuredWorkerId.isPresent()) {
+ log.warn("No need to configured {} in cluster mode, system assigned work-id was {}", WORKER_ID_KEY, generatedWorkerId);
+ }
+ }
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/workerid/generator/MemoryWorkerIdGenerator.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/workerid/generator/MemoryWorkerIdGenerator.java
index 7a639b1d2d1..18d5417c382 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/workerid/generator/MemoryWorkerIdGenerator.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/workerid/generator/MemoryWorkerIdGenerator.java
@@ -19,6 +19,8 @@ package org.apache.shardingsphere.mode.manager.memory.workerid.generator;
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
+import java.util.Properties;
+
/**
* Worker id generator for memory mode.
*/
@@ -27,6 +29,11 @@ public final class MemoryWorkerIdGenerator implements WorkerIdGenerator {
@Override
public long generate() {
// TODO need to support custom configuration of worker-id
- return 0;
+ return DEFAULT_WORKER_ID;
+ }
+
+ @Override
+ public long generate(final Properties props) {
+ return parseWorkerId(props).orElse(DEFAULT_WORKER_ID);
}
}
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/workerid/generator/StandaloneWorkerIdGenerator.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/workerid/generator/StandaloneWorkerIdGenerator.java
index 3ec268e83c6..481a63d5b8f 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/workerid/generator/StandaloneWorkerIdGenerator.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/workerid/generator/StandaloneWorkerIdGenerator.java
@@ -17,8 +17,12 @@
package org.apache.shardingsphere.mode.manager.standalone.workerid.generator;
+import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import org.apache.shardingsphere.infra.instance.workerid.WorkerIdGenerator;
+import java.util.Optional;
+import java.util.Properties;
+
/**
* Worker id generator for standalone mode.
*/
@@ -27,6 +31,15 @@ public final class StandaloneWorkerIdGenerator implements WorkerIdGenerator {
@Override
public long generate() {
// TODO need to support custom configuration of worker-id
- return 0;
+ return DEFAULT_WORKER_ID;
+ }
+
+ @Override
+ public long generate(final Properties props) {
+ Optional<Long> result = parseWorkerId(props);
+ if (result.isPresent()) {
+ return result.get();
+ }
+ throw new ShardingSphereException("{} is required configuration item in standalone mode", WORKER_ID_KEY);
}
}