Search in sources :

Example 16 with ArtifactScope

use of io.cdap.cdap.api.artifact.ArtifactScope in project cdap by caskdata.

the class PluginSpec method readExternal.

@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
    type = in.readUTF();
    name = in.readUTF();
    properties = (Map<String, String>) in.readObject();
    boolean artifactExists = in.readBoolean();
    if (artifactExists) {
        String artifactName = in.readUTF();
        ArtifactVersion artifactVersion = new ArtifactVersion(in.readUTF());
        ArtifactScope artifactScope = ArtifactScope.valueOf(in.readUTF());
        artifact = new ArtifactId(artifactName, artifactVersion, artifactScope);
    }
}
Also used : ArtifactScope(io.cdap.cdap.api.artifact.ArtifactScope) ArtifactVersion(io.cdap.cdap.api.artifact.ArtifactVersion) ArtifactId(io.cdap.cdap.api.artifact.ArtifactId)

Example 17 with ArtifactScope

use of io.cdap.cdap.api.artifact.ArtifactScope 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)

Example 18 with ArtifactScope

use of io.cdap.cdap.api.artifact.ArtifactScope in project cdap by caskdata.

the class RemoteArtifactRepositoryReader method newInputStream.

/**
 * Returns an input stream for reading the artifact bytes. If no such artifact exists, or an error occurs during
 * reading, an exception is thrown.
 *
 * @param artifactId the id of the artifact to get
 * @return an InputStream for the artifact bytes
 * @throws IOException if there as an exception reading from the store.
 * @throws NotFoundException if the given artifact does not exist
 */
@Override
public InputStream newInputStream(Id.Artifact artifactId) throws IOException, NotFoundException {
    String namespaceId = artifactId.getNamespace().getId();
    ArtifactScope scope = ArtifactScope.USER;
    // as long as it exists. Using default because it will always be there
    if (NamespaceId.SYSTEM.getNamespace().equalsIgnoreCase(namespaceId)) {
        namespaceId = NamespaceId.DEFAULT.getNamespace();
        scope = ArtifactScope.SYSTEM;
    }
    String url = String.format("namespaces/%s/artifacts/%s/versions/%s/download?scope=%s", namespaceId, artifactId.getName(), artifactId.getVersion(), scope);
    HttpURLConnection urlConn = remoteClient.openConnection(HttpMethod.GET, url);
    throwIfError(artifactId, urlConn);
    // Use FilterInputStream and override close to ensure the connection is closed once the input stream is closed
    return new FilterInputStream(urlConn.getInputStream()) {

        @Override
        public void close() throws IOException {
            try {
                super.close();
            } finally {
                urlConn.disconnect();
            }
        }
    };
}
Also used : ArtifactScope(io.cdap.cdap.api.artifact.ArtifactScope) FilterInputStream(java.io.FilterInputStream) HttpURLConnection(java.net.HttpURLConnection)

Example 19 with ArtifactScope

use of io.cdap.cdap.api.artifact.ArtifactScope in project cdap by caskdata.

the class SetArtifactPropertiesCommand method perform.

@Override
public void perform(Arguments arguments, PrintStream output) throws Exception {
    String artifactName = arguments.get(ArgumentName.ARTIFACT_NAME.toString());
    String artifactVersion = arguments.get(ArgumentName.ARTIFACT_VERSION.toString());
    String scopeStr = arguments.get(ArgumentName.SCOPE.toString());
    ArtifactScope scope = ArtifactScope.valueOf(scopeStr.toUpperCase());
    NamespaceId namespace = scope == ArtifactScope.SYSTEM ? NamespaceId.SYSTEM : cliConfig.getCurrentNamespace();
    ArtifactId artifactId = namespace.artifact(artifactName, artifactVersion);
    String propertiesFilePath = arguments.get(ArgumentName.LOCAL_FILE_PATH.toString());
    File propertiesFile = resolver.resolvePathToFile(propertiesFilePath);
    try (Reader reader = new FileReader(propertiesFile)) {
        ArtifactProperties properties;
        try {
            properties = GSON.fromJson(reader, ArtifactProperties.class);
        } catch (Exception e) {
            throw new RuntimeException("Error parsing file contents. Please check that it is a valid JSON object, " + "and that it contains a 'properties' key whose value is a JSON object of the " + "artifact properties.", e);
        }
        artifactClient.writeProperties(artifactId, properties.properties);
    }
}
Also used : ArtifactScope(io.cdap.cdap.api.artifact.ArtifactScope) ArtifactId(io.cdap.cdap.proto.id.ArtifactId) Reader(java.io.Reader) FileReader(java.io.FileReader) FileReader(java.io.FileReader) NamespaceId(io.cdap.cdap.proto.id.NamespaceId) File(java.io.File)

