[infinispan-commits] Infinispan SVN: r2518 - in branches/4.2.x/core/src/main/java/org/infinispan: commands/read and 1 other directory.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Mon Oct 18 10:33:46 EDT 2010
Author: mircea.markus
Date: 2010-10-18 10:33:45 -0400 (Mon, 18 Oct 2010)
New Revision: 2518
Modified:
branches/4.2.x/core/src/main/java/org/infinispan/CacheDelegate.java
branches/4.2.x/core/src/main/java/org/infinispan/commands/read/AbstractLocalCommand.java
branches/4.2.x/core/src/main/java/org/infinispan/commands/read/KeySetCommand.java
branches/4.2.x/core/src/main/java/org/infinispan/commands/read/SizeCommand.java
Log:
[ISPN-679] - Cache.values does not work correctly
Modified: branches/4.2.x/core/src/main/java/org/infinispan/CacheDelegate.java
===================================================================
--- branches/4.2.x/core/src/main/java/org/infinispan/CacheDelegate.java 2010-10-18 11:34:56 UTC (rev 2517)
+++ branches/4.2.x/core/src/main/java/org/infinispan/CacheDelegate.java 2010-10-18 14:33:45 UTC (rev 2518)
@@ -173,7 +173,7 @@
public final int size() {
SizeCommand command = commandsFactory.buildSizeCommand();
- return (Integer) invoker.invoke(icc.createNonTxInvocationContext(), command);
+ return (Integer) invoker.invoke(getInvocationContext(false), command);
}
public final boolean isEmpty() {
Modified: branches/4.2.x/core/src/main/java/org/infinispan/commands/read/AbstractLocalCommand.java
===================================================================
--- branches/4.2.x/core/src/main/java/org/infinispan/commands/read/AbstractLocalCommand.java 2010-10-18 11:34:56 UTC (rev 2517)
+++ branches/4.2.x/core/src/main/java/org/infinispan/commands/read/AbstractLocalCommand.java 2010-10-18 14:33:45 UTC (rev 2518)
@@ -1,13 +1,19 @@
package org.infinispan.commands.read;
import org.infinispan.commands.LocalCommand;
+import org.infinispan.container.DataContainer;
+import org.infinispan.container.entries.CacheEntry;
import org.infinispan.context.InvocationContext;
import org.infinispan.context.impl.TxInvocationContext;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Abstract class
*
* @author Manik Surtani
+ * @author Mircea.Markus at jboss.com
* @since 4.1
*/
public class AbstractLocalCommand implements LocalCommand {
@@ -31,5 +37,21 @@
protected boolean noTxModifications(InvocationContext ctx) {
return !ctx.isInTxScope() || !((TxInvocationContext)ctx).hasModifications();
- }
+ }
+
+ protected Set<Object> ketKeySetWithinTransaction(InvocationContext ctx, DataContainer container) {
+ Set<Object> objects = container.keySet();
+ Set<Object> result = new HashSet<Object>();
+ result.addAll(objects);
+ for (CacheEntry ce : ctx.getLookedUpEntries().values()) {
+ if (ce.isRemoved()) {
+ result.remove(ce.getKey());
+ } else {
+ if (ce.isCreated()) {
+ result.add(ce.getKey());
+ }
+ }
+ }
+ return result;
+ }
}
Modified: branches/4.2.x/core/src/main/java/org/infinispan/commands/read/KeySetCommand.java
===================================================================
--- branches/4.2.x/core/src/main/java/org/infinispan/commands/read/KeySetCommand.java 2010-10-18 11:34:56 UTC (rev 2517)
+++ branches/4.2.x/core/src/main/java/org/infinispan/commands/read/KeySetCommand.java 2010-10-18 14:33:45 UTC (rev 2518)
@@ -24,12 +24,9 @@
import org.infinispan.commands.VisitableCommand;
import org.infinispan.commands.Visitor;
import org.infinispan.container.DataContainer;
-import org.infinispan.container.entries.CacheEntry;
import org.infinispan.context.InvocationContext;
-import org.infinispan.context.impl.TxInvocationContext;
import org.infinispan.util.Immutables;
-import java.util.HashSet;
import java.util.Set;
/**
@@ -55,17 +52,7 @@
if (noTxModifications(ctx)) {
return Immutables.immutableSetWrap(objects);
}
- Set<Object> result = new HashSet<Object>();
- result.addAll(objects);
- for (CacheEntry ce : ctx.getLookedUpEntries().values()) {
- if (ce.isRemoved()) {
- result.remove(ce.getKey());
- } else {
- if (ce.isCreated()) {
- result.add(ce.getKey());
- }
- }
- }
+ Set<Object> result = ketKeySetWithinTransaction(ctx, container);
return Immutables.immutableSetWrap(result);
}
Modified: branches/4.2.x/core/src/main/java/org/infinispan/commands/read/SizeCommand.java
===================================================================
--- branches/4.2.x/core/src/main/java/org/infinispan/commands/read/SizeCommand.java 2010-10-18 11:34:56 UTC (rev 2517)
+++ branches/4.2.x/core/src/main/java/org/infinispan/commands/read/SizeCommand.java 2010-10-18 14:33:45 UTC (rev 2518)
@@ -30,6 +30,7 @@
* Command to calculate the size of the cache
*
* @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
+ * @author Mircea.Markus at jboss.com
* @since 4.0
*/
public class SizeCommand extends AbstractLocalCommand implements VisitableCommand {
@@ -44,7 +45,10 @@
}
public Integer perform(InvocationContext ctx) throws Throwable {
- return container.size();
+ if (noTxModifications(ctx)) {
+ return container.size();
+ }
+ return super.ketKeySetWithinTransaction(ctx, container).size();
}
@Override
More information about the infinispan-commits
mailing list