Search in sources :

Example 6 with DistributionResponse

use of org.apache.sling.distribution.DistributionResponse in project sling by apache.

the class ImportingDistributionPackageProcessor method process.

@Override
public void process(DistributionPackage distributionPackage) {
    final long startTime = System.currentTimeMillis();
    try {
        // set up original calling RR
        ResourceResolver resourceResolver = DistributionUtils.getResourceResolver(callingUser, authenticationInfo.getAgentService(), authenticationInfo.getSlingRepository(), authenticationInfo.getSubServiceName(), authenticationInfo.getResourceResolverFactory());
        // perform importing
        distributionPackageImporter.importPackage(resourceResolver, distributionPackage);
        // collect stats
        packagesSize.addAndGet(distributionPackage.getSize());
        packagesCount.incrementAndGet();
        DistributionResponse response = new SimpleDistributionResponse(DistributionRequestState.ACCEPTED, "package imported");
        allResponses.add(response);
        final long endTime = System.currentTimeMillis();
        log.debug("PACKAGE-IMPORTED {}: packageId={}, paths={}, responses={}", requestId, distributionPackage.getId(), distributionPackage.getInfo().getPaths(), endTime - startTime, response);
    } catch (DistributionException e) {
        log.error("an error happened during package import", e);
        allResponses.add(new SimpleDistributionResponse(DistributionRequestState.DROPPED, e.toString()));
    }
}
Also used : SimpleDistributionResponse(org.apache.sling.distribution.impl.SimpleDistributionResponse) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) DistributionException(org.apache.sling.distribution.common.DistributionException) DistributionResponse(org.apache.sling.distribution.DistributionResponse) SimpleDistributionResponse(org.apache.sling.distribution.impl.SimpleDistributionResponse)

Example 7 with DistributionResponse

use of org.apache.sling.distribution.DistributionResponse in project sling by apache.

the class DistributionAgentServlet method doPost.

@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
    response.setContentType("application/json");
    DistributionRequest distributionRequest = RequestUtils.fromServletRequest(request);
    log.debug("distribution request : {}", distributionRequest);
    DistributionAgent agent = request.getResource().adaptTo(DistributionAgent.class);
    ResourceResolver resourceResolver = request.getResourceResolver();
    if (agent != null) {
        try {
            DistributionResponse distributionResponse = agent.execute(resourceResolver, distributionRequest);
            ServletJsonUtils.writeJson(response, distributionResponse);
            log.debug("distribution response : {}", distributionResponse);
        } catch (Throwable e) {
            log.error("an unexpected error has occurred", e);
            ServletJsonUtils.writeJson(response, 503, "an unexpected error has occurred", null);
        }
    } else {
        ServletJsonUtils.writeJson(response, 404, "agent not found", null);
    }
}
Also used : DistributionRequest(org.apache.sling.distribution.DistributionRequest) DistributionAgent(org.apache.sling.distribution.agent.DistributionAgent) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) DistributionResponse(org.apache.sling.distribution.DistributionResponse)

Example 8 with DistributionResponse

use of org.apache.sling.distribution.DistributionResponse in project sling by apache.

the class PlumberImpl method persist.

/**
     * Persists pipe change if big enough, or ended, and eventually distribute changes
     * @param resolver
     * @param pipe
     * @param paths
     * @param currentResource if running, null if ended
     * @throws PersistenceException
     */
protected void persist(ResourceResolver resolver, Pipe pipe, Set<String> paths, Resource currentResource) throws Exception {
    if (pipe.modifiesContent() && resolver.hasChanges() && !pipe.isDryRun()) {
        if (currentResource == null || paths.size() % bufferSize == 0) {
            log.info("[{}] saving changes...", pipe.getName());
            writeStatus(pipe, currentResource == null ? STATUS_FINISHED : currentResource.getPath());
            resolver.commit();
        }
        if (currentResource == null && distributor != null && StringUtils.isNotBlank(pipe.getDistributionAgent())) {
            log.info("a distribution agent is configured, will try to distribute the changes");
            DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, true, paths.toArray(new String[paths.size()]));
            DistributionResponse response = distributor.distribute(pipe.getDistributionAgent(), resolver, request);
            log.info("distribution response : {}", response);
        }
    }
}
Also used : SimpleDistributionRequest(org.apache.sling.distribution.SimpleDistributionRequest) DistributionRequest(org.apache.sling.distribution.DistributionRequest) SimpleDistributionRequest(org.apache.sling.distribution.SimpleDistributionRequest) DistributionResponse(org.apache.sling.distribution.DistributionResponse)

Example 9 with DistributionResponse

use of org.apache.sling.distribution.DistributionResponse in project sling by apache.

the class SimpleDistributionAgentTest method testDistributionWithFailingDistributionStrategy.

@Test
public void testDistributionWithFailingDistributionStrategy() throws Exception {
    String name = "sample-agent";
    DistributionPackageImporter packageImporter = mock(DistributionPackageImporter.class);
    DistributionPackageExporter packageExporter = mock(DistributionPackageExporter.class);
    DistributionRequestAuthorizationStrategy packageExporterStrategy = mock(DistributionRequestAuthorizationStrategy.class);
    DistributionQueueProvider queueProvider = mock(DistributionQueueProvider.class);
    DistributionQueueDispatchingStrategy distributionHandler = mock(DistributionQueueDispatchingStrategy.class);
    Iterable<DistributionQueueItemStatus> states = Collections.singletonList(new DistributionQueueItemStatus(DistributionQueueItemState.ERROR, DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME));
    when(distributionHandler.add(any(DistributionPackage.class), any(DistributionQueueProvider.class))).thenReturn(states);
    DistributionEventFactory distributionEventFactory = mock(DistributionEventFactory.class);
    ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
    SimpleDistributionAgent agent = new SimpleDistributionAgent(name, false, null, "serviceName", packageImporter, packageExporter, packageExporterStrategy, queueProvider, distributionHandler, null, distributionEventFactory, resolverFactory, mock(SlingRepository.class), mock(DefaultDistributionLog.class), null, null, 0);
    DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/");
    final DistributionPackage distributionPackage = mock(DistributionPackage.class);
    ResourceResolver resourceResolver = mock(ResourceResolver.class);
    when(distributionPackage.getInfo()).thenReturn(new DistributionPackageInfo("type"));
    doAnswer(new Answer<Void>() {

        @Override
        public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
            Object[] args = invocationOnMock.getArguments();
            ((DistributionPackageProcessor) args[2]).process(distributionPackage);
            return null;
        }
    }).when(packageExporter).exportPackages(any(ResourceResolver.class), any(DistributionRequest.class), any(DistributionPackageProcessor.class));
    when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(new SimpleDistributionQueue(name, "name"));
    DistributionResponse response = agent.execute(resourceResolver, request);
    assertNotNull(response);
    assertEquals("[ERROR]", response.getMessage());
    assertEquals(DistributionRequestState.DROPPED, response.getState());
}
Also used : DistributionQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy) DistributionQueueItemStatus(org.apache.sling.distribution.queue.DistributionQueueItemStatus) DistributionPackageInfo(org.apache.sling.distribution.packaging.DistributionPackageInfo) SimpleDistributionQueue(org.apache.sling.distribution.queue.impl.simple.SimpleDistributionQueue) SlingRepository(org.apache.sling.jcr.api.SlingRepository) DistributionPackageProcessor(org.apache.sling.distribution.packaging.DistributionPackageProcessor) DistributionPackage(org.apache.sling.distribution.packaging.DistributionPackage) ResourceResolverFactory(org.apache.sling.api.resource.ResourceResolverFactory) DefaultDistributionLog(org.apache.sling.distribution.log.impl.DefaultDistributionLog) DistributionPackageExporter(org.apache.sling.distribution.packaging.DistributionPackageExporter) DistributionEventFactory(org.apache.sling.distribution.event.impl.DistributionEventFactory) SimpleDistributionRequest(org.apache.sling.distribution.SimpleDistributionRequest) DistributionRequest(org.apache.sling.distribution.DistributionRequest) SimpleDistributionRequest(org.apache.sling.distribution.SimpleDistributionRequest) InvocationOnMock(org.mockito.invocation.InvocationOnMock) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) DistributionQueueProvider(org.apache.sling.distribution.queue.DistributionQueueProvider) DistributionPackageImporter(org.apache.sling.distribution.packaging.DistributionPackageImporter) DistributionResponse(org.apache.sling.distribution.DistributionResponse) Test(org.junit.Test)

Example 10 with DistributionResponse

use of org.apache.sling.distribution.DistributionResponse in project sling by apache.

the class SimpleDistributionAgentTest method testDistributionWithWorkingDistributionStrategy.

@Test
public void testDistributionWithWorkingDistributionStrategy() throws Exception {
    String name = "sample-agent";
    DistributionPackageImporter packageImporter = mock(DistributionPackageImporter.class);
    DistributionPackageExporter packageExporter = mock(DistributionPackageExporter.class);
    DistributionRequestAuthorizationStrategy packageExporterStrategy = mock(DistributionRequestAuthorizationStrategy.class);
    DistributionQueueProvider queueProvider = mock(DistributionQueueProvider.class);
    DistributionQueueDispatchingStrategy distributionHandler = mock(DistributionQueueDispatchingStrategy.class);
    DistributionEventFactory distributionEventFactory = mock(DistributionEventFactory.class);
    ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
    SimpleDistributionAgent agent = new SimpleDistributionAgent(name, false, null, "subServiceName", packageImporter, packageExporter, packageExporterStrategy, queueProvider, distributionHandler, null, distributionEventFactory, resolverFactory, mock(SlingRepository.class), mock(DefaultDistributionLog.class), null, null, 0);
    DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/");
    final DistributionPackage distributionPackage = mock(DistributionPackage.class);
    ResourceResolver resourceResolver = mock(ResourceResolver.class);
    when(distributionPackage.getInfo()).thenReturn(new DistributionPackageInfo("type"));
    Iterable<DistributionQueueItemStatus> states = Collections.singletonList(new DistributionQueueItemStatus(DistributionQueueItemState.QUEUED, DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME));
    when(distributionHandler.add(any(DistributionPackage.class), any(DistributionQueueProvider.class))).thenReturn(states);
    doAnswer(new Answer<Void>() {

        @Override
        public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
            Object[] args = invocationOnMock.getArguments();
            ((DistributionPackageProcessor) args[2]).process(distributionPackage);
            return null;
        }
    }).when(packageExporter).exportPackages(any(ResourceResolver.class), any(DistributionRequest.class), any(DistributionPackageProcessor.class));
    when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(new SimpleDistributionQueue(name, "name"));
    DistributionResponse response = agent.execute(resourceResolver, request);
    assertNotNull(response);
    assertEquals("[QUEUED]", response.getMessage());
    assertEquals(DistributionRequestState.ACCEPTED, response.getState());
}
Also used : DistributionQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy) DistributionQueueItemStatus(org.apache.sling.distribution.queue.DistributionQueueItemStatus) DistributionPackageInfo(org.apache.sling.distribution.packaging.DistributionPackageInfo) SimpleDistributionQueue(org.apache.sling.distribution.queue.impl.simple.SimpleDistributionQueue) SlingRepository(org.apache.sling.jcr.api.SlingRepository) DistributionPackageProcessor(org.apache.sling.distribution.packaging.DistributionPackageProcessor) DistributionPackage(org.apache.sling.distribution.packaging.DistributionPackage) ResourceResolverFactory(org.apache.sling.api.resource.ResourceResolverFactory) DefaultDistributionLog(org.apache.sling.distribution.log.impl.DefaultDistributionLog) DistributionPackageExporter(org.apache.sling.distribution.packaging.DistributionPackageExporter) DistributionEventFactory(org.apache.sling.distribution.event.impl.DistributionEventFactory) SimpleDistributionRequest(org.apache.sling.distribution.SimpleDistributionRequest) DistributionRequest(org.apache.sling.distribution.DistributionRequest) SimpleDistributionRequest(org.apache.sling.distribution.SimpleDistributionRequest) InvocationOnMock(org.mockito.invocation.InvocationOnMock) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) DistributionQueueProvider(org.apache.sling.distribution.queue.DistributionQueueProvider) DistributionPackageImporter(org.apache.sling.distribution.packaging.DistributionPackageImporter) DistributionResponse(org.apache.sling.distribution.DistributionResponse) Test(org.junit.Test)

Aggregations

DistributionResponse (org.apache.sling.distribution.DistributionResponse)10 DistributionRequest (org.apache.sling.distribution.DistributionRequest)7 ResourceResolver (org.apache.sling.api.resource.ResourceResolver)6 SimpleDistributionRequest (org.apache.sling.distribution.SimpleDistributionRequest)6 DistributionEventFactory (org.apache.sling.distribution.event.impl.DistributionEventFactory)5 DefaultDistributionLog (org.apache.sling.distribution.log.impl.DefaultDistributionLog)5 DistributionPackageProcessor (org.apache.sling.distribution.packaging.DistributionPackageProcessor)5 DistributionQueueProvider (org.apache.sling.distribution.queue.DistributionQueueProvider)5 DistributionQueueDispatchingStrategy (org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy)5 Test (org.junit.Test)5 ResourceResolverFactory (org.apache.sling.api.resource.ResourceResolverFactory)4 DistributionPackage (org.apache.sling.distribution.packaging.DistributionPackage)4 DistributionPackageExporter (org.apache.sling.distribution.packaging.DistributionPackageExporter)4 DistributionPackageImporter (org.apache.sling.distribution.packaging.DistributionPackageImporter)4 DistributionPackageInfo (org.apache.sling.distribution.packaging.DistributionPackageInfo)4 DistributionQueueItemStatus (org.apache.sling.distribution.queue.DistributionQueueItemStatus)4 SimpleDistributionQueue (org.apache.sling.distribution.queue.impl.simple.SimpleDistributionQueue)4 SlingRepository (org.apache.sling.jcr.api.SlingRepository)4 InvocationOnMock (org.mockito.invocation.InvocationOnMock)4 SimpleDistributionResponse (org.apache.sling.distribution.impl.SimpleDistributionResponse)2