Search in sources :

Example 1 with DistributionPackageExporter

use of org.apache.sling.distribution.packaging.DistributionPackageExporter in project sling by apache.

the class SyncDistributionAgentFactory method createAgent.

@Override
protected SimpleDistributionAgent createAgent(String agentName, BundleContext context, Map<String, Object> config, DefaultDistributionLog distributionLog) {
    String serviceName = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(SERVICE_NAME), null));
    boolean queueProcessingEnabled = PropertiesUtil.toBoolean(config.get(QUEUE_PROCESSING_ENABLED), true);
    String[] passiveQueues = PropertiesUtil.toStringArray(config.get(PASSIVE_QUEUES), new String[0]);
    passiveQueues = SettingsUtils.removeEmptyEntries(passiveQueues, new String[0]);
    Object exporterEndpointsValue = config.get(EXPORTER_ENDPOINTS);
    Object importerEndpointsValue = config.get(IMPORTER_ENDPOINTS);
    String[] exporterEndpoints = PropertiesUtil.toStringArray(exporterEndpointsValue, new String[0]);
    exporterEndpoints = SettingsUtils.removeEmptyEntries(exporterEndpoints);
    Map<String, String> importerEndpointsMap = SettingsUtils.toUriMap(importerEndpointsValue);
    int pullItems = PropertiesUtil.toInteger(config.get(PULL_ITEMS), Integer.MAX_VALUE);
    DistributionQueueDispatchingStrategy exportQueueStrategy;
    DistributionQueueDispatchingStrategy importQueueStrategy = null;
    DistributionPackageImporter packageImporter;
    Set<String> processingQueues = new HashSet<String>();
    Set<String> queuesMap = new TreeSet<String>();
    queuesMap.addAll(importerEndpointsMap.keySet());
    queuesMap.addAll(Arrays.asList(passiveQueues));
    processingQueues.addAll(importerEndpointsMap.keySet());
    processingQueues.removeAll(Arrays.asList(passiveQueues));
    String[] queueNames = queuesMap.toArray(new String[queuesMap.size()]);
    exportQueueStrategy = new MultipleQueueDispatchingStrategy(queueNames);
    Integer timeout = PropertiesUtil.toInteger(HTTP, 10) * 1000;
    HttpConfiguration httpConfiguration = new HttpConfiguration(timeout);
    packageImporter = new RemoteDistributionPackageImporter(distributionLog, transportSecretProvider, importerEndpointsMap, httpConfiguration);
    DistributionPackageExporter packageExporter = new RemoteDistributionPackageExporter(distributionLog, packageBuilder, transportSecretProvider, exporterEndpoints, pullItems, httpConfiguration);
    DistributionQueueProvider queueProvider = new MonitoringDistributionQueueProvider(new JobHandlingDistributionQueueProvider(agentName, jobManager, context), context);
    DistributionRequestType[] allowedRequests = new DistributionRequestType[] { DistributionRequestType.PULL };
    String retryStrategy = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(RETRY_STRATEGY), null));
    int retryAttepts = PropertiesUtil.toInteger(config.get(RETRY_ATTEMPTS), 100);
    if ("errorQueue".equals(retryStrategy)) {
        importQueueStrategy = new ErrorQueueDispatchingStrategy(processingQueues.toArray(new String[processingQueues.size()]));
    }
    return new SimpleDistributionAgent(agentName, queueProcessingEnabled, processingQueues, serviceName, packageImporter, packageExporter, requestAuthorizationStrategy, queueProvider, exportQueueStrategy, importQueueStrategy, distributionEventFactory, resourceResolverFactory, slingRepository, distributionLog, allowedRequests, null, retryAttepts);
}
Also used : DistributionQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy) RemoteDistributionPackageExporter(org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporter) MultipleQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.MultipleQueueDispatchingStrategy) JobHandlingDistributionQueueProvider(org.apache.sling.distribution.queue.impl.jobhandling.JobHandlingDistributionQueueProvider) HttpConfiguration(org.apache.sling.distribution.transport.impl.HttpConfiguration) RemoteDistributionPackageExporter(org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporter) DistributionPackageExporter(org.apache.sling.distribution.packaging.DistributionPackageExporter) DistributionRequestType(org.apache.sling.distribution.DistributionRequestType) ErrorQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.ErrorQueueDispatchingStrategy) RemoteDistributionPackageImporter(org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporter) MonitoringDistributionQueueProvider(org.apache.sling.distribution.monitor.impl.MonitoringDistributionQueueProvider) JobHandlingDistributionQueueProvider(org.apache.sling.distribution.queue.impl.jobhandling.JobHandlingDistributionQueueProvider) DistributionQueueProvider(org.apache.sling.distribution.queue.DistributionQueueProvider) RemoteDistributionPackageImporter(org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporter) DistributionPackageImporter(org.apache.sling.distribution.packaging.DistributionPackageImporter) MonitoringDistributionQueueProvider(org.apache.sling.distribution.monitor.impl.MonitoringDistributionQueueProvider)

Example 2 with DistributionPackageExporter

use of org.apache.sling.distribution.packaging.DistributionPackageExporter in project sling by apache.

the class DistributionPackageExporterServlet method exportOnePackage.

private void exportOnePackage(final SlingHttpServletRequest request, final SlingHttpServletResponse response, final boolean delete) throws ServletException, IOException {
    DistributionPackageExporter distributionPackageExporter = request.getResource().adaptTo(DistributionPackageExporter.class);
    final long start = System.currentTimeMillis();
    response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
    DistributionRequest distributionRequest = RequestUtils.fromServletRequest(request);
    ResourceResolver resourceResolver = request.getResourceResolver();
    final AtomicInteger fetched = new AtomicInteger(0);
    try {
        // get all items
        distributionPackageExporter.exportPackages(resourceResolver, distributionRequest, new DistributionPackageProcessor() {

            @Override
            public void process(DistributionPackage distributionPackage) {
                fetched.incrementAndGet();
                InputStream inputStream = null;
                int bytesCopied = -1;
                try {
                    inputStream = DistributionPackageUtils.createStreamWithHeader(distributionPackage);
                    bytesCopied = IOUtils.copy(inputStream, response.getOutputStream());
                } catch (IOException e) {
                    log.error("cannot process package", e);
                } finally {
                    IOUtils.closeQuietly(inputStream);
                }
                String packageId = distributionPackage.getId();
                if (delete) {
                    // delete the package permanently
                    distributionPackage.delete();
                }
                // everything ok
                response.setStatus(200);
                log.debug("exported package {} was sent (and deleted={}), bytes written {}", new Object[] { packageId, delete, bytesCopied });
            }

            @Override
            public List<DistributionResponse> getAllResponses() {
                return null;
            }

            @Override
            public int getPackagesCount() {
                return 0;
            }

            @Override
            public long getPackagesSize() {
                return 0;
            }
        });
        if (fetched.get() > 0) {
            long end = System.currentTimeMillis();
            log.info("Processed distribution export request in {} ms: : fetched {}", new Object[] { end - start, fetched });
        } else {
            response.setStatus(204);
            log.debug("nothing to fetch");
        }
    } catch (Throwable e) {
        response.setStatus(503);
        log.error("error while exporting package", e);
    }
}
Also used : InputStream(java.io.InputStream) IOException(java.io.IOException) DistributionPackageExporter(org.apache.sling.distribution.packaging.DistributionPackageExporter) DistributionRequest(org.apache.sling.distribution.DistributionRequest) DistributionPackageProcessor(org.apache.sling.distribution.packaging.DistributionPackageProcessor) DistributionPackage(org.apache.sling.distribution.packaging.DistributionPackage) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) List(java.util.List)

Example 3 with DistributionPackageExporter

use of org.apache.sling.distribution.packaging.DistributionPackageExporter in project sling by apache.

the class DistributionPackageExporterServlet method deletePackage.

private void deletePackage(final SlingHttpServletRequest request, final SlingHttpServletResponse response) throws DistributionException {
    DistributionPackageExporter distributionPackageExporter = request.getResource().adaptTo(DistributionPackageExporter.class);
    ResourceResolver resourceResolver = request.getResourceResolver();
    String id = request.getParameter("id");
    DistributionPackage distributionPackage = distributionPackageExporter.getPackage(resourceResolver, id);
    if (distributionPackage != null) {
        distributionPackage.delete();
        log.debug("exported package {} was deleted", distributionPackage.getId());
        response.setStatus(200);
    } else {
        response.setStatus(204);
        log.debug("nothing to delete {}", id);
    }
}
Also used : DistributionPackage(org.apache.sling.distribution.packaging.DistributionPackage) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) DistributionPackageExporter(org.apache.sling.distribution.packaging.DistributionPackageExporter)

Example 4 with DistributionPackageExporter

use of org.apache.sling.distribution.packaging.DistributionPackageExporter in project sling by apache.

the class ForwardDistributionAgentFactory method createAgent.

@Override
protected SimpleDistributionAgent createAgent(String agentName, BundleContext context, Map<String, Object> config, DefaultDistributionLog distributionLog) {
    String serviceName = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(SERVICE_NAME), null));
    String[] allowedRoots = PropertiesUtil.toStringArray(config.get(ALLOWED_ROOTS), null);
    allowedRoots = SettingsUtils.removeEmptyEntries(allowedRoots);
    boolean queueProcessingEnabled = PropertiesUtil.toBoolean(config.get(QUEUE_PROCESSING_ENABLED), true);
    String[] passiveQueues = PropertiesUtil.toStringArray(config.get(PASSIVE_QUEUES), new String[0]);
    passiveQueues = SettingsUtils.removeEmptyEntries(passiveQueues, new String[0]);
    Map<String, String> priorityQueues = PropertiesUtil.toMap(config.get(PRIORITY_QUEUES), new String[0]);
    priorityQueues = SettingsUtils.removeEmptyEntries(priorityQueues);
    Integer timeout = PropertiesUtil.toInteger(HTTP, 10) * 1000;
    HttpConfiguration httpConfiguration = new HttpConfiguration(timeout);
    DistributionPackageExporter packageExporter = new LocalDistributionPackageExporter(packageBuilder);
    DistributionQueueProvider queueProvider;
    String queueProviderName = PropertiesUtil.toString(config.get(QUEUE_PROVIDER), JobHandlingDistributionQueueProvider.TYPE);
    if (JobHandlingDistributionQueueProvider.TYPE.equals(queueProviderName)) {
        queueProvider = new JobHandlingDistributionQueueProvider(agentName, jobManager, context, configAdmin);
    } else if (SimpleDistributionQueueProvider.TYPE.equals(queueProviderName)) {
        queueProvider = new SimpleDistributionQueueProvider(scheduler, agentName, false);
    } else {
        queueProvider = new SimpleDistributionQueueProvider(scheduler, agentName, true);
    }
    queueProvider = new MonitoringDistributionQueueProvider(queueProvider, context);
    DistributionQueueDispatchingStrategy exportQueueStrategy;
    DistributionQueueDispatchingStrategy errorQueueStrategy = null;
    DistributionPackageImporter packageImporter;
    Map<String, String> importerEndpointsMap = SettingsUtils.toUriMap(config.get(IMPORTER_ENDPOINTS));
    Set<String> processingQueues = new HashSet<String>();
    Set<String> endpointNames = importerEndpointsMap.keySet();
    Set<String> endpointsAndPassiveQueues = new TreeSet<String>();
    endpointsAndPassiveQueues.addAll(endpointNames);
    endpointsAndPassiveQueues.addAll(Arrays.asList(passiveQueues));
    // names of all the queues
    String[] queueNames = endpointsAndPassiveQueues.toArray(new String[endpointsAndPassiveQueues.size()]);
    if (priorityQueues != null) {
        PriorityQueueDispatchingStrategy dispatchingStrategy = new PriorityQueueDispatchingStrategy(priorityQueues, queueNames);
        Map<String, String> queueAliases = dispatchingStrategy.getMatchingQueues(null);
        importerEndpointsMap = SettingsUtils.expandUriMap(importerEndpointsMap, queueAliases);
        exportQueueStrategy = dispatchingStrategy;
        endpointNames = importerEndpointsMap.keySet();
    } else {
        boolean asyncDelivery = PropertiesUtil.toBoolean(config.get(ASYNC_DELIVERY), false);
        if (asyncDelivery) {
            // delivery queues' names
            Map<String, String> deliveryQueues = new HashMap<String, String>();
            for (String e : endpointNames) {
                deliveryQueues.put(e, "delivery-" + e);
            }
            processingQueues.addAll(deliveryQueues.values());
            exportQueueStrategy = new AsyncDeliveryDispatchingStrategy(deliveryQueues);
        } else {
            exportQueueStrategy = new MultipleQueueDispatchingStrategy(endpointNames.toArray(new String[endpointNames.size()]));
        }
    }
    processingQueues.addAll(endpointNames);
    processingQueues.removeAll(Arrays.asList(passiveQueues));
    packageImporter = new RemoteDistributionPackageImporter(distributionLog, transportSecretProvider, importerEndpointsMap, httpConfiguration);
    DistributionRequestType[] allowedRequests = new DistributionRequestType[] { DistributionRequestType.ADD, DistributionRequestType.DELETE };
    String retryStrategy = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(RETRY_STRATEGY), null));
    int retryAttepts = PropertiesUtil.toInteger(config.get(RETRY_ATTEMPTS), 100);
    if ("errorQueue".equals(retryStrategy)) {
        errorQueueStrategy = new ErrorQueueDispatchingStrategy(processingQueues.toArray(new String[processingQueues.size()]));
    }
    return new SimpleDistributionAgent(agentName, queueProcessingEnabled, processingQueues, serviceName, packageImporter, packageExporter, requestAuthorizationStrategy, queueProvider, exportQueueStrategy, errorQueueStrategy, distributionEventFactory, resourceResolverFactory, slingRepository, distributionLog, allowedRequests, allowedRoots, retryAttepts);
}
Also used : DistributionQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy) HashMap(java.util.HashMap) JobHandlingDistributionQueueProvider(org.apache.sling.distribution.queue.impl.jobhandling.JobHandlingDistributionQueueProvider) HttpConfiguration(org.apache.sling.distribution.transport.impl.HttpConfiguration) PriorityQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.PriorityQueueDispatchingStrategy) DistributionRequestType(org.apache.sling.distribution.DistributionRequestType) ErrorQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.ErrorQueueDispatchingStrategy) TreeSet(java.util.TreeSet) RemoteDistributionPackageImporter(org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporter) SimpleDistributionQueueProvider(org.apache.sling.distribution.queue.impl.simple.SimpleDistributionQueueProvider) HashSet(java.util.HashSet) MultipleQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.MultipleQueueDispatchingStrategy) LocalDistributionPackageExporter(org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporter) DistributionPackageExporter(org.apache.sling.distribution.packaging.DistributionPackageExporter) LocalDistributionPackageExporter(org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporter) AsyncDeliveryDispatchingStrategy(org.apache.sling.distribution.queue.impl.AsyncDeliveryDispatchingStrategy) MonitoringDistributionQueueProvider(org.apache.sling.distribution.monitor.impl.MonitoringDistributionQueueProvider) SimpleDistributionQueueProvider(org.apache.sling.distribution.queue.impl.simple.SimpleDistributionQueueProvider) JobHandlingDistributionQueueProvider(org.apache.sling.distribution.queue.impl.jobhandling.JobHandlingDistributionQueueProvider) DistributionQueueProvider(org.apache.sling.distribution.queue.DistributionQueueProvider) DistributionPackageImporter(org.apache.sling.distribution.packaging.DistributionPackageImporter) RemoteDistributionPackageImporter(org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporter) MonitoringDistributionQueueProvider(org.apache.sling.distribution.monitor.impl.MonitoringDistributionQueueProvider)

Example 5 with DistributionPackageExporter

use of org.apache.sling.distribution.packaging.DistributionPackageExporter in project sling by apache.

the class QueueDistributionAgentFactory method createAgent.

@Override
protected SimpleDistributionAgent createAgent(String agentName, BundleContext context, Map<String, Object> config, DefaultDistributionLog distributionLog) {
    String serviceName = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(SERVICE_NAME), null));
    String[] allowedRoots = PropertiesUtil.toStringArray(config.get(ALLOWED_ROOTS), null);
    allowedRoots = SettingsUtils.removeEmptyEntries(allowedRoots);
    Map<String, String> priorityQueues = PropertiesUtil.toMap(config.get(PRIORITY_QUEUES), new String[0]);
    priorityQueues = SettingsUtils.removeEmptyEntries(priorityQueues);
    DistributionQueueProvider queueProvider = new MonitoringDistributionQueueProvider(new JobHandlingDistributionQueueProvider(agentName, jobManager, context), context);
    DistributionQueueDispatchingStrategy exportQueueStrategy = null;
    if (priorityQueues != null) {
        exportQueueStrategy = new PriorityQueueDispatchingStrategy(priorityQueues, new String[] { DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME });
    } else {
        exportQueueStrategy = new SingleQueueDispatchingStrategy();
    }
    DistributionPackageExporter packageExporter = new LocalDistributionPackageExporter(packageBuilder);
    DistributionRequestType[] allowedRequests = new DistributionRequestType[] { DistributionRequestType.ADD, DistributionRequestType.DELETE };
    return new SimpleDistributionAgent(agentName, false, null, serviceName, null, packageExporter, requestAuthorizationStrategy, queueProvider, exportQueueStrategy, null, distributionEventFactory, resourceResolverFactory, slingRepository, distributionLog, allowedRequests, allowedRoots, 0);
}
Also used : DistributionQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy) JobHandlingDistributionQueueProvider(org.apache.sling.distribution.queue.impl.jobhandling.JobHandlingDistributionQueueProvider) SingleQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.SingleQueueDispatchingStrategy) PriorityQueueDispatchingStrategy(org.apache.sling.distribution.queue.impl.PriorityQueueDispatchingStrategy) DistributionPackageExporter(org.apache.sling.distribution.packaging.DistributionPackageExporter) LocalDistributionPackageExporter(org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporter) LocalDistributionPackageExporter(org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporter) DistributionRequestType(org.apache.sling.distribution.DistributionRequestType) MonitoringDistributionQueueProvider(org.apache.sling.distribution.monitor.impl.MonitoringDistributionQueueProvider) JobHandlingDistributionQueueProvider(org.apache.sling.distribution.queue.impl.jobhandling.JobHandlingDistributionQueueProvider) DistributionQueueProvider(org.apache.sling.distribution.queue.DistributionQueueProvider) MonitoringDistributionQueueProvider(org.apache.sling.distribution.monitor.impl.MonitoringDistributionQueueProvider)

Aggregations

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