You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by np...@apache.org on 2017/10/17 17:07:58 UTC

svn commit: r1812428 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/ContainerPipe.java test/java/org/apache/sling/pipes/ContainerPipeTest.java

Author: npeltier
Date: Tue Oct 17 17:07:57 2017
New Revision: 1812428

URL: http://svn.apache.org/viewvc?rev=1812428&view=rev
Log:
SLING-7171 set sleep for container pipe

Modified:
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java
    sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java

Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java?rev=1812428&r1=1812427&r2=1812428&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/ContainerPipe.java Tue Oct 17 17:07:57 2017
@@ -36,12 +36,18 @@ public class ContainerPipe extends BaseP
 
     public static final String RESOURCE_TYPE = "slingPipes/container";
 
+    /**
+     * Sleep time, in ms, after each resource returned
+     */
+    public static final String PN_SLEEP = "sleep";
+
     Map<String, Pipe> pipes = new HashMap<>();
 
     List<Pipe> pipeList = new ArrayList<>();
 
     List<Pipe> reversePipeList = new ArrayList<>();
 
+    long sleep = 0L;
     /**
      * Constructor
      * @param plumber plumber
@@ -50,6 +56,7 @@ public class ContainerPipe extends BaseP
      */
     public ContainerPipe(Plumber plumber, Resource resource) throws Exception{
         super(plumber, resource);
+        sleep = properties.get(PN_SLEEP, 0L);
         for (Iterator<Resource> childPipeResources = getConfiguration().listChildren(); childPipeResources.hasNext();){
             Resource pipeResource = childPipeResources.next();
             Pipe pipe = plumber.getPipe(pipeResource);
@@ -86,7 +93,7 @@ public class ContainerPipe extends BaseP
 
     @Override
     public Iterator<Resource> getOutput()  {
-        return new ContainerResourceIterator(this);
+        return new ContainerResourceIterator(this, sleep);
     }
 
     /**
@@ -148,17 +155,19 @@ public class ContainerPipe extends BaseP
 
         boolean computedCursor = false;
         boolean hasNext = false;
+        long sleep = 0L;
         int cursor = 0;
 
         /**
          * Constructor
          * @param containerPipe corresponding container pipe
          */
-        ContainerResourceIterator(ContainerPipe containerPipe) {
+        ContainerResourceIterator(ContainerPipe containerPipe, long sleep) {
             container = containerPipe;
             bindings = container.bindings;
             iterators = new HashMap<>();
             Pipe firstPipe = container.getFirstPipe();
+            this.sleep = sleep;
             //we initialize the first iterator the only one not to be updated
             iterators.put(firstPipe, firstPipe.getOutput());
         }
@@ -214,13 +223,20 @@ public class ContainerPipe extends BaseP
 
         @Override
         public Resource next() {
-            hasNext = computedCursor && hasNext || hasNext();
-            if (hasNext) {
-                computedCursor = false;
-                hasNext = false;
-                Resource resource =  iterators.get(container.getLastPipe()).next();
-                bindings.updateBindings(container.getLastPipe(), resource);
-                return resource;
+            try {
+                hasNext = computedCursor && hasNext || hasNext();
+                if (hasNext) {
+                    computedCursor = false;
+                    hasNext = false;
+                    Resource resource = iterators.get(container.getLastPipe()).next();
+                    bindings.updateBindings(container.getLastPipe(), resource);
+                    if (sleep > 0) {
+                        Thread.sleep(sleep);
+                    }
+                    return resource;
+                }
+            } catch (InterruptedException e){
+                log.error("interrupted while sleeping", e);
             }
             return null;
         }

Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java?rev=1812428&r1=1812427&r2=1812428&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java Tue Oct 17 17:07:57 2017
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertTru
 
 import java.util.Iterator;
 
+import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
 import org.junit.Before;
@@ -46,9 +47,7 @@ public class ContainerPipeTest extends A
 
     @Test
     public void testDummyTree() throws Exception {
-        ContainerPipe pipe = (ContainerPipe)getPipe(PATH_PIPE + "/" + NN_DUMMYTREE);
-        assertNotNull("A container pipe should be built out from the given configuration", pipe);
-        Iterator<Resource> resourceIterator = pipe.getOutput();
+        Iterator<Resource> resourceIterator = getOutput(PATH_PIPE + "/" + NN_DUMMYTREE);
         assertTrue("There should be some results", resourceIterator.hasNext());
         Resource firstResource = resourceIterator.next();
         assertNotNull("First resource should not be null", firstResource);
@@ -78,8 +77,7 @@ public class ContainerPipeTest extends A
 
     @Test
     public void testOtherTree() throws Exception {
-        ContainerPipe pipe = (ContainerPipe)getPipe(PATH_PIPE + "/" + NN_OTHERTREE);
-        Iterator<Resource> resourceIterator = pipe.getOutput();
+        Iterator<Resource> resourceIterator = getOutput(PATH_PIPE + "/" + NN_OTHERTREE);
         assertTrue("There should be some results", resourceIterator.hasNext());
         Resource firstResource = resourceIterator.next();
         assertNotNull("First resource should not be null", firstResource);
@@ -104,4 +102,16 @@ public class ContainerPipeTest extends A
     public void testOnePipe() throws Exception {
         assertTrue("There should be children", getOutput(PATH_PIPE + "/" + NN_ONEPIPE).hasNext());
     }
+
+    @Test
+    public void testSleep() throws Exception {
+        long interval = 100L;
+        String path = PATH_PIPE + "/" + NN_DUMMYTREE;
+        context.resourceResolver().getResource(path).adaptTo(ModifiableValueMap.class).put(ContainerPipe.PN_SLEEP, interval);
+        context.resourceResolver().commit();
+        Iterator<Resource> outputs = getOutput(path);
+        long start = System.currentTimeMillis();
+        outputs.next();
+        assertTrue("time spent should be bigger than interval", System.currentTimeMillis() - start > interval);
+    }
 }
\ No newline at end of file