All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.netflix.metacat.main.configs.ServicesConfig Maven / Gradle / Ivy

/*
 *
 *  Copyright 2017 Netflix, Inc.
 *
 *     Licensed under the Apache License, Version 2.0 (the "License");
 *     you may not use this file except in compliance with the License.
 *     You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 *     Unless required by applicable law or agreed to in writing, software
 *     distributed under the License is distributed on an "AS IS" BASIS,
 *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *     See the License for the specific language governing permissions and
 *     limitations under the License.
 *
 */
package com.netflix.metacat.main.configs;

import com.netflix.metacat.common.json.MetacatJson;
import com.netflix.metacat.common.server.api.ratelimiter.DefaultRateLimiter;
import com.netflix.metacat.common.server.api.ratelimiter.RateLimiter;
import com.netflix.metacat.common.server.api.traffic_control.DefaultRequestGateway;
import com.netflix.metacat.common.server.api.traffic_control.RequestGateway;
import com.netflix.metacat.common.server.converter.ConverterUtil;
import com.netflix.metacat.common.server.events.MetacatEventBus;
import com.netflix.metacat.common.server.properties.Config;
import com.netflix.metacat.common.server.usermetadata.AliasService;
import com.netflix.metacat.common.server.usermetadata.AuthorizationService;
import com.netflix.metacat.common.server.usermetadata.DefaultAliasService;
import com.netflix.metacat.common.server.usermetadata.DefaultAuthorizationService;
import com.netflix.metacat.common.server.usermetadata.DefaultLookupService;
import com.netflix.metacat.common.server.usermetadata.DefaultTagService;
import com.netflix.metacat.common.server.usermetadata.DefaultUserMetadataService;
import com.netflix.metacat.common.server.usermetadata.LookupService;
import com.netflix.metacat.common.server.usermetadata.TagService;
import com.netflix.metacat.common.server.usermetadata.UserMetadataService;
import com.netflix.metacat.common.server.util.ThreadServiceManager;
import com.netflix.metacat.main.manager.CatalogManager;
import com.netflix.metacat.main.manager.ConnectorManager;
import com.netflix.metacat.main.manager.PluginManager;
import com.netflix.metacat.main.services.CatalogService;
import com.netflix.metacat.main.services.CatalogTraversal;
import com.netflix.metacat.main.services.CatalogTraversalServiceHelper;
import com.netflix.metacat.main.services.DatabaseService;
import com.netflix.metacat.main.services.MViewService;
import com.netflix.metacat.main.services.MetacatServiceHelper;
import com.netflix.metacat.main.services.MetacatThriftService;
import com.netflix.metacat.main.services.MetadataService;
import com.netflix.metacat.main.services.OwnerValidationService;
import com.netflix.metacat.main.services.PartitionService;
import com.netflix.metacat.main.services.TableService;
import com.netflix.metacat.main.services.health.MetacatHealthIndicator;
import com.netflix.metacat.main.services.impl.CatalogServiceImpl;
import com.netflix.metacat.main.services.impl.ConnectorTableServiceProxy;
import com.netflix.metacat.main.services.impl.DatabaseServiceImpl;
import com.netflix.metacat.main.services.impl.DefaultOwnerValidationService;
import com.netflix.metacat.main.services.impl.MViewServiceImpl;
import com.netflix.metacat.main.services.impl.PartitionServiceImpl;
import com.netflix.metacat.main.services.impl.TableServiceImpl;
import com.netflix.metacat.main.services.init.MetacatCoreInitService;
import com.netflix.metacat.main.services.init.MetacatThriftInitService;
import com.netflix.spectator.api.Registry;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Spring configuration of Service Tier.
 *
 * @author tgianos
 * @since 1.1.0
 */
@Configuration
public class ServicesConfig {

    /**
     * No-op User Metadata service.
     *
     * @return User metadata service based on MySql
     */
    @Bean
    @ConditionalOnMissingBean(UserMetadataService.class)
    public UserMetadataService userMetadataService() {
        return new DefaultUserMetadataService();
    }

    /**
     * No-op Tag service.
     *
     * @return User metadata service based on MySql
     */
    @Bean
    @ConditionalOnMissingBean(TagService.class)
    public TagService tagService() {
        return new DefaultTagService();
    }


    /**
     * Authorization service.
     *
     * @param config metacat config
     * @return authorization class based on config
     */
    @Bean
    @ConditionalOnMissingBean(AuthorizationService.class)
    public AuthorizationService authorizationService(
        final Config config
    ) {
        return new DefaultAuthorizationService(config);
    }

    /**
     * Owner validation service.
     * @param registry the spectator registry
     * @return the owner validation service
     */
    @Bean
    @ConditionalOnMissingBean(OwnerValidationService.class)
    public OwnerValidationService ownerValidationService(final Registry registry) {
        return new DefaultOwnerValidationService(registry);
    }

    /**
     * Alias service.
     *
     * @return an instance of the Alias service.
     */
    @Bean
    @ConditionalOnMissingBean(AliasService.class)
    public AliasService aliasService() {
        return new DefaultAliasService();
    }

