[infinispan-commits] Infinispan SVN: r259 - in trunk/core/src/main/java/org/infinispan: context/impl and 1 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Tue May 12 09:12:55 EDT 2009


Author: manik.surtani at jboss.com
Date: 2009-05-12 09:12:54 -0400 (Tue, 12 May 2009)
New Revision: 259

Modified:
   trunk/core/src/main/java/org/infinispan/context/FlagContainer.java
   trunk/core/src/main/java/org/infinispan/context/InvocationContext.java
   trunk/core/src/main/java/org/infinispan/context/impl/AbstractInvocationContext.java
   trunk/core/src/main/java/org/infinispan/context/impl/AbstractTxInvocationContext.java
   trunk/core/src/main/java/org/infinispan/context/impl/InitiatorTxInvocationContext.java
   trunk/core/src/main/java/org/infinispan/context/impl/NonTxInvocationContext.java
   trunk/core/src/main/java/org/infinispan/context/impl/RemoteTxInvocationContext.java
   trunk/core/src/main/java/org/infinispan/interceptors/InvocationContextInterceptor.java
Log:
Added ability to support flags, + set async future return type flag

Modified: trunk/core/src/main/java/org/infinispan/context/FlagContainer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/FlagContainer.java	2009-05-12 13:12:10 UTC (rev 258)
+++ trunk/core/src/main/java/org/infinispan/context/FlagContainer.java	2009-05-12 13:12:54 UTC (rev 259)
@@ -19,7 +19,7 @@
 
    void setFlags(Collection<Flag> flags);
 
-   void resetFlags();
+   void reset();
 
    boolean isFlagsUninitialized();
 }

Modified: trunk/core/src/main/java/org/infinispan/context/InvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/InvocationContext.java	2009-05-12 13:12:10 UTC (rev 258)
+++ trunk/core/src/main/java/org/infinispan/context/InvocationContext.java	2009-05-12 13:12:54 UTC (rev 259)
@@ -37,8 +37,12 @@
 
    Object getLockOwner();
 
-   public Object clone();
+   public InvocationContext clone();
 
    boolean hasLockedEntries();
 
+   boolean isUseFutureReturnType();
+
+   void setUseFutureReturnType(boolean useFutureReturnType);
+
 }

Modified: trunk/core/src/main/java/org/infinispan/context/impl/AbstractInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/AbstractInvocationContext.java	2009-05-12 13:12:10 UTC (rev 258)
+++ trunk/core/src/main/java/org/infinispan/context/impl/AbstractInvocationContext.java	2009-05-12 13:12:54 UTC (rev 259)
@@ -21,6 +21,66 @@
 
    protected volatile EnumSet<Flag> flags;
 
+   // since this is finite, small, and strictly an internal API, it is cheaper/quicker to use bitmasking rather than
+   // an EnumSet.
+   protected byte contextFlags = 0;
+
+   // if this or any context subclass ever needs to store a boolean, always use a context flag instead.  This is far
+   // more space-efficient.  Note that this value will be stored in a byte, which means up to 8 flags can be stored in
+   // a single byte.  Always start shifting with 0, the last shift cannot be greater than 7.
+   protected enum ContextFlag {
+      USE_FUTURE_RETURN_TYPE(1), // same as 1 << 0
+      ORIGIN_LOCAL(1 << 1);
+
+      final byte mask;
+
+      ContextFlag(int mask) {
+         this.mask = (byte) mask;
+      }
+   }
+
+   /**
+    * Tests whether a context flag is set.
+    *
+    * @param flag context flag to test
+    * @return true if set, false otherwise.
+    */
+   protected final boolean isContextFlagSet(ContextFlag flag) {
+      return (contextFlags & flag.mask) != 0;
+   }
+
+   /**
+    * Unility method that sets a given context flag.
+    *
+    * @param flag context flag to set
+    */
+   protected final void setContextFlag(ContextFlag flag) {
+      contextFlags |= flag.mask;
+   }
+
+   /**
+    * Utility method that unsets a context flag.
+    *
+    * @param flag context flag to unset
+    */
+   protected final void unsetContextFlag(ContextFlag flag) {
+      contextFlags &= ~flag.mask;
+   }
+
+   /**
+    * Utility value that sets or unsets a context flag based on a boolean passed in
+    *
+    * @param flag flag to set or unset
+    * @param set  if true, the context flag is set.  If false, the context flag is unset.
+    */
+   protected final void setContextFlag(ContextFlag flag, boolean set) {
+      if (set)
+         setContextFlag(flag);
+      else
+         unsetContextFlag(flag);
+   }
+
+
    public boolean hasFlag(Flag o) {
       return flags != null && flags.contains(o);
    }
@@ -45,8 +105,9 @@
          this.flags.addAll(flags);
    }
 
-   public void resetFlags() {
+   public void reset() {
       flags = null;
+      contextFlags = 0;
    }
 
    public boolean isFlagsUninitialized() {
@@ -71,15 +132,22 @@
    }
 
 
+   public boolean isUseFutureReturnType() {
+      return isContextFlagSet(ContextFlag.USE_FUTURE_RETURN_TYPE);
+   }
+
+   public void setUseFutureReturnType(boolean useFutureReturnType) {
+      setContextFlag(ContextFlag.USE_FUTURE_RETURN_TYPE, useFutureReturnType);
+   }
+
    @Override
-   public Object clone() {
+   public AbstractInvocationContext clone() {
       try {
          AbstractInvocationContext dolly = (AbstractInvocationContext) super.clone();
-         if (flags != null)
-            dolly.flags = flags.clone();
+         if (flags != null) dolly.flags = flags.clone();
          return dolly;
       } catch (CloneNotSupportedException e) {
-         throw new IllegalStateException("Imposible!");
+         throw new IllegalStateException("Impossible!");
       }
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/context/impl/AbstractTxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/AbstractTxInvocationContext.java	2009-05-12 13:12:10 UTC (rev 258)
+++ trunk/core/src/main/java/org/infinispan/context/impl/AbstractTxInvocationContext.java	2009-05-12 13:12:54 UTC (rev 259)
@@ -6,10 +6,10 @@
 import javax.transaction.Status;
 import javax.transaction.SystemException;
 import javax.transaction.Transaction;
-import java.util.Set;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
-import java.util.HashSet;
+import java.util.Set;
 
 /**
  * // TODO: Mircea: Document this!
@@ -95,9 +95,9 @@
    }
 
    @Override
-   public Object clone() {
+   public AbstractTxInvocationContext clone() {
       AbstractTxInvocationContext dolly = (AbstractTxInvocationContext) super.clone();
-      if (this.txParticipants != null)  {
+      if (this.txParticipants != null) {
          dolly.txParticipants = new HashSet<Address>(txParticipants);
       }
       return dolly;

Modified: trunk/core/src/main/java/org/infinispan/context/impl/InitiatorTxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/InitiatorTxInvocationContext.java	2009-05-12 13:12:10 UTC (rev 258)
+++ trunk/core/src/main/java/org/infinispan/context/impl/InitiatorTxInvocationContext.java	2009-05-12 13:12:54 UTC (rev 259)
@@ -71,9 +71,4 @@
    public void clearLookedUpEntries() {
       xaAdapter.clearLookedUpEntries();
    }
-
-   @Override
-   public Object clone() {
-      return super.clone();
-   }
 }

Modified: trunk/core/src/main/java/org/infinispan/context/impl/NonTxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/NonTxInvocationContext.java	2009-05-12 13:12:10 UTC (rev 258)
+++ trunk/core/src/main/java/org/infinispan/context/impl/NonTxInvocationContext.java	2009-05-12 13:12:54 UTC (rev 259)
@@ -1,9 +1,9 @@
 package org.infinispan.context.impl;
 
 import org.infinispan.container.entries.CacheEntry;
+import org.infinispan.util.BidirectionalLinkedHashMap;
 import org.infinispan.util.BidirectionalMap;
 import org.infinispan.util.InfinispanCollections;
-import org.infinispan.util.BidirectionalLinkedHashMap;
 
 import java.util.Map;
 
@@ -15,8 +15,6 @@
  */
 public class NonTxInvocationContext extends AbstractInvocationContext {
 
-   private boolean isOriginLocal;
-
    protected BidirectionalLinkedHashMap<Object, CacheEntry> lookedUpEntries = null;
 
    public CacheEntry lookupEntry(Object k) {
@@ -48,11 +46,11 @@
    }
 
    public boolean isOriginLocal() {
-      return isOriginLocal;
+      return isContextFlagSet(ContextFlag.ORIGIN_LOCAL);
    }
 
    public void setOriginLocal(boolean originLocal) {
-      isOriginLocal = originLocal;
+      setContextFlag(ContextFlag.ORIGIN_LOCAL, originLocal);
    }
 
    public boolean isInTxScope() {
@@ -68,16 +66,16 @@
    }
 
    public void prepareForCall() {
-      resetFlags();
+      reset();
       clearLookedUpEntries();
    }
 
    @Override
-   public Object clone() {
+   public NonTxInvocationContext clone() {
       NonTxInvocationContext dolly = (NonTxInvocationContext) super.clone();
       if (lookedUpEntries != null) {
          dolly.lookedUpEntries = new BidirectionalLinkedHashMap<Object, CacheEntry>(lookedUpEntries);
       }
-      return dolly; 
+      return dolly;
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/context/impl/RemoteTxInvocationContext.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/context/impl/RemoteTxInvocationContext.java	2009-05-12 13:12:10 UTC (rev 258)
+++ trunk/core/src/main/java/org/infinispan/context/impl/RemoteTxInvocationContext.java	2009-05-12 13:12:54 UTC (rev 259)
@@ -3,14 +3,14 @@
 import org.infinispan.commands.write.WriteCommand;
 import org.infinispan.container.entries.CacheEntry;
 import org.infinispan.transaction.xa.GlobalTransaction;
+import org.infinispan.util.BidirectionalLinkedHashMap;
 import org.infinispan.util.BidirectionalMap;
-import org.infinispan.util.BidirectionalLinkedHashMap;
 
 import javax.transaction.Transaction;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
-import java.util.ArrayList;
 
 /**
  * // TODO: Mircea: Document this!
@@ -107,7 +107,7 @@
    }
 
    @Override
-   public Object clone() {
+   public RemoteTxInvocationContext clone() {
       RemoteTxInvocationContext dolly = (RemoteTxInvocationContext) super.clone();
       if (modifications != null) {
          dolly.modifications = new ArrayList<WriteCommand>(modifications);

Modified: trunk/core/src/main/java/org/infinispan/interceptors/InvocationContextInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/InvocationContextInterceptor.java	2009-05-12 13:12:10 UTC (rev 258)
+++ trunk/core/src/main/java/org/infinispan/interceptors/InvocationContextInterceptor.java	2009-05-12 13:12:54 UTC (rev 259)
@@ -105,7 +105,7 @@
          }
          throw th;
       } finally {
-         ctx.resetFlags();
+         ctx.reset();
       }
    }
 }
\ No newline at end of file




More information about the infinispan-commits mailing list