Implementation:Apache Shardingsphere MetaDataPersistFacade Constructor
| Knowledge Sources | |
|---|---|
| Domains | Cluster_Mode, Distributed_Coordination |
| Last Updated | 2026-02-10 00:00 GMT |
Overview
Concrete tool for constructing the layered persistence facade that provides domain-specific storage services for metadata, rules, and configuration, provided by the ShardingSphere mode module.
Description
MetaDataPersistFacade is the primary persistence abstraction in ShardingSphere. Its constructor accepts a PersistRepository and an optional persistSchemasEnabled flag, then instantiates seven internal persistence services, all wired to the same repository instance.
A convenience constructor delegates to the full constructor with persistSchemasEnabled defaulting to true. This convenience constructor is used by ClusterContextManagerBuilder when creating the facade for initial metadata loading.
PersistServiceFacade is the higher-level facade constructed during ContextManager assembly. It wraps MetaDataPersistFacade with a StatePersistService, QualifiedDataSourceStatePersistService, and a mode-specific ModePersistServiceFacade loaded via SPI. It implements AutoCloseable to manage the lifecycle of the mode facade and repository.
Usage
MetaDataPersistFacade is constructed in two contexts:
- By ClusterContextManagerBuilder.build() using the convenience constructor
new MetaDataPersistFacade(repository)before creating MetaDataContextsFactory. - By PersistServiceFacade using the full constructor with the
persistSchemasEnabledflag read from configuration properties.
PersistServiceFacade is constructed as part of the ContextManager initialization and remains available for the lifetime of the context manager.
Code Reference
Source Location -- MetaDataPersistFacade
- Repository: Apache ShardingSphere
- File:
mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistFacade.java - Lines: 52-83
Source Location -- PersistServiceFacade
- Repository: Apache ShardingSphere
- File:
mode/core/src/main/java/org/apache/shardingsphere/mode/persist/PersistServiceFacade.java - Lines: 36-62
Signature -- MetaDataPersistFacade
@Getter
public final class MetaDataPersistFacade {
private final PersistRepository repository;
private final VersionPersistService versionService;
private final DataSourceUnitPersistService dataSourceUnitService;
private final DatabaseMetaDataPersistFacade databaseMetaDataFacade;
private final DatabaseRulePersistService databaseRuleService;
private final GlobalRulePersistService globalRuleService;
private final PropertiesPersistService propsService;
private final StatisticsPersistService statisticsService;
public MetaDataPersistFacade(final PersistRepository repository, final boolean persistSchemasEnabled) {
this.repository = repository;
versionService = new VersionPersistService(repository);
dataSourceUnitService = new DataSourceUnitPersistService(repository);
databaseMetaDataFacade = new DatabaseMetaDataPersistFacade(repository, versionService, persistSchemasEnabled);
databaseRuleService = new DatabaseRulePersistService(repository);
globalRuleService = new GlobalRulePersistService(repository, versionService);
propsService = new PropertiesPersistService(repository, versionService);
statisticsService = new StatisticsPersistService(repository);
}
public MetaDataPersistFacade(final PersistRepository repository) {
this(repository, true);
}
}
Signature -- PersistServiceFacade
@Getter
public final class PersistServiceFacade implements AutoCloseable {
private final PersistRepository repository;
private final MetaDataPersistFacade metaDataFacade;
private final StatePersistService stateService;
private final QualifiedDataSourceStatePersistService qualifiedDataSourceStateService;
private final ModePersistServiceFacade modeFacade;
public PersistServiceFacade(final PersistRepository repository, final ModeConfiguration modeConfig,
final MetaDataContextManager metaDataContextManager) {
this.repository = repository;
metaDataFacade = new MetaDataPersistFacade(repository,
metaDataContextManager.getMetaDataContexts().getMetaData().getProps()
.getValue(ConfigurationPropertyKey.PERSIST_SCHEMAS_TO_REPOSITORY_ENABLED));
stateService = new StatePersistService(repository);
qualifiedDataSourceStateService = new QualifiedDataSourceStatePersistService(repository);
modeFacade = TypedSPILoader.getService(ModePersistServiceFacadeBuilder.class, modeConfig.getType())
.build(metaDataContextManager, repository);
}
@Override
public void close() {
modeFacade.close();
repository.close();
}
}
Import
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade;
import org.apache.shardingsphere.mode.persist.PersistServiceFacade;
I/O Contract
Inputs -- MetaDataPersistFacade
| Name | Type | Required | Description |
|---|---|---|---|
| repository | PersistRepository | Yes | The underlying persistence repository (cluster or standalone) |
| persistSchemasEnabled | boolean | No | Whether to persist schema metadata to the repository (defaults to true) |
Inputs -- PersistServiceFacade
| Name | Type | Required | Description |
|---|---|---|---|
| repository | PersistRepository | Yes | The underlying persistence repository |
| modeConfig | ModeConfiguration | Yes | Mode configuration for loading the mode-specific facade via SPI |
| metaDataContextManager | MetaDataContextManager | Yes | Manager providing access to current metadata contexts |
Outputs
| Name | Type | Description |
|---|---|---|
| (MetaDataPersistFacade instance) | MetaDataPersistFacade | Facade exposing seven domain-specific persistence services |
| (PersistServiceFacade instance) | PersistServiceFacade | Higher-level facade composing metadata, state, and mode-specific services |
Usage Examples
// Constructing MetaDataPersistFacade during cluster bootstrap (convenience constructor)
MetaDataPersistFacade metaDataPersistFacade = new MetaDataPersistFacade(repository);
// Using the facade to persist global rules and properties
metaDataPersistFacade.persistGlobalRuleConfiguration(globalRuleConfigs, props);
// Using the facade to load data source configurations
Map<String, DataSourceConfiguration> dsConfigs = metaDataPersistFacade.loadDataSourceConfigurations("my_database");
// Constructing PersistServiceFacade during ContextManager assembly
PersistServiceFacade persistServiceFacade = new PersistServiceFacade(repository, modeConfig, metaDataContextManager);
// Accessing sub-services through the facade
MetaDataPersistFacade metaFacade = persistServiceFacade.getMetaDataFacade();
StatePersistService stateService = persistServiceFacade.getStateService();