[infinispan-dev] Changes to ReplListener

Manik Surtani manik at jboss.org
Wed Apr 22 06:06:03 EDT 2009


I've made a few changes to the ReplListener helper class that lives in  
the test harness.  The ReplListener can now be constructed to eagerly  
listen for commands, and reconciliate these with expectations set in  
expect() so that commands seen between construction of the listener  
and calling expect() are also recorded and noted.

Enjoy!
Manik

Begin forwarded message:

> From: infinispan-commits at lists.jboss.org
> Date: 22 April 2009 10:51:08 BST
> To: infinispan-commits at lists.jboss.org
> Subject: [infinispan-commits] Infinispan SVN: r158 - trunk/core/src/ 
> test/java/org/infinispan/test.
> Reply-To: infinispan-commits at lists.jboss.org
>
> Author: manik.surtani at jboss.com
> Date: 2009-04-22 05:51:08 -0400 (Wed, 22 Apr 2009)
> New Revision: 158
>
> Modified:
>   trunk/core/src/test/java/org/infinispan/test/ReplListener.java
> Log:
> Ability to eagerly record commands
>
> Modified: trunk/core/src/test/java/org/infinispan/test/ 
> ReplListener.java
> ===================================================================
> --- trunk/core/src/test/java/org/infinispan/test/ReplListener.java	 
> 2009-04-21 13:37:17 UTC (rev 157)
> +++ trunk/core/src/test/java/org/infinispan/test/ReplListener.java	 
> 2009-04-22 09:51:08 UTC (rev 158)
> @@ -19,12 +19,37 @@
>  * attachReplicationListener(cache);  
> r.expect(RemoveCommand.class); // ... r.waitForRPC(); </code>
>  */
> public class ReplListener {
> -   Cache c;
> -   Set<Class<? extends VisitableCommand>> expectedCommands;
> +   Cache<?, ?> c;
> +   volatile Set<Class<? extends VisitableCommand>> expectedCommands;
> +   Set<Class<? extends VisitableCommand>> eagerCommands;
> +   boolean recordCommandsEagerly;
>    CountDownLatch latch = new CountDownLatch(1);
>
> -   public ReplListener(Cache c) {
> +   /**
> +    * This listener atatches itself to a cache and when {@link  
> #expect(Class[])} is invoked, will start checking for
> +    * invocations of the command on the cache, waiting for all  
> expected commands to be received in {@link
> +    * #waitForRpc()}.
> +    *
> +    * @param c cache on which to attach listener
> +    */
> +   public ReplListener(Cache<?, ?> c) {
> +      this(c, false);
> +   }
> +
> +   /**
> +    * As {@link #ReplListener(org.infinispan.Cache)} except that  
> you can optionally configure whether command recording
> +    * is eager (false by default).
> +    * <p/>
> +    * If <tt>recordCommandsEagerly</tt> is true, then commands are  
> recorded from the moment the listener is attached to
> +    * the cache, even before {@link #expect(Class[])} is invoked.   
> As such, when {@link #expect(Class[])} is called, the
> +    * list of commands to wait for will take into account commands  
> already seen thanks to eager recording.
> +    *
> +    * @param c                     cache on which to attach listener
> +    * @param recordCommandsEagerly whether to record commands eagerly
> +    */
> +   public ReplListener(Cache<?, ?> c, boolean  
> recordCommandsEagerly) {
>       this.c = c;
> +      this.recordCommandsEagerly = recordCommandsEagerly;
>       this.c.getAdvancedCache().addInterceptor(new  
> ReplListenerInterceptor(), 1);
>    }
>
> @@ -70,6 +95,8 @@
>          this.expectedCommands = new HashSet<Class<? extends  
> VisitableCommand>>();
>       }
>       this.expectedCommands.addAll(Arrays.asList(expectedCommands));
> +
> +      if (recordCommandsEagerly)  
> this.expectedCommands.removeAll(eagerCommands);
>    }
>
>    /**
> @@ -99,6 +126,10 @@
>       }
>    }
>
> +   public Cache<?, ?> getCache() {
> +      return c;
> +   }
> +
>    protected class ReplListenerInterceptor extends  
> CommandInterceptor {
>       @Override
>       protected Object handleDefault(InvocationContext ctx,  
> VisitableCommand cmd) throws Throwable {
> @@ -124,7 +155,11 @@
>             expectedCommands.remove(cmd.getClass());
>             if (expectedCommands.isEmpty()) latch.countDown();
>          } else {
> -            System.out.println("Received unexpected command: " +  
> cmd);
> +            if (recordCommandsEagerly) {
> +               eagerCommands.add(cmd.getClass());
> +            } else {
> +               System.out.println("Received unexpected command: " +  
> cmd);
> +            }
>          }
>       }
>    }
>
> _______________________________________________
> infinispan-commits mailing list
> infinispan-commits at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-commits

--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/infinispan-dev/attachments/20090422/6c375c03/attachment-0007.html 


More information about the infinispan-dev mailing list