You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ki...@apache.org on 2020/09/30 07:11:44 UTC
[shardingsphere] branch master updated: Fixes ConfigCenter register
event bus twice (#7663)
This is an automated email from the ASF dual-hosted git repository.
kimmking 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 4099f1e Fixes ConfigCenter register event bus twice (#7663)
4099f1e is described below
commit 4099f1ec0c6898622b7b96be1bd49cce6d4133ab
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Wed Sep 30 15:11:17 2020 +0800
Fixes ConfigCenter register event bus twice (#7663)
---
.../config/listener/SchemaChangedListener.java | 14 ++------
.../config/listener/SchemaChangedListenerTest.java | 38 ++++------------------
.../context/schema/GovernanceSchemaContexts.java | 5 +--
.../schema/GovernanceSchemaContextsTest.java | 5 ++-
4 files changed, 15 insertions(+), 47 deletions(-)
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-config/src/main/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListener.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-config/src/main/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListener.java
index 3403f62..c9a3b88 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-config/src/main/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListener.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-config/src/main/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListener.java
@@ -20,15 +20,14 @@ package org.apache.shardingsphere.governance.core.config.listener;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import org.apache.commons.collections4.SetUtils;
-import org.apache.shardingsphere.governance.core.config.ConfigCenter;
import org.apache.shardingsphere.governance.core.config.ConfigCenterNode;
+import org.apache.shardingsphere.governance.core.event.listener.PostGovernanceRepositoryEventListener;
import org.apache.shardingsphere.governance.core.event.model.GovernanceEvent;
import org.apache.shardingsphere.governance.core.event.model.datasource.DataSourceChangedEvent;
import org.apache.shardingsphere.governance.core.event.model.metadata.MetaDataChangedEvent;
import org.apache.shardingsphere.governance.core.event.model.rule.RuleConfigurationsChangedEvent;
import org.apache.shardingsphere.governance.core.event.model.schema.SchemaAddedEvent;
import org.apache.shardingsphere.governance.core.event.model.schema.SchemaDeletedEvent;
-import org.apache.shardingsphere.governance.core.event.listener.PostGovernanceRepositoryEventListener;
import org.apache.shardingsphere.governance.core.yaml.config.YamlDataSourceConfigurationWrap;
import org.apache.shardingsphere.governance.core.yaml.config.metadata.YamlRuleSchemaMetaData;
import org.apache.shardingsphere.governance.core.yaml.swapper.DataSourceConfigurationYamlSwapper;
@@ -55,15 +54,12 @@ import java.util.stream.Collectors;
*/
public final class SchemaChangedListener extends PostGovernanceRepositoryEventListener {
- private final ConfigCenter configCenter;
-
private final ConfigCenterNode configurationNode;
private final Collection<String> existedSchemaNames;
public SchemaChangedListener(final ConfigurationRepository configurationRepository, final Collection<String> schemaNames) {
super(configurationRepository, new ConfigCenterNode().getAllSchemaConfigPaths(schemaNames));
- configCenter = new ConfigCenter(configurationRepository);
configurationNode = new ConfigCenterNode();
existedSchemaNames = new LinkedHashSet<>(schemaNames);
}
@@ -114,9 +110,7 @@ public final class SchemaChangedListener extends PostGovernanceRepositoryEventLi
private GovernanceEvent createAddedEvent(final String schemaName) {
existedSchemaNames.add(schemaName);
- return isOwnCompleteConfigurations(schemaName)
- ? new SchemaAddedEvent(schemaName, configCenter.loadDataSourceConfigurations(schemaName), configCenter.loadRuleConfigurations(schemaName))
- : new SchemaAddedEvent(schemaName, Collections.emptyMap(), Collections.emptyList());
+ return new SchemaAddedEvent(schemaName, Collections.emptyMap(), Collections.emptyList());
}
private GovernanceEvent createUpdatedEvent(final String schemaName, final DataChangedEvent event) {
@@ -150,8 +144,4 @@ public final class SchemaChangedListener extends PostGovernanceRepositoryEventLi
RuleSchemaMetaData ruleSchemaMetaData = new RuleSchemaMetaDataYamlSwapper().swapToObject(YamlEngine.unmarshal(event.getValue(), YamlRuleSchemaMetaData.class));
return new MetaDataChangedEvent(existedSchemaNames, ruleSchemaMetaData);
}
-
- private boolean isOwnCompleteConfigurations(final String schemaName) {
- return configCenter.hasDataSourceConfiguration(schemaName) && configCenter.hasRuleConfiguration(schemaName);
- }
}
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-config/src/test/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListenerTest.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-config/src/test/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListenerTest.java
index 22173ce..ca88c16 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-config/src/test/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListenerTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-config/src/test/java/org/apache/shardingsphere/governance/core/config/listener/SchemaChangedListenerTest.java
@@ -50,7 +50,6 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class SchemaChangedListenerTest {
@@ -134,7 +133,6 @@ public final class SchemaChangedListenerTest {
@Test
public void assertCreateIgnoredGovernanceEventForNewSchema() {
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn("");
DataChangedEvent dataChangedEvent = new DataChangedEvent("/schemas/logic_db/rule", "rule", ChangedType.UPDATED);
Optional<GovernanceEvent> actual = schemaChangedListener.createGovernanceEvent(dataChangedEvent);
assertTrue(actual.isPresent());
@@ -143,44 +141,29 @@ public final class SchemaChangedListenerTest {
@Test
public void assertCreateSchemaAddedEventForNewSchema() {
- String shardingRule = readYAML(SHARDING_RULE_FILE);
String dataSource = readYAML(DATA_SOURCE_FILE);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(shardingRule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(shardingRule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
DataChangedEvent dataChangedEvent = new DataChangedEvent("/schemas/logic_db/datasource", dataSource, ChangedType.UPDATED);
Optional<GovernanceEvent> actual = schemaChangedListener.createGovernanceEvent(dataChangedEvent);
assertTrue(actual.isPresent());
- assertThat(((SchemaAddedEvent) actual.get()).getRuleConfigurations().iterator().next(), instanceOf(ShardingRuleConfiguration.class));
+ assertThat(((SchemaAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
}
@Test
public void assertCreatePrimaryReplicaReplicationSchemaAddedEventForNewSchema() {
String dataSource = readYAML(DATA_SOURCE_FILE);
- String rule = readYAML(PRIMARY_REPLICA_REPLICATION_RULE_FILE);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(rule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(rule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
DataChangedEvent dataChangedEvent = new DataChangedEvent("/schemas/logic_db/datasource", dataSource, ChangedType.UPDATED);
Optional<GovernanceEvent> actual = schemaChangedListener.createGovernanceEvent(dataChangedEvent);
assertTrue(actual.isPresent());
- assertThat(((SchemaAddedEvent) actual.get()).getRuleConfigurations().iterator().next(), instanceOf(PrimaryReplicaReplicationRuleConfiguration.class));
+ assertThat(((SchemaAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
}
@Test
public void assertCreateEncryptSchemaAddedEventForNewSchema() {
String dataSource = readYAML(DATA_SOURCE_FILE);
- String encryptRule = readYAML(ENCRYPT_RULE_FILE);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(encryptRule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(encryptRule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
DataChangedEvent dataChangedEvent = new DataChangedEvent("/schemas/logic_db/datasource", dataSource, ChangedType.UPDATED);
Optional<GovernanceEvent> actual = schemaChangedListener.createGovernanceEvent(dataChangedEvent);
assertTrue(actual.isPresent());
- assertThat(((SchemaAddedEvent) actual.get()).getRuleConfigurations().iterator().next(), instanceOf(EncryptRuleConfiguration.class));
+ assertThat(((SchemaAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
}
@Test
@@ -212,38 +195,29 @@ public final class SchemaChangedListenerTest {
@Test
public void assertCreateAddedEventWithEncryptRuleConfigurationForNewSchema() {
- String dataSource = readYAML(DATA_SOURCE_FILE);
String encryptRule = readYAML(ENCRYPT_RULE_FILE);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(encryptRule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
DataChangedEvent dataChangedEvent = new DataChangedEvent("/schemas/logic_db/rule", encryptRule, ChangedType.UPDATED);
Optional<GovernanceEvent> actual = schemaChangedListener.createGovernanceEvent(dataChangedEvent);
assertTrue(actual.isPresent());
- assertThat(((SchemaAddedEvent) actual.get()).getRuleConfigurations().iterator().next(), instanceOf(EncryptRuleConfiguration.class));
+ assertThat(((SchemaAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
}
@Test
public void assertCreateAddedEventWithShardingRuleConfigurationForNewSchema() {
- String dataSource = readYAML(DATA_SOURCE_FILE);
String shardingRule = readYAML(SHARDING_RULE_FILE);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(shardingRule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
DataChangedEvent dataChangedEvent = new DataChangedEvent("/schemas/logic_db/rule", shardingRule, ChangedType.UPDATED);
Optional<GovernanceEvent> actual = schemaChangedListener.createGovernanceEvent(dataChangedEvent);
assertTrue(actual.isPresent());
- assertThat(((SchemaAddedEvent) actual.get()).getRuleConfigurations().iterator().next(), instanceOf(ShardingRuleConfiguration.class));
+ assertThat(((SchemaAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
}
@Test
public void assertCreateAddedEventWithPrimaryReplicaReplicationRuleConfigurationForNewSchema() {
- String dataSource = readYAML(DATA_SOURCE_FILE);
String rule = readYAML(PRIMARY_REPLICA_REPLICATION_RULE_FILE);
- when(configurationRepository.get("/schemas/logic_db/rule")).thenReturn(rule);
- when(configurationRepository.get("/schemas/logic_db/datasource")).thenReturn(dataSource);
DataChangedEvent dataChangedEvent = new DataChangedEvent("/schemas/logic_db/rule", rule, ChangedType.UPDATED);
Optional<GovernanceEvent> actual = schemaChangedListener.createGovernanceEvent(dataChangedEvent);
assertTrue(actual.isPresent());
- assertThat(((SchemaAddedEvent) actual.get()).getRuleConfigurations().iterator().next(), instanceOf(PrimaryReplicaReplicationRuleConfiguration.class));
+ assertThat(((SchemaAddedEvent) actual.get()).getSchemaName(), is("logic_db"));
}
@Test
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
index e822dc3..cab96d0 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
@@ -280,10 +280,11 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
private SchemaContext createAddedSchemaContext(final SchemaAddedEvent event) throws SQLException {
String schemaName = event.getSchemaName();
- Map<String, Map<String, DataSource>> dataSourcesMap = createDataSourcesMap(Collections.singletonMap(schemaName, event.getDataSourceConfigurations()));
+ Map<String, Map<String, DataSource>> dataSourcesMap = createDataSourcesMap(Collections.singletonMap(schemaName,
+ governanceFacade.getConfigCenter().loadDataSourceConfigurations(schemaName)));
DatabaseType databaseType = getDatabaseType(dataSourcesMap);
SchemaContextsBuilder schemaContextsBuilder = new SchemaContextsBuilder(databaseType, dataSourcesMap,
- Collections.singletonMap(schemaName, event.getRuleConfigurations()), schemaContexts.getAuthentication(), schemaContexts.getProps().getProps());
+ Collections.singletonMap(schemaName, governanceFacade.getConfigCenter().loadRuleConfigurations(schemaName)), schemaContexts.getAuthentication(), schemaContexts.getProps().getProps());
return schemaContextsBuilder.build().getSchemaContextMap().get(schemaName);
}
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
index 70bacab..6d0b39f 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
@@ -53,6 +53,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.Collections;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
@@ -154,9 +155,11 @@ public final class GovernanceSchemaContextsTest {
@Test
@SneakyThrows
public void assertSchemaAdd() {
- SchemaAddedEvent event = new SchemaAddedEvent("schema_add", getDataSourceConfigurations(), new LinkedList<>());
+ SchemaAddedEvent event = new SchemaAddedEvent("schema_add", new HashMap<>(), new LinkedList<>());
+ when(configCenter.loadDataSourceConfigurations("schema_add")).thenReturn(getDataSourceConfigurations());
governanceSchemaContexts.renew(event);
assertNotNull(governanceSchemaContexts.getSchemaContextMap().get("schema_add"));
+ assertNotNull(governanceSchemaContexts.getSchemaContextMap().get("schema_add").getSchema().getDataSources());
}
private Map<String, DataSourceConfiguration> getDataSourceConfigurations() {