You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by to...@apache.org on 2014/11/20 14:20:14 UTC

svn commit: r1640737 - in /sling/trunk/contrib/extensions/distribution: ./ api/src/main/java/org/apache/sling/distribution/communication/ api/src/main/java/org/apache/sling/distribution/queue/ core/src/main/java/org/apache/sling/distribution/agent/impl...

Author: tommaso
Date: Thu Nov 20 13:20:13 2014
New Revision: 1640737

URL: http://svn.apache.org/r1640737
Log:
SLING-4145, SLING-4190 - dispatching strategy returning item states instead of boolean, removed explicit time from request, status in response is now a message

Modified:
    sling/trunk/contrib/extensions/distribution/README.md
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionRequest.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionResponse.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java
    sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItemState.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDispatchingStrategy.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDispatchingStrategy.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/SingleQueueDispatchingStrategy.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackage.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentRootServlet.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/RequestUtils.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDistributionStrategyTest.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDistributionStrategyTest.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/SingleQueueDistributionStrategyTest.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackageTest.java

Modified: sling/trunk/contrib/extensions/distribution/README.md
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/README.md?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/README.md (original)
+++ sling/trunk/contrib/extensions/distribution/README.md Thu Nov 20 13:20:13 2014
@@ -4,6 +4,17 @@ This is the README for the Sling Content
 
 ## Overview
 
+The Sling Content Distribution module main goal is allowing distribution of content (Sling resources) among different Sling 
+instances. The term "distribution" here means the ability of picking one or more resources on a certain Sling instance in order 
+to copy and persist them onto another Sling instance. The Sling Content Distribution module is able to distribute content 
+by:
+
+ - "pushing" from Sling instance A to Sling instance B
+ - "pulling" from Sling instance B to Sling instance A
+ - "synchronizing" Sling instances A and B via a third coordinating instance C
+
+### Bundles
+
 The Sling Content Distribution module consists of the following bundles:
 
  - org.apache.sling.distribution.api: this is where the APIs are defined
@@ -11,6 +22,14 @@ The Sling Content Distribution module co
  - org.apache.sling.distribution.sample: this is a set of sample configurations and implementations for demo purpose 
  - org.apache.sling.distribution.it: this is the integration testing suite
  