Example 20 with ArtifactScope

use of io.cdap.cdap.api.artifact.ArtifactScope in project cdap by caskdata.

the class UpdateAppCommand method perform.

@Override
public void perform(Arguments arguments, PrintStream output) throws Exception {
    String appName = arguments.get(ArgumentName.APP.toString());
    ApplicationId appId = cliConfig.getCurrentNamespace().app(appName);
    String artifactName = arguments.get(ArgumentName.ARTIFACT_NAME.toString());
    String artifactVersion = arguments.get(ArgumentName.ARTIFACT_VERSION.toString());
    ArtifactScope artifactScope = ArtifactScope.valueOf(arguments.get(ArgumentName.SCOPE.toString()).toUpperCase());
    ArtifactSummary artifact = new ArtifactSummary(artifactName, artifactVersion, artifactScope);
    JsonObject config = new JsonObject();
    String configPath = arguments.getOptional(ArgumentName.APP_CONFIG_FILE.toString());
    if (configPath != null) {
        File configFile = resolver.resolvePathToFile(configPath);
        try (FileReader reader = new FileReader(configFile)) {
            AppRequest<JsonObject> appRequest = GSON.fromJson(reader, CONFIG_TYPE);
            config = appRequest.getConfig();
        }
    }
    AppRequest<JsonObject> appRequest = new AppRequest<>(artifact, config);
    applicationClient.update(appId, appRequest);
    output.println("Successfully updated application");
}
Also used : ArtifactScope(io.cdap.cdap.api.artifact.ArtifactScope) ArtifactSummary(io.cdap.cdap.api.artifact.ArtifactSummary) JsonObject(com.google.gson.JsonObject) FileReader(java.io.FileReader) ApplicationId(io.cdap.cdap.proto.id.ApplicationId) File(java.io.File) AppRequest(io.cdap.cdap.proto.artifact.AppRequest)

Aggregations

ArtifactScope (io.cdap.cdap.api.artifact.ArtifactScope)32 ApplicationId (io.cdap.cdap.proto.id.ApplicationId)12 ArtifactId (io.cdap.cdap.api.artifact.ArtifactId)8 ArtifactSummary (io.cdap.cdap.api.artifact.ArtifactSummary)8 NamespaceId (io.cdap.cdap.proto.id.NamespaceId)8 File (java.io.File)8 Map (java.util.Map)8 ArtifactVersion (io.cdap.cdap.api.artifact.ArtifactVersion)6 ArtifactVersionRange (io.cdap.cdap.api.artifact.ArtifactVersionRange)6 AppRequest (io.cdap.cdap.proto.artifact.AppRequest)6 ArtifactId (io.cdap.cdap.proto.id.ArtifactId)6 ArrayList (java.util.ArrayList)6 FileReader (java.io.FileReader)5 Gson (com.google.gson.Gson)4 GsonBuilder (com.google.gson.GsonBuilder)4 JsonObject (com.google.gson.JsonObject)4 JsonSyntaxException (com.google.gson.JsonSyntaxException)4 JsonWriter (com.google.gson.stream.JsonWriter)4 ApplicationConfigUpdateAction (io.cdap.cdap.api.app.ApplicationConfigUpdateAction)4 AccessException (io.cdap.cdap.api.security.AccessException)4