Search in sources :

Example 1 with Artifacts

use of io.cdap.cdap.internal.app.runtime.artifact.Artifacts in project cdap by caskdata.

the class ApplicationLifecycleService method getLatestAppArtifactForUpgrade.

/**
 * Finds latest application artifact for given application and current artifact for upgrading application.
 * If no artifact found then returns current artifact as the candidate.
 *
 * @param appId application Id to find latest app artifact for.
 * @param currentArtifactId current artifact used by application.
 * @param allowedArtifactScopes artifact scopes to search in for finding candidate artifacts.
 * @param allowSnapshot whether to consider snapshot version of artifacts or not for upgrade.
 * @return {@link ArtifactSummary} for the artifact to be used for upgrade purpose.
 * @throws NotFoundException if there is no artifact available for given artifact.
 * @throws Exception if there was an exception during finding candidate artifact.
 */
private ArtifactSummary getLatestAppArtifactForUpgrade(ApplicationId appId, ArtifactId currentArtifactId, Set<ArtifactScope> allowedArtifactScopes, boolean allowSnapshot) throws Exception {
    List<ArtifactSummary> availableArtifacts = new ArrayList<>();
    // At the least, current artifact should be in the set of available artifacts.
    availableArtifacts.add(ArtifactSummary.from(currentArtifactId));
    // Find candidate artifacts from all scopes we need to consider.
    for (ArtifactScope scope : allowedArtifactScopes) {
        NamespaceId artifactNamespaceToConsider = ArtifactScope.SYSTEM.equals(scope) ? NamespaceId.SYSTEM : appId.getParent();
        List<ArtifactSummary> artifacts;
        try {
            artifacts = artifactRepository.getArtifactSummaries(artifactNamespaceToConsider, currentArtifactId.getName(), Integer.MAX_VALUE, ArtifactSortOrder.ASC);
        } catch (ArtifactNotFoundException e) {
            // This can happen if we are looking for candidate artifact in multiple namespace.
            continue;
        }
        for (ArtifactSummary artifactSummary : artifacts) {
            ArtifactVersion artifactVersion = new ArtifactVersion(artifactSummary.getVersion());
            // Consider if it is a non-snapshot version artifact or it is a snapshot version than allowSnapshot is true.
            if ((artifactVersion.isSnapshot() && allowSnapshot) || !artifactVersion.isSnapshot()) {
                availableArtifacts.add(artifactSummary);
            }
        }
    }
    // Find the artifact with latest version.
    Optional<ArtifactSummary> newArtifactCandidate = availableArtifacts.stream().max(Comparator.comparing(artifactSummary -> new ArtifactVersion(artifactSummary.getVersion())));
    io.cdap.cdap.proto.id.ArtifactId currentArtifact = new io.cdap.cdap.proto.id.ArtifactId(appId.getNamespace(), currentArtifactId.getName(), currentArtifactId.getVersion().getVersion());
    return newArtifactCandidate.orElseThrow(() -> new ArtifactNotFoundException(currentArtifact));
}
Also used : RunRecordDetail(io.cdap.cdap.internal.app.store.RunRecordDetail) ApplicationDetail(io.cdap.cdap.proto.ApplicationDetail) GsonBuilder(com.google.gson.GsonBuilder) ScanApplicationsRequest(io.cdap.cdap.app.store.ScanApplicationsRequest) ArtifactSummary(io.cdap.cdap.api.artifact.ArtifactSummary) ArtifactSortOrder(io.cdap.cdap.proto.artifact.ArtifactSortOrder) Map(java.util.Map) MetricDeleteQuery(io.cdap.cdap.api.metrics.MetricDeleteQuery) ApplicationNotFoundException(io.cdap.cdap.common.ApplicationNotFoundException) PreferencesService(io.cdap.cdap.config.PreferencesService) ProgramTerminator(io.cdap.cdap.internal.app.deploy.ProgramTerminator) Set(java.util.Set) ApplicationClass(io.cdap.cdap.api.artifact.ApplicationClass) AppDeploymentInfo(io.cdap.cdap.internal.app.deploy.pipeline.AppDeploymentInfo) StandardCharsets(java.nio.charset.StandardCharsets) Id(io.cdap.cdap.common.id.Id) InstanceId(io.cdap.cdap.proto.id.InstanceId) MetricsSystemClient(io.cdap.cdap.api.metrics.MetricsSystemClient) ApplicationId(io.cdap.cdap.proto.id.ApplicationId) Joiner(com.google.common.base.Joiner) ZipOutputStream(java.util.zip.ZipOutputStream) Iterables(com.google.common.collect.Iterables) WorkflowSpecification(io.cdap.cdap.api.workflow.WorkflowSpecification) PluginInstanceDetail(io.cdap.cdap.proto.PluginInstanceDetail) AccessEnforcer(io.cdap.cdap.security.spi.authorization.AccessEnforcer) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) ProgramRunId(io.cdap.cdap.proto.id.ProgramRunId) ArtifactVersionRange(io.cdap.cdap.api.artifact.ArtifactVersionRange) AdminEventPublisher(io.cdap.cdap.internal.profile.AdminEventPublisher) ManagerFactory(io.cdap.cdap.app.deploy.ManagerFactory) CapabilityNotAvailableException(io.cdap.cdap.internal.capability.CapabilityNotAvailableException) JsonWriter(com.google.gson.stream.JsonWriter) ArtifactDetail(io.cdap.cdap.internal.app.runtime.artifact.ArtifactDetail) Nullable(javax.annotation.Nullable) ApplicationUpdateResult(io.cdap.cdap.api.app.ApplicationUpdateResult) Throwables(com.google.common.base.Throwables) Impersonator(io.cdap.cdap.security.impersonation.Impersonator) IOException(java.io.IOException) File(java.io.File) CannotBeDeletedException(io.cdap.cdap.common.CannotBeDeletedException) ExecutionException(java.util.concurrent.ExecutionException) ProgramSpecification(io.cdap.cdap.api.ProgramSpecification) ArtifactRepository(io.cdap.cdap.internal.app.runtime.artifact.ArtifactRepository) ArtifactId(io.cdap.cdap.api.artifact.ArtifactId) NamespaceId(io.cdap.cdap.proto.id.NamespaceId) AccessException(io.cdap.cdap.api.security.AccessException) Inject(com.google.inject.Inject) LoggerFactory(org.slf4j.LoggerFactory) Principal(io.cdap.cdap.proto.security.Principal) AppDeploymentRuntimeInfo(io.cdap.cdap.internal.app.deploy.pipeline.AppDeploymentRuntimeInfo) Gson(com.google.gson.Gson) AuthenticationContext(io.cdap.cdap.security.spi.authentication.AuthenticationContext) CloseableClassLoader(io.cdap.cdap.api.artifact.CloseableClassLoader) EntityType(io.cdap.cdap.proto.element.EntityType) MetadataMutation(io.cdap.cdap.spi.metadata.MetadataMutation) ZipEntry(java.util.zip.ZipEntry) Application(io.cdap.cdap.api.app.Application) BatchingConsumer(io.cdap.cdap.common.utils.BatchingConsumer) Artifacts(io.cdap.cdap.internal.app.runtime.artifact.Artifacts) AccessPermission(io.cdap.cdap.proto.security.AccessPermission) Collection(java.util.Collection) ApplicationSpecification(io.cdap.cdap.api.app.ApplicationSpecification) MessagingService(io.cdap.cdap.messaging.MessagingService) MetadataServiceClient(io.cdap.cdap.data2.metadata.writer.MetadataServiceClient) Collectors(java.util.stream.Collectors) List(java.util.List) MultiThreadMessagingContext(io.cdap.cdap.messaging.context.MultiThreadMessagingContext) Type(java.lang.reflect.Type) ApplicationConfigUpdateAction(io.cdap.cdap.api.app.ApplicationConfigUpdateAction) CaseInsensitiveEnumTypeAdapterFactory(io.cdap.cdap.common.io.CaseInsensitiveEnumTypeAdapterFactory) JsonIOException(com.google.gson.JsonIOException) AppFabric(io.cdap.cdap.common.conf.Constants.AppFabric) Entry(java.util.Map.Entry) Optional(java.util.Optional) Constants(io.cdap.cdap.common.conf.Constants) Manager(io.cdap.cdap.app.deploy.Manager) InvalidArtifactException(io.cdap.cdap.common.InvalidArtifactException) ArtifactScope(io.cdap.cdap.api.artifact.ArtifactScope) ArtifactAlreadyExistsException(io.cdap.cdap.common.ArtifactAlreadyExistsException) NotFoundException(io.cdap.cdap.common.NotFoundException) StandardPermission(io.cdap.cdap.proto.security.StandardPermission) ArtifactRange(io.cdap.cdap.api.artifact.ArtifactRange) HashMap(java.util.HashMap) ApplicationWithPrograms(io.cdap.cdap.internal.app.deploy.pipeline.ApplicationWithPrograms) EntityId(io.cdap.cdap.proto.id.EntityId) ProgramType(io.cdap.cdap.proto.ProgramType) HashSet(java.util.HashSet) ImmutableList(com.google.common.collect.ImmutableList) AbstractIdleService(com.google.common.util.concurrent.AbstractIdleService) OutputStreamWriter(java.io.OutputStreamWriter) DefaultApplicationUpdateContext(io.cdap.cdap.internal.app.DefaultApplicationUpdateContext) SimpleEntry(java.util.AbstractMap.SimpleEntry) UsageRegistry(io.cdap.cdap.data2.registry.UsageRegistry) Logger(org.slf4j.Logger) Scheduler(io.cdap.cdap.scheduler.Scheduler) ApplicationFilter(io.cdap.cdap.app.store.ApplicationFilter) ProgramId(io.cdap.cdap.proto.id.ProgramId) Store(io.cdap.cdap.app.store.Store) EntityImpersonator(io.cdap.cdap.security.impersonation.EntityImpersonator) Consumer(java.util.function.Consumer) KerberosPrincipalId(io.cdap.cdap.proto.id.KerberosPrincipalId) ArtifactNotFoundException(io.cdap.cdap.common.ArtifactNotFoundException) CConfiguration(io.cdap.cdap.common.conf.CConfiguration) ArtifactVersion(io.cdap.cdap.api.artifact.ArtifactVersion) CapabilityReader(io.cdap.cdap.internal.capability.CapabilityReader) OwnerAdmin(io.cdap.cdap.security.impersonation.OwnerAdmin) AppRequest(io.cdap.cdap.proto.artifact.AppRequest) Comparator(java.util.Comparator) Plugin(io.cdap.cdap.api.plugin.Plugin) Collections(java.util.Collections) SecurityUtil(io.cdap.cdap.security.impersonation.SecurityUtil) ArtifactId(io.cdap.cdap.api.artifact.ArtifactId) ArrayList(java.util.ArrayList) ArtifactScope(io.cdap.cdap.api.artifact.ArtifactScope) ArtifactSummary(io.cdap.cdap.api.artifact.ArtifactSummary) ArtifactVersion(io.cdap.cdap.api.artifact.ArtifactVersion) NamespaceId(io.cdap.cdap.proto.id.NamespaceId) ArtifactNotFoundException(io.cdap.cdap.common.ArtifactNotFoundException)