    /**
     * No-op Look up service.
     *
     * @return User metadata service based on MySql
     */
    @Bean
    @ConditionalOnMissingBean(LookupService.class)
    public LookupService lookupService() {
        return new DefaultLookupService();
    }

    /**
     * RateLimiter service.
     *
     * @return The rate-limiter service bean.
     */
    @Bean
    @ConditionalOnMissingBean(RateLimiter.class)
    public RateLimiter rateLimiter() {
        return new DefaultRateLimiter();
    }

    /**
     * The default {@link RequestGateway} bean.
     *
     * @return the default {@link RequestGateway} bean.
     */
    @Bean
    @ConditionalOnMissingBean(RequestGateway.class)
    public RequestGateway requestGateway() {
        return new DefaultRequestGateway();
    }

    /**
     * The catalog service bean.
     *
     * @param connectorManager    Connector manager to use
     * @param userMetadataService User metadata service
     * @param metacatEventBus     Event bus to use
     * @param converterUtil       Converter utilities
     * @return Catalog service implementation
     */
    @Bean
    public CatalogService catalogService(
        final ConnectorManager connectorManager,
        final UserMetadataService userMetadataService,
        final MetacatEventBus metacatEventBus,
        final ConverterUtil converterUtil
    ) {
        return new CatalogServiceImpl(connectorManager, userMetadataService, metacatEventBus, converterUtil);
    }

    /**
     * The database service bean.
     *
     * @param connectorManager     Connector manager to use
     * @param userMetadataService  User metadata service to use
     * @param metacatEventBus      Event bus to use
     * @param converterUtil        Converter utilities
     * @param authorizationService authorization Service
     * @return Catalog service implementation
     */
    @Bean
    public DatabaseService databaseService(
        final ConnectorManager connectorManager,
        final UserMetadataService userMetadataService,
        final MetacatEventBus metacatEventBus,
        final ConverterUtil converterUtil,
        final AuthorizationService authorizationService
    ) {
        return new DatabaseServiceImpl(
            connectorManager,
            userMetadataService,
            metacatEventBus,
            converterUtil,
            authorizationService
        );
    }

    /**
     * The table service bean.
     *
     * @param connectorManager           Connector manager to use
     * @param connectorTableServiceProxy connector table service proxy
     * @param databaseService            database service
     * @param tagService                 tag service
     * @param userMetadataService        user metadata service
     * @param metacatJson                metacat json utility
     * @param eventBus                   Internal event bus
     * @param registry                   registry handle
     * @param config                     configurations
     * @param converterUtil              converter utilities
     * @param authorizationService       authorization Service
     * @param ownerValidationService     owner validation service
     *
     * @return The table service bean
     */
    @Bean
    public TableService tableService(
        final ConnectorManager connectorManager,
        final ConnectorTableServiceProxy connectorTableServiceProxy,
        final DatabaseService databaseService,
        final TagService tagService,
        final UserMetadataService userMetadataService,
        final MetacatJson metacatJson,
        final MetacatEventBus eventBus,
        final Registry registry,
        final Config config,
        final ConverterUtil converterUtil,
        final AuthorizationService authorizationService,
        final OwnerValidationService ownerValidationService) {
        return new TableServiceImpl(
            connectorManager,
            connectorTableServiceProxy,
            databaseService,
            tagService,
            userMetadataService,
            metacatJson,
            eventBus,
            registry,
            config,
            converterUtil,
            authorizationService,
            ownerValidationService
        );
    }

    /**
     * The connector table service proxy bean.
     *
     * @param connectorManager Connector manager to use
     * @param converterUtil    Converter utilities
     * @return The connector table service proxy bean
     */
    @Bean
    public ConnectorTableServiceProxy connectorTableServiceProxy(
        final ConnectorManager connectorManager,
        final ConverterUtil converterUtil
    ) {
        return new ConnectorTableServiceProxy(
            connectorManager,
            converterUtil
        );
    }

    /**
     * Partition service bean.
     *
     * @param catalogService       catalog service
     * @param connectorManager     connector manager
     * @param tableService         table service
     * @param userMetadataService  user metadata service
     * @param threadServiceManager thread manager
     * @param config               configurations
     * @param eventBus             Internal event bus
     * @param converterUtil        utility to convert to/from Dto to connector resources
     * @param registry             registry handle
     * @return The partition service implementation to use
     */
    @Bean
    public PartitionService partitionService(
        final CatalogService catalogService,
        final ConnectorManager connectorManager,
        final TableService tableService,
        final UserMetadataService userMetadataService,
        final ThreadServiceManager threadServiceManager,
        final Config config,
        final MetacatEventBus eventBus,
        final ConverterUtil converterUtil,
        final Registry registry
    ) {
        return new PartitionServiceImpl(
            catalogService,
            connectorManager,
            tableService,
            userMetadataService,
            threadServiceManager,
            config,
            eventBus,
            converterUtil,
            registry
        );
    }

