Search in sources :

Example 16 with Plugin

use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.

the class DefaultServicePluginConfigurer method createClassLoader.

@Override
public ClassLoader createClassLoader() {
    Map<String, Plugin> plugins = getPlugins().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, v -> v.getValue().getPlugin()));
    ClassLoader pluginsClassLoader = PluginClassLoaders.createFilteredPluginsClassLoader(plugins, getPluginInstantiator());
    return new CombineClassLoader(null, programClassLoader, pluginsClassLoader, getClass().getClassLoader());
}
Also used : PluginSelector(io.cdap.cdap.api.plugin.PluginSelector) NamespaceId(io.cdap.cdap.proto.id.NamespaceId) PluginFinder(io.cdap.cdap.internal.app.runtime.artifact.PluginFinder) Throwables(com.google.common.base.Throwables) IOException(java.io.IOException) PluginProperties(io.cdap.cdap.api.plugin.PluginProperties) Collectors(java.util.stream.Collectors) PluginClassLoaders(io.cdap.cdap.internal.app.runtime.plugin.PluginClassLoaders) PluginNotExistsException(io.cdap.cdap.internal.app.runtime.plugin.PluginNotExistsException) PluginInstantiator(io.cdap.cdap.internal.app.runtime.plugin.PluginInstantiator) Map(java.util.Map) MacroParserOptions(io.cdap.cdap.api.macro.MacroParserOptions) ServicePluginConfigurer(io.cdap.cdap.api.service.http.ServicePluginConfigurer) ArtifactId(io.cdap.cdap.proto.id.ArtifactId) Plugin(io.cdap.cdap.api.plugin.Plugin) MacroEvaluator(io.cdap.cdap.api.macro.MacroEvaluator) CombineClassLoader(io.cdap.cdap.common.lang.CombineClassLoader) Nullable(javax.annotation.Nullable) CombineClassLoader(io.cdap.cdap.common.lang.CombineClassLoader) CombineClassLoader(io.cdap.cdap.common.lang.CombineClassLoader) Map(java.util.Map) Plugin(io.cdap.cdap.api.plugin.Plugin)

Example 17 with Plugin

use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.

the class FindPluginHelper method getPlugin.

/**
 * Get the Plugin information from the specified information.
 *
 * @param parents plugin parents of the plugin. Each item in the iterable must be the parent of the item before it,
 *                with the first item as the direct parent of the plugin
 * @param pluginEntry artifact and class information for the plugin
 * @param properties plugin properties
 * @param pluginInstantiator instantiator to add the plugin artifact to
 * @return plugin information
 */
public static Plugin getPlugin(Iterable<ArtifactId> parents, Map.Entry<ArtifactDescriptor, PluginClass> pluginEntry, PluginProperties properties, PluginInstantiator pluginInstantiator) {
    CollectMacroEvaluator collectMacroEvaluator = new CollectMacroEvaluator();
    for (PluginPropertyField field : pluginEntry.getValue().getProperties().values()) {
        if (field.isMacroSupported() && properties.getProperties().containsKey(field.getName())) {
            MacroParser parser = new MacroParser(collectMacroEvaluator, MacroParserOptions.builder().setEscaping(field.isMacroEscapingEnabled()).build());
            parser.parse(properties.getProperties().get(field.getName()));
        }
    }
    ArtifactId artifact = pluginEntry.getKey().getArtifactId();
    try {
        pluginInstantiator.addArtifact(pluginEntry.getKey().getLocation(), artifact);
    } catch (IOException e) {
        throw Throwables.propagate(e);
    }
    return new Plugin(parents, artifact, pluginEntry.getValue(), properties.setMacros(collectMacroEvaluator.getMacros()));
}
Also used : ArtifactId(io.cdap.cdap.api.artifact.ArtifactId) IOException(java.io.IOException) PluginPropertyField(io.cdap.cdap.api.plugin.PluginPropertyField) Plugin(io.cdap.cdap.api.plugin.Plugin)

Example 18 with Plugin

use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.

the class ProfileMetadataMessageProcessor method addPluginMetadataDelete.

private void addPluginMetadataDelete(ApplicationId appId, ApplicationSpecification appSpec, List<MetadataMutation> deletes) {
    LOG.trace("Deleting plugin metadata for {}", appSpec.getName());
    String namespace = appId.getNamespace();
    String appKey = String.format("%s:%s", namespace, appSpec.getName());
    Set<ScopedNameOfKind> pluginSet = Collections.singleton(new ScopedNameOfKind(MetadataKind.PROPERTY, MetadataScope.SYSTEM, appKey));
    for (Plugin plugin : appSpec.getPlugins().values()) {
        PluginId pluginId = new PluginId(namespace, plugin);
        deletes.add(new MetadataMutation.Remove(pluginId.toMetadataEntity(), pluginSet));
    }
}
Also used : MetadataMutation(io.cdap.cdap.spi.metadata.MetadataMutation) ScopedNameOfKind(io.cdap.cdap.spi.metadata.ScopedNameOfKind) PluginId(io.cdap.cdap.proto.id.PluginId) Plugin(io.cdap.cdap.api.plugin.Plugin)

Example 19 with Plugin

use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.

the class AppSystemMetadataWriter method getSystemPropertiesToAdd.

