[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