Skip to content

Commit 75c5b58

Browse files
authored
Add RuleItemManager and remove StandaloneDeliverEventSubscriberRegistry (#31772)
1 parent 5e345fb commit 75c5b58

File tree

5 files changed

+107
-49
lines changed

5 files changed

+107
-49
lines changed

mode/core/src/main/java/org/apache/shardingsphere/mode/service/MetaDataContextManager.java

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
2323
import org.apache.shardingsphere.mode.service.manager.ConfigurationManager;
2424
import org.apache.shardingsphere.mode.service.manager.ResourceMetaDataManager;
25+
import org.apache.shardingsphere.mode.service.manager.RuleItemManager;
2526
import org.apache.shardingsphere.mode.service.manager.ShardingSphereDatabaseManager;
2627

2728
import java.util.concurrent.atomic.AtomicReference;
@@ -38,10 +39,13 @@ public class MetaDataContextManager {
3839

3940
private final ResourceMetaDataManager resourceMetaDataManager;
4041

42+
private final RuleItemManager ruleItemManager;
43+
4144
public MetaDataContextManager(final AtomicReference<MetaDataContexts> metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
4245
final PersistServiceFacade persistServiceFacade) {
4346
databaseManager = new ShardingSphereDatabaseManager(metaDataContexts);
4447
configurationManager = new ConfigurationManager(metaDataContexts, computeNodeInstanceContext, persistServiceFacade);
4548
resourceMetaDataManager = new ResourceMetaDataManager(metaDataContexts, persistServiceFacade);
49+
ruleItemManager = new RuleItemManager(metaDataContexts, persistServiceFacade, configurationManager);
4650
}
4751
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.shardingsphere.mode.service.manager;
19+
20+
import lombok.RequiredArgsConstructor;
21+
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
22+
import org.apache.shardingsphere.infra.rule.event.rule.alter.AlterRuleItemEvent;
23+
import org.apache.shardingsphere.infra.rule.event.rule.drop.DropRuleItemEvent;
24+
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
25+
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
26+
import org.apache.shardingsphere.mode.service.PersistServiceFacade;
27+
import org.apache.shardingsphere.mode.spi.RuleItemConfigurationChangedProcessor;
28+
29+
import java.util.concurrent.atomic.AtomicReference;
30+
31+
/**
32+
* Rule item manager.
33+
*/
34+
@RequiredArgsConstructor
35+
public class RuleItemManager {
36+
37+
private final AtomicReference<MetaDataContexts> metaDataContexts;
38+
39+
private final PersistServiceFacade persistServiceFacade;
40+
41+
private final ConfigurationManager configurationManager;
42+
43+
/**
44+
* Alter with rule item.
45+
*
46+
* @param event alter rule item event
47+
*/
48+
@SuppressWarnings({"rawtypes", "unchecked", "unused"})
49+
public void alterRuleItem(final AlterRuleItemEvent event) {
50+
if (!event.getActiveVersion().equals(persistServiceFacade.getMetaDataPersistService().getMetaDataVersionPersistService()
51+
.getActiveVersionByFullPath(event.getActiveVersionKey()))) {
52+
return;
53+
}
54+
RuleItemConfigurationChangedProcessor processor = TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, event.getType());
55+
String yamlContent = persistServiceFacade.getMetaDataPersistService().getMetaDataVersionPersistService()
56+
.getVersionPathByActiveVersion(event.getActiveVersionKey(), event.getActiveVersion());
57+
String databaseName = event.getDatabaseName();
58+
RuleConfiguration currentRuleConfig = processor.findRuleConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName));
59+
synchronized (this) {
60+
processor.changeRuleItemConfiguration(event, currentRuleConfig, processor.swapRuleItemConfiguration(event, yamlContent));
61+
configurationManager.alterRuleConfiguration(databaseName, currentRuleConfig);
62+
}
63+
}
64+
65+
/**
66+
* Drop with rule item.
67+
*
68+
* @param event drop rule item event
69+
*/
70+
@SuppressWarnings({"rawtypes", "unchecked", "unused"})
71+
public void dropRuleItem(final DropRuleItemEvent event) {
72+
String databaseName = event.getDatabaseName();
73+
if (!metaDataContexts.get().getMetaData().containsDatabase(databaseName)) {
74+
return;
75+
}
76+
RuleItemConfigurationChangedProcessor processor = TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, event.getType());
77+
RuleConfiguration currentRuleConfig = processor.findRuleConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName));
78+
synchronized (this) {
79+
processor.dropRuleItemConfiguration(event, currentRuleConfig);
80+
configurationManager.dropRuleConfiguration(databaseName, currentRuleConfig);
81+
}
82+
}
83+
}

mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.apache.shardingsphere.mode.manager.ContextManager;
2828
import org.apache.shardingsphere.mode.manager.ContextManagerBuilder;
2929
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
30-
import org.apache.shardingsphere.mode.manager.standalone.subscriber.StandaloneDeliverEventSubscriberRegistry;
3130
import org.apache.shardingsphere.mode.manager.standalone.workerid.generator.StandaloneWorkerIdGenerator;
3231
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
3332
import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
@@ -49,9 +48,7 @@ public ContextManager build(final ContextManagerBuilderParameter param, final Ev
4948
MetaDataPersistService persistService = new MetaDataPersistService(repository);
5049
ComputeNodeInstanceContext computeNodeInstanceContext = buildComputeNodeInstanceContext(param, eventBusContext);
5150
MetaDataContexts metaDataContexts = MetaDataContextsFactory.create(persistService, param, computeNodeInstanceContext);
52-
ContextManager result = new ContextManager(metaDataContexts, computeNodeInstanceContext, repository);
53-
new StandaloneDeliverEventSubscriberRegistry(result).register();
54-
return result;
51+
return new ContextManager(metaDataContexts, computeNodeInstanceContext, repository);
5552
}
5653

5754
private ComputeNodeInstanceContext buildComputeNodeInstanceContext(final ContextManagerBuilderParameter param, final EventBusContext eventBusContext) {

mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java

+19-13
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
3030
import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
3131
import org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
32+
import org.apache.shardingsphere.infra.rule.event.GovernanceEvent;
33+
import org.apache.shardingsphere.infra.rule.event.rule.alter.AlterRuleItemEvent;
34+
import org.apache.shardingsphere.infra.rule.event.rule.drop.DropRuleItemEvent;
3235
import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
3336
import org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
3437
import org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
@@ -275,29 +278,32 @@ public Collection<MetaDataVersion> alterRuleConfiguration(final String databaseN
275278
Collection<MetaDataVersion> metaDataVersions = contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService()
276279
.persistConfigurations(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(), Collections.singletonList(toBeAlteredRuleConfig));
277280
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
278-
sendDatabaseRuleChangedEvent(databaseName, metaDataVersions);
281+
for (MetaDataVersion each : metaDataVersions) {
282+
Optional<GovernanceEvent> ruleItemEvent = buildAlterRuleItemEvent(databaseName, each, Type.UPDATED);
283+
if (ruleItemEvent.isPresent() && ruleItemEvent.get() instanceof AlterRuleItemEvent) {
284+
contextManager.getMetaDataContextManager().getRuleItemManager().alterRuleItem((AlterRuleItemEvent) ruleItemEvent.get());
285+
}
286+
}
279287
clearServiceCache();
280288
}
281289
return Collections.emptyList();
282290
}
283291

284-
private void sendDatabaseRuleChangedEvent(final String databaseName, final Collection<MetaDataVersion> metaDataVersions) {
285-
for (MetaDataVersion each : metaDataVersions) {
286-
sendDatabaseRuleChangedEvent(databaseName, each);
287-
}
288-
}
289-
290-
private void sendDatabaseRuleChangedEvent(final String databaseName, final MetaDataVersion metaDataVersion) {
291-
ruleConfigurationEventBuilder.build(databaseName, new DataChangedEvent(metaDataVersion.getActiveVersionNodePath(), metaDataVersion.getNextActiveVersion(), Type.UPDATED))
292-
.ifPresent(optional -> contextManager.getComputeNodeInstanceContext().getEventBusContext().post(optional));
292+
private Optional<GovernanceEvent> buildAlterRuleItemEvent(final String databaseName, final MetaDataVersion metaDataVersion, final Type type) {
293+
return ruleConfigurationEventBuilder.build(databaseName, new DataChangedEvent(metaDataVersion.getActiveVersionNodePath(), metaDataVersion.getNextActiveVersion(), type));
293294
}
294295

295296
@Override
296297
public void removeRuleConfigurationItem(final String databaseName, final RuleConfiguration toBeRemovedRuleConfig) {
297298
if (null != toBeRemovedRuleConfig) {
298-
sendDatabaseRuleChangedEvent(databaseName,
299-
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService()
300-
.deleteConfigurations(databaseName, Collections.singleton(toBeRemovedRuleConfig)));
299+
Collection<MetaDataVersion> metaDataVersions = contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseRulePersistService()
300+
.deleteConfigurations(databaseName, Collections.singleton(toBeRemovedRuleConfig));
301+
for (MetaDataVersion metaDataVersion : metaDataVersions) {
302+
Optional<GovernanceEvent> ruleItemEvent = buildAlterRuleItemEvent(databaseName, metaDataVersion, Type.DELETED);
303+
if (ruleItemEvent.isPresent() && ruleItemEvent.get() instanceof DropRuleItemEvent) {
304+
contextManager.getMetaDataContextManager().getRuleItemManager().dropRuleItem((DropRuleItemEvent) ruleItemEvent.get());
305+
}
306+
}
301307
clearServiceCache();
302308
}
303309
}

mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/subscriber/StandaloneDeliverEventSubscriberRegistry.java

-32
This file was deleted.

0 commit comments

Comments
 (0)