Search in sources :

Example 1 with RunnableErrorForwarder

use of org.sonatype.aether.util.concurrency.RunnableErrorForwarder in project sonatype-aether by sonatype.

the class WagonRepositoryConnector method get.

public void get(Collection<? extends ArtifactDownload> artifactDownloads, Collection<? extends MetadataDownload> metadataDownloads) {
    if (closed) {
        throw new IllegalStateException("connector closed");
    }
    artifactDownloads = safe(artifactDownloads);
    metadataDownloads = safe(metadataDownloads);
    Collection<GetTask<?>> tasks = new ArrayList<GetTask<?>>();
    RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder();
    for (MetadataDownload download : metadataDownloads) {
        String resource = layout.getPath(download.getMetadata()).getPath();
        GetTask<?> task = new GetTask<MetadataTransfer>(resource, download.getFile(), download.getChecksumPolicy(), download, METADATA);
        tasks.add(task);
        executor.execute(errorForwarder.wrap(task));
    }
    for (ArtifactDownload download : artifactDownloads) {
        String resource = layout.getPath(download.getArtifact()).getPath();
        GetTask<?> task = new GetTask<ArtifactTransfer>(resource, download.isExistenceCheck() ? null : download.getFile(), download.getChecksumPolicy(), download, ARTIFACT);
        tasks.add(task);
        executor.execute(errorForwarder.wrap(task));
    }
    errorForwarder.await();
}
Also used : ArtifactDownload(org.sonatype.aether.spi.connector.ArtifactDownload) ArrayList(java.util.ArrayList) RunnableErrorForwarder(org.sonatype.aether.util.concurrency.RunnableErrorForwarder) MetadataDownload(org.sonatype.aether.spi.connector.MetadataDownload)

Example 2 with RunnableErrorForwarder

use of org.sonatype.aether.util.concurrency.RunnableErrorForwarder in project sonatype-aether by sonatype.

the class FileRepositoryConnector method put.

public void put(Collection<? extends ArtifactUpload> artifactUploads, Collection<? extends MetadataUpload> metadataUploads) {
    checkClosed();
    artifactUploads = notNull(artifactUploads);
    metadataUploads = notNull(metadataUploads);
    RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder();
    for (ArtifactUpload artifactUpload : artifactUploads) {
        FileRepositoryWorker worker = new FileRepositoryWorker(artifactUpload, repository, session);
        worker.setLogger(logger);
        worker.setFileProcessor(fileProcessor);
        executor.execute(errorForwarder.wrap(worker));
    }
    for (MetadataUpload metadataUpload : metadataUploads) {
        FileRepositoryWorker worker = new FileRepositoryWorker(metadataUpload, repository, session);
        worker.setLogger(logger);
        worker.setFileProcessor(fileProcessor);
        executor.execute(errorForwarder.wrap(worker));
    }
    errorForwarder.await();
}
Also used : ArtifactUpload(org.sonatype.aether.spi.connector.ArtifactUpload) MetadataUpload(org.sonatype.aether.spi.connector.MetadataUpload) RunnableErrorForwarder(org.sonatype.aether.util.concurrency.RunnableErrorForwarder)

Example 3 with RunnableErrorForwarder

use of org.sonatype.aether.util.concurrency.RunnableErrorForwarder in project sonatype-aether by sonatype.

the class FileRepositoryConnector method get.

public void get(Collection<? extends ArtifactDownload> artifactDownloads, Collection<? extends MetadataDownload> metadataDownloads) {
    checkClosed();
    artifactDownloads = notNull(artifactDownloads);
    metadataDownloads = notNull(metadataDownloads);
    RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder();
    for (ArtifactDownload artifactDownload : artifactDownloads) {
        FileRepositoryWorker worker = new FileRepositoryWorker(artifactDownload, repository, session);
        worker.setLogger(logger);
        worker.setFileProcessor(fileProcessor);
        executor.execute(errorForwarder.wrap(worker));
    }
    for (MetadataDownload metadataDownload : metadataDownloads) {
        FileRepositoryWorker worker = new FileRepositoryWorker(metadataDownload, repository, session);
        worker.setLogger(logger);
        worker.setFileProcessor(fileProcessor);
        executor.execute(errorForwarder.wrap(worker));
    }
    errorForwarder.await();
}
Also used : ArtifactDownload(org.sonatype.aether.spi.connector.ArtifactDownload) RunnableErrorForwarder(org.sonatype.aether.util.concurrency.RunnableErrorForwarder) MetadataDownload(org.sonatype.aether.spi.connector.MetadataDownload)

Example 4 with RunnableErrorForwarder