+## Design
+
+The Sling Content Distribution module main design goals are it to be simple, reliable and extensible.
+ 
+
+
+
+ 
 ### Distribution agents
 
 Each distribution agent is an OSGi service and is resolved using a [Sling Resource Provider](#Resource_Providers) who locate it under `libs/sling/distribution/services/agents`.

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionRequest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionRequest.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionRequest.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionRequest.java Thu Nov 20 13:20:13 2014
@@ -33,11 +33,7 @@ public class DistributionRequest {
     private final String[] paths;
 
     public DistributionRequest(@Nonnull DistributionActionType action, @Nonnull String... paths) {
-        this(System.currentTimeMillis(), action, paths);
-    }
-
-    public DistributionRequest(long time, @Nonnull DistributionActionType action, @Nonnull String... paths) {
-        this.time = time;
+        this.time = System.currentTimeMillis();
         this.action = action;
         this.paths = paths;
     }

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionResponse.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionResponse.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionResponse.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/communication/DistributionResponse.java Thu Nov 20 13:20:13 2014
@@ -18,17 +18,19 @@
  */
 package org.apache.sling.distribution.communication;
 
+import com.sun.istack.internal.Nullable;
+
 /**
  * A distribution response
  */
 public class DistributionResponse {
 
-    private final String status;
+    private final String message;
     private final boolean successful;
 
-    public DistributionResponse(String status, boolean successful) {
-        this.status = status;
+    public DistributionResponse(boolean successful, @Nullable String message) {
         this.successful = successful;
+        this.message = message;
     }
 
     public boolean isSuccessful() {
@@ -37,11 +39,11 @@ public class DistributionResponse {
 
     @Override
     public String toString() {
-        return "{\"success\":" + isSuccessful() + ", \"status\":\"" + getStatus() + "\"}";
+        return "{\"success\":" + isSuccessful() + ", \"message\":\"" + getMessage() + "\"}";
     }
 
-    public String getStatus() {
-        return status != null ? status : "done nothing";
+    public String getMessage() {
+        return message != null ? message : "done nothing";
     }
 
 }

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueDispatchingStrategy.java Thu Nov 20 13:20:13 2014
@@ -27,7 +27,11 @@ import org.apache.sling.distribution.pac
 
 /**
  * a {@link DistributionQueueDispatchingStrategy} implements an algorithm for dispatching
- * {@link org.apache.sling.distribution.packaging.DistributionPackage}s among the available queues
+ * {@link org.apache.sling.distribution.packaging.DistributionPackage}s among the available queues.
+ * <p/>
+ * Usually a {@link org.apache.sling.distribution.packaging.DistributionPackage} will be dispatched to a single {@link org.apache.sling.distribution.queue.DistributionQueue}
+ * but it would also be possible to dispatch the same package to multiple queues, resulting in obtaining multiple states
+ * (one for each queue) for a certain package.
  */
 @ConsumerType
 public interface DistributionQueueDispatchingStrategy extends DistributionComponent {
@@ -37,16 +41,18 @@ public interface DistributionQueueDispat
      * synchronously distribute a {@link org.apache.sling.distribution.packaging.DistributionPackage}
      * to one or more {@link DistributionQueue}s provided by the given {@link DistributionQueueProvider}
      *
-     * @param distributionPackage          a {@link org.apache.sling.distribution.packaging.DistributionPackage} to distribute
-     * @param queueProvider the {@link DistributionQueueProvider} used to provide the queues to be used for the given package
-     * @return <code>true</code> if addition was successful, <code>false</code> otherwise
+     * @param distributionPackage a {@link org.apache.sling.distribution.packaging.DistributionPackage} to distribute
+     * @param queueProvider       the {@link DistributionQueueProvider} used to provide the queues to be used for the given package
+     * @return an {@link java.lang.Iterable} of {@link org.apache.sling.distribution.queue.DistributionQueueItemState}s representing
+     * the states of the {@link org.apache.sling.distribution.queue.DistributionQueueItem}s added to one or more {@link org.apache.sling.distribution.queue.DistributionQueue}s
      * @throws DistributionQueueException if any internal error happens during distribution
      */
-    boolean add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionQueueException;
+    Iterable<DistributionQueueItemState> add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionQueueException;
 
 
     /**
      * Returns the queue names available for this strategy.
+     *
      * @return a list of queue names
      */
     @Nonnull

Modified: sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItemState.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItemState.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItemState.java (original)
+++ sling/trunk/contrib/extensions/distribution/api/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItemState.java Thu Nov 20 13:20:13 2014
@@ -32,15 +32,17 @@ public class DistributionQueueItemState 
 
     private final Calendar entered;
 
-    public DistributionQueueItemState(Calendar entered, ItemState state, int attempts) {
+    private final String queueName;
 
+    public DistributionQueueItemState(Calendar entered, ItemState state, int attempts, String queueName) {
         this.entered = entered;
         this.state = state;
         this.attempts = attempts;
+        this.queueName = queueName;
     }
 
-    public DistributionQueueItemState(ItemState state) {
-        this(Calendar.getInstance(), state, 0);
+    public DistributionQueueItemState(ItemState state, String queueName) {
+        this(Calendar.getInstance(), state, 0, queueName);
     }
 
     public boolean isSuccessful() {
@@ -55,15 +57,21 @@ public class DistributionQueueItemState 
         return state;
     }
 
+    public String getQueueName() {
+        return queueName;
+    }
+
     @Override
     public String toString() {
-        return "{\"attempts\":\"" + attempts + "\",\"" + "successful\":\"" + isSuccessful() + "\",\"" + "state\":\"" + state + "\"}";
+        return "{\"attempts\":\"" + attempts + "\",\"" + "successful\":\"" + isSuccessful() + "\",\"" + "state\":\"" + state +
+                "\",\"" + "queueName\":\"" + queueName + "\"}";
     }
 
     public Calendar getEntered() {
         return entered;
     }
 
+
     public enum ItemState {
         QUEUED, // waiting in queue after adding or for restart after failing
         ACTIVE, // job is currently in processing

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java Thu Nov 20 13:20:13 2014
@@ -21,6 +21,7 @@ package org.apache.sling.distribution.ag
 import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -169,34 +170,33 @@ public class SimpleDistributionAgent imp
         List<DistributionResponse> distributionResponses = new LinkedList<DistributionResponse>();
 
         for (DistributionPackage distributionPackage : distributionPackages) {
-            distributionResponses.add(schedule(distributionPackage));
+            distributionResponses.addAll(schedule(distributionPackage));
         }
         return distributionResponses.size() == 1 ? distributionResponses.get(0) : new CompositeDistributionResponse(distributionResponses);
     }
 
-    private DistributionResponse schedule(DistributionPackage distributionPackage) {
-        DistributionResponse distributionResponse;
+    private Collection<DistributionResponse> schedule(DistributionPackage distributionPackage) {
+        Collection<DistributionResponse> distributionResponses = new LinkedList<DistributionResponse>();
         log.info("scheduling distribution of package {}", distributionPackage);
 
 
-
         // dispatch the distribution package to the queue distribution handler
         try {
-            boolean success = queueDistributionStrategy.add(distributionPackage, queueProvider);
-
-            Dictionary<Object, Object> properties = new Properties();
-            properties.put("distribution.package.paths", distributionPackage.getPaths());
-            properties.put("distribution.agent.name", name);
-            distributionEventFactory.generateEvent(DistributionEventType.PACKAGE_QUEUED, properties);
+            Iterable<DistributionQueueItemState> states = queueDistributionStrategy.add(distributionPackage, queueProvider);
+            for (DistributionQueueItemState state : states) {
+                Dictionary<Object, Object> properties = new Properties();
+                properties.put("distribution.package.paths", distributionPackage.getPaths());
+                properties.put("distribution.agent.name", name);
+                distributionEventFactory.generateEvent(DistributionEventType.PACKAGE_QUEUED, properties);
 
-            distributionResponse = new DistributionResponse(success? DistributionQueueItemState.ItemState.QUEUED.toString() :
-                    DistributionQueueItemState.ItemState.ERROR.toString(), success);
+                distributionResponses.add(new DistributionResponse(state.isSuccessful(), state.getItemState().toString()));
+            }
         } catch (Exception e) {
-            log.error("an error happened during queue processing", e);
-            distributionResponse = new DistributionResponse(e.toString(), false);
+            log.error("an error happened during dispatching items to the queue(s)", e);
+            distributionResponses.add(new DistributionResponse(false, e.toString()));
         }
 
-        return distributionResponse;
+        return distributionResponses;
     }
 
     @Nonnull
@@ -288,8 +288,7 @@ public class SimpleDistributionAgent imp
 
                 if (distributionPackage instanceof SharedDistributionPackage) {
                     ((SharedDistributionPackage) distributionPackage).release(queueName);
-                }
-                else {
+                } else {
                     distributionPackage.delete();
                 }
                 success = true;
@@ -368,7 +367,7 @@ public class SimpleDistributionAgent imp
         private String status;
 
         public CompositeDistributionResponse(List<DistributionResponse> distributionResponses) {
-            super("", false);
+            super(false, null);
             if (distributionResponses.isEmpty()) {
                 successful = false;
                 status = "empty response";
@@ -377,7 +376,7 @@ public class SimpleDistributionAgent imp
                 StringBuilder statusBuilder = new StringBuilder("[");
                 for (DistributionResponse response : distributionResponses) {
                     successful &= response.isSuccessful();
-                    statusBuilder.append(response.getStatus()).append(", ");
+                    statusBuilder.append(response.getMessage()).append(", ");
                 }
                 int lof = statusBuilder.lastIndexOf(", ");
                 statusBuilder.replace(lof, lof + 2, "]");
@@ -391,7 +390,7 @@ public class SimpleDistributionAgent imp
         }
 
         @Override
-        public String getStatus() {
+        public String getMessage() {
             return status;
         }
     }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDispatchingStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDispatchingStrategy.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDispatchingStrategy.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDispatchingStrategy.java Thu Nov 20 13:20:13 2014
@@ -79,13 +79,16 @@ public class ErrorAwareQueueDispatchingS
         timeThreshold = PropertiesUtil.toInteger(ctx.getProperties().get(TIME_THRESHOLD), 600000);
     }
 
-    public boolean add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionQueueException {
-        boolean added;
+    public Iterable<DistributionQueueItemState> add(@Nonnull DistributionPackage distributionPackage,
+                                                    @Nonnull DistributionQueueProvider queueProvider) throws DistributionQueueException {
+        checkAndRemoveStuckItems(queueProvider);
         DistributionQueueItem queueItem = getItem(distributionPackage);
         DistributionQueue queue = queueProvider.getQueue(DEFAULT_QUEUE_NAME);
-        added = queue.add(queueItem);
-        checkAndRemoveStuckItems(queueProvider);
-        return added;
+        if (queue.add(queueItem)) {
+            return Arrays.asList(queue.getStatus(queueItem));
+        } else {
+            return Arrays.asList(new DistributionQueueItemState(DistributionQueueItemState.ItemState.ERROR, queue.getName()));
+        }
     }
 
     @Nonnull

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDispatchingStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDispatchingStrategy.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDispatchingStrategy.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDispatchingStrategy.java Thu Nov 20 13:20:13 2014
@@ -27,6 +27,7 @@ import org.apache.sling.distribution.que
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
 import org.apache.sling.distribution.queue.DistributionQueueException;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
+import org.apache.sling.distribution.queue.DistributionQueueItemState;
 import org.apache.sling.distribution.queue.DistributionQueueProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,9 +47,6 @@ public class PriorityPathQueueDispatchin
 
     }
 
-
-
-
     private DistributionQueue getQueue(DistributionQueueItem distributionPackage, DistributionQueueProvider queueProvider)
             throws DistributionQueueException {
         String[] paths = distributionPackage.getPaths();
@@ -78,19 +76,17 @@ public class PriorityPathQueueDispatchin
         return queue;
     }
 
-    public boolean add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionQueueException {
-
+    public Iterable<DistributionQueueItemState> add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionQueueException {
         DistributionQueueItem queueItem = getItem(distributionPackage);
         DistributionQueue queue = getQueue(queueItem, queueProvider);
-        if (queue != null) {
-            return queue.add(queueItem);
+        if (queue.add(queueItem)) {
+            return Arrays.asList(queue.getStatus(queueItem));
         } else {
-            throw new DistributionQueueException("could not get a queue");
+            return Arrays.asList(new DistributionQueueItemState(DistributionQueueItemState.ItemState.ERROR, queue.getName()));
         }
     }
 
 
-
     @Nonnull
     public List<String> getQueueNames() {
         List<String> paths = Arrays.asList(priorityPaths);
@@ -110,6 +106,4 @@ public class PriorityPathQueueDispatchin
     }
 
 
-
-
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/SingleQueueDispatchingStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/SingleQueueDispatchingStrategy.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/SingleQueueDispatchingStrategy.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/SingleQueueDispatchingStrategy.java Thu Nov 20 13:20:13 2014
@@ -27,6 +27,7 @@ import org.apache.sling.distribution.que
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
 import org.apache.sling.distribution.queue.DistributionQueueException;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
+import org.apache.sling.distribution.queue.DistributionQueueItemState;
 import org.apache.sling.distribution.queue.DistributionQueueProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,10 +40,14 @@ public class SingleQueueDispatchingStrat
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    public boolean add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionQueueException {
+    public Iterable<DistributionQueueItemState> add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionQueueException {
         DistributionQueueItem queueItem = getItem(distributionPackage);
         DistributionQueue queue = queueProvider.getQueue(DEFAULT_QUEUE_NAME);
-        return queue.add(queueItem);
+        if (queue.add(queueItem)) {
+            return Arrays.asList(queue.getStatus(queueItem));
+        } else {
+            return Arrays.asList(new DistributionQueueItemState(DistributionQueueItemState.ItemState.ERROR, queue.getName()));
+        }
     }
 
     @Nonnull

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java Thu Nov 20 13:20:13 2014
@@ -86,13 +86,13 @@ public class JobHandlingDistributionQueu
 
                 DistributionQueueItemState itemState = new DistributionQueueItemState(job.getCreated(),
                         ItemState.valueOf(job.getJobState().toString()),
-                        job.getRetryCount());
+                        job.getRetryCount(), name);
 
                 log.info("status of job {} is {}", job.getId(), job.getJobState());
 
                 return itemState;
             } else {
-                DistributionQueueItemState itemState = new DistributionQueueItemState(ItemState.DROPPED);
+                DistributionQueueItemState itemState = new DistributionQueueItemState(ItemState.DROPPED, name);
                 return itemState;
             }
         } catch (Exception e) {

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java Thu Nov 20 13:20:13 2014
@@ -71,7 +71,7 @@ public class SimpleDistributionQueue imp
         } catch (InterruptedException e) {
             log.error("cannot add an item to the queue", e);
         } finally {
-            statusMap.put(item, new DistributionQueueItemState(Calendar.getInstance(), itemState, 0));
+            statusMap.put(item, new DistributionQueueItemState(Calendar.getInstance(), itemState, 0, name));
         }
         return result;
     }
@@ -83,7 +83,7 @@ public class SimpleDistributionQueue imp
         if (queue.contains(queueItem)) {
             return itemStatus;
         } else {
-            return new DistributionQueueItemState(itemStatus.getEntered(), ItemState.SUCCEEDED, itemStatus.getAttempts());
+            return new DistributionQueueItemState(itemStatus.getEntered(), ItemState.SUCCEEDED, itemStatus.getAttempts(), name);
         }
     }
 
@@ -93,7 +93,7 @@ public class SimpleDistributionQueue imp
             DistributionQueueItemState itemState = statusMap.get(element);
             statusMap.put(element, new DistributionQueueItemState(itemState.getEntered(),
                     itemState.getItemState(),
-                    itemState.getAttempts()+1));
+                    itemState.getAttempts()+1, name));
         }
         return element;
     }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackage.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackage.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackage.java Thu Nov 20 13:20:13 2014
@@ -80,8 +80,7 @@ public class VoidDistributionPackage ext
             pathsString = Text.unescape(pathsString);
             String[] paths = pathsString.split(", ");
 
-            DistributionRequest request = new DistributionRequest(Long.valueOf(timeString),
-                    distributionActionType, paths);
+            DistributionRequest request = new DistributionRequest(distributionActionType, paths);
             distributionPackage = new VoidDistributionPackage(request, typeString);
         }
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentRootServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentRootServlet.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentRootServlet.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentRootServlet.java Thu Nov 20 13:20:13 2014
@@ -59,8 +59,7 @@ public class DistributionAgentRootServle
         DistributionActionType action = DistributionActionType.fromName(a);
 
 
-        DistributionRequest distributionRequest = new DistributionRequest(System.currentTimeMillis(),
-                action, paths);
+        DistributionRequest distributionRequest = new DistributionRequest(action, paths);
 
         ResourceResolver resourceResolver = request.getResourceResolver();
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java Thu Nov 20 13:20:13 2014
@@ -63,18 +63,18 @@ public class DistributionAgentServlet ex
             try {
                 DistributionResponse distributionResponse = agent.execute(resourceResolver, distributionRequest);
                 if (distributionResponse.isSuccessful()) {
-                    if (ItemState.SUCCEEDED.toString().equals(distributionResponse.getStatus())) {
+                    if (ItemState.SUCCEEDED.toString().equals(distributionResponse.getMessage())) {
                         response.setStatus(200);
                     }
-                    if (ItemState.QUEUED.toString().equals(distributionResponse.getStatus())
+                    if (ItemState.QUEUED.toString().equals(distributionResponse.getMessage())
                             || ItemState.ACTIVE.toString().equals(
-                            distributionResponse.getStatus())) {
+                            distributionResponse.getMessage())) {
                         response.setStatus(202);
                     }
 
                 }
                 else {
-                    if (ItemState.DROPPED.toString().equals(distributionResponse.getStatus())) {
+                    if (ItemState.DROPPED.toString().equals(distributionResponse.getMessage())) {
                         response.setStatus(404);
                     } else {
                         response.setStatus(400);

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java Thu Nov 20 13:20:13 2014
@@ -119,7 +119,7 @@ public class ChainDistributeDistribution
                         log.info("triggering chain distribution from event {}", event);
 
                         DistributionActionType action = DistributionActionType.valueOf(String.valueOf(actionProperty));
-                        requestHandler.handle(new DistributionRequest(System.currentTimeMillis(), action, paths));
+                        requestHandler.handle(new DistributionRequest(action, paths));
                         break;
                     }
                 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java Thu Nov 20 13:20:13 2014
@@ -50,7 +50,7 @@ public class JcrEventDistributionTrigger
             if (Event.PROPERTY_REMOVED == type || Event.PROPERTY_CHANGED == type || Event.PROPERTY_ADDED == type) {
                 replicatingPath = replicatingPath.substring(0, replicatingPath.lastIndexOf('/'));
             }
-            distributionRequest = new DistributionRequest(System.currentTimeMillis(), Event.NODE_REMOVED ==
+            distributionRequest = new DistributionRequest(Event.NODE_REMOVED ==
                     type ? DistributionActionType.DELETE : DistributionActionType.ADD, replicatingPath);
             log.info("distributing {}", distributionRequest);
         }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java Thu Nov 20 13:20:13 2014
@@ -87,7 +87,7 @@ public class PersistingJcrEventDistribut
                     createdNode.setProperty("info", values.toArray(new String[values.size()]));
                     session.save();
                     log.info("event persisted at {}", path);
-                    distributionRequest = new DistributionRequest(System.currentTimeMillis(), DistributionActionType.ADD, path);
+                    distributionRequest = new DistributionRequest(DistributionActionType.ADD, path);
                 } else {
                     log.warn("could not create node {}", nuggetsPath + "/" + nodeName);
                 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java Thu Nov 20 13:20:13 2014
@@ -125,7 +125,7 @@ public class RemoteEventDistributionTrig
             log.debug("content {} received {},{}", new Object[]{buffer, decoder, ioctrl});
 
             // TODO : currently it always triggers poll request on /, should this be configurable?
-            DistributionRequest distributionRequest = new DistributionRequest(System.currentTimeMillis(), DistributionActionType.POLL, "/");
+            DistributionRequest distributionRequest = new DistributionRequest(DistributionActionType.POLL, "/");
             handler.handle(distributionRequest);
             log.info("distribution request to agent {} sent ({} {})", new Object[]{
                     handler,

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java Thu Nov 20 13:20:13 2014
@@ -122,7 +122,7 @@ public class ResourceEventDistributionTr
             Object pathProperty = event.getProperty("path");
             if (pathProperty != null) {
                 String distributingPath = String.valueOf(pathProperty);
-                requestHandler.handle(new DistributionRequest(System.currentTimeMillis(), action, distributingPath));
+                requestHandler.handle(new DistributionRequest(action, distributingPath));
             }
         }
     }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java Thu Nov 20 13:20:13 2014
@@ -78,7 +78,7 @@ public class ScheduledDistributionTrigge
         public void run() {
             log.debug("agent {}: scheduling {} distribution of {}", new Object[]{requestHandler, distributionAction, path});
 
-            requestHandler.handle(new DistributionRequest(System.currentTimeMillis(), distributionAction, path));
+            requestHandler.handle(new DistributionRequest(distributionAction, path));
         }
     }
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/RequestUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/RequestUtils.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/RequestUtils.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/RequestUtils.java Thu Nov 20 13:20:13 2014
@@ -36,9 +36,7 @@ public class RequestUtils {
         String action = request.getParameter(DistributionParameter.ACTION.toString());
         String[] paths = request.getParameterValues(DistributionParameter.PATH.toString());
 
-        return new DistributionRequest(System.currentTimeMillis(),
-                DistributionActionType.fromName(action),
-                paths);
+        return new DistributionRequest(DistributionActionType.fromName(action), paths);
     }
 
     public static URI appendDistributionRequest(URI uri, DistributionRequest distributionRequest) throws URISyntaxException {

Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java Thu Nov 20 13:20:13 2014
@@ -19,6 +19,7 @@
 package org.apache.sling.distribution.agent.impl;
 
 import java.util.Arrays;
+import java.util.Iterator;
 
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
@@ -32,6 +33,7 @@ import org.apache.sling.distribution.pac
 import org.apache.sling.distribution.packaging.DistributionPackageImporter;
 import org.apache.sling.distribution.queue.DistributionQueue;
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
+import org.apache.sling.distribution.queue.DistributionQueueItemState;
 import org.apache.sling.distribution.queue.DistributionQueueProvider;
 import org.apache.sling.distribution.queue.impl.simple.SimpleDistributionQueue;
 import org.junit.Test;
@@ -57,7 +59,8 @@ public class SimpleDistributionAgentTest
         DistributionRequestAuthorizationStrategy packageExporterStrategy = mock(DistributionRequestAuthorizationStrategy.class);
         DistributionQueueProvider queueProvider = mock(DistributionQueueProvider.class);
         DistributionQueueDispatchingStrategy distributionHandler = mock(DistributionQueueDispatchingStrategy.class);
-        when(distributionHandler.add(any(DistributionPackage.class), any(DistributionQueueProvider.class))).thenReturn(false);
+        Iterable<DistributionQueueItemState> states = Arrays.asList(new DistributionQueueItemState(DistributionQueueItemState.ItemState.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);
 
@@ -66,8 +69,7 @@ public class SimpleDistributionAgentTest
                 packageExporter, packageExporterStrategy,
                 queueProvider, distributionHandler,
                 distributionEventFactory, resolverFactory,  null);
-        DistributionRequest request = new DistributionRequest(System.nanoTime(),
-                DistributionActionType.ADD, "/");
+        DistributionRequest request = new DistributionRequest(DistributionActionType.ADD, "/");
         DistributionPackage distributionPackage = mock(DistributionPackage.class);
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
 
@@ -78,7 +80,7 @@ public class SimpleDistributionAgentTest
                 new SimpleDistributionQueue(name, "name"));
         DistributionResponse response = agent.execute(resourceResolver, request);
         assertNotNull(response);
-        assertEquals("ERROR", response.getStatus());
+        assertEquals("ERROR", response.getMessage());
     }
 
     @Test
@@ -96,20 +98,21 @@ public class SimpleDistributionAgentTest
                 packageExporter, packageExporterStrategy,
                 queueProvider,
                 distributionHandler, distributionEventFactory, resolverFactory, null);
-        DistributionRequest request = new DistributionRequest(System.nanoTime(),
-                DistributionActionType.ADD, "/");
+        DistributionRequest request = new DistributionRequest(DistributionActionType.ADD, "/");
         DistributionPackage distributionPackage = mock(DistributionPackage.class);
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
 
         when(distributionPackage.getPaths()).thenReturn(new String[]{"/"});
-        when(distributionHandler.add(any(DistributionPackage.class), eq(queueProvider))).thenReturn(true);
+        Iterable<DistributionQueueItemState> states = Arrays.asList(new DistributionQueueItemState(DistributionQueueItemState.ItemState.QUEUED,
+                DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME));
+        when(distributionHandler.add(any(DistributionPackage.class), any(DistributionQueueProvider.class))).thenReturn(states);
         when(packageExporter.exportPackages(any(ResourceResolver.class), any(DistributionRequest.class)))
                 .thenReturn(Arrays.asList(distributionPackage));
         when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(
                 new SimpleDistributionQueue(name, "name"));
         DistributionResponse response = agent.execute(resourceResolver, request);
         assertNotNull(response);
-        assertEquals("QUEUED", response.getStatus());
+        assertEquals("QUEUED", response.getMessage());
     }
 
     @Test
@@ -128,8 +131,7 @@ public class SimpleDistributionAgentTest
                 packageExporter, packageExporterStrategy,
                 queueProvider, distributionHandler,
                 distributionEventFactory, resolverFactory, null);
-        DistributionRequest request = new DistributionRequest(System.nanoTime(),
-                DistributionActionType.ADD, "/");
+        DistributionRequest request = new DistributionRequest(DistributionActionType.ADD, "/");
         DistributionPackage distributionPackage = mock(DistributionPackage.class);
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDistributionStrategyTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDistributionStrategyTest.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDistributionStrategyTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/ErrorAwareQueueDistributionStrategyTest.java Thu Nov 20 13:20:13 2014
@@ -19,6 +19,7 @@
 package org.apache.sling.distribution.queue.impl;
 
 import java.util.Dictionary;
+import java.util.Iterator;
 
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.queue.DistributionQueue;
@@ -29,7 +30,7 @@ import org.apache.sling.distribution.que
 import org.junit.Test;
 import org.osgi.service.component.ComponentContext;
 
-import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
@@ -48,10 +49,15 @@ public class ErrorAwareQueueDistribution
         DistributionQueue queue = mock(DistributionQueue.class);
         when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
         when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        DistributionQueueItemState state = mock(DistributionQueueItemState.class);
+        when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
 
-        boolean returnedState = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
-
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -67,8 +73,13 @@ public class ErrorAwareQueueDistribution
         DistributionQueueItemState state = mock(DistributionQueueItemState.class);
         when(state.isSuccessful()).thenReturn(false);
         when(queue.getStatus(queueItem)).thenReturn(state);
-        boolean returnedState = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
-        assertFalse(returnedState);
+
+        Iterable<DistributionQueueItemState> returnedStates = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -95,8 +106,13 @@ public class ErrorAwareQueueDistribution
         when(state.isSuccessful()).thenReturn(false);
         when(state.getAttempts()).thenReturn(2);
         when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
-        boolean returnedState = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
-        assertFalse(returnedState);
+
+        Iterable<DistributionQueueItemState> returnedStates = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -119,21 +135,8 @@ public class ErrorAwareQueueDistribution
         when(state.isSuccessful()).thenReturn(false);
         when(state.getAttempts()).thenReturn(2);
         when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
-        boolean returnedState = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
-    }
-
-    @Test
-    public void testPackageAdditionWithNullItemStateFromTheQueue() throws Exception {
-        ErrorAwareQueueDispatchingStrategy errorAwareDistributionStrategy = new ErrorAwareQueueDispatchingStrategy();
-        DistributionPackage distributionPackage = mock(DistributionPackage.class);
-        DistributionQueueProvider queueProvider = mock(DistributionQueueProvider.class);
-        DistributionQueue queue = mock(DistributionQueue.class);
-
-        when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
-        when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
-        boolean returnedState = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedState = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedState);
     }
 
     @Test
