use of org.commonjava.maven.galley.model.Resource in project galley by Commonjava.
the class TransferManagerImpl method doBatch.
private <T extends TransferBatch> T doBatch(final Set<Resource> resources, final T batch, final boolean suppressFailures, final EventMetadata eventMetadata) throws TransferException {
logger.info("Attempting to batch-retrieve {} resources:\n {}", resources.size(), new JoinString("\n ", resources));
final Set<BatchRetriever> retrievers = new HashSet<BatchRetriever>(resources.size());
for (final Resource resource : resources) {
retrievers.add(new BatchRetriever(this, resource, suppressFailures, eventMetadata));
}
final Map<ConcreteResource, TransferException> errors = new HashMap<ConcreteResource, TransferException>();
final Map<ConcreteResource, Transfer> transfers = new HashMap<ConcreteResource, Transfer>();
do {
for (final BatchRetriever retriever : retrievers) {
batchExecutor.submit(retriever);
}
int count = retrievers.size();
for (int i = 0; i < count; i++) {
try {
Future<BatchRetriever> pending = batchExecutor.take();
BatchRetriever retriever = pending.get();
final ConcreteResource resource = retriever.getLastTry();
final TransferException error = retriever.getError();
if (error != null) {
logger.warn("ERROR: {}...{}", error, resource, error.getMessage());
retrievers.remove(retriever);
if (!(error instanceof TransferLocationException)) {
errors.put(resource, error);
}
continue;
}
final Transfer transfer = retriever.getTransfer();
if (transfer != null && transfer.exists()) {
transfers.put(resource, transfer);
retrievers.remove(retriever);
logger.debug("Completed: {}", resource);
continue;
}
if (!retriever.hasMoreTries()) {
logger.debug("Not completed, but out of tries: {}", resource);
retrievers.remove(retriever);
}
} catch (final InterruptedException e) {
logger.error(String.format("Failed to wait for batch retrieval attempts to complete: %s", e.getMessage()), e);
break;
} catch (ExecutionException e) {
logger.error(String.format("Failed to retrieve next completed retrieval: %s", e.getMessage()), e);
}
}
} while (!retrievers.isEmpty());
batch.setErrors(errors);
batch.setTransfers(transfers);
return batch;
}
use of org.commonjava.maven.galley.model.Resource in project galley by Commonjava.
the class ArtifactBatch method setArtifactToResourceMapping.
public void setArtifactToResourceMapping(final Map<ArtifactRef, Resource> mappings) {
artifactMappings = new HashMap<ArtifactRef, List<ConcreteResource>>();
final Set<ConcreteResource> resources = new HashSet<ConcreteResource>();
for (final Entry<ArtifactRef, Resource> entry : mappings.entrySet()) {
final ArtifactRef artifact = entry.getKey();
final Resource resource = entry.getValue();
if (resource instanceof ConcreteResource) {
artifactMappings.put(artifact, Collections.singletonList((ConcreteResource) resource));
resources.add((ConcreteResource) resource);
} else {
final List<ConcreteResource> res = ((VirtualResource) resource).toConcreteResources();
artifactMappings.put(artifact, res);
resources.addAll(res);
}
}
setResources(resources);
}
use of org.commonjava.maven.galley.model.Resource in project galley by Commonjava.
the class AbstractTransferManagerTest method batchRetrieve_returnEmptyResultIfVirtualResourceIsEmpty.
/**
* Addresses Issue #27 (https://github.com/Commonjava/galley/issues/27). Batches with virtual resources
* that contain zero concrete resources should count down the latch when they return immediately, but
* instead are causing the countdown latch that watches the batch of transfers to hang.
*/
@Test(timeout = 2000)
public void batchRetrieve_returnEmptyResultIfVirtualResourceIsEmpty() throws Exception {
final VirtualResource vr = new VirtualResource(Collections.<Location>emptyList(), "/path/to/nowhere");
final TransferBatch batch = getTransferManagerImpl().batchRetrieve(new TransferBatch(Collections.<Resource>singleton(vr)), new EventMetadata());
assertThat(batch, notNullValue());
assertThat(batch.getErrors().isEmpty(), equalTo(true));
assertThat(batch.getTransfers().isEmpty(), equalTo(true));
}
use of org.commonjava.maven.galley.model.Resource in project galley by Commonjava.
the class ArtifactManagerImpl method resolveArtifactMappings.
private void resolveArtifactMappings(final ArtifactBatch batch, final EventMetadata eventMetadata) throws TransferException {
final Map<ArtifactRef, Resource> resources = new HashMap<ArtifactRef, Resource>(batch.size());
for (final ArtifactRef artifact : batch) {
final VirtualResource virt = resolveFirstVirtualResource(batch.getLocations(artifact), artifact, eventMetadata);
resources.put(artifact, virt);
}
batch.setArtifactToResourceMapping(resources);
}
Aggregations