This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 b7294f7d352 Refactor GlobalClockRule (#32932)
b7294f7d352 is described below
commit b7294f7d352dc25e63cf29a2ea5ebde8090a1218
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Sep 20 11:59:48 2024 +0800
Refactor GlobalClockRule (#32932)
---
.../executor/GlobalClockTransactionHook.java | 6 ------
.../globalclock/rule/GlobalClockRule.java | 24 ++++++++++++++--------
.../ral/queryable/ExportMetaDataExecutor.java | 7 +------
3 files changed, 16 insertions(+), 21 deletions(-)
diff --git
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/executor/GlobalClockTransactionHook.java
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/executor/GlobalClockTransactionHook.java
index c96091eefff..b316907aefc 100644
---
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/executor/GlobalClockTransactionHook.java
+++
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/executor/GlobalClockTransactionHook.java
@@ -50,20 +50,14 @@ public final class GlobalClockTransactionHook extends
TransactionHookAdapter {
@Override
public void init(final Properties props) {
- if (!Boolean.parseBoolean(props.getProperty("enabled"))) {
- enabled = false;
- return;
- }
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, props.getProperty("trunkType"));
Optional<GlobalClockTransactionExecutor>
globalClockTransactionExecutor =
DatabaseTypedSPILoader.findService(GlobalClockTransactionExecutor.class,
databaseType);
if (!globalClockTransactionExecutor.isPresent()) {
- enabled = false;
return;
}
enabled = true;
this.globalClockTransactionExecutor =
globalClockTransactionExecutor.get();
globalClockProvider =
TypedSPILoader.getService(GlobalClockProvider.class, String.join(".",
props.getProperty("type"), props.getProperty("provider")));
-
}
@Override
diff --git
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
index abe5782bcd7..0bf2aeaf03e 100644
---
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
+++
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
@@ -36,40 +36,46 @@ import java.util.Properties;
/**
* Global clock rule.
*/
-@Getter
public final class GlobalClockRule implements GlobalRule {
+ @Getter
private final GlobalClockRuleConfiguration configuration;
+ private final GlobalClockProvider provider;
+
public GlobalClockRule(final GlobalClockRuleConfiguration ruleConfig,
final Map<String, ShardingSphereDatabase> databases) {
configuration = ruleConfig;
if (ruleConfig.isEnabled()) {
- TypedSPILoader.getService(GlobalClockProvider.class,
getGlobalClockProviderType(), configuration.getProps());
+ provider = TypedSPILoader.getService(GlobalClockProvider.class,
getGlobalClockProviderType(), configuration.getProps());
TypedSPILoader.getService(TransactionHook.class, "GLOBAL_CLOCK",
createProperties(databases));
+ } else {
+ provider = null;
}
}
+ private String getGlobalClockProviderType() {
+ return String.join(".", configuration.getType(),
configuration.getProvider());
+ }
+
private Properties createProperties(final Map<String,
ShardingSphereDatabase> databases) {
Properties result = new Properties();
DatabaseType storageType =
findStorageType(databases.values()).orElseGet(DatabaseTypeEngine::getDefaultStorageType);
result.setProperty("trunkType",
storageType.getTrunkDatabaseType().orElse(storageType).getType());
- result.setProperty("enabled",
String.valueOf(configuration.isEnabled()));
result.setProperty("type", configuration.getType());
result.setProperty("provider", configuration.getProvider());
return result;
}
private Optional<DatabaseType> findStorageType(final
Collection<ShardingSphereDatabase> databases) {
- return databases.stream()
- .flatMap(each ->
each.getResourceMetaData().getStorageUnits().values().stream()).findFirst().map(StorageUnit::getStorageType);
+ return databases.stream().flatMap(each ->
each.getResourceMetaData().getStorageUnits().values().stream()).findFirst().map(StorageUnit::getStorageType);
}
/**
- * Get global clock provider type.
+ * Get current timestamp.
*
- * @return global clock provider type
+ * @return current timestamp
*/
- public String getGlobalClockProviderType() {
- return String.join(".", configuration.getType(),
configuration.getProvider());
+ public long getCurrentTimestamp() {
+ return null == provider ? 0L : provider.getCurrentTimestamp();
}
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
index 326d65e10fd..dc038d9a6d8 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutor.java
@@ -20,14 +20,12 @@ package
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
import org.apache.commons.codec.binary.Base64;
import
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecutor;
import
org.apache.shardingsphere.distsql.statement.ral.queryable.export.ExportMetaDataStatement;
-import org.apache.shardingsphere.globalclock.provider.GlobalClockProvider;
import org.apache.shardingsphere.globalclock.rule.GlobalClockRule;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.infra.util.json.JsonUtils;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
@@ -129,11 +127,8 @@ public final class ExportMetaDataExecutor implements
DistSQLQueryExecutor<Export
private void generateSnapshotInfo(final ShardingSphereMetaData metaData,
final ExportedClusterInfo exportedClusterInfo) {
GlobalClockRule globalClockRule =
metaData.getGlobalRuleMetaData().getSingleRule(GlobalClockRule.class);
if (globalClockRule.getConfiguration().isEnabled()) {
- GlobalClockProvider globalClockProvider =
TypedSPILoader.getService(GlobalClockProvider.class,
- globalClockRule.getGlobalClockProviderType(),
globalClockRule.getConfiguration().getProps());
- long csn = globalClockProvider.getCurrentTimestamp();
ExportedSnapshotInfo snapshotInfo = new ExportedSnapshotInfo();
- snapshotInfo.setCsn(String.valueOf(csn));
+
snapshotInfo.setCsn(String.valueOf(globalClockRule.getCurrentTimestamp()));
snapshotInfo.setCreateTime(LocalDateTime.now());
exportedClusterInfo.setSnapshotInfo(snapshotInfo);
}