@@ -144,8 +147,14 @@ public class ErrorAwareQueueDistribution
         DistributionQueue queue = mock(DistributionQueue.class);
         when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
         when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        DistributionQueueItemState state = mock(DistributionQueueItemState.class);
+        when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
 
-        boolean returnedState = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = errorAwareDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDistributionStrategyTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDistributionStrategyTest.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDistributionStrategyTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/PriorityPathQueueDistributionStrategyTest.java Thu Nov 20 13:20:13 2014
@@ -18,13 +18,17 @@
  */
 package org.apache.sling.distribution.queue.impl;
 
+import java.util.Iterator;
+
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.queue.DistributionQueue;
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
+import org.apache.sling.distribution.queue.DistributionQueueItemState;
 import org.apache.sling.distribution.queue.DistributionQueueProvider;
 import org.junit.Test;
 
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
@@ -45,9 +49,15 @@ public class PriorityPathQueueDistributi
         DistributionQueue queue = mock(DistributionQueue.class);
         when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
         when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        DistributionQueueItemState state = mock(DistributionQueueItemState.class);
+        when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
 
-        boolean returnedState = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -60,9 +70,15 @@ public class PriorityPathQueueDistributi
         DistributionQueue queue = mock(DistributionQueue.class);
         when(queueProvider.getQueue("/content")).thenReturn(queue);
         when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        DistributionQueueItemState state = mock(DistributionQueueItemState.class);
+        when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
 
-        boolean returnedState = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -74,10 +90,14 @@ public class PriorityPathQueueDistributi
         DistributionQueueProvider queueProvider = mock(DistributionQueueProvider.class);
         DistributionQueue queue = mock(DistributionQueue.class);
         when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
-        when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        when(queue.add(any(DistributionQueueItem.class))).thenReturn(false);
 
-        boolean returnedState = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -90,40 +110,14 @@ public class PriorityPathQueueDistributi
         DistributionQueue queue = mock(DistributionQueue.class);
 
         when(queueProvider.getQueue("/content")).thenReturn(queue);
-        when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        when(queue.add(any(DistributionQueueItem.class))).thenReturn(false);
 
-        boolean returnedState = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
-    }
-
-    @Test
-    public void testPackageAdditionWithNullItemStateFromTheQueue() throws Exception {
-        PriorityPathQueueDispatchingStrategy priorityPathDistributionStrategy = new PriorityPathQueueDispatchingStrategy(new String[]{"/content", "/apps"});
-
-        DistributionPackage distributionPackage = mock(DistributionPackage.class);
-        when(distributionPackage.getPaths()).thenReturn(new String[]{"/etc"});
-        DistributionQueueProvider queueProvider = mock(DistributionQueueProvider.class);
-        DistributionQueue queue = mock(DistributionQueue.class);
-
-        when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
-        when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
-        boolean returnedState = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
-    }
-
-    @Test
-    public void testPackageAdditionWithNullItemStateFromTheQueueOnPriorityPath() throws Exception {
-        PriorityPathQueueDispatchingStrategy priorityPathDistributionStrategy = new PriorityPathQueueDispatchingStrategy(new String[]{"/content", "/apps"});
-
-        DistributionPackage distributionPackage = mock(DistributionPackage.class);
-        when(distributionPackage.getPaths()).thenReturn(new String[]{"/apps/some/stuff"});
-        DistributionQueueProvider queueProvider = mock(DistributionQueueProvider.class);
-        DistributionQueue queue = mock(DistributionQueue.class);
-
-        when(queueProvider.getQueue("/apps")).thenReturn(queue);
-        when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
-        boolean returnedState = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -136,8 +130,15 @@ public class PriorityPathQueueDistributi
         DistributionQueue queue = mock(DistributionQueue.class);
         when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
         when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
-        boolean returnedState = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        DistributionQueueItemState state = mock(DistributionQueueItemState.class);
+        when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
+
+        Iterable<DistributionQueueItemState> returnedStates = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -151,8 +152,14 @@ public class PriorityPathQueueDistributi
 
         when(queueProvider.getQueue("/apps")).thenReturn(queue);
         when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        DistributionQueueItemState state = mock(DistributionQueueItemState.class);
+        when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
 
-        boolean returnedState = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = priorityPathDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/SingleQueueDistributionStrategyTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/SingleQueueDistributionStrategyTest.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/SingleQueueDistributionStrategyTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/queue/impl/SingleQueueDistributionStrategyTest.java Thu Nov 20 13:20:13 2014
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.distribution.queue.impl;
 
+import java.util.Iterator;
+
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.queue.DistributionQueue;
 import org.apache.sling.distribution.queue.DistributionQueueDispatchingStrategy;
@@ -27,6 +29,7 @@ import org.apache.sling.distribution.que
 import org.junit.Test;
 
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
@@ -45,9 +48,15 @@ public class SingleQueueDistributionStra
         DistributionQueue queue = mock(DistributionQueue.class);
         when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
         when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        DistributionQueueItemState state = mock(DistributionQueueItemState.class);
+        when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
 
-        boolean returnedState = singleQueueDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = singleQueueDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -62,20 +71,12 @@ public class SingleQueueDistributionStra
         DistributionQueueItemState state = mock(DistributionQueueItemState.class);
         when(state.isSuccessful()).thenReturn(false);
         when(queue.getStatus(queueItem)).thenReturn(state);
-        boolean returnedState = singleQueueDistributionStrategy.add(distributionPackage, queueProvider);
-        assertFalse(returnedState);
-    }
-
-    @Test
-    public void testPackageAdditionWithNullItemStateFromTheQueue() throws Exception {
-        SingleQueueDispatchingStrategy singleQueueDistributionStrategy = new SingleQueueDispatchingStrategy();
-        DistributionPackage distributionPackage = mock(DistributionPackage.class);
-        DistributionQueueProvider queueProvider = mock(DistributionQueueProvider.class);
-        DistributionQueue queue = mock(DistributionQueue.class);
-        when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
-        when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
-        boolean returnedState = singleQueueDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = singleQueueDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 
     @Test
@@ -86,8 +87,14 @@ public class SingleQueueDistributionStra
         DistributionQueue queue = mock(DistributionQueue.class);
         when(queueProvider.getQueue(DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME)).thenReturn(queue);
         when(queue.add(any(DistributionQueueItem.class))).thenReturn(true);
+        DistributionQueueItemState state = mock(DistributionQueueItemState.class);
+        when(queue.getStatus(any(DistributionQueueItem.class))).thenReturn(state);
 
-        boolean returnedState = singleQueueDistributionStrategy.add(distributionPackage, queueProvider);
-        assertTrue(returnedState);
+        Iterable<DistributionQueueItemState> returnedStates = singleQueueDistributionStrategy.add(distributionPackage, queueProvider);
+        assertNotNull(returnedStates);
+        Iterator<DistributionQueueItemState> iterator = returnedStates.iterator();
+        assertNotNull(iterator);
+        assertTrue(iterator.hasNext());
+        assertNotNull(iterator.next());
     }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackageTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackageTest.java?rev=1640737&r1=1640736&r2=1640737&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackageTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/VoidDistributionPackageTest.java Thu Nov 20 13:20:13 2014
@@ -36,9 +36,10 @@ public class VoidDistributionPackageTest
 
     @Test
     public void testCreatedAndReadPackagesEquality() throws Exception {
-        DistributionRequest request = new DistributionRequest(123l, DistributionActionType.DELETE, "/abc");
+        long time = System.currentTimeMillis();
+        DistributionRequest request = new DistributionRequest(DistributionActionType.DELETE, "/abc");
         VoidDistributionPackage createdPackage = new VoidDistributionPackage(request);
-        VoidDistributionPackage readPackage = VoidDistributionPackage.fromStream(new ByteArrayInputStream("DELETE:/abc:123:VOID".getBytes()));
+        VoidDistributionPackage readPackage = VoidDistributionPackage.fromStream(new ByteArrayInputStream(("DELETE:/abc:" + time + ":VOID").getBytes()));
         assertEquals(createdPackage.getId(), readPackage.getId());
         assertEquals(createdPackage.getAction(), readPackage.getAction());
         assertEquals(createdPackage.getType(), readPackage.getType());