Jump to content

Connect SuperML | Leeroopedia MCP: Equip your AI agents with best practices, code verification, and debugging knowledge. Powered by Leeroo — building Organizational Superintelligence. Contact us at founders@leeroo.com.

Implementation:Apache Shardingsphere MetaDataPersistFacade Constructor

From Leeroopedia


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:

  1. By ClusterContextManagerBuilder.build() using the convenience constructor new MetaDataPersistFacade(repository) before creating MetaDataContextsFactory.
  2. By PersistServiceFacade using the full constructor with the persistSchemasEnabled flag 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();

Related Pages

Implements Principle

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment