You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2021/04/10 12:32:38 UTC
[shardingsphere] branch master updated: Refresh authority provider
from SPI (#10026)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 48b3e4c Refresh authority provider from SPI (#10026)
48b3e4c is described below
commit 48b3e4c16613c69393bc0b971b642f9a1dbc9b85
Author: Liang Zhang <te...@163.com>
AuthorDate: Sat Apr 10 20:32:13 2021 +0800
Refresh authority provider from SPI (#10026)
---
.../context/authority/GovernanceAuthorityContext.java | 15 ++++++++++-----
.../context/metadata/GovernanceMetaDataContexts.java | 6 ++++++
.../infra/context/metadata/MetaDataContexts.java | 8 ++++++++
3 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/GovernanceAuthorityContext.java b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/GovernanceAuthorityContext.java
index b269bad..54beaf8 100644
--- a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/GovernanceAuthorityContext.java
+++ b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/GovernanceAuthorityContext.java
@@ -17,18 +17,21 @@
package org.apache.shardingsphere.governance.context.authority;
+import com.google.common.base.Preconditions;
import com.google.common.eventbus.Subscribe;
import lombok.Setter;
import org.apache.shardingsphere.authority.AuthorityContext;
-import org.apache.shardingsphere.authority.algorithm.natived.NativeAuthorityProviderAlgorithm;
+import org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
import org.apache.shardingsphere.authority.spi.AuthorityProvideAlgorithm;
import org.apache.shardingsphere.governance.core.event.model.auth.PrivilegeChangedEvent;
import org.apache.shardingsphere.governance.core.event.model.auth.UserRuleChangedEvent;
+import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmFactory;
import org.apache.shardingsphere.infra.context.metadata.MetaDataAwareEventSubscriber;
import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import java.util.Collection;
+import java.util.Optional;
/**
* Governance authority context.
@@ -60,9 +63,11 @@ public final class GovernanceAuthorityContext implements MetaDataAwareEventSubsc
}
private void reloadAuthority(final Collection<ShardingSphereUser> users) {
- // TODO reload AuthorityCheckAlgorithm from SPI
- AuthorityProvideAlgorithm result = new NativeAuthorityProviderAlgorithm();
- result.init(metaDataContexts.getMetaDataMap(), users);
- AuthorityContext.getInstance().init(result);
+ Optional<AuthorityRuleConfiguration> authorityRuleConfig = metaDataContexts.getGlobalRuleMetaData().getConfigurations().stream().filter(
+ each -> each instanceof AuthorityRuleConfiguration).findAny().map(each -> (AuthorityRuleConfiguration) each);
+ Preconditions.checkState(authorityRuleConfig.isPresent());
+ AuthorityProvideAlgorithm provider = ShardingSphereAlgorithmFactory.createAlgorithm(authorityRuleConfig.get().getProvider(), AuthorityProvideAlgorithm.class);
+ provider.init(metaDataContexts.getMetaDataMap(), users);
+ AuthorityContext.getInstance().init(provider);
}
}
diff --git a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
index 9204cba..dc74e0e 100644
--- a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
+++ b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
@@ -45,6 +45,7 @@ import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUsers;
import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
@@ -128,6 +129,11 @@ public final class GovernanceMetaDataContexts implements MetaDataContexts {
}
@Override
+ public ShardingSphereRuleMetaData getGlobalRuleMetaData() {
+ return metaDataContexts.getGlobalRuleMetaData();
+ }
+
+ @Override
public ExecutorEngine getExecutorEngine() {
return metaDataContexts.getExecutorEngine();
}
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
index 489d520..e0bc70e 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
@@ -21,6 +21,7 @@ import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties
import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUsers;
import org.apache.shardingsphere.infra.optimize.context.CalciteContextFactory;
import org.apache.shardingsphere.infra.state.StateContext;
@@ -65,6 +66,13 @@ public interface MetaDataContexts extends Closeable {
ShardingSphereMetaData getDefaultMetaData();
/**
+ * Get global rule meta data.
+ *
+ * @return global rule meta data
+ */
+ ShardingSphereRuleMetaData getGlobalRuleMetaData();
+
+ /**
* Get executor engine.
*
* @return executor engine