Aggregations

Joiner (com.google.common.base.Joiner)1 Throwables (com.google.common.base.Throwables)1 ImmutableList (com.google.common.collect.ImmutableList)1 Iterables (com.google.common.collect.Iterables)1 AbstractIdleService (com.google.common.util.concurrent.AbstractIdleService)1 Gson (com.google.gson.Gson)1 GsonBuilder (com.google.gson.GsonBuilder)1 JsonIOException (com.google.gson.JsonIOException)1 JsonWriter (com.google.gson.stream.JsonWriter)1 Inject (com.google.inject.Inject)1 ProgramSpecification (io.cdap.cdap.api.ProgramSpecification)1 Application (io.cdap.cdap.api.app.Application)1 ApplicationConfigUpdateAction (io.cdap.cdap.api.app.ApplicationConfigUpdateAction)1 ApplicationSpecification (io.cdap.cdap.api.app.ApplicationSpecification)1 ApplicationUpdateResult (io.cdap.cdap.api.app.ApplicationUpdateResult)1 ApplicationClass (io.cdap.cdap.api.artifact.ApplicationClass)1 ArtifactId (io.cdap.cdap.api.artifact.ArtifactId)1 ArtifactRange (io.cdap.cdap.api.artifact.ArtifactRange)1 ArtifactScope (io.cdap.cdap.api.artifact.ArtifactScope)1 ArtifactSummary (io.cdap.cdap.api.artifact.ArtifactSummary)1