    /**
     * The MViewService bean.
     *
     * @param connectorManager    connector manager
     * @param tableService        table service
     * @param partitionService    partition service
     * @param userMetadataService user metadata service
     * @param eventBus            Internal event bus
     * @param converterUtil       utility to convert to/from Dto to connector resources
     * @return The MViewService implementation to use
     */
    @Bean
    public MViewService mViewService(
        final ConnectorManager connectorManager,
        final TableService tableService,
        final PartitionService partitionService,
        final UserMetadataService userMetadataService,
        final MetacatEventBus eventBus,
        final ConverterUtil converterUtil
    ) {
        return new MViewServiceImpl(
            connectorManager,
            tableService,
            partitionService,
            userMetadataService,
            eventBus,
            converterUtil
        );
    }

    /**
     * The service helper.
     *
     * @param databaseService  database service
     * @param tableService     table service
     * @param partitionService partition service
     * @param eventBus         event bus
     * @param mViewService     view service
     * @return The service helper instance to use
     */
    @Bean
    public MetacatServiceHelper metacatServiceHelper(
        final DatabaseService databaseService,
        final TableService tableService,
        final PartitionService partitionService,
        final MViewService mViewService,
        final MetacatEventBus eventBus
    ) {
        return new MetacatServiceHelper(databaseService, tableService, partitionService, mViewService, eventBus);
    }

    /**
     * Metadata service bean.
     *
     * @param config              System config
     * @param tableService        The table service to use
     * @param partitionService    The partition service to use
     * @param userMetadataService The user metadata service to use
     * @param tagService          tag service
     * @param helper              Metacat service helper
     * @param registry            registry for spectator
     * @return The metadata service bean
     */
    @Bean
    public MetadataService metadataService(
        final Config config,
        final TableService tableService,
        final PartitionService partitionService,
        final UserMetadataService userMetadataService,
        final TagService tagService,
        final MetacatServiceHelper helper,
        final Registry registry
    ) {
        return new MetadataService(config, tableService, partitionService, userMetadataService,
            tagService, helper, registry);
    }

    /**
     * The core initialization service that will handle startup and shutdown of the catalog.
     * We do not configure the start and stop methods as bean lifecycle methods to Spring since they are
     * called via the thrift init service.
     *
     * @param pluginManager        Plugin manager to use
     * @param catalogManager       Catalog manager to use
     * @param connectorManager     Connector manager to use
     * @param threadServiceManager Thread service manager to use
     * @param applicationContext the application context
     *
     * @return The initialization service bean
     */
    @Bean
    public MetacatCoreInitService metacatCoreInitService(final PluginManager pluginManager,
                                                         final CatalogManager catalogManager,
                                                         final ConnectorManager connectorManager,
                                                         final ThreadServiceManager threadServiceManager,
                                                         final ApplicationContext applicationContext) {
        return new MetacatCoreInitService(
            pluginManager, catalogManager, connectorManager,
            threadServiceManager, applicationContext);
    }

    /**
     * The initialization service that will handle startup and shutdown of Metacat thrift service.
     *
     * @param metacatCoreInitService the core init service
     * @param metacatThriftService Thrift service to use
     *
     * @return The initialization service bean
     */
    @Bean(initMethod = "start", destroyMethod = "stop")
    public MetacatThriftInitService metacatThriftInitService(final MetacatCoreInitService metacatCoreInitService,
                                                             final MetacatThriftService metacatThriftService) {
        return new MetacatThriftInitService(
            metacatThriftService,
            metacatCoreInitService
        );
    }

    /**
     * Metacat health indicator.
     *
     * @param metacatCoreInitService the code in it service
     * @param metacatThriftInitService the thrift init service
     *
     * @return the health indicator
     */
    @Bean
    public MetacatHealthIndicator metacatHealthIndicator(final MetacatCoreInitService metacatCoreInitService,
                                                         final MetacatThriftInitService metacatThriftInitService) {
        return new MetacatHealthIndicator(
            metacatCoreInitService, metacatThriftInitService
        );
    }

    /**
     * The catalog traversal service helper.
     *
     * @param catalogService  Catalog service
     * @param databaseService Database service
     * @param tableService    Table service
     * @return The catalog traversal service helper bean
     */
    @Bean
    public CatalogTraversalServiceHelper catalogTraversalServiceHelper(
        final CatalogService catalogService,
        final DatabaseService databaseService,
        final TableService tableService
    ) {
        return new CatalogTraversalServiceHelper(
            catalogService,
            databaseService,
            tableService
        );
    }

    /**
     * The catalog traversal bean.
     *
     * @param config                        System config
     * @param catalogTraversalServiceHelper traversal service helper
     * @param registry                      registry of spectator
     * @return The catalog traversal bean
     */
    @Bean
    public CatalogTraversal catalogTraversal(
        final Config config,
        final CatalogTraversalServiceHelper catalogTraversalServiceHelper,
        final Registry registry
    ) {
        return new CatalogTraversal(
            config,
            catalogTraversalServiceHelper,
            registry
        );
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy