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 <[email protected]>
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()
{