use of org.sonatype.aether.util.concurrency.RunnableErrorForwarder in project sonatype-aether by sonatype.

the class DefaultMetadataResolver method resolve.

private List<MetadataResult> resolve(RepositorySystemSession session, Collection<? extends MetadataRequest> requests) {
    List<MetadataResult> results = new ArrayList<MetadataResult>(requests.size());
    List<ResolveTask> tasks = new ArrayList<ResolveTask>(requests.size());
    Map<File, Long> localLastUpdates = new HashMap<File, Long>();
    for (MetadataRequest request : requests) {
        RequestTrace trace = DefaultRequestTrace.newChild(request.getTrace(), request);
        MetadataResult result = new MetadataResult(request);
        results.add(result);
        Metadata metadata = request.getMetadata();
        RemoteRepository repository = request.getRepository();
        if (repository == null) {
            LocalRepository localRepo = session.getLocalRepositoryManager().getRepository();
            metadataResolving(session, trace, metadata, localRepo);
            File localFile = getLocalFile(session, metadata);
            if (localFile != null) {
                metadata = metadata.setFile(localFile);
                result.setMetadata(metadata);
            } else {
                result.setException(new MetadataNotFoundException(metadata, localRepo));
            }
            metadataResolved(session, trace, metadata, localRepo, result.getException());
            continue;
        }
        List<RemoteRepository> repositories = getEnabledSourceRepositories(repository, metadata.getNature());
        if (repositories.isEmpty()) {
            continue;
        }
        metadataResolving(session, trace, metadata, repository);
        LocalRepositoryManager lrm = session.getLocalRepositoryManager();
        LocalMetadataRequest localRequest = new LocalMetadataRequest(metadata, repository, request.getRequestContext());
        LocalMetadataResult lrmResult = lrm.find(session, localRequest);
        File metadataFile = lrmResult.getFile();
        if (session.isOffline()) {
            if (metadataFile != null) {
                metadata = metadata.setFile(metadataFile);
                result.setMetadata(metadata);
            } else {
                String msg = "The repository system is offline but the metadata " + metadata + " from " + repository + " is not available in the local repository.";
                result.setException(new MetadataNotFoundException(metadata, repository, msg));
            }
            metadataResolved(session, trace, metadata, repository, result.getException());
            continue;
        }
        Long localLastUpdate = null;
        if (request.isFavorLocalRepository()) {
            File localFile = getLocalFile(session, metadata);
            localLastUpdate = localLastUpdates.get(localFile);
            if (localLastUpdate == null) {
                localLastUpdate = Long.valueOf(localFile != null ? localFile.lastModified() : 0);
                localLastUpdates.put(localFile, localLastUpdate);
            }
        }
        List<UpdateCheck<Metadata, MetadataTransferException>> checks = new ArrayList<UpdateCheck<Metadata, MetadataTransferException>>();
        Exception exception = null;
        for (RemoteRepository repo : repositories) {
            UpdateCheck<Metadata, MetadataTransferException> check = new UpdateCheck<Metadata, MetadataTransferException>();
            check.setLocalLastUpdated((localLastUpdate != null) ? localLastUpdate.longValue() : 0);
            check.setItem(metadata);
            // use 'main' installation file for the check (-> use requested repository)
            File checkFile = new File(session.getLocalRepository().getBasedir(), session.getLocalRepositoryManager().getPathForRemoteMetadata(metadata, repository, request.getRequestContext()));
            check.setFile(checkFile);
            check.setRepository(repository);
            check.setAuthoritativeRepository(repo);
            check.setPolicy(getPolicy(session, repo, metadata.getNature()).getUpdatePolicy());
            if (lrmResult.isStale()) {
                checks.add(check);
            } else {
                updateCheckManager.checkMetadata(session, check);
                if (check.isRequired()) {
                    checks.add(check);
                } else if (exception == null) {
                    exception = check.getException();
                }
            }
        }
        if (!checks.isEmpty()) {
            RepositoryPolicy policy = getPolicy(session, repository, metadata.getNature());
            // install path may be different from lookup path
            File installFile = new File(session.getLocalRepository().getBasedir(), session.getLocalRepositoryManager().getPathForRemoteMetadata(metadata, request.getRepository(), request.getRequestContext()));
            ResolveTask task = new ResolveTask(session, trace, result, installFile, checks, policy.getChecksumPolicy());
            tasks.add(task);
        } else {
            result.setException(exception);
            if (metadataFile != null) {
                metadata = metadata.setFile(metadataFile);
                result.setMetadata(metadata);
            }
            metadataResolved(session, trace, metadata, repository, result.getException());
        }
    }
    if (!tasks.isEmpty()) {
        int threads = ConfigUtils.getInteger(session, 4, "aether.metadataResolver.threads");
        Executor executor = getExecutor(Math.min(tasks.size(), threads));
        try {
            RunnableErrorForwarder errorForwarder = new RunnableErrorForwarder();
            for (ResolveTask task : tasks) {
                executor.execute(errorForwarder.wrap(task));
            }
            errorForwarder.await();
            for (ResolveTask task : tasks) {
                task.result.setException(task.exception);
            }
        } finally {
            shutdown(executor);
        }
        for (ResolveTask task : tasks) {
            Metadata metadata = task.request.getMetadata();
            // re-lookup metadata for resolve
            LocalMetadataRequest localRequest = new LocalMetadataRequest(metadata, task.request.getRepository(), task.request.getRequestContext());
            File metadataFile = session.getLocalRepositoryManager().find(session, localRequest).getFile();
            if (metadataFile != null) {
                metadata = metadata.setFile(metadataFile);
                task.result.setMetadata(metadata);
            }
            if (task.result.getException() == null) {
                task.result.setUpdated(true);
            }
            metadataResolved(session, task.trace, metadata, task.request.getRepository(), task.result.getException());
        }
    }
    return results;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Metadata(org.sonatype.aether.metadata.Metadata) RemoteRepository(org.sonatype.aether.repository.RemoteRepository) RequestTrace(org.sonatype.aether.RequestTrace) DefaultRequestTrace(org.sonatype.aether.util.DefaultRequestTrace) ThreadPoolExecutor(java.util.concurrent.ThreadPoolExecutor) Executor(java.util.concurrent.Executor) LocalRepositoryManager(org.sonatype.aether.repository.LocalRepositoryManager) LocalMetadataResult(org.sonatype.aether.repository.LocalMetadataResult) MetadataTransferException(org.sonatype.aether.transfer.MetadataTransferException) RunnableErrorForwarder(org.sonatype.aether.util.concurrency.RunnableErrorForwarder) LocalMetadataRequest(org.sonatype.aether.repository.LocalMetadataRequest) RepositoryPolicy(org.sonatype.aether.repository.RepositoryPolicy) LocalRepository(org.sonatype.aether.repository.LocalRepository) NoRepositoryConnectorException(org.sonatype.aether.transfer.NoRepositoryConnectorException) MetadataNotFoundException(org.sonatype.aether.transfer.MetadataNotFoundException) MetadataTransferException(org.sonatype.aether.transfer.MetadataTransferException) MetadataResult(org.sonatype.aether.resolution.MetadataResult) LocalMetadataResult(org.sonatype.aether.repository.LocalMetadataResult) MetadataNotFoundException(org.sonatype.aether.transfer.MetadataNotFoundException) MetadataRequest(org.sonatype.aether.resolution.MetadataRequest) LocalMetadataRequest(org.sonatype.aether.repository.LocalMetadataRequest) UpdateCheck(org.sonatype.aether.impl.UpdateCheck) File(java.io.File)

Aggregations

RunnableErrorForwarder (org.sonatype.aether.util.concurrency.RunnableErrorForwarder)4 ArrayList (java.util.ArrayList)2 ArtifactDownload (org.sonatype.aether.spi.connector.ArtifactDownload)2 MetadataDownload (org.sonatype.aether.spi.connector.MetadataDownload)2 File (java.io.File)1 HashMap (java.util.HashMap)1 Executor (java.util.concurrent.Executor)1 ThreadPoolExecutor (java.util.concurrent.ThreadPoolExecutor)1 RequestTrace (org.sonatype.aether.RequestTrace)1 UpdateCheck (org.sonatype.aether.impl.UpdateCheck)1 Metadata (org.sonatype.aether.metadata.Metadata)1 LocalMetadataRequest (org.sonatype.aether.repository.LocalMetadataRequest)1 LocalMetadataResult (org.sonatype.aether.repository.LocalMetadataResult)1 LocalRepository (org.sonatype.aether.repository.LocalRepository)1 LocalRepositoryManager (org.sonatype.aether.repository.LocalRepositoryManager)1 RemoteRepository (org.sonatype.aether.repository.RemoteRepository)1 RepositoryPolicy (org.sonatype.aether.repository.RepositoryPolicy)1 MetadataRequest (org.sonatype.aether.resolution.MetadataRequest)1 MetadataResult (org.sonatype.aether.resolution.MetadataResult)1 ArtifactUpload (org.sonatype.aether.spi.connector.ArtifactUpload)1