Search in sources :

Example 1 with JcrUserDatasource

use of com.thinkbiganalytics.metadata.modeshape.datasource.JcrUserDatasource in project kylo by Teradata.

the class MigrateLegacyDatasourcesUpgradeAction method upgradeTo.

@Override
public void upgradeTo(final KyloVersion targetVersion) {
    log.info("Setting up catalog access control: {}", targetVersion);
    try {
        NodeTypeManager typeMgr = JcrMetadataAccess.getActiveSession().getWorkspace().getNodeTypeManager();
        NodeType dataSourceType = typeMgr.getNodeType("tba:DataSource");
        Connector conn = pluginManager.getPlugin("jdbc").flatMap(plugin -> connectorProvider.findByPlugin(plugin.getId())).orElseThrow(() -> new IllegalStateException("No JDBC connector found"));
        legacyProvider.getDatasources().stream().map(JcrDatasource.class::cast).map(JcrDatasource::getNode).filter(node -> JcrUtil.isNodeType(node, "tba:userDatasource")).filter(node -> JcrUtil.isNodeType(JcrUtil.getNode(node, "tba:details"), "tba:jdbcDatasourceDetails")).forEach(jdbcNode -> {
            try {
                // Move the legacy datasource node to a temporary parent that doesn't have any constraints (the catalog folder).
                Node tmpParent = JcrUtil.getNode(JcrUtil.getRootNode(jdbcNode), "metadata/catalog");
                String dsSystemName = dataSourceProvider.generateSystemName(JcrUtil.getName(jdbcNode));
                Path catDsPath = MetadataPaths.dataSourcePath(conn.getSystemName(), dsSystemName);
                Node catDsNode = JcrUtil.moveNode(jdbcNode, JcrUtil.path(tmpParent.getPath()).resolve(dsSystemName));
                // Wrap the node as a legacy UserDataSource and collect its properties.
                JcrUserDatasource legacyDs = JcrUtil.getJcrObject(catDsNode, JcrUserDatasource.class);
                Set<? extends JcrFeed> referencingFeeds = legacyDs.getFeedSources().stream().map(FeedSource::getFeed).map(JcrFeed.class::cast).collect(Collectors.toSet());
                AtomicReference<String> controllerServiceId = new AtomicReference<>();
                AtomicReference<String> password = new AtomicReference<>();
                legacyDs.getDetails().filter(JcrJdbcDatasourceDetails.class::isInstance).map(JcrJdbcDatasourceDetails.class::cast).ifPresent(details -> {
                    controllerServiceId.set(details.getControllerServiceId().orElse(null));
                    password.set("{cipher}" + details.getPassword());
                });
                if (this.accessController.isEntityAccessControlled()) {
                    legacyDs.disableAccessControl(legacyDs.getOwner());
                }
                // Convert the legacy type into the catalog type.
                JcrDataSource catDs = convertToDataSource(catDsNode, catDsPath, dataSourceType, controllerServiceId.get(), password.get());
                linkDataSets(catDs, referencingFeeds);
                if (this.accessController.isEntityAccessControlled()) {
                    List<SecurityRole> roles = roleProvider.getEntityRoles(SecurityRole.DATASOURCE);
                    actionsProvider.getAvailableActions(AllowedActions.DATASOURCE).ifPresent(actions -> catDs.enableAccessControl((JcrAllowedActions) actions, legacyDs.getOwner(), roles));
                }
            } catch (RepositoryException e) {
                throw new UpgradeException("Failed to migrate legacy datasources", e);
            }
        });
    } catch (IllegalStateException | RepositoryException e) {
        throw new UpgradeException("Failed to migrate legacy datasources", e);
    }
}
Also used : Arrays(java.util.Arrays) MetadataPaths(com.thinkbiganalytics.metadata.modeshape.common.MetadataPaths) LoggerFactory(org.slf4j.LoggerFactory) JcrUserDatasource(com.thinkbiganalytics.metadata.modeshape.datasource.JcrUserDatasource) StringUtils(org.apache.commons.lang3.StringUtils) JcrDataSetProvider(com.thinkbiganalytics.metadata.modeshape.catalog.dataset.JcrDataSetProvider) FeedProvider(com.thinkbiganalytics.metadata.api.feed.FeedProvider) SecurityRole(com.thinkbiganalytics.security.role.SecurityRole) JcrDataSource(com.thinkbiganalytics.metadata.modeshape.catalog.datasource.JcrDataSource) JcrDatasource(com.thinkbiganalytics.metadata.modeshape.datasource.JcrDatasource) Map(java.util.Map) AccessController(com.thinkbiganalytics.security.AccessController) UpgradeException(com.thinkbiganalytics.server.upgrade.UpgradeException) JcrAllowedEntityActionsProvider(com.thinkbiganalytics.metadata.modeshape.security.action.JcrAllowedEntityActionsProvider) Path(java.nio.file.Path) JcrPropertyUtil(com.thinkbiganalytics.metadata.modeshape.support.JcrPropertyUtil) JcrJdbcDatasourceDetails(com.thinkbiganalytics.metadata.modeshape.datasource.JcrJdbcDatasourceDetails) NifiControllerServiceProperties(com.thinkbiganalytics.feedmgr.nifi.NifiControllerServiceProperties) Set(java.util.Set) Collectors(java.util.stream.Collectors) SecurityRoleProvider(com.thinkbiganalytics.security.role.SecurityRoleProvider) IconableMixin(com.thinkbiganalytics.metadata.modeshape.common.mixin.IconableMixin) JcrDerivedDatasource(com.thinkbiganalytics.metadata.modeshape.datasource.JcrDerivedDatasource) List(java.util.List) NodeType(javax.jcr.nodetype.NodeType) JcrAllowedActions(com.thinkbiganalytics.metadata.modeshape.security.action.JcrAllowedActions) JcrFeedSource(com.thinkbiganalytics.metadata.modeshape.feed.JcrFeedSource) JcrMetadataAccess(com.thinkbiganalytics.metadata.modeshape.JcrMetadataAccess) KyloUpgrader(com.thinkbiganalytics.server.upgrade.KyloUpgrader) JcrDataSourceProvider(com.thinkbiganalytics.metadata.modeshape.catalog.datasource.JcrDataSourceProvider) ConnectorPluginManager(com.thinkbiganalytics.kylo.catalog.ConnectorPluginManager) PropertiedMixin(com.thinkbiganalytics.metadata.modeshape.common.mixin.PropertiedMixin) AtomicReference(java.util.concurrent.atomic.AtomicReference) AllowedActions(com.thinkbiganalytics.security.action.AllowedActions) Inject(javax.inject.Inject) NodeTypeManager(javax.jcr.nodetype.NodeTypeManager) JcrDataSet(com.thinkbiganalytics.metadata.modeshape.catalog.dataset.JcrDataSet) UpgradeAction(com.thinkbiganalytics.server.upgrade.UpgradeAction) RepositoryException(javax.jcr.RepositoryException) JcrFeed(com.thinkbiganalytics.metadata.modeshape.feed.JcrFeed) Node(javax.jcr.Node) FeedSource(com.thinkbiganalytics.metadata.api.feed.FeedSource) JcrDataSetSparkParameters(com.thinkbiganalytics.metadata.modeshape.catalog.JcrDataSetSparkParameters) ConnectorProvider(com.thinkbiganalytics.metadata.api.catalog.ConnectorProvider) SystemEntityMixin(com.thinkbiganalytics.metadata.modeshape.common.mixin.SystemEntityMixin) Logger(org.slf4j.Logger) DataSetSparkParameters(com.thinkbiganalytics.metadata.api.catalog.DataSetSparkParameters) Profile(org.springframework.context.annotation.Profile) Component(org.springframework.stereotype.Component) Connector(com.thinkbiganalytics.metadata.api.catalog.Connector) Workspace(org.modeshape.jcr.api.Workspace) JcrUtil(com.thinkbiganalytics.metadata.modeshape.support.JcrUtil) KyloVersion(com.thinkbiganalytics.KyloVersion) DatasourceProvider(com.thinkbiganalytics.metadata.api.datasource.DatasourceProvider) Path(java.nio.file.Path) Connector(com.thinkbiganalytics.metadata.api.catalog.Connector) SecurityRole(com.thinkbiganalytics.security.role.SecurityRole) NodeTypeManager(javax.jcr.nodetype.NodeTypeManager) JcrUserDatasource(com.thinkbiganalytics.metadata.modeshape.datasource.JcrUserDatasource) Node(javax.jcr.Node) AtomicReference(java.util.concurrent.atomic.AtomicReference) JcrDataSource(com.thinkbiganalytics.metadata.modeshape.catalog.datasource.JcrDataSource) RepositoryException(javax.jcr.RepositoryException) UpgradeException(com.thinkbiganalytics.server.upgrade.UpgradeException) JcrDatasource(com.thinkbiganalytics.metadata.modeshape.datasource.JcrDatasource) JcrAllowedActions(com.thinkbiganalytics.metadata.modeshape.security.action.JcrAllowedActions) JcrFeedSource(com.thinkbiganalytics.metadata.modeshape.feed.JcrFeedSource) FeedSource(com.thinkbiganalytics.metadata.api.feed.FeedSource) NodeType(javax.jcr.nodetype.NodeType) JcrJdbcDatasourceDetails(com.thinkbiganalytics.metadata.modeshape.datasource.JcrJdbcDatasourceDetails)

Aggregations

KyloVersion (com.thinkbiganalytics.KyloVersion)1 NifiControllerServiceProperties (com.thinkbiganalytics.feedmgr.nifi.NifiControllerServiceProperties)1 ConnectorPluginManager (com.thinkbiganalytics.kylo.catalog.ConnectorPluginManager)1 Connector (com.thinkbiganalytics.metadata.api.catalog.Connector)1 ConnectorProvider (com.thinkbiganalytics.metadata.api.catalog.ConnectorProvider)1 DataSetSparkParameters (com.thinkbiganalytics.metadata.api.catalog.DataSetSparkParameters)1 DatasourceProvider (com.thinkbiganalytics.metadata.api.datasource.DatasourceProvider)1 FeedProvider (com.thinkbiganalytics.metadata.api.feed.FeedProvider)1 FeedSource (com.thinkbiganalytics.metadata.api.feed.FeedSource)1 JcrMetadataAccess (com.thinkbiganalytics.metadata.modeshape.JcrMetadataAccess)1 JcrDataSetSparkParameters (com.thinkbiganalytics.metadata.modeshape.catalog.JcrDataSetSparkParameters)1 JcrDataSet (com.thinkbiganalytics.metadata.modeshape.catalog.dataset.JcrDataSet)1 JcrDataSetProvider (com.thinkbiganalytics.metadata.modeshape.catalog.dataset.JcrDataSetProvider)1 JcrDataSource (com.thinkbiganalytics.metadata.modeshape.catalog.datasource.JcrDataSource)1 JcrDataSourceProvider (com.thinkbiganalytics.metadata.modeshape.catalog.datasource.JcrDataSourceProvider)1 MetadataPaths (com.thinkbiganalytics.metadata.modeshape.common.MetadataPaths)1 IconableMixin (com.thinkbiganalytics.metadata.modeshape.common.mixin.IconableMixin)1 PropertiedMixin (com.thinkbiganalytics.metadata.modeshape.common.mixin.PropertiedMixin)1 SystemEntityMixin (com.thinkbiganalytics.metadata.modeshape.common.mixin.SystemEntityMixin)1 JcrDatasource (com.thinkbiganalytics.metadata.modeshape.datasource.JcrDatasource)1