@Override
public Map<String, String> getSystemPropertiesToAdd() {
    ImmutableMap.Builder<String, String> properties = ImmutableMap.builder();
    if (systemAppMetadata != null) {
        properties.putAll(systemAppMetadata.getProperties());
    }
    properties.put(MetadataConstants.ENTITY_NAME_KEY, appSpec.getName());
    properties.put(VERSION_KEY, appId.getVersion());
    String description = appSpec.getDescription();
    if (!Strings.isNullOrEmpty(description)) {
        properties.put(MetadataConstants.DESCRIPTION_KEY, description);
    }
    properties.put(MetadataConstants.CREATION_TIME_KEY, creationTime);
    addPrograms(properties);
    addSchedules(properties);
    // appSpec.getPlugins() returns all instances of all plugins, so there may be duplicates.
    // we only store unique plugins right now
    Set<PluginClass> existingPluginClasses = new HashSet<>();
    for (Plugin plugin : appSpec.getPlugins().values()) {
        if (!existingPluginClasses.contains(plugin.getPluginClass())) {
            SystemMetadataProvider.addPlugin(plugin.getPluginClass(), null, properties);
            existingPluginClasses.add(plugin.getPluginClass());
        }
    }
    addCapabilities(appSpec, applicationClass, properties);
    return properties.build();
}
Also used : PluginClass(io.cdap.cdap.api.plugin.PluginClass) ImmutableMap(com.google.common.collect.ImmutableMap) HashSet(java.util.HashSet) Plugin(io.cdap.cdap.api.plugin.Plugin)

Example 20 with Plugin

use of io.cdap.cdap.api.plugin.Plugin in project cdap by cdapio.

the class ApplicationDetail method fromSpec.

public static ApplicationDetail fromSpec(ApplicationSpecification spec, @Nullable String ownerPrincipal) {
    List<ProgramRecord> programs = new ArrayList<>();
    for (ProgramSpecification programSpec : spec.getMapReduce().values()) {
        programs.add(new ProgramRecord(ProgramType.MAPREDUCE, spec.getName(), programSpec.getName(), programSpec.getDescription()));
    }
    for (ProgramSpecification programSpec : spec.getServices().values()) {
        programs.add(new ProgramRecord(ProgramType.SERVICE, spec.getName(), programSpec.getName(), programSpec.getDescription()));
    }
    for (ProgramSpecification programSpec : spec.getSpark().values()) {
        programs.add(new ProgramRecord(ProgramType.SPARK, spec.getName(), programSpec.getName(), programSpec.getDescription()));
    }
    for (ProgramSpecification programSpec : spec.getWorkers().values()) {
        programs.add(new ProgramRecord(ProgramType.WORKER, spec.getName(), programSpec.getName(), programSpec.getDescription()));
    }
    for (ProgramSpecification programSpec : spec.getWorkflows().values()) {
        programs.add(new ProgramRecord(ProgramType.WORKFLOW, spec.getName(), programSpec.getName(), programSpec.getDescription()));
    }
    List<DatasetDetail> datasets = new ArrayList<>();
    for (DatasetCreationSpec datasetSpec : spec.getDatasets().values()) {
        datasets.add(new DatasetDetail(datasetSpec.getInstanceName(), datasetSpec.getTypeName()));
    }
    List<PluginDetail> plugins = new ArrayList<>();
    for (Map.Entry<String, Plugin> pluginEnty : spec.getPlugins().entrySet()) {
        plugins.add(new PluginDetail(pluginEnty.getKey(), pluginEnty.getValue().getPluginClass().getName(), pluginEnty.getValue().getPluginClass().getType()));
    }
    // this is only required if there are old apps lying around that failed to get upgrading during
    // the upgrade to v3.2 for some reason. In those cases artifact id will be null until they re-deploy the app.
    // in the meantime, we don't want this api call to null pointer exception.
    ArtifactSummary summary = spec.getArtifactId() == null ? new ArtifactSummary(spec.getName(), null) : ArtifactSummary.from(spec.getArtifactId());
    return new ApplicationDetail(spec.getName(), spec.getAppVersion(), spec.getDescription(), spec.getConfiguration(), datasets, programs, plugins, summary, ownerPrincipal);
}
Also used : ProgramSpecification(io.cdap.cdap.api.ProgramSpecification) ArrayList(java.util.ArrayList) ArtifactSummary(io.cdap.cdap.api.artifact.ArtifactSummary) DatasetCreationSpec(io.cdap.cdap.internal.dataset.DatasetCreationSpec) Map(java.util.Map) Plugin(io.cdap.cdap.api.plugin.Plugin)

Aggregations

Plugin (io.cdap.cdap.api.plugin.Plugin)50 Map (java.util.Map)18 HashMap (java.util.HashMap)16 PluginClass (io.cdap.cdap.api.plugin.PluginClass)14 File (java.io.File)14 ImmutableMap (com.google.common.collect.ImmutableMap)12 JsonObject (com.google.gson.JsonObject)12 HashSet (java.util.HashSet)12 Test (org.junit.Test)10 ImmutableSet (com.google.common.collect.ImmutableSet)8 Resources (io.cdap.cdap.api.Resources)8 ArtifactId (io.cdap.cdap.api.artifact.ArtifactId)8 TestPlugin (io.cdap.cdap.internal.app.plugins.test.TestPlugin)8 NestedConfigPlugin (io.cdap.cdap.internal.app.runtime.artifact.plugin.nested.NestedConfigPlugin)8 PluginInstantiator (io.cdap.cdap.internal.app.runtime.plugin.PluginInstantiator)8 Set (java.util.Set)8 ArtifactId (io.cdap.cdap.proto.id.ArtifactId)6 IOException (java.io.IOException)6 ArrayList (java.util.ArrayList)6 SortedMap (java.util.SortedMap)6