[infinispan-commits] Infinispan SVN: r559 - in trunk/core/src: main/java/org/infinispan/interceptors and 3 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Mon Jul 13 08:12:01 EDT 2009
Author: galder.zamarreno at jboss.com
Date: 2009-07-13 08:12:01 -0400 (Mon, 13 Jul 2009)
New Revision: 559
Modified:
trunk/core/src/main/java/org/infinispan/container/DataContainer.java
trunk/core/src/main/java/org/infinispan/container/FIFODataContainer.java
trunk/core/src/main/java/org/infinispan/container/SimpleDataContainer.java
trunk/core/src/main/java/org/infinispan/container/SpinLockBasedFIFODataContainer.java
trunk/core/src/main/java/org/infinispan/interceptors/MarshalledValueInterceptor.java
trunk/core/src/main/java/org/infinispan/util/Immutables.java
trunk/core/src/test/java/org/infinispan/container/SimpleDataContainerTest.java
trunk/core/src/test/java/org/infinispan/test/TestingUtil.java
Log:
[ISPN-130] (DataContainer.entrySet should return a Set of InternalCacheEntry) Fixed.
Modified: trunk/core/src/main/java/org/infinispan/container/DataContainer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/DataContainer.java 2009-07-13 11:29:07 UTC (rev 558)
+++ trunk/core/src/main/java/org/infinispan/container/DataContainer.java 2009-07-13 12:12:01 UTC (rev 559)
@@ -26,7 +26,6 @@
import org.infinispan.factories.scopes.Scopes;
import java.util.Collection;
-import java.util.Map;
import java.util.Set;
/**
@@ -100,7 +99,7 @@
*
* @return a set of immutable cache entries
*/
- Set<Map.Entry> entrySet();
+ Set<InternalCacheEntry> entrySet();
/**
* Purges entries that have passed their expiry time
Modified: trunk/core/src/main/java/org/infinispan/container/FIFODataContainer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/FIFODataContainer.java 2009-07-13 11:29:07 UTC (rev 558)
+++ trunk/core/src/main/java/org/infinispan/container/FIFODataContainer.java 2009-07-13 12:12:01 UTC (rev 559)
@@ -8,7 +8,6 @@
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
-import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.concurrent.locks.ReentrantLock;
@@ -627,8 +626,8 @@
}
}
- protected final class EntrySet extends AbstractSet<Map.Entry> {
- public Iterator<Map.Entry> iterator() {
+ protected final class EntrySet extends AbstractSet<InternalCacheEntry> {
+ public Iterator<InternalCacheEntry> iterator() {
return new ImmutableEntryIterator();
}
@@ -657,9 +656,9 @@
}
}
- protected final class ImmutableEntryIterator extends LinkedIterator implements Iterator<Map.Entry> {
- public Map.Entry next() {
- return Immutables.immutableEntry(current.e);
+ protected final class ImmutableEntryIterator extends LinkedIterator implements Iterator<InternalCacheEntry> {
+ public InternalCacheEntry next() {
+ return Immutables.immutableInternalCacheEntry(current.e);
}
}
@@ -800,7 +799,7 @@
return new Values();
}
- public Set<Map.Entry> entrySet() {
+ public Set<InternalCacheEntry> entrySet() {
return new EntrySet();
}
Modified: trunk/core/src/main/java/org/infinispan/container/SimpleDataContainer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/SimpleDataContainer.java 2009-07-13 11:29:07 UTC (rev 558)
+++ trunk/core/src/main/java/org/infinispan/container/SimpleDataContainer.java 2009-07-13 12:12:01 UTC (rev 559)
@@ -11,7 +11,6 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
-import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -136,7 +135,7 @@
return new Values();
}
- public Set<Map.Entry> entrySet() {
+ public Set<InternalCacheEntry> entrySet() {
return new EntrySet();
}
@@ -212,8 +211,8 @@
}
}
- private class EntrySet extends AbstractSet<Map.Entry> {
- public Iterator<Map.Entry> iterator() {
+ private class EntrySet extends AbstractSet<InternalCacheEntry> {
+ public Iterator<InternalCacheEntry> iterator() {
return new ImmutableEntryIterator(immortalEntries.values().iterator(), mortalEntries.values().iterator());
}
@@ -258,13 +257,13 @@
}
}
- private class ImmutableEntryIterator extends MortalInmortalIterator implements Iterator<Map.Entry> {
+ private class ImmutableEntryIterator extends MortalInmortalIterator implements Iterator<InternalCacheEntry> {
private ImmutableEntryIterator(Iterator<InternalCacheEntry> immortalIterator, Iterator<InternalCacheEntry> mortalIterator) {
super(immortalIterator, mortalIterator);
}
- public Map.Entry next() {
- return Immutables.immutableEntry(currentIterator.next());
+ public InternalCacheEntry next() {
+ return Immutables.immutableInternalCacheEntry(currentIterator.next());
}
}
Modified: trunk/core/src/main/java/org/infinispan/container/SpinLockBasedFIFODataContainer.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/SpinLockBasedFIFODataContainer.java 2009-07-13 11:29:07 UTC (rev 558)
+++ trunk/core/src/main/java/org/infinispan/container/SpinLockBasedFIFODataContainer.java 2009-07-13 12:12:01 UTC (rev 559)
@@ -10,7 +10,6 @@
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
-import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.ReentrantLock;
@@ -238,7 +237,7 @@
return keySet;
}
- public Set<Map.Entry> entrySet() {
+ public Set<InternalCacheEntry> entrySet() {
return new EntrySet();
}
@@ -559,8 +558,8 @@
}
}
- protected final class EntrySet extends AbstractSet<Map.Entry> {
- public Iterator<Map.Entry> iterator() {
+ protected final class EntrySet extends AbstractSet<InternalCacheEntry> {
+ public Iterator<InternalCacheEntry> iterator() {
return new ImmutableEntryIterator();
}
@@ -590,12 +589,12 @@
}
}
- protected final class ImmutableEntryIterator extends LinkedIterator implements Iterator<Map.Entry> {
- public Map.Entry next() {
+ protected final class ImmutableEntryIterator extends LinkedIterator implements Iterator<InternalCacheEntry> {
+ public InternalCacheEntry next() {
LinkedEntry le = nextAux.next;
if (le == dummyEntry) return null;
nextAux = le.next;
- return Immutables.immutableEntry(le.entry);
+ return Immutables.immutableInternalCacheEntry(le.entry);
}
}
Modified: trunk/core/src/main/java/org/infinispan/interceptors/MarshalledValueInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/MarshalledValueInterceptor.java 2009-07-13 11:29:07 UTC (rev 558)
+++ trunk/core/src/main/java/org/infinispan/interceptors/MarshalledValueInterceptor.java 2009-07-13 12:12:01 UTC (rev 559)
@@ -28,6 +28,7 @@
import org.infinispan.commands.write.PutKeyValueCommand;
import org.infinispan.commands.write.PutMapCommand;
import org.infinispan.commands.write.RemoveCommand;
+import org.infinispan.container.entries.InternalCacheEntry;
import org.infinispan.container.entries.InternalEntryFactory;
import org.infinispan.context.InvocationContext;
import org.infinispan.factories.annotations.Inject;
@@ -148,9 +149,9 @@
@Override
public Object visitEntrySetCommand(InvocationContext ctx, EntrySetCommand command) throws Throwable {
- Set<Map.Entry> entries = (Set<Map.Entry>) invokeNextInterceptor(ctx, command);
- Set<Map.Entry> copy = new HashSet<Map.Entry>(entries.size());
- for (Map.Entry entry : entries) {
+ Set<InternalCacheEntry> entries = (Set<InternalCacheEntry>) invokeNextInterceptor(ctx, command);
+ Set<InternalCacheEntry> copy = new HashSet<InternalCacheEntry>(entries.size());
+ for (InternalCacheEntry entry : entries) {
Object key = entry.getKey();
Object value = entry.getValue();
if (key instanceof MarshalledValue) {
@@ -159,7 +160,8 @@
if (value instanceof MarshalledValue) {
value = ((MarshalledValue) value).get();
}
- Map.Entry newEntry = Immutables.immutableEntry(InternalEntryFactory.create(key, value, -1));
+ InternalCacheEntry newEntry = Immutables.immutableInternalCacheEntry(InternalEntryFactory.create(key, value,
+ entry.getCreated(), entry.getLifespan(), entry.getLastUsed(), entry.getMaxIdle()));
copy.add(newEntry);
}
return Immutables.immutableSetWrap(copy);
Modified: trunk/core/src/main/java/org/infinispan/util/Immutables.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/util/Immutables.java 2009-07-13 11:29:07 UTC (rev 558)
+++ trunk/core/src/main/java/org/infinispan/util/Immutables.java 2009-07-13 12:12:01 UTC (rev 559)
@@ -33,6 +33,10 @@
import java.util.Map.Entry;
import java.util.Set;
+import org.infinispan.container.DataContainer;
+import org.infinispan.container.entries.InternalCacheEntry;
+import org.infinispan.container.entries.InternalCacheValue;
+
/**
* Factory for generating immutable type wrappers.
*
@@ -215,8 +219,17 @@
public static Map.Entry immutableEntry(Map.Entry entry) {
return new ImmutableEntry(entry);
}
+
+ /**
+ * Wraps a {@link InternalCacheEntry}} with an immutable {@link InternalCacheEntry}}. There is no copying involved.
+ *
+ * @param entry the internal cache entry to wrap.
+ * @return an immutable {@link InternalCacheEntry}} wrapper that delegates to the original entry.
+ */
+ public static InternalCacheEntry immutableInternalCacheEntry(InternalCacheEntry entry) {
+ return new ImmutableInternalCacheEntry(entry);
+ }
-
public interface Immutable {
}
@@ -342,7 +355,10 @@
}
}
- static class ImmutableEntry<K, V> implements Entry<K, V>, Immutable {
+ /**
+ * Immutable version of Map.Entry for traversing immutable collections.
+ */
+ private static class ImmutableEntry<K, V> implements Entry<K, V>, Immutable {
private K key;
private V value;
private int hash;
@@ -386,7 +402,177 @@
return getKey() + "=" + getValue();
}
}
+
+ /**
+ * Immutable version of InternalCacheEntry for traversing data containers.
+ */
+ private static class ImmutableInternalCacheEntry implements InternalCacheEntry, Immutable {
+ private final InternalCacheEntry entry;
+ private final int hash;
+ ImmutableInternalCacheEntry(InternalCacheEntry entry) {
+ this.entry = entry;
+ this.hash = entry.hashCode();
+ }
+
+ public Object getKey() {
+ return entry.getKey();
+ }
+
+ public Object getValue() {
+ return entry.getValue();
+ }
+
+ public Object setValue(Object value) {
+ throw new UnsupportedOperationException();
+ }
+
+ @SuppressWarnings("unchecked")
+ public boolean equals(Object o) {
+ if (!(o instanceof InternalCacheEntry))
+ return false;
+
+ InternalCacheEntry entry = (InternalCacheEntry) o;
+ return entry.equals(this.entry);
+ }
+
+ public int hashCode() {
+ return hash;
+ }
+
+ public String toString() {
+ return getKey() + "=" + getValue();
+ }
+
+ public boolean canExpire() {
+ return entry.canExpire();
+ }
+
+ public long getCreated() {
+ return entry.getCreated();
+ }
+
+ public long getExpiryTime() {
+ return entry.getExpiryTime();
+ }
+
+ public long getLastUsed() {
+ return entry.getLastUsed();
+ }
+
+ public boolean isExpired() {
+ return entry.isExpired();
+ }
+
+ public InternalCacheEntry setLifespan(long lifespan) {
+ throw new UnsupportedOperationException();
+ }
+
+ public InternalCacheEntry setMaxIdle(long maxIdle) {
+ throw new UnsupportedOperationException();
+ }
+
+ public InternalCacheValue toInternalCacheValue() {
+ return new ImmutableInternalCacheValue(this);
+ }
+
+ public void touch() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void commit(DataContainer container) {
+ throw new UnsupportedOperationException();
+ }
+
+ public long getLifespan() {
+ return entry.getLifespan();
+ }
+
+ public long getMaxIdle() {
+ return entry.getMaxIdle();
+ }
+
+ public boolean isChanged() {
+ return entry.isChanged();
+ }
+
+ public boolean isCreated() {
+ return entry.isCreated();
+ }
+
+ public boolean isNull() {
+ return entry.isNull();
+ }
+
+ public boolean isRemoved() {
+ return entry.isRemoved();
+ }
+
+ public boolean isValid() {
+ return entry.isValid();
+ }
+
+ public void rollback() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setCreated(boolean created) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setRemoved(boolean removed) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setValid(boolean valid) {
+ throw new UnsupportedOperationException();
+ }
+
+ public InternalCacheEntry clone() {
+ return new ImmutableInternalCacheEntry(entry.clone());
+ }
+ }
+
+ private static class ImmutableInternalCacheValue implements InternalCacheValue, Immutable {
+ private final ImmutableInternalCacheEntry entry;
+
+ ImmutableInternalCacheValue(ImmutableInternalCacheEntry entry) {
+ this.entry = entry;
+ }
+
+ public boolean canExpire() {
+ return entry.canExpire();
+ }
+
+ public long getCreated() {
+ return entry.getCreated();
+ }
+
+ public long getLastUsed() {
+ return entry.getLastUsed();
+ }
+
+ public long getLifespan() {
+ return entry.getLifespan();
+ }
+
+ public long getMaxIdle() {
+ return entry.getMaxIdle();
+ }
+
+ public Object getValue() {
+ return entry.getValue();
+ }
+
+ public boolean isExpired() {
+ return entry.isExpired();
+ }
+
+ public InternalCacheEntry toInternalCacheEntry(Object key) {
+ return entry;
+ }
+ }
+
private static class ImmutableEntrySetWrapper<K, V> extends ImmutableSetWrapper<Entry<K, V>> {
private static final long serialVersionUID = 6378667653889667692L;
Modified: trunk/core/src/test/java/org/infinispan/container/SimpleDataContainerTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/container/SimpleDataContainerTest.java 2009-07-13 11:29:07 UTC (rev 558)
+++ trunk/core/src/test/java/org/infinispan/container/SimpleDataContainerTest.java 2009-07-13 12:12:01 UTC (rev 559)
@@ -199,10 +199,10 @@
dc.put("k4", "v4", 6000000, 6000000);
Set expected = new HashSet();
- expected.add(Immutables.immutableEntry(dc.get("k1")));
- expected.add(Immutables.immutableEntry(dc.get("k2")));
- expected.add(Immutables.immutableEntry(dc.get("k3")));
- expected.add(Immutables.immutableEntry(dc.get("k4")));
+ expected.add(Immutables.immutableInternalCacheEntry(dc.get("k1")));
+ expected.add(Immutables.immutableInternalCacheEntry(dc.get("k2")));
+ expected.add(Immutables.immutableInternalCacheEntry(dc.get("k3")));
+ expected.add(Immutables.immutableInternalCacheEntry(dc.get("k4")));
for (Map.Entry o : dc.entrySet()) assert expected.remove(o);
Modified: trunk/core/src/test/java/org/infinispan/test/TestingUtil.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/test/TestingUtil.java 2009-07-13 11:29:07 UTC (rev 558)
+++ trunk/core/src/test/java/org/infinispan/test/TestingUtil.java 2009-07-13 12:12:01 UTC (rev 559)
@@ -632,7 +632,7 @@
StringBuilder builder = new StringBuilder(cache.getName() + "[");
while (it.hasNext()) {
CacheEntry ce = (CacheEntry) it.next();
- builder.append(ce.getKey() + " = " + ce.getValue() + ";");
+ builder.append(ce.getKey() + "=" + ce.getValue() + ",l=" + ce.getLifespan() + "; ");
}
builder.append("]");
return builder.toString();
More information about the infinispan-commits
mailing list