[infinispan-commits] Infinispan SVN: r421 - in trunk/core/src: test/java/org/infinispan/expiry and 2 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed Jun 10 08:22:33 EDT 2009


Author: mircea.markus
Date: 2009-06-10 08:22:33 -0400 (Wed, 10 Jun 2009)
New Revision: 421

Modified:
   trunk/core/src/main/java/org/infinispan/container/entries/AbstractInternalCacheEntry.java
   trunk/core/src/main/java/org/infinispan/container/entries/ImmortalCacheEntry.java
   trunk/core/src/main/java/org/infinispan/container/entries/ImmortalCacheValue.java
   trunk/core/src/main/java/org/infinispan/container/entries/MortalCacheEntry.java
   trunk/core/src/main/java/org/infinispan/container/entries/MortalCacheValue.java
   trunk/core/src/main/java/org/infinispan/container/entries/TransientCacheEntry.java
   trunk/core/src/main/java/org/infinispan/container/entries/TransientCacheValue.java
   trunk/core/src/main/java/org/infinispan/container/entries/TransientMortalCacheEntry.java
   trunk/core/src/main/java/org/infinispan/container/entries/TransientMortalCacheValue.java
   trunk/core/src/test/java/org/infinispan/expiry/ExpiryTest.java
   trunk/core/src/test/java/org/infinispan/loaders/CacheLoaderFunctionalTest.java
   trunk/core/src/test/java/org/infinispan/loaders/decorators/ChainingCacheLoaderTest.java
Log:
[ISPN-86] (InternalCacheValue/InternalCacheEntry optimization) implemented

Modified: trunk/core/src/main/java/org/infinispan/container/entries/AbstractInternalCacheEntry.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/AbstractInternalCacheEntry.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/AbstractInternalCacheEntry.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -11,22 +11,14 @@
 public abstract class AbstractInternalCacheEntry implements InternalCacheEntry {
 
    Object key;
-   Object value;
 
    AbstractInternalCacheEntry() {
    }
 
-   AbstractInternalCacheEntry(Object key, Object value) {
+   AbstractInternalCacheEntry(Object key) {
       this.key = key;
-      this.value = value;
    }
 
-   public final Object setValue(Object value) {
-      Object old = this.value;
-      this.value = value;
-      return old;
-   }
-
    public final void commit(DataContainer container) {
       // no-op
    }
@@ -71,10 +63,6 @@
       return key;
    }
 
-   public final Object getValue() {
-      return value;
-   }
-
    @Override
    public String toString() {
       return getClass().getSimpleName() + "{" +

Modified: trunk/core/src/main/java/org/infinispan/container/entries/ImmortalCacheEntry.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/ImmortalCacheEntry.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/ImmortalCacheEntry.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -8,8 +8,11 @@
  */
 public class ImmortalCacheEntry extends AbstractInternalCacheEntry {
 
+   private ImmortalCacheValue cacheValue;
+
    ImmortalCacheEntry(Object key, Object value) {
-      super(key, value);
+      super(key);
+      this.cacheValue = new ImmortalCacheValue(value);
    }
 
    public final boolean isExpired() {
@@ -22,11 +25,7 @@
 
    public InternalCacheEntry setMaxIdle(long maxIdle) {
       if (maxIdle > -1) {
-         TransientCacheEntry tce = new TransientCacheEntry();
-         tce.setMaxIdle(maxIdle);
-         tce.key = key;
-         tce.value = value;
-         return tce;
+         return new TransientCacheEntry(key, cacheValue.value, maxIdle);
       } else {
          return this;
       }
@@ -34,11 +33,7 @@
 
    public InternalCacheEntry setLifespan(long lifespan) {
       if (lifespan > -1) {
-         MortalCacheEntry mce = new MortalCacheEntry();
-         mce.setLifespan(lifespan);
-         mce.key = key;
-         mce.value = value;
-         return mce;
+         return new MortalCacheEntry(key, cacheValue.value, lifespan);
       } else {
          return this;
       }
@@ -69,9 +64,17 @@
    }
 
    public InternalCacheValue toInternalCacheValue() {
-      return new ImmortalCacheValue(value);
+      return cacheValue;
    }
 
+   public Object getValue() {
+      return cacheValue.value;
+   }
+
+   public Object setValue(Object value) {
+      return this.cacheValue.setValue(value);
+   }
+
    @Override
    public boolean equals(Object o) {
       if (this == o) return true;
@@ -80,7 +83,7 @@
       ImmortalCacheEntry that = (ImmortalCacheEntry) o;
 
       if (key != null ? !key.equals(that.key) : that.key != null) return false;
-      if (value != null ? !value.equals(that.value) : that.value != null) return false;
+      if (cacheValue != null ? !cacheValue.equals(that.cacheValue) : that.cacheValue != null) return false;
 
       return true;
    }
@@ -88,7 +91,7 @@
    @Override
    public int hashCode() {
       int result = key != null ? key.hashCode() : 0;
-      result = 31 * result + (value != null ? value.hashCode() : 0);
+      result = 31 * result + (cacheValue != null ? cacheValue.hashCode() : 0);
       return result;
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/container/entries/ImmortalCacheValue.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/ImmortalCacheValue.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/ImmortalCacheValue.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -13,18 +13,20 @@
       this.value = value;
    }
 
-   public void setValue(Object value) {
+   public InternalCacheEntry toInternalCacheEntry(Object key) {
+      return new ImmortalCacheEntry(key, value);
+   }
+
+   public final Object setValue(Object value) {
+      Object old = this.value;
       this.value = value;
+      return old;
    }
 
    public Object getValue() {
       return value;
    }
 
-   public InternalCacheEntry toInternalCacheEntry(Object key) {
-      return new ImmortalCacheEntry(key, value);
-   }
-
    public boolean isExpired() {
       return false;
    }
@@ -48,4 +50,28 @@
    public long getMaxIdle() {
       return -1;
    }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (!(o instanceof ImmortalCacheValue)) return false;
+
+      ImmortalCacheValue that = (ImmortalCacheValue) o;
+
+      if (value != null ? !value.equals(that.value) : that.value != null) return false;
+
+      return true;
+   }
+
+   @Override
+   public int hashCode() {
+      return value != null ? value.hashCode() : 0;
+   }
+
+   @Override
+   public String toString() {
+      return "ImmortalCacheValue{" +
+            "value=" + value +
+            '}';
+   }
 }

Modified: trunk/core/src/main/java/org/infinispan/container/entries/MortalCacheEntry.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/MortalCacheEntry.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/MortalCacheEntry.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -7,27 +7,28 @@
  * @since 4.0
  */
 public class MortalCacheEntry extends AbstractInternalCacheEntry {
-   long created;
-   long lifespan = -1;
 
-   MortalCacheEntry() {
-      created = System.currentTimeMillis();
+   private MortalCacheValue cacheValue;
+
+   public Object getValue() {
+      return cacheValue.value;
    }
 
+   public Object setValue(Object value) {
+      return cacheValue.setValue(value);
+   }
+
    MortalCacheEntry(Object key, Object value, long lifespan) {
-      super(key, value);
-      created = System.currentTimeMillis();
-      this.lifespan = lifespan;
+      this(key, value, lifespan, System.currentTimeMillis());
    }
 
    MortalCacheEntry(Object key, Object value, long lifespan, long created) {
-      super(key, value);
-      this.created = created;
-      this.lifespan = lifespan;
+      super(key);
+      cacheValue = new MortalCacheValue(value, created, lifespan);
    }
 
    public final boolean isExpired() {
-      return ExpiryHelper.isExpiredMortal(lifespan, created);
+      return ExpiryHelper.isExpiredMortal(cacheValue.lifespan, cacheValue.created);
    }
 
    public final boolean canExpire() {
@@ -36,7 +37,7 @@
 
    public InternalCacheEntry setMaxIdle(long maxIdle) {
       if (maxIdle > -1) {
-         TransientMortalCacheEntry tmce = new TransientMortalCacheEntry(key, value);
+         TransientMortalCacheEntry tmce = new TransientMortalCacheEntry(key, cacheValue.value );
          tmce.setMaxIdle(maxIdle);
          return tmce;
       } else {
@@ -46,15 +47,15 @@
 
    public InternalCacheEntry setLifespan(long lifespan) {
       if (lifespan < 0) {
-         return new ImmortalCacheEntry(key, value);
+         return new ImmortalCacheEntry(key, cacheValue.value);
       } else {
-         this.lifespan = lifespan;
+         cacheValue.lifespan = lifespan;
          return this;
       }
    }
 
    public final long getCreated() {
-      return created;
+      return cacheValue.created;
    }
 
    public final long getLastUsed() {
@@ -62,7 +63,7 @@
    }
 
    public final long getLifespan() {
-      return lifespan;
+      return cacheValue.lifespan;
    }
 
    public final long getMaxIdle() {
@@ -70,7 +71,7 @@
    }
 
    public final long getExpiryTime() {
-      return lifespan > -1 ? created + lifespan : -1;
+      return cacheValue.lifespan > -1 ? cacheValue.created + cacheValue.lifespan : -1;
    }
 
    public final void touch() {
@@ -78,7 +79,7 @@
    }
 
    public InternalCacheValue toInternalCacheValue() {
-      return new MortalCacheValue(value, created, lifespan);
+      return cacheValue;
    }
 
    @Override
@@ -89,19 +90,17 @@
       MortalCacheEntry that = (MortalCacheEntry) o;
 
       if (key != null ? !key.equals(that.key) : that.key != null) return false;
-      if (value != null ? !value.equals(that.value) : that.value != null) return false;
-      if (created != that.created) return false;
-      if (lifespan != that.lifespan) return false;
-
-      return true;
+      if (cacheValue.value != null ? !cacheValue.value.equals(that.cacheValue.value) : that.cacheValue.value != null) return false;
+      if (cacheValue.created != that.cacheValue.created) return false;
+      return cacheValue.lifespan == that.cacheValue.lifespan;
    }
 
    @Override
    public int hashCode() {
       int result = key != null ? key.hashCode() : 0;
-      result = 31 * result + (value != null ? value.hashCode() : 0);
-      result = 31 * result + (int) (created ^ (created >>> 32));
-      result = 31 * result + (int) (lifespan ^ (lifespan >>> 32));
+      result = 31 * result + (cacheValue.value != null ? cacheValue.value.hashCode() : 0);
+      result = 31 * result + (int) (cacheValue.created ^ (cacheValue.created >>> 32));
+      result = 31 * result + (int) (cacheValue.lifespan ^ (cacheValue.lifespan >>> 32));
       return result;
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/container/entries/MortalCacheValue.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/MortalCacheValue.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/MortalCacheValue.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -7,6 +7,7 @@
  * @since 4.0
  */
 public class MortalCacheValue extends ImmortalCacheValue {
+
    long created;
    long lifespan = -1;
 
@@ -17,20 +18,20 @@
    }
 
    @Override
-   public long getCreated() {
+   public final long getCreated() {
       return created;
    }
 
-   public void setCreated(long created) {
+   public final void setCreated(long created) {
       this.created = created;
    }
 
    @Override
-   public long getLifespan() {
+   public final long getLifespan() {
       return lifespan;
    }
 
-   public void setLifespan(long lifespan) {
+   public final void setLifespan(long lifespan) {
       this.lifespan = lifespan;
    }
 
@@ -40,7 +41,7 @@
    }
 
    @Override
-   public boolean canExpire() {
+   public final boolean canExpire() {
       return true;
    }
 
@@ -48,4 +49,34 @@
    public InternalCacheEntry toInternalCacheEntry(Object key) {
       return new MortalCacheEntry(key, value, lifespan, created);
    }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (!(o instanceof MortalCacheValue)) return false;
+      if (!super.equals(o)) return false;
+
+      MortalCacheValue that = (MortalCacheValue) o;
+
+      if (created != that.created) return false;
+      if (lifespan != that.lifespan) return false;
+
+      return true;
+   }
+
+   @Override
+   public int hashCode() {
+      int result = super.hashCode();
+      result = 31 * result + (int) (created ^ (created >>> 32));
+      result = 31 * result + (int) (lifespan ^ (lifespan >>> 32));
+      return result;
+   }
+
+   @Override
+   public String toString() {
+      return "MortalCacheValue{" +
+            "created=" + created +
+            ", lifespan=" + lifespan +
+            "} " + super.toString();
+   }
 }

Modified: trunk/core/src/main/java/org/infinispan/container/entries/TransientCacheEntry.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/TransientCacheEntry.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/TransientCacheEntry.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -1,34 +1,34 @@
 package org.infinispan.container.entries;
 
 /**
- * A cache entry that is transient, i.e., it can be considered expired afer a period of not being used
+ * A cache entry that is transient, i.e., it can be considered expired afer a period of not being used.
  *
  * @author Manik Surtani
  * @since 4.0
  */
 public class TransientCacheEntry extends AbstractInternalCacheEntry {
 
-   long maxIdle = -1;
-   long lastUsed;
+   private TransientCacheValue cacheValue; 
 
-   TransientCacheEntry() {
-      touch();
-   }
-
    TransientCacheEntry(Object key, Object value, long maxIdle) {
-      super(key, value);
-      this.maxIdle = maxIdle;
-      touch();
+      this(key, value, maxIdle, System.currentTimeMillis());
    }
 
    TransientCacheEntry(Object key, Object value, long maxIdle, long lastUsed) {
-      super(key, value);
-      this.maxIdle = maxIdle;
-      this.lastUsed = lastUsed;
+      super(key);
+      cacheValue = new TransientCacheValue(value, maxIdle, lastUsed);
    }
 
+   public Object getValue() {
+      return cacheValue.value;
+   }
+
+   public Object setValue(Object value) {
+      return cacheValue.setValue(value);
+   }
+
    public final void touch() {
-      lastUsed = System.currentTimeMillis();
+      cacheValue.lastUsed = System.currentTimeMillis();
    }
 
    public final boolean canExpire() {
@@ -36,21 +36,21 @@
    }
 
    public boolean isExpired() {
-      return ExpiryHelper.isExpiredTransient(maxIdle, lastUsed);
+      return cacheValue.isExpired();
    }
 
    public InternalCacheEntry setMaxIdle(long maxIdle) {
       if (maxIdle < 0) {
-         return new ImmortalCacheEntry(key, value);
+         return new ImmortalCacheEntry(key, cacheValue.value);
       } else {
-         this.maxIdle = maxIdle;
+         cacheValue.maxIdle = maxIdle;
          return this;
       }
    }
 
    public InternalCacheEntry setLifespan(long lifespan) {
       if (lifespan > -1) {
-         TransientMortalCacheEntry tmce = new TransientMortalCacheEntry(key, value);
+         TransientMortalCacheEntry tmce = new TransientMortalCacheEntry(key, cacheValue.value);
          tmce.setLifespan(lifespan);
          return tmce;
       } else {
@@ -63,7 +63,7 @@
    }
 
    public final long getLastUsed() {
-      return lastUsed;
+      return cacheValue.lastUsed;
    }
 
    public long getLifespan() {
@@ -75,11 +75,11 @@
    }
 
    public final long getMaxIdle() {
-      return maxIdle;
+      return cacheValue.maxIdle;
    }
 
    public InternalCacheValue toInternalCacheValue() {
-      return new TransientCacheValue(value, maxIdle, lastUsed);
+      return cacheValue;
    }
 
    @Override
@@ -90,9 +90,9 @@
       TransientCacheEntry that = (TransientCacheEntry) o;
 
       if (key != null ? !key.equals(that.key) : that.key != null) return false;
-      if (value != null ? !value.equals(that.value) : that.value != null) return false;
-      if (lastUsed != that.lastUsed) return false;
-      if (maxIdle != that.maxIdle) return false;
+      if (cacheValue.value != null ? !cacheValue.value.equals(that.cacheValue.value) : that.cacheValue.value != null) return false;
+      if (cacheValue.lastUsed != that.cacheValue.lastUsed) return false;
+      if (cacheValue.maxIdle != that.cacheValue.maxIdle) return false;
 
       return true;
    }
@@ -100,9 +100,9 @@
    @Override
    public int hashCode() {
       int result = key != null ? key.hashCode() : 0;
-      result = 31 * result + (value != null ? value.hashCode() : 0);
-      result = 31 * result + (int) (lastUsed ^ (lastUsed >>> 32));
-      result = 31 * result + (int) (maxIdle ^ (maxIdle >>> 32));
+      result = 31 * result + (cacheValue.value != null ? cacheValue.value.hashCode() : 0);
+      result = 31 * result + (int) (cacheValue.lastUsed ^ (cacheValue.lastUsed >>> 32));
+      result = 31 * result + (int) (cacheValue.maxIdle ^ (cacheValue.maxIdle >>> 32));
       return result;
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/container/entries/TransientCacheValue.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/TransientCacheValue.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/TransientCacheValue.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -35,7 +35,7 @@
    }
 
    @Override
-   public boolean isExpired() {
+   public final boolean isExpired() {
       return ExpiryHelper.isExpiredTransient(maxIdle, lastUsed);
    }
 
@@ -48,4 +48,34 @@
    public InternalCacheEntry toInternalCacheEntry(Object key) {
       return new TransientCacheEntry(key, value, maxIdle, lastUsed);
    }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (!(o instanceof TransientCacheValue)) return false;
+      if (!super.equals(o)) return false;
+
+      TransientCacheValue that = (TransientCacheValue) o;
+
+      if (lastUsed != that.lastUsed) return false;
+      if (maxIdle != that.maxIdle) return false;
+
+      return true;
+   }
+
+   @Override
+   public int hashCode() {
+      int result = super.hashCode();
+      result = 31 * result + (int) (maxIdle ^ (maxIdle >>> 32));
+      result = 31 * result + (int) (lastUsed ^ (lastUsed >>> 32));
+      return result;
+   }
+
+   @Override
+   public String toString() {
+      return "TransientCacheValue{" +
+            "maxIdle=" + maxIdle +
+            ", lastUsed=" + lastUsed +
+            "} " + super.toString();
+   }
 }

Modified: trunk/core/src/main/java/org/infinispan/container/entries/TransientMortalCacheEntry.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/TransientMortalCacheEntry.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/TransientMortalCacheEntry.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -6,97 +6,98 @@
  * @author Manik Surtani
  * @since 4.0
  */
-public class TransientMortalCacheEntry extends TransientCacheEntry {
-   private long created;
-   private long lifespan = -1;
+public class TransientMortalCacheEntry extends AbstractInternalCacheEntry {
 
-   TransientMortalCacheEntry() {
-      super();
-      created = System.currentTimeMillis();
-   }
+   private TransientMortalCacheValue cacheValue;
 
    TransientMortalCacheEntry(Object key, Object value, long maxIdle, long lifespan) {
-      super(key, value, maxIdle);
-      created = System.currentTimeMillis();
-      this.lifespan = lifespan;
+      super(key);
+      cacheValue = new TransientMortalCacheValue(value, System.currentTimeMillis(), lifespan, maxIdle);
+      touch();
    }
 
    TransientMortalCacheEntry(Object key, Object value) {
-      super(key, value, -1);
-      created = System.currentTimeMillis();
+      super(key);
+      cacheValue = new TransientMortalCacheValue(value, System.currentTimeMillis());
+      touch();
    }
 
    public TransientMortalCacheEntry(Object key, Object value, long maxIdle, long lifespan, long lastUsed, long created) {
-      super(key, value, maxIdle, lastUsed);
-      this.created = created;
-      this.lifespan = lifespan;
+      super(key);
+      this.cacheValue = new TransientMortalCacheValue(value, created, lifespan, maxIdle, lastUsed);
    }
 
-   @Override
    public InternalCacheEntry setLifespan(long lifespan) {
       if (lifespan < 0) {
-         TransientCacheEntry tce = new TransientCacheEntry();
-         tce.key = key;
-         tce.value = value;
-         tce.lastUsed = lastUsed;
-         tce.maxIdle = maxIdle;
-         return tce;
+         return new TransientCacheEntry(key, cacheValue.value, cacheValue.lastUsed, cacheValue.maxIdle);
       } else {
-         this.lifespan = lifespan;
+         this.cacheValue.lifespan = lifespan;
          return this;
       }
    }
 
-   @Override
    public InternalCacheEntry setMaxIdle(long maxIdle) {
       if (maxIdle < 0) {
-         MortalCacheEntry mce = new MortalCacheEntry();
-         mce.key = key;
-         mce.value = value;
-         mce.created = created;
-         mce.lifespan = lifespan;
-         return mce;
+         return new MortalCacheEntry(key, cacheValue.value, cacheValue.lifespan, cacheValue.created);
       } else {
-         this.maxIdle = maxIdle;
+         this.cacheValue.maxIdle = maxIdle;
          return this;
       }
    }
 
-   @Override
+   public Object getValue() {
+      return cacheValue.value;
+   }
+
    public long getLifespan() {
-      return lifespan;
+      return cacheValue.lifespan;
    }
 
-   @Override
+   public final boolean canExpire() {
+      return true;
+   }
+
    public long getCreated() {
-      return created;
+      return cacheValue.created;
    }
 
-   @Override
    public boolean isExpired() {
-      return ExpiryHelper.isExpiredTransientMortal(maxIdle, lastUsed, lifespan, created);
+      return cacheValue.isExpired();
    }
 
-   @Override
    public final long getExpiryTime() {
-      return lifespan > -1 ? created + lifespan : -1;
+      return cacheValue.lifespan > -1 ? cacheValue.created + cacheValue.lifespan : -1;
    }
 
-   @Override
    public InternalCacheValue toInternalCacheValue() {
-      return new TransientMortalCacheValue(value, created, lifespan, maxIdle, lastUsed);
+      return cacheValue;
    }
 
+   public long getLastUsed() {
+      return cacheValue.lastUsed;
+   }
+
+   public final void touch() {
+      cacheValue.lastUsed = System.currentTimeMillis();
+   }
+
+   public long getMaxIdle() {
+      return cacheValue.maxIdle;
+   }
+
+   public Object setValue(Object value) {
+      return cacheValue.maxIdle;
+   }
+
    @Override
    public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;
-      if (!super.equals(o)) return false;
 
       TransientMortalCacheEntry that = (TransientMortalCacheEntry) o;
 
-      if (created != that.created) return false;
-      if (lifespan != that.lifespan) return false;
+      if (cacheValue.created != that.cacheValue.created) return false;
+      if (cacheValue.lifespan != that.cacheValue.lifespan) return false;
 
       return true;
    }
@@ -104,8 +105,8 @@
    @Override
    public int hashCode() {
       int result = super.hashCode();
-      result = 31 * result + (int) (created ^ (created >>> 32));
-      result = 31 * result + (int) (lifespan ^ (lifespan >>> 32));
+      result = 31 * result + (int) (cacheValue.created ^ (cacheValue.created >>> 32));
+      result = 31 * result + (int) (cacheValue.lifespan ^ (cacheValue.lifespan >>> 32));
       return result;
    }
 }

Modified: trunk/core/src/main/java/org/infinispan/container/entries/TransientMortalCacheValue.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/container/entries/TransientMortalCacheValue.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/main/java/org/infinispan/container/entries/TransientMortalCacheValue.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -7,15 +7,23 @@
  * @since 4.0
  */
 public class TransientMortalCacheValue extends MortalCacheValue {
-   private long maxIdle = -1;
-   private long lastUsed;
+   long maxIdle = -1;
+   long lastUsed;
 
    TransientMortalCacheValue(Object value, long created, long lifespan, long maxIdle, long lastUsed) {
+      this(value, created, lifespan, maxIdle);
+      this.lastUsed = lastUsed;
+   }
+
+   public TransientMortalCacheValue(Object value, long created, long lifespan, long maxIdle) {
       super(value, created, lifespan);
       this.maxIdle = maxIdle;
-      this.lastUsed = lastUsed;
    }
 
+   public TransientMortalCacheValue(Object value, long created) {
+      super(value, created, -1);
+   }
+
    @Override
    public long getMaxIdle() {
       return maxIdle;
@@ -34,7 +42,6 @@
       this.lastUsed = lastUsed;
    }
 
-   @Override
    public boolean isExpired() {
       return ExpiryHelper.isExpiredTransientMortal(maxIdle, lastUsed, lifespan, created);
    }
@@ -43,4 +50,34 @@
    public InternalCacheEntry toInternalCacheEntry(Object key) {
       return new TransientMortalCacheEntry(key, value, maxIdle, lifespan, lastUsed, created);
    }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (!(o instanceof TransientMortalCacheValue)) return false;
+      if (!super.equals(o)) return false;
+
+      TransientMortalCacheValue that = (TransientMortalCacheValue) o;
+
+      if (lastUsed != that.lastUsed) return false;
+      if (maxIdle != that.maxIdle) return false;
+
+      return true;
+   }
+
+   @Override
+   public int hashCode() {
+      int result = super.hashCode();
+      result = 31 * result + (int) (maxIdle ^ (maxIdle >>> 32));
+      result = 31 * result + (int) (lastUsed ^ (lastUsed >>> 32));
+      return result;
+   }
+
+   @Override
+   public String toString() {
+      return "TransientMortalCacheValue{" +
+            "maxIdle=" + maxIdle +
+            ", lastUsed=" + lastUsed +
+            "} " + super.toString();
+   }
 }

Modified: trunk/core/src/test/java/org/infinispan/expiry/ExpiryTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/expiry/ExpiryTest.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/test/java/org/infinispan/expiry/ExpiryTest.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -9,6 +9,7 @@
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -187,7 +188,7 @@
       cache.put("k", "v-old");
       assert cache.get("k").equals("v-old");
       assert cache.replace("k", "v", -1, MILLISECONDS, idleTime, MILLISECONDS) != null;
-      assert cache.get("k").equals("v");
+      assertEquals(cache.get("k"), "v");
 
       Thread.sleep(idleTime + 100);
       assert cache.get("k") == null;

Modified: trunk/core/src/test/java/org/infinispan/loaders/CacheLoaderFunctionalTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/loaders/CacheLoaderFunctionalTest.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/test/java/org/infinispan/loaders/CacheLoaderFunctionalTest.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -178,6 +178,7 @@
       cache.replace("k1", "v1-REPLACED");
       assertNoLocks(cache);
       cache.replace("k2", "v2-REPLACED", lifespan, MILLISECONDS);
+      assertInCacheAndStore("k2", "v2-REPLACED", lifespan);
       assertNoLocks(cache);
       cache.replace("k3", "v3", "v3-REPLACED");
       assertNoLocks(cache);

Modified: trunk/core/src/test/java/org/infinispan/loaders/decorators/ChainingCacheLoaderTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/loaders/decorators/ChainingCacheLoaderTest.java	2009-06-09 21:29:03 UTC (rev 420)
+++ trunk/core/src/test/java/org/infinispan/loaders/decorators/ChainingCacheLoaderTest.java	2009-06-10 12:22:33 UTC (rev 421)
@@ -17,6 +17,7 @@
 import org.infinispan.transaction.xa.GlobalTransaction;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -127,12 +128,17 @@
 
       // k1 is on store1
       store1.store(InternalEntryFactory.create("k1", "v1"));
+
+      assertEquals(cs.loadAll().size(), 1);
       // k2 is on store2
       store2.store(InternalEntryFactory.create("k2", "v2"));
+      assertEquals(cs.loadAll().size(), 2);
 
       // k3 is on both
       store1.store(InternalEntryFactory.create("k3", "v3"));
+      assertEquals(cs.loadAll().size(), 3);
       store2.store(InternalEntryFactory.create("k3", "v3"));
+      assertEquals(cs.loadAll().size(), 3);
 
       // k4 is on neither
 
@@ -143,7 +149,7 @@
 
       Set<InternalCacheEntry> all = cs.loadAll();
 
-      assert all.size() == 3;
+      assertEquals(all.size(),3);
       Set<Object> expectedKeys = new HashSet<Object>();
       expectedKeys.add("k1");
       expectedKeys.add("k2");




More information about the infinispan-commits mailing list