geode-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dschnei...@apache.org
Subject [03/53] [partial] incubator-geode git commit: Initial import of geode-1.0.0.0-SNAPSHOT-2. All the new sub-project directories (like jvsd) were not imported. A diff was done to confirm that this commit is exactly the same as the open directory the snapsho
Date Mon, 06 Jul 2015 18:15:10 GMT
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapIntKey.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapIntKey.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapIntKey.java
new file mode 100644
index 0000000..0790b3d
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapIntKey.java
@@ -0,0 +1,300 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.internal.cache;
+// DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+import com.gemstone.gemfire.cache.EntryEvent;
+import com.gemstone.gemfire.internal.InternalStatisticsDisabledException;
+import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+import com.gemstone.gemfire.internal.cache.versions.VersionSource;
+import com.gemstone.gemfire.internal.cache.versions.VersionStamp;
+import com.gemstone.gemfire.internal.cache.versions.VersionTag;
+import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper;
+import com.gemstone.gemfire.internal.offheap.annotations.Released;
+import com.gemstone.gemfire.internal.offheap.annotations.Retained;
+import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
+import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap.HashEntry;
+// macros whose definition changes this class:
+// disk: DISK
+// lru: LRU
+// stats: STATS
+// versioned: VERSIONED
+// offheap: OFFHEAP
+// One of the following key macros must be defined:
+// key object: KEY_OBJECT
+// key int: KEY_INT
+// key long: KEY_LONG
+// key uuid: KEY_UUID
+// key string1: KEY_STRING1
+// key string2: KEY_STRING2
+/**
+ * Do not modify this class. It was generated.
+ * Instead modify LeafRegionEntry.cpp and then run
+ * bin/generateRegionEntryClasses.sh from the directory
+ * that contains your build.xml.
+ */
+public class VersionedStatsRegionEntryOffHeapIntKey extends VersionedStatsRegionEntryOffHeap {
+  public VersionedStatsRegionEntryOffHeapIntKey (RegionEntryContext context, int key,
+      @Retained
+      Object value
+      ) {
+    super(context,
+          value
+        );
+    // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+    this.key = key;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // common code
+  protected int hash;
+  private HashEntry<Object, Object> next;
+  @SuppressWarnings("unused")
+  private volatile long lastModified;
+  private static final AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapIntKey> lastModifiedUpdater
+    = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapIntKey.class, "lastModified");
+  /**
+   * All access done using ohAddrUpdater so it is used even though the compiler can not tell it is.
+   */
+  @SuppressWarnings("unused")
+  @Retained @Released private volatile long ohAddress;
+  /**
+   * I needed to add this because I wanted clear to call setValue which normally can only be called while the re is synced.
+   * But if I sync in that code it causes a lock ordering deadlock with the disk regions because they also get a rw lock in clear.
+   * Some hardware platforms do not support CAS on a long. If gemfire is run on one of those the AtomicLongFieldUpdater does a sync
+   * on the re and we will once again be deadlocked.
+   * I don't know if we support any of the hardware platforms that do not have a 64bit CAS. If we do then we can expect deadlocks
+   * on disk regions.
+   */
+  private final static AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapIntKey> ohAddrUpdater = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapIntKey.class, "ohAddress");
+  @Override
+  public Token getValueAsToken() {
+    return OffHeapRegionEntryHelper.getValueAsToken(this);
+  }
+  @Override
+  protected Object getValueField() {
+    return OffHeapRegionEntryHelper._getValue(this);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  @Unretained
+  protected void setValueField(@Unretained Object v) {
+    OffHeapRegionEntryHelper.setValue(this, v);
+  }
+  @Override
+  @Retained
+  public Object _getValueRetain(RegionEntryContext context, boolean decompress) {
+    return OffHeapRegionEntryHelper._getValueRetain(this, decompress, context);
+  }
+  @Override
+  public long getAddress() {
+    return ohAddrUpdater.get(this);
+  }
+  @Override
+  public boolean setAddress(long expectedAddr, long newAddr) {
+    return ohAddrUpdater.compareAndSet(this, expectedAddr, newAddr);
+  }
+  @Override
+  @Released
+  public void release() {
+    OffHeapRegionEntryHelper.releaseEntry(this);
+  }
+  @Override
+  public void returnToPool() {
+    // Deadcoded for now; never was working
+//    if (this instanceof VMThinRegionEntryLongKey) {
+//      factory.returnToPool((VMThinRegionEntryLongKey)this);
+//    }
+  }
+  protected long getlastModifiedField() {
+    return lastModifiedUpdater.get(this);
+  }
+  protected boolean compareAndSetLastModifiedField(long expectedValue, long newValue) {
+    return lastModifiedUpdater.compareAndSet(this, expectedValue, newValue);
+  }
+  /**
+   * @see HashEntry#getEntryHash()
+   */
+  public final int getEntryHash() {
+    return this.hash;
+  }
+  protected void setEntryHash(int v) {
+    this.hash = v;
+  }
+  /**
+   * @see HashEntry#getNextEntry()
+   */
+  public final HashEntry<Object, Object> getNextEntry() {
+    return this.next;
+  }
+  /**
+   * @see HashEntry#setNextEntry
+   */
+  public final void setNextEntry(final HashEntry<Object, Object> n) {
+    this.next = n;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // stats code
+  @Override
+  public final void updateStatsForGet(boolean hit, long time)
+  {
+    setLastAccessed(time);
+    if (hit) {
+      incrementHitCount();
+    } else {
+      incrementMissCount();
+    }
+  }
+  @Override
+  protected final void setLastModified(long lastModified) {
+    _setLastModified(lastModified);
+    if (!DISABLE_ACCESS_TIME_UPDATE_ON_PUT) {
+      setLastAccessed(lastModified);
+    }
+  }
+  private volatile long lastAccessed;
+  private volatile int hitCount;
+  private volatile int missCount;
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapIntKey> hitCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapIntKey.class, "hitCount");
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapIntKey> missCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapIntKey.class, "missCount");
+  @Override
+  public final long getLastAccessed() throws InternalStatisticsDisabledException {
+    return this.lastAccessed;
+  }
+  private void setLastAccessed(long lastAccessed) {
+    this.lastAccessed = lastAccessed;
+  }
+  @Override
+  public final long getHitCount() throws InternalStatisticsDisabledException {
+    return this.hitCount & 0xFFFFFFFFL;
+  }
+  @Override
+  public final long getMissCount() throws InternalStatisticsDisabledException {
+    return this.missCount & 0xFFFFFFFFL;
+  }
+  private void incrementHitCount() {
+    hitCountUpdater.incrementAndGet(this);
+  }
+  private void incrementMissCount() {
+    missCountUpdater.incrementAndGet(this);
+  }
+  @Override
+  public final void resetCounts() throws InternalStatisticsDisabledException {
+    hitCountUpdater.set(this,0);
+    missCountUpdater.set(this,0);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  public final void txDidDestroy(long currTime) {
+    setLastModified(currTime);
+    setLastAccessed(currTime);
+    this.hitCount = 0;
+    this.missCount = 0;
+  }
+  @Override
+  public boolean hasStats() {
+    return true;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // versioned code
+  private VersionSource memberID;
+  private short entryVersionLowBytes;
+  private short regionVersionHighBytes;
+  private int regionVersionLowBytes;
+  private byte entryVersionHighByte;
+  private byte distributedSystemId;
+  public int getEntryVersion() {
+    return ((entryVersionHighByte << 16) & 0xFF0000) | (entryVersionLowBytes & 0xFFFF);
+  }
+  public long getRegionVersion() {
+    return (((long)regionVersionHighBytes) << 32) | (regionVersionLowBytes & 0x00000000FFFFFFFFL);
+  }
+  public long getVersionTimeStamp() {
+    return getLastModified();
+  }
+  public void setVersionTimeStamp(long time) {
+    setLastModified(time);
+  }
+  public VersionSource getMemberID() {
+    return this.memberID;
+  }
+  public int getDistributedSystemId() {
+    return this.distributedSystemId;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public void setVersions(VersionTag tag) {
+    this.memberID = tag.getMemberID();
+    int eVersion = tag.getEntryVersion();
+    this.entryVersionLowBytes = (short)(eVersion & 0xffff);
+    this.entryVersionHighByte = (byte)((eVersion & 0xff0000) >> 16);
+    this.regionVersionHighBytes = tag.getRegionVersionHighBytes();
+    this.regionVersionLowBytes = tag.getRegionVersionLowBytes();
+    if (!(tag.isGatewayTag()) && this.distributedSystemId == tag.getDistributedSystemId()) {
+      if (getVersionTimeStamp() <= tag.getVersionTimeStamp()) {
+        setVersionTimeStamp(tag.getVersionTimeStamp());
+      } else {
+        tag.setVersionTimeStamp(getVersionTimeStamp());
+      }
+    } else {
+      setVersionTimeStamp(tag.getVersionTimeStamp());
+    }
+    this.distributedSystemId = (byte)(tag.getDistributedSystemId() & 0xff);
+  }
+  public void setMemberID(VersionSource memberID) {
+    this.memberID = memberID;
+  }
+  @Override
+  public VersionStamp getVersionStamp() {
+    return this;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public VersionTag asVersionTag() {
+    VersionTag tag = VersionTag.create(memberID);
+    tag.setEntryVersion(getEntryVersion());
+    tag.setRegionVersion(this.regionVersionHighBytes, this.regionVersionLowBytes);
+    tag.setVersionTimeStamp(getVersionTimeStamp());
+    tag.setDistributedSystemId(this.distributedSystemId);
+    return tag;
+  }
+  public void processVersionTag(LocalRegion r, VersionTag tag,
+      boolean isTombstoneFromGII, boolean hasDelta,
+      VersionSource thisVM, InternalDistributedMember sender, boolean checkForConflicts) {
+    basicProcessVersionTag(r, tag, isTombstoneFromGII, hasDelta, thisVM, sender, checkForConflicts);
+  }
+  @Override
+  public void processVersionTag(EntryEvent cacheEvent) {
+    // this keeps Eclipse happy.  without it the sender chain becomes confused
+    // while browsing this code
+    super.processVersionTag(cacheEvent);
+  }
+  /** get rvv internal high byte.  Used by region entries for transferring to storage */
+  public short getRegionVersionHighBytes() {
+    return this.regionVersionHighBytes;
+  }
+  /** get rvv internal low bytes.  Used by region entries for transferring to storage */
+  public int getRegionVersionLowBytes() {
+    return this.regionVersionLowBytes;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // key code
+  private final int key;
+  @Override
+  public final Object getKey() {
+    return this.key;
+  }
+  @Override
+  public boolean isKeyEqual(Object k) {
+    if (k instanceof Integer) {
+      return ((Integer) k).intValue() == this.key;
+    }
+    return false;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapLongKey.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapLongKey.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapLongKey.java
new file mode 100644
index 0000000..624a053
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapLongKey.java
@@ -0,0 +1,300 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.internal.cache;
+// DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+import com.gemstone.gemfire.cache.EntryEvent;
+import com.gemstone.gemfire.internal.InternalStatisticsDisabledException;
+import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+import com.gemstone.gemfire.internal.cache.versions.VersionSource;
+import com.gemstone.gemfire.internal.cache.versions.VersionStamp;
+import com.gemstone.gemfire.internal.cache.versions.VersionTag;
+import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper;
+import com.gemstone.gemfire.internal.offheap.annotations.Released;
+import com.gemstone.gemfire.internal.offheap.annotations.Retained;
+import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
+import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap.HashEntry;
+// macros whose definition changes this class:
+// disk: DISK
+// lru: LRU
+// stats: STATS
+// versioned: VERSIONED
+// offheap: OFFHEAP
+// One of the following key macros must be defined:
+// key object: KEY_OBJECT
+// key int: KEY_INT
+// key long: KEY_LONG
+// key uuid: KEY_UUID
+// key string1: KEY_STRING1
+// key string2: KEY_STRING2
+/**
+ * Do not modify this class. It was generated.
+ * Instead modify LeafRegionEntry.cpp and then run
+ * bin/generateRegionEntryClasses.sh from the directory
+ * that contains your build.xml.
+ */
+public class VersionedStatsRegionEntryOffHeapLongKey extends VersionedStatsRegionEntryOffHeap {
+  public VersionedStatsRegionEntryOffHeapLongKey (RegionEntryContext context, long key,
+      @Retained
+      Object value
+      ) {
+    super(context,
+          value
+        );
+    // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+    this.key = key;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // common code
+  protected int hash;
+  private HashEntry<Object, Object> next;
+  @SuppressWarnings("unused")
+  private volatile long lastModified;
+  private static final AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapLongKey> lastModifiedUpdater
+    = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapLongKey.class, "lastModified");
+  /**
+   * All access done using ohAddrUpdater so it is used even though the compiler can not tell it is.
+   */
+  @SuppressWarnings("unused")
+  @Retained @Released private volatile long ohAddress;
+  /**
+   * I needed to add this because I wanted clear to call setValue which normally can only be called while the re is synced.
+   * But if I sync in that code it causes a lock ordering deadlock with the disk regions because they also get a rw lock in clear.
+   * Some hardware platforms do not support CAS on a long. If gemfire is run on one of those the AtomicLongFieldUpdater does a sync
+   * on the re and we will once again be deadlocked.
+   * I don't know if we support any of the hardware platforms that do not have a 64bit CAS. If we do then we can expect deadlocks
+   * on disk regions.
+   */
+  private final static AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapLongKey> ohAddrUpdater = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapLongKey.class, "ohAddress");
+  @Override
+  public Token getValueAsToken() {
+    return OffHeapRegionEntryHelper.getValueAsToken(this);
+  }
+  @Override
+  protected Object getValueField() {
+    return OffHeapRegionEntryHelper._getValue(this);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  @Unretained
+  protected void setValueField(@Unretained Object v) {
+    OffHeapRegionEntryHelper.setValue(this, v);
+  }
+  @Override
+  @Retained
+  public Object _getValueRetain(RegionEntryContext context, boolean decompress) {
+    return OffHeapRegionEntryHelper._getValueRetain(this, decompress, context);
+  }
+  @Override
+  public long getAddress() {
+    return ohAddrUpdater.get(this);
+  }
+  @Override
+  public boolean setAddress(long expectedAddr, long newAddr) {
+    return ohAddrUpdater.compareAndSet(this, expectedAddr, newAddr);
+  }
+  @Override
+  @Released
+  public void release() {
+    OffHeapRegionEntryHelper.releaseEntry(this);
+  }
+  @Override
+  public void returnToPool() {
+    // Deadcoded for now; never was working
+//    if (this instanceof VMThinRegionEntryLongKey) {
+//      factory.returnToPool((VMThinRegionEntryLongKey)this);
+//    }
+  }
+  protected long getlastModifiedField() {
+    return lastModifiedUpdater.get(this);
+  }
+  protected boolean compareAndSetLastModifiedField(long expectedValue, long newValue) {
+    return lastModifiedUpdater.compareAndSet(this, expectedValue, newValue);
+  }
+  /**
+   * @see HashEntry#getEntryHash()
+   */
+  public final int getEntryHash() {
+    return this.hash;
+  }
+  protected void setEntryHash(int v) {
+    this.hash = v;
+  }
+  /**
+   * @see HashEntry#getNextEntry()
+   */
+  public final HashEntry<Object, Object> getNextEntry() {
+    return this.next;
+  }
+  /**
+   * @see HashEntry#setNextEntry
+   */
+  public final void setNextEntry(final HashEntry<Object, Object> n) {
+    this.next = n;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // stats code
+  @Override
+  public final void updateStatsForGet(boolean hit, long time)
+  {
+    setLastAccessed(time);
+    if (hit) {
+      incrementHitCount();
+    } else {
+      incrementMissCount();
+    }
+  }
+  @Override
+  protected final void setLastModified(long lastModified) {
+    _setLastModified(lastModified);
+    if (!DISABLE_ACCESS_TIME_UPDATE_ON_PUT) {
+      setLastAccessed(lastModified);
+    }
+  }
+  private volatile long lastAccessed;
+  private volatile int hitCount;
+  private volatile int missCount;
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapLongKey> hitCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapLongKey.class, "hitCount");
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapLongKey> missCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapLongKey.class, "missCount");
+  @Override
+  public final long getLastAccessed() throws InternalStatisticsDisabledException {
+    return this.lastAccessed;
+  }
+  private void setLastAccessed(long lastAccessed) {
+    this.lastAccessed = lastAccessed;
+  }
+  @Override
+  public final long getHitCount() throws InternalStatisticsDisabledException {
+    return this.hitCount & 0xFFFFFFFFL;
+  }
+  @Override
+  public final long getMissCount() throws InternalStatisticsDisabledException {
+    return this.missCount & 0xFFFFFFFFL;
+  }
+  private void incrementHitCount() {
+    hitCountUpdater.incrementAndGet(this);
+  }
+  private void incrementMissCount() {
+    missCountUpdater.incrementAndGet(this);
+  }
+  @Override
+  public final void resetCounts() throws InternalStatisticsDisabledException {
+    hitCountUpdater.set(this,0);
+    missCountUpdater.set(this,0);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  public final void txDidDestroy(long currTime) {
+    setLastModified(currTime);
+    setLastAccessed(currTime);
+    this.hitCount = 0;
+    this.missCount = 0;
+  }
+  @Override
+  public boolean hasStats() {
+    return true;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // versioned code
+  private VersionSource memberID;
+  private short entryVersionLowBytes;
+  private short regionVersionHighBytes;
+  private int regionVersionLowBytes;
+  private byte entryVersionHighByte;
+  private byte distributedSystemId;
+  public int getEntryVersion() {
+    return ((entryVersionHighByte << 16) & 0xFF0000) | (entryVersionLowBytes & 0xFFFF);
+  }
+  public long getRegionVersion() {
+    return (((long)regionVersionHighBytes) << 32) | (regionVersionLowBytes & 0x00000000FFFFFFFFL);
+  }
+  public long getVersionTimeStamp() {
+    return getLastModified();
+  }
+  public void setVersionTimeStamp(long time) {
+    setLastModified(time);
+  }
+  public VersionSource getMemberID() {
+    return this.memberID;
+  }
+  public int getDistributedSystemId() {
+    return this.distributedSystemId;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public void setVersions(VersionTag tag) {
+    this.memberID = tag.getMemberID();
+    int eVersion = tag.getEntryVersion();
+    this.entryVersionLowBytes = (short)(eVersion & 0xffff);
+    this.entryVersionHighByte = (byte)((eVersion & 0xff0000) >> 16);
+    this.regionVersionHighBytes = tag.getRegionVersionHighBytes();
+    this.regionVersionLowBytes = tag.getRegionVersionLowBytes();
+    if (!(tag.isGatewayTag()) && this.distributedSystemId == tag.getDistributedSystemId()) {
+      if (getVersionTimeStamp() <= tag.getVersionTimeStamp()) {
+        setVersionTimeStamp(tag.getVersionTimeStamp());
+      } else {
+        tag.setVersionTimeStamp(getVersionTimeStamp());
+      }
+    } else {
+      setVersionTimeStamp(tag.getVersionTimeStamp());
+    }
+    this.distributedSystemId = (byte)(tag.getDistributedSystemId() & 0xff);
+  }
+  public void setMemberID(VersionSource memberID) {
+    this.memberID = memberID;
+  }
+  @Override
+  public VersionStamp getVersionStamp() {
+    return this;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public VersionTag asVersionTag() {
+    VersionTag tag = VersionTag.create(memberID);
+    tag.setEntryVersion(getEntryVersion());
+    tag.setRegionVersion(this.regionVersionHighBytes, this.regionVersionLowBytes);
+    tag.setVersionTimeStamp(getVersionTimeStamp());
+    tag.setDistributedSystemId(this.distributedSystemId);
+    return tag;
+  }
+  public void processVersionTag(LocalRegion r, VersionTag tag,
+      boolean isTombstoneFromGII, boolean hasDelta,
+      VersionSource thisVM, InternalDistributedMember sender, boolean checkForConflicts) {
+    basicProcessVersionTag(r, tag, isTombstoneFromGII, hasDelta, thisVM, sender, checkForConflicts);
+  }
+  @Override
+  public void processVersionTag(EntryEvent cacheEvent) {
+    // this keeps Eclipse happy.  without it the sender chain becomes confused
+    // while browsing this code
+    super.processVersionTag(cacheEvent);
+  }
+  /** get rvv internal high byte.  Used by region entries for transferring to storage */
+  public short getRegionVersionHighBytes() {
+    return this.regionVersionHighBytes;
+  }
+  /** get rvv internal low bytes.  Used by region entries for transferring to storage */
+  public int getRegionVersionLowBytes() {
+    return this.regionVersionLowBytes;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // key code
+  private final long key;
+  @Override
+  public final Object getKey() {
+    return this.key;
+  }
+  @Override
+  public boolean isKeyEqual(Object k) {
+    if (k instanceof Long) {
+      return ((Long) k).longValue() == this.key;
+    }
+    return false;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapObjectKey.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapObjectKey.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapObjectKey.java
new file mode 100644
index 0000000..4d73015
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapObjectKey.java
@@ -0,0 +1,293 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.internal.cache;
+// DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+import com.gemstone.gemfire.cache.EntryEvent;
+import com.gemstone.gemfire.internal.InternalStatisticsDisabledException;
+import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+import com.gemstone.gemfire.internal.cache.versions.VersionSource;
+import com.gemstone.gemfire.internal.cache.versions.VersionStamp;
+import com.gemstone.gemfire.internal.cache.versions.VersionTag;
+import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper;
+import com.gemstone.gemfire.internal.offheap.annotations.Released;
+import com.gemstone.gemfire.internal.offheap.annotations.Retained;
+import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
+import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap.HashEntry;
+// macros whose definition changes this class:
+// disk: DISK
+// lru: LRU
+// stats: STATS
+// versioned: VERSIONED
+// offheap: OFFHEAP
+// One of the following key macros must be defined:
+// key object: KEY_OBJECT
+// key int: KEY_INT
+// key long: KEY_LONG
+// key uuid: KEY_UUID
+// key string1: KEY_STRING1
+// key string2: KEY_STRING2
+/**
+ * Do not modify this class. It was generated.
+ * Instead modify LeafRegionEntry.cpp and then run
+ * bin/generateRegionEntryClasses.sh from the directory
+ * that contains your build.xml.
+ */
+public class VersionedStatsRegionEntryOffHeapObjectKey extends VersionedStatsRegionEntryOffHeap {
+  public VersionedStatsRegionEntryOffHeapObjectKey (RegionEntryContext context, Object key,
+      @Retained
+      Object value
+      ) {
+    super(context,
+          value
+        );
+    // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+    this.key = key;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // common code
+  protected int hash;
+  private HashEntry<Object, Object> next;
+  @SuppressWarnings("unused")
+  private volatile long lastModified;
+  private static final AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapObjectKey> lastModifiedUpdater
+    = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapObjectKey.class, "lastModified");
+  /**
+   * All access done using ohAddrUpdater so it is used even though the compiler can not tell it is.
+   */
+  @SuppressWarnings("unused")
+  @Retained @Released private volatile long ohAddress;
+  /**
+   * I needed to add this because I wanted clear to call setValue which normally can only be called while the re is synced.
+   * But if I sync in that code it causes a lock ordering deadlock with the disk regions because they also get a rw lock in clear.
+   * Some hardware platforms do not support CAS on a long. If gemfire is run on one of those the AtomicLongFieldUpdater does a sync
+   * on the re and we will once again be deadlocked.
+   * I don't know if we support any of the hardware platforms that do not have a 64bit CAS. If we do then we can expect deadlocks
+   * on disk regions.
+   */
+  private final static AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapObjectKey> ohAddrUpdater = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapObjectKey.class, "ohAddress");
+  @Override
+  public Token getValueAsToken() {
+    return OffHeapRegionEntryHelper.getValueAsToken(this);
+  }
+  @Override
+  protected Object getValueField() {
+    return OffHeapRegionEntryHelper._getValue(this);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  @Unretained
+  protected void setValueField(@Unretained Object v) {
+    OffHeapRegionEntryHelper.setValue(this, v);
+  }
+  @Override
+  @Retained
+  public Object _getValueRetain(RegionEntryContext context, boolean decompress) {
+    return OffHeapRegionEntryHelper._getValueRetain(this, decompress, context);
+  }
+  @Override
+  public long getAddress() {
+    return ohAddrUpdater.get(this);
+  }
+  @Override
+  public boolean setAddress(long expectedAddr, long newAddr) {
+    return ohAddrUpdater.compareAndSet(this, expectedAddr, newAddr);
+  }
+  @Override
+  @Released
+  public void release() {
+    OffHeapRegionEntryHelper.releaseEntry(this);
+  }
+  @Override
+  public void returnToPool() {
+    // Deadcoded for now; never was working
+//    if (this instanceof VMThinRegionEntryLongKey) {
+//      factory.returnToPool((VMThinRegionEntryLongKey)this);
+//    }
+  }
+  protected long getlastModifiedField() {
+    return lastModifiedUpdater.get(this);
+  }
+  protected boolean compareAndSetLastModifiedField(long expectedValue, long newValue) {
+    return lastModifiedUpdater.compareAndSet(this, expectedValue, newValue);
+  }
+  /**
+   * @see HashEntry#getEntryHash()
+   */
+  public final int getEntryHash() {
+    return this.hash;
+  }
+  protected void setEntryHash(int v) {
+    this.hash = v;
+  }
+  /**
+   * @see HashEntry#getNextEntry()
+   */
+  public final HashEntry<Object, Object> getNextEntry() {
+    return this.next;
+  }
+  /**
+   * @see HashEntry#setNextEntry
+   */
+  public final void setNextEntry(final HashEntry<Object, Object> n) {
+    this.next = n;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // stats code
+  @Override
+  public final void updateStatsForGet(boolean hit, long time)
+  {
+    setLastAccessed(time);
+    if (hit) {
+      incrementHitCount();
+    } else {
+      incrementMissCount();
+    }
+  }
+  @Override
+  protected final void setLastModified(long lastModified) {
+    _setLastModified(lastModified);
+    if (!DISABLE_ACCESS_TIME_UPDATE_ON_PUT) {
+      setLastAccessed(lastModified);
+    }
+  }
+  private volatile long lastAccessed;
+  private volatile int hitCount;
+  private volatile int missCount;
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapObjectKey> hitCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapObjectKey.class, "hitCount");
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapObjectKey> missCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapObjectKey.class, "missCount");
+  @Override
+  public final long getLastAccessed() throws InternalStatisticsDisabledException {
+    return this.lastAccessed;
+  }
+  private void setLastAccessed(long lastAccessed) {
+    this.lastAccessed = lastAccessed;
+  }
+  @Override
+  public final long getHitCount() throws InternalStatisticsDisabledException {
+    return this.hitCount & 0xFFFFFFFFL;
+  }
+  @Override
+  public final long getMissCount() throws InternalStatisticsDisabledException {
+    return this.missCount & 0xFFFFFFFFL;
+  }
+  private void incrementHitCount() {
+    hitCountUpdater.incrementAndGet(this);
+  }
+  private void incrementMissCount() {
+    missCountUpdater.incrementAndGet(this);
+  }
+  @Override
+  public final void resetCounts() throws InternalStatisticsDisabledException {
+    hitCountUpdater.set(this,0);
+    missCountUpdater.set(this,0);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  public final void txDidDestroy(long currTime) {
+    setLastModified(currTime);
+    setLastAccessed(currTime);
+    this.hitCount = 0;
+    this.missCount = 0;
+  }
+  @Override
+  public boolean hasStats() {
+    return true;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // versioned code
+  private VersionSource memberID;
+  private short entryVersionLowBytes;
+  private short regionVersionHighBytes;
+  private int regionVersionLowBytes;
+  private byte entryVersionHighByte;
+  private byte distributedSystemId;
+  public int getEntryVersion() {
+    return ((entryVersionHighByte << 16) & 0xFF0000) | (entryVersionLowBytes & 0xFFFF);
+  }
+  public long getRegionVersion() {
+    return (((long)regionVersionHighBytes) << 32) | (regionVersionLowBytes & 0x00000000FFFFFFFFL);
+  }
+  public long getVersionTimeStamp() {
+    return getLastModified();
+  }
+  public void setVersionTimeStamp(long time) {
+    setLastModified(time);
+  }
+  public VersionSource getMemberID() {
+    return this.memberID;
+  }
+  public int getDistributedSystemId() {
+    return this.distributedSystemId;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public void setVersions(VersionTag tag) {
+    this.memberID = tag.getMemberID();
+    int eVersion = tag.getEntryVersion();
+    this.entryVersionLowBytes = (short)(eVersion & 0xffff);
+    this.entryVersionHighByte = (byte)((eVersion & 0xff0000) >> 16);
+    this.regionVersionHighBytes = tag.getRegionVersionHighBytes();
+    this.regionVersionLowBytes = tag.getRegionVersionLowBytes();
+    if (!(tag.isGatewayTag()) && this.distributedSystemId == tag.getDistributedSystemId()) {
+      if (getVersionTimeStamp() <= tag.getVersionTimeStamp()) {
+        setVersionTimeStamp(tag.getVersionTimeStamp());
+      } else {
+        tag.setVersionTimeStamp(getVersionTimeStamp());
+      }
+    } else {
+      setVersionTimeStamp(tag.getVersionTimeStamp());
+    }
+    this.distributedSystemId = (byte)(tag.getDistributedSystemId() & 0xff);
+  }
+  public void setMemberID(VersionSource memberID) {
+    this.memberID = memberID;
+  }
+  @Override
+  public VersionStamp getVersionStamp() {
+    return this;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public VersionTag asVersionTag() {
+    VersionTag tag = VersionTag.create(memberID);
+    tag.setEntryVersion(getEntryVersion());
+    tag.setRegionVersion(this.regionVersionHighBytes, this.regionVersionLowBytes);
+    tag.setVersionTimeStamp(getVersionTimeStamp());
+    tag.setDistributedSystemId(this.distributedSystemId);
+    return tag;
+  }
+  public void processVersionTag(LocalRegion r, VersionTag tag,
+      boolean isTombstoneFromGII, boolean hasDelta,
+      VersionSource thisVM, InternalDistributedMember sender, boolean checkForConflicts) {
+    basicProcessVersionTag(r, tag, isTombstoneFromGII, hasDelta, thisVM, sender, checkForConflicts);
+  }
+  @Override
+  public void processVersionTag(EntryEvent cacheEvent) {
+    // this keeps Eclipse happy.  without it the sender chain becomes confused
+    // while browsing this code
+    super.processVersionTag(cacheEvent);
+  }
+  /** get rvv internal high byte.  Used by region entries for transferring to storage */
+  public short getRegionVersionHighBytes() {
+    return this.regionVersionHighBytes;
+  }
+  /** get rvv internal low bytes.  Used by region entries for transferring to storage */
+  public int getRegionVersionLowBytes() {
+    return this.regionVersionLowBytes;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // key code
+  private final Object key;
+  @Override
+  public final Object getKey() {
+    return this.key;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapStringKey1.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapStringKey1.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapStringKey1.java
new file mode 100644
index 0000000..bf7b842
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapStringKey1.java
@@ -0,0 +1,362 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.internal.cache;
+// DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+import com.gemstone.gemfire.cache.EntryEvent;
+import com.gemstone.gemfire.internal.InternalStatisticsDisabledException;
+import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+import com.gemstone.gemfire.internal.cache.versions.VersionSource;
+import com.gemstone.gemfire.internal.cache.versions.VersionStamp;
+import com.gemstone.gemfire.internal.cache.versions.VersionTag;
+import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper;
+import com.gemstone.gemfire.internal.offheap.annotations.Released;
+import com.gemstone.gemfire.internal.offheap.annotations.Retained;
+import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
+import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap.HashEntry;
+// macros whose definition changes this class:
+// disk: DISK
+// lru: LRU
+// stats: STATS
+// versioned: VERSIONED
+// offheap: OFFHEAP
+// One of the following key macros must be defined:
+// key object: KEY_OBJECT
+// key int: KEY_INT
+// key long: KEY_LONG
+// key uuid: KEY_UUID
+// key string1: KEY_STRING1
+// key string2: KEY_STRING2
+/**
+ * Do not modify this class. It was generated.
+ * Instead modify LeafRegionEntry.cpp and then run
+ * bin/generateRegionEntryClasses.sh from the directory
+ * that contains your build.xml.
+ */
+public class VersionedStatsRegionEntryOffHeapStringKey1 extends VersionedStatsRegionEntryOffHeap {
+  public VersionedStatsRegionEntryOffHeapStringKey1 (RegionEntryContext context, String key,
+      @Retained
+      Object value
+      , boolean byteEncode
+      ) {
+    super(context,
+          value
+        );
+    // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+    // caller has already confirmed that key.length <= MAX_INLINE_STRING_KEY
+    long tmpBits1 = 0L;
+    if (byteEncode) {
+      for (int i=key.length()-1; i >= 0; i--) {
+        // Note: we know each byte is <= 0x7f so the "& 0xff" is not needed. But I added it in to keep findbugs happy.
+        tmpBits1 |= (byte)key.charAt(i) & 0xff;
+        tmpBits1 <<= 8;
+      }
+      tmpBits1 |= 1<<6;
+    } else {
+      for (int i=key.length()-1; i >= 0; i--) {
+        tmpBits1 |= key.charAt(i);
+        tmpBits1 <<= 16;
+      }
+    }
+    tmpBits1 |= key.length();
+    this.bits1 = tmpBits1;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // common code
+  protected int hash;
+  private HashEntry<Object, Object> next;
+  @SuppressWarnings("unused")
+  private volatile long lastModified;
+  private static final AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapStringKey1> lastModifiedUpdater
+    = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapStringKey1.class, "lastModified");
+  /**
+   * All access done using ohAddrUpdater so it is used even though the compiler can not tell it is.
+   */
+  @SuppressWarnings("unused")
+  @Retained @Released private volatile long ohAddress;
+  /**
+   * I needed to add this because I wanted clear to call setValue which normally can only be called while the re is synced.
+   * But if I sync in that code it causes a lock ordering deadlock with the disk regions because they also get a rw lock in clear.
+   * Some hardware platforms do not support CAS on a long. If gemfire is run on one of those the AtomicLongFieldUpdater does a sync
+   * on the re and we will once again be deadlocked.
+   * I don't know if we support any of the hardware platforms that do not have a 64bit CAS. If we do then we can expect deadlocks
+   * on disk regions.
+   */
+  private final static AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapStringKey1> ohAddrUpdater = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapStringKey1.class, "ohAddress");
+  @Override
+  public Token getValueAsToken() {
+    return OffHeapRegionEntryHelper.getValueAsToken(this);
+  }
+  @Override
+  protected Object getValueField() {
+    return OffHeapRegionEntryHelper._getValue(this);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  @Unretained
+  protected void setValueField(@Unretained Object v) {
+    OffHeapRegionEntryHelper.setValue(this, v);
+  }
+  @Override
+  @Retained
+  public Object _getValueRetain(RegionEntryContext context, boolean decompress) {
+    return OffHeapRegionEntryHelper._getValueRetain(this, decompress, context);
+  }
+  @Override
+  public long getAddress() {
+    return ohAddrUpdater.get(this);
+  }
+  @Override
+  public boolean setAddress(long expectedAddr, long newAddr) {
+    return ohAddrUpdater.compareAndSet(this, expectedAddr, newAddr);
+  }
+  @Override
+  @Released
+  public void release() {
+    OffHeapRegionEntryHelper.releaseEntry(this);
+  }
+  @Override
+  public void returnToPool() {
+    // Deadcoded for now; never was working
+//    if (this instanceof VMThinRegionEntryLongKey) {
+//      factory.returnToPool((VMThinRegionEntryLongKey)this);
+//    }
+  }
+  protected long getlastModifiedField() {
+    return lastModifiedUpdater.get(this);
+  }
+  protected boolean compareAndSetLastModifiedField(long expectedValue, long newValue) {
+    return lastModifiedUpdater.compareAndSet(this, expectedValue, newValue);
+  }
+  /**
+   * @see HashEntry#getEntryHash()
+   */
+  public final int getEntryHash() {
+    return this.hash;
+  }
+  protected void setEntryHash(int v) {
+    this.hash = v;
+  }
+  /**
+   * @see HashEntry#getNextEntry()
+   */
+  public final HashEntry<Object, Object> getNextEntry() {
+    return this.next;
+  }
+  /**
+   * @see HashEntry#setNextEntry
+   */
+  public final void setNextEntry(final HashEntry<Object, Object> n) {
+    this.next = n;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // stats code
+  @Override
+  public final void updateStatsForGet(boolean hit, long time)
+  {
+    setLastAccessed(time);
+    if (hit) {
+      incrementHitCount();
+    } else {
+      incrementMissCount();
+    }
+  }
+  @Override
+  protected final void setLastModified(long lastModified) {
+    _setLastModified(lastModified);
+    if (!DISABLE_ACCESS_TIME_UPDATE_ON_PUT) {
+      setLastAccessed(lastModified);
+    }
+  }
+  private volatile long lastAccessed;
+  private volatile int hitCount;
+  private volatile int missCount;
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapStringKey1> hitCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapStringKey1.class, "hitCount");
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapStringKey1> missCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapStringKey1.class, "missCount");
+  @Override
+  public final long getLastAccessed() throws InternalStatisticsDisabledException {
+    return this.lastAccessed;
+  }
+  private void setLastAccessed(long lastAccessed) {
+    this.lastAccessed = lastAccessed;
+  }
+  @Override
+  public final long getHitCount() throws InternalStatisticsDisabledException {
+    return this.hitCount & 0xFFFFFFFFL;
+  }
+  @Override
+  public final long getMissCount() throws InternalStatisticsDisabledException {
+    return this.missCount & 0xFFFFFFFFL;
+  }
+  private void incrementHitCount() {
+    hitCountUpdater.incrementAndGet(this);
+  }
+  private void incrementMissCount() {
+    missCountUpdater.incrementAndGet(this);
+  }
+  @Override
+  public final void resetCounts() throws InternalStatisticsDisabledException {
+    hitCountUpdater.set(this,0);
+    missCountUpdater.set(this,0);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  public final void txDidDestroy(long currTime) {
+    setLastModified(currTime);
+    setLastAccessed(currTime);
+    this.hitCount = 0;
+    this.missCount = 0;
+  }
+  @Override
+  public boolean hasStats() {
+    return true;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // versioned code
+  private VersionSource memberID;
+  private short entryVersionLowBytes;
+  private short regionVersionHighBytes;
+  private int regionVersionLowBytes;
+  private byte entryVersionHighByte;
+  private byte distributedSystemId;
+  public int getEntryVersion() {
+    return ((entryVersionHighByte << 16) & 0xFF0000) | (entryVersionLowBytes & 0xFFFF);
+  }
+  public long getRegionVersion() {
+    return (((long)regionVersionHighBytes) << 32) | (regionVersionLowBytes & 0x00000000FFFFFFFFL);
+  }
+  public long getVersionTimeStamp() {
+    return getLastModified();
+  }
+  public void setVersionTimeStamp(long time) {
+    setLastModified(time);
+  }
+  public VersionSource getMemberID() {
+    return this.memberID;
+  }
+  public int getDistributedSystemId() {
+    return this.distributedSystemId;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public void setVersions(VersionTag tag) {
+    this.memberID = tag.getMemberID();
+    int eVersion = tag.getEntryVersion();
+    this.entryVersionLowBytes = (short)(eVersion & 0xffff);
+    this.entryVersionHighByte = (byte)((eVersion & 0xff0000) >> 16);
+    this.regionVersionHighBytes = tag.getRegionVersionHighBytes();
+    this.regionVersionLowBytes = tag.getRegionVersionLowBytes();
+    if (!(tag.isGatewayTag()) && this.distributedSystemId == tag.getDistributedSystemId()) {
+      if (getVersionTimeStamp() <= tag.getVersionTimeStamp()) {
+        setVersionTimeStamp(tag.getVersionTimeStamp());
+      } else {
+        tag.setVersionTimeStamp(getVersionTimeStamp());
+      }
+    } else {
+      setVersionTimeStamp(tag.getVersionTimeStamp());
+    }
+    this.distributedSystemId = (byte)(tag.getDistributedSystemId() & 0xff);
+  }
+  public void setMemberID(VersionSource memberID) {
+    this.memberID = memberID;
+  }
+  @Override
+  public VersionStamp getVersionStamp() {
+    return this;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public VersionTag asVersionTag() {
+    VersionTag tag = VersionTag.create(memberID);
+    tag.setEntryVersion(getEntryVersion());
+    tag.setRegionVersion(this.regionVersionHighBytes, this.regionVersionLowBytes);
+    tag.setVersionTimeStamp(getVersionTimeStamp());
+    tag.setDistributedSystemId(this.distributedSystemId);
+    return tag;
+  }
+  public void processVersionTag(LocalRegion r, VersionTag tag,
+      boolean isTombstoneFromGII, boolean hasDelta,
+      VersionSource thisVM, InternalDistributedMember sender, boolean checkForConflicts) {
+    basicProcessVersionTag(r, tag, isTombstoneFromGII, hasDelta, thisVM, sender, checkForConflicts);
+  }
+  @Override
+  public void processVersionTag(EntryEvent cacheEvent) {
+    // this keeps Eclipse happy.  without it the sender chain becomes confused
+    // while browsing this code
+    super.processVersionTag(cacheEvent);
+  }
+  /** get rvv internal high byte.  Used by region entries for transferring to storage */
+  public short getRegionVersionHighBytes() {
+    return this.regionVersionHighBytes;
+  }
+  /** get rvv internal low bytes.  Used by region entries for transferring to storage */
+  public int getRegionVersionLowBytes() {
+    return this.regionVersionLowBytes;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // key code
+  private final long bits1;
+  private int getKeyLength() {
+    return (int) (this.bits1 & 0x003fL);
+  }
+  private int getEncoding() {
+    // 0 means encoded as char
+    // 1 means encoded as bytes that are all <= 0x7f;
+    return (int) (this.bits1 >> 6) & 0x03;
+  }
+  @Override
+  public final Object getKey() {
+    int keylen = getKeyLength();
+    char[] chars = new char[keylen];
+    long tmpBits1 = this.bits1;
+    if (getEncoding() == 1) {
+      for (int i=0; i < keylen; i++) {
+        tmpBits1 >>= 8;
+      chars[i] = (char) (tmpBits1 & 0x00ff);
+      }
+    } else {
+      for (int i=0; i < keylen; i++) {
+        tmpBits1 >>= 16;
+        chars[i] = (char) (tmpBits1 & 0x00FFff);
+      }
+    }
+    return new String(chars);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  public boolean isKeyEqual(Object k) {
+    if (k instanceof String) {
+      String str = (String)k;
+      int keylen = getKeyLength();
+      if (str.length() == keylen) {
+        long tmpBits1 = this.bits1;
+        if (getEncoding() == 1) {
+          for (int i=0; i < keylen; i++) {
+            tmpBits1 >>= 8;
+            char c = (char) (tmpBits1 & 0x00ff);
+            if (str.charAt(i) != c) {
+              return false;
+            }
+          }
+        } else {
+          for (int i=0; i < keylen; i++) {
+            tmpBits1 >>= 16;
+            char c = (char) (tmpBits1 & 0x00FFff);
+            if (str.charAt(i) != c) {
+              return false;
+            }
+          }
+        }
+        return true;
+      }
+    }
+    return false;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapStringKey2.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapStringKey2.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapStringKey2.java
new file mode 100644
index 0000000..0f67748
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapStringKey2.java
@@ -0,0 +1,403 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.internal.cache;
+// DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+import com.gemstone.gemfire.cache.EntryEvent;
+import com.gemstone.gemfire.internal.InternalStatisticsDisabledException;
+import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+import com.gemstone.gemfire.internal.cache.versions.VersionSource;
+import com.gemstone.gemfire.internal.cache.versions.VersionStamp;
+import com.gemstone.gemfire.internal.cache.versions.VersionTag;
+import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper;
+import com.gemstone.gemfire.internal.offheap.annotations.Released;
+import com.gemstone.gemfire.internal.offheap.annotations.Retained;
+import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
+import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap.HashEntry;
+// macros whose definition changes this class:
+// disk: DISK
+// lru: LRU
+// stats: STATS
+// versioned: VERSIONED
+// offheap: OFFHEAP
+// One of the following key macros must be defined:
+// key object: KEY_OBJECT
+// key int: KEY_INT
+// key long: KEY_LONG
+// key uuid: KEY_UUID
+// key string1: KEY_STRING1
+// key string2: KEY_STRING2
+/**
+ * Do not modify this class. It was generated.
+ * Instead modify LeafRegionEntry.cpp and then run
+ * bin/generateRegionEntryClasses.sh from the directory
+ * that contains your build.xml.
+ */
+public class VersionedStatsRegionEntryOffHeapStringKey2 extends VersionedStatsRegionEntryOffHeap {
+  public VersionedStatsRegionEntryOffHeapStringKey2 (RegionEntryContext context, String key,
+      @Retained
+      Object value
+      , boolean byteEncode
+      ) {
+    super(context,
+          value
+        );
+    // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+    // caller has already confirmed that key.length <= MAX_INLINE_STRING_KEY
+    long tmpBits1 = 0L;
+    long tmpBits2 = 0L;
+    if (byteEncode) {
+      for (int i=key.length()-1; i >= 0; i--) {
+        // Note: we know each byte is <= 0x7f so the "& 0xff" is not needed. But I added it in to keep findbugs happy.
+        if (i < 7) {
+          tmpBits1 |= (byte)key.charAt(i) & 0xff;
+          tmpBits1 <<= 8;
+        } else {
+          tmpBits2 <<= 8;
+          tmpBits2 |= (byte)key.charAt(i) & 0xff;
+        }
+      }
+      tmpBits1 |= 1<<6;
+    } else {
+      for (int i=key.length()-1; i >= 0; i--) {
+        if (i < 3) {
+          tmpBits1 |= key.charAt(i);
+          tmpBits1 <<= 16;
+        } else {
+          tmpBits2 <<= 16;
+          tmpBits2 |= key.charAt(i);
+        }
+      }
+    }
+    tmpBits1 |= key.length();
+    this.bits1 = tmpBits1;
+    this.bits2 = tmpBits2;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // common code
+  protected int hash;
+  private HashEntry<Object, Object> next;
+  @SuppressWarnings("unused")
+  private volatile long lastModified;
+  private static final AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapStringKey2> lastModifiedUpdater
+    = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapStringKey2.class, "lastModified");
+  /**
+   * All access done using ohAddrUpdater so it is used even though the compiler can not tell it is.
+   */
+  @SuppressWarnings("unused")
+  @Retained @Released private volatile long ohAddress;
+  /**
+   * I needed to add this because I wanted clear to call setValue which normally can only be called while the re is synced.
+   * But if I sync in that code it causes a lock ordering deadlock with the disk regions because they also get a rw lock in clear.
+   * Some hardware platforms do not support CAS on a long. If gemfire is run on one of those the AtomicLongFieldUpdater does a sync
+   * on the re and we will once again be deadlocked.
+   * I don't know if we support any of the hardware platforms that do not have a 64bit CAS. If we do then we can expect deadlocks
+   * on disk regions.
+   */
+  private final static AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapStringKey2> ohAddrUpdater = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapStringKey2.class, "ohAddress");
+  @Override
+  public Token getValueAsToken() {
+    return OffHeapRegionEntryHelper.getValueAsToken(this);
+  }
+  @Override
+  protected Object getValueField() {
+    return OffHeapRegionEntryHelper._getValue(this);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  @Unretained
+  protected void setValueField(@Unretained Object v) {
+    OffHeapRegionEntryHelper.setValue(this, v);
+  }
+  @Override
+  @Retained
+  public Object _getValueRetain(RegionEntryContext context, boolean decompress) {
+    return OffHeapRegionEntryHelper._getValueRetain(this, decompress, context);
+  }
+  @Override
+  public long getAddress() {
+    return ohAddrUpdater.get(this);
+  }
+  @Override
+  public boolean setAddress(long expectedAddr, long newAddr) {
+    return ohAddrUpdater.compareAndSet(this, expectedAddr, newAddr);
+  }
+  @Override
+  @Released
+  public void release() {
+    OffHeapRegionEntryHelper.releaseEntry(this);
+  }
+  @Override
+  public void returnToPool() {
+    // Deadcoded for now; never was working
+//    if (this instanceof VMThinRegionEntryLongKey) {
+//      factory.returnToPool((VMThinRegionEntryLongKey)this);
+//    }
+  }
+  protected long getlastModifiedField() {
+    return lastModifiedUpdater.get(this);
+  }
+  protected boolean compareAndSetLastModifiedField(long expectedValue, long newValue) {
+    return lastModifiedUpdater.compareAndSet(this, expectedValue, newValue);
+  }
+  /**
+   * @see HashEntry#getEntryHash()
+   */
+  public final int getEntryHash() {
+    return this.hash;
+  }
+  protected void setEntryHash(int v) {
+    this.hash = v;
+  }
+  /**
+   * @see HashEntry#getNextEntry()
+   */
+  public final HashEntry<Object, Object> getNextEntry() {
+    return this.next;
+  }
+  /**
+   * @see HashEntry#setNextEntry
+   */
+  public final void setNextEntry(final HashEntry<Object, Object> n) {
+    this.next = n;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // stats code
+  @Override
+  public final void updateStatsForGet(boolean hit, long time)
+  {
+    setLastAccessed(time);
+    if (hit) {
+      incrementHitCount();
+    } else {
+      incrementMissCount();
+    }
+  }
+  @Override
+  protected final void setLastModified(long lastModified) {
+    _setLastModified(lastModified);
+    if (!DISABLE_ACCESS_TIME_UPDATE_ON_PUT) {
+      setLastAccessed(lastModified);
+    }
+  }
+  private volatile long lastAccessed;
+  private volatile int hitCount;
+  private volatile int missCount;
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapStringKey2> hitCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapStringKey2.class, "hitCount");
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapStringKey2> missCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapStringKey2.class, "missCount");
+  @Override
+  public final long getLastAccessed() throws InternalStatisticsDisabledException {
+    return this.lastAccessed;
+  }
+  private void setLastAccessed(long lastAccessed) {
+    this.lastAccessed = lastAccessed;
+  }
+  @Override
+  public final long getHitCount() throws InternalStatisticsDisabledException {
+    return this.hitCount & 0xFFFFFFFFL;
+  }
+  @Override
+  public final long getMissCount() throws InternalStatisticsDisabledException {
+    return this.missCount & 0xFFFFFFFFL;
+  }
+  private void incrementHitCount() {
+    hitCountUpdater.incrementAndGet(this);
+  }
+  private void incrementMissCount() {
+    missCountUpdater.incrementAndGet(this);
+  }
+  @Override
+  public final void resetCounts() throws InternalStatisticsDisabledException {
+    hitCountUpdater.set(this,0);
+    missCountUpdater.set(this,0);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  public final void txDidDestroy(long currTime) {
+    setLastModified(currTime);
+    setLastAccessed(currTime);
+    this.hitCount = 0;
+    this.missCount = 0;
+  }
+  @Override
+  public boolean hasStats() {
+    return true;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // versioned code
+  private VersionSource memberID;
+  private short entryVersionLowBytes;
+  private short regionVersionHighBytes;
+  private int regionVersionLowBytes;
+  private byte entryVersionHighByte;
+  private byte distributedSystemId;
+  public int getEntryVersion() {
+    return ((entryVersionHighByte << 16) & 0xFF0000) | (entryVersionLowBytes & 0xFFFF);
+  }
+  public long getRegionVersion() {
+    return (((long)regionVersionHighBytes) << 32) | (regionVersionLowBytes & 0x00000000FFFFFFFFL);
+  }
+  public long getVersionTimeStamp() {
+    return getLastModified();
+  }
+  public void setVersionTimeStamp(long time) {
+    setLastModified(time);
+  }
+  public VersionSource getMemberID() {
+    return this.memberID;
+  }
+  public int getDistributedSystemId() {
+    return this.distributedSystemId;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public void setVersions(VersionTag tag) {
+    this.memberID = tag.getMemberID();
+    int eVersion = tag.getEntryVersion();
+    this.entryVersionLowBytes = (short)(eVersion & 0xffff);
+    this.entryVersionHighByte = (byte)((eVersion & 0xff0000) >> 16);
+    this.regionVersionHighBytes = tag.getRegionVersionHighBytes();
+    this.regionVersionLowBytes = tag.getRegionVersionLowBytes();
+    if (!(tag.isGatewayTag()) && this.distributedSystemId == tag.getDistributedSystemId()) {
+      if (getVersionTimeStamp() <= tag.getVersionTimeStamp()) {
+        setVersionTimeStamp(tag.getVersionTimeStamp());
+      } else {
+        tag.setVersionTimeStamp(getVersionTimeStamp());
+      }
+    } else {
+      setVersionTimeStamp(tag.getVersionTimeStamp());
+    }
+    this.distributedSystemId = (byte)(tag.getDistributedSystemId() & 0xff);
+  }
+  public void setMemberID(VersionSource memberID) {
+    this.memberID = memberID;
+  }
+  @Override
+  public VersionStamp getVersionStamp() {
+    return this;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public VersionTag asVersionTag() {
+    VersionTag tag = VersionTag.create(memberID);
+    tag.setEntryVersion(getEntryVersion());
+    tag.setRegionVersion(this.regionVersionHighBytes, this.regionVersionLowBytes);
+    tag.setVersionTimeStamp(getVersionTimeStamp());
+    tag.setDistributedSystemId(this.distributedSystemId);
+    return tag;
+  }
+  public void processVersionTag(LocalRegion r, VersionTag tag,
+      boolean isTombstoneFromGII, boolean hasDelta,
+      VersionSource thisVM, InternalDistributedMember sender, boolean checkForConflicts) {
+    basicProcessVersionTag(r, tag, isTombstoneFromGII, hasDelta, thisVM, sender, checkForConflicts);
+  }
+  @Override
+  public void processVersionTag(EntryEvent cacheEvent) {
+    // this keeps Eclipse happy.  without it the sender chain becomes confused
+    // while browsing this code
+    super.processVersionTag(cacheEvent);
+  }
+  /** get rvv internal high byte.  Used by region entries for transferring to storage */
+  public short getRegionVersionHighBytes() {
+    return this.regionVersionHighBytes;
+  }
+  /** get rvv internal low bytes.  Used by region entries for transferring to storage */
+  public int getRegionVersionLowBytes() {
+    return this.regionVersionLowBytes;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // key code
+  // strlen is encoded in lowest 6 bits (max strlen is 63)
+  // character encoding info is in bits 7 and 8
+  // The other bits are used to encoded character data.
+  private final long bits1;
+  // bits2 encodes character data
+  private final long bits2;
+  private int getKeyLength() {
+    return (int) (this.bits1 & 0x003fL);
+  }
+  private int getEncoding() {
+    // 0 means encoded as char
+    // 1 means encoded as bytes that are all <= 0x7f;
+    return (int) (this.bits1 >> 6) & 0x03;
+  }
+  @Override
+  public final Object getKey() {
+    int keylen = getKeyLength();
+    char[] chars = new char[keylen];
+    long tmpBits1 = this.bits1;
+    long tmpBits2 = this.bits2;
+    if (getEncoding() == 1) {
+      for (int i=0; i < keylen; i++) {
+        if (i < 7) {
+          tmpBits1 >>= 8;
+          chars[i] = (char) (tmpBits1 & 0x00ff);
+        } else {
+          chars[i] = (char) (tmpBits2 & 0x00ff);
+          tmpBits2 >>= 8;
+        }
+      }
+    } else {
+      for (int i=0; i < keylen; i++) {
+        if (i < 3) {
+          tmpBits1 >>= 16;
+        chars[i] = (char) (tmpBits1 & 0x00FFff);
+        } else {
+          chars[i] = (char) (tmpBits2 & 0x00FFff);
+          tmpBits2 >>= 16;
+        }
+      }
+    }
+    return new String(chars);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  public boolean isKeyEqual(Object k) {
+    if (k instanceof String) {
+      String str = (String)k;
+      int keylen = getKeyLength();
+      if (str.length() == keylen) {
+        long tmpBits1 = this.bits1;
+        long tmpBits2 = this.bits2;
+        if (getEncoding() == 1) {
+          for (int i=0; i < keylen; i++) {
+            char c;
+            if (i < 7) {
+              tmpBits1 >>= 8;
+              c = (char) (tmpBits1 & 0x00ff);
+            } else {
+              c = (char) (tmpBits2 & 0x00ff);
+              tmpBits2 >>= 8;
+            }
+            if (str.charAt(i) != c) {
+              return false;
+            }
+          }
+        } else {
+          for (int i=0; i < keylen; i++) {
+            char c;
+            if (i < 3) {
+              tmpBits1 >>= 16;
+              c = (char) (tmpBits1 & 0x00FFff);
+            } else {
+              c = (char) (tmpBits2 & 0x00FFff);
+              tmpBits2 >>= 16;
+            }
+            if (str.charAt(i) != c) {
+              return false;
+            }
+          }
+        }
+        return true;
+      }
+    }
+    return false;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapUUIDKey.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapUUIDKey.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapUUIDKey.java
new file mode 100644
index 0000000..663de48
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntryOffHeapUUIDKey.java
@@ -0,0 +1,304 @@
+/*=========================================================================
+ * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * one or more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+package com.gemstone.gemfire.internal.cache;
+// DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+import com.gemstone.gemfire.cache.EntryEvent;
+import com.gemstone.gemfire.internal.InternalStatisticsDisabledException;
+import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
+import com.gemstone.gemfire.internal.cache.versions.VersionSource;
+import com.gemstone.gemfire.internal.cache.versions.VersionStamp;
+import com.gemstone.gemfire.internal.cache.versions.VersionTag;
+import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper;
+import com.gemstone.gemfire.internal.offheap.annotations.Released;
+import com.gemstone.gemfire.internal.offheap.annotations.Retained;
+import com.gemstone.gemfire.internal.offheap.annotations.Unretained;
+import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap.HashEntry;
+// macros whose definition changes this class:
+// disk: DISK
+// lru: LRU
+// stats: STATS
+// versioned: VERSIONED
+// offheap: OFFHEAP
+// One of the following key macros must be defined:
+// key object: KEY_OBJECT
+// key int: KEY_INT
+// key long: KEY_LONG
+// key uuid: KEY_UUID
+// key string1: KEY_STRING1
+// key string2: KEY_STRING2
+/**
+ * Do not modify this class. It was generated.
+ * Instead modify LeafRegionEntry.cpp and then run
+ * bin/generateRegionEntryClasses.sh from the directory
+ * that contains your build.xml.
+ */
+public class VersionedStatsRegionEntryOffHeapUUIDKey extends VersionedStatsRegionEntryOffHeap {
+  public VersionedStatsRegionEntryOffHeapUUIDKey (RegionEntryContext context, UUID key,
+      @Retained
+      Object value
+      ) {
+    super(context,
+          value
+        );
+    // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+    this.keyMostSigBits = key.getMostSignificantBits();
+    this.keyLeastSigBits = key.getLeastSignificantBits();
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // common code
+  protected int hash;
+  private HashEntry<Object, Object> next;
+  @SuppressWarnings("unused")
+  private volatile long lastModified;
+  private static final AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapUUIDKey> lastModifiedUpdater
+    = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapUUIDKey.class, "lastModified");
+  /**
+   * All access done using ohAddrUpdater so it is used even though the compiler can not tell it is.
+   */
+  @SuppressWarnings("unused")
+  @Retained @Released private volatile long ohAddress;
+  /**
+   * I needed to add this because I wanted clear to call setValue which normally can only be called while the re is synced.
+   * But if I sync in that code it causes a lock ordering deadlock with the disk regions because they also get a rw lock in clear.
+   * Some hardware platforms do not support CAS on a long. If gemfire is run on one of those the AtomicLongFieldUpdater does a sync
+   * on the re and we will once again be deadlocked.
+   * I don't know if we support any of the hardware platforms that do not have a 64bit CAS. If we do then we can expect deadlocks
+   * on disk regions.
+   */
+  private final static AtomicLongFieldUpdater<VersionedStatsRegionEntryOffHeapUUIDKey> ohAddrUpdater = AtomicLongFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapUUIDKey.class, "ohAddress");
+  @Override
+  public Token getValueAsToken() {
+    return OffHeapRegionEntryHelper.getValueAsToken(this);
+  }
+  @Override
+  protected Object getValueField() {
+    return OffHeapRegionEntryHelper._getValue(this);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  @Unretained
+  protected void setValueField(@Unretained Object v) {
+    OffHeapRegionEntryHelper.setValue(this, v);
+  }
+  @Override
+  @Retained
+  public Object _getValueRetain(RegionEntryContext context, boolean decompress) {
+    return OffHeapRegionEntryHelper._getValueRetain(this, decompress, context);
+  }
+  @Override
+  public long getAddress() {
+    return ohAddrUpdater.get(this);
+  }
+  @Override
+  public boolean setAddress(long expectedAddr, long newAddr) {
+    return ohAddrUpdater.compareAndSet(this, expectedAddr, newAddr);
+  }
+  @Override
+  @Released
+  public void release() {
+    OffHeapRegionEntryHelper.releaseEntry(this);
+  }
+  @Override
+  public void returnToPool() {
+    // Deadcoded for now; never was working
+//    if (this instanceof VMThinRegionEntryLongKey) {
+//      factory.returnToPool((VMThinRegionEntryLongKey)this);
+//    }
+  }
+  protected long getlastModifiedField() {
+    return lastModifiedUpdater.get(this);
+  }
+  protected boolean compareAndSetLastModifiedField(long expectedValue, long newValue) {
+    return lastModifiedUpdater.compareAndSet(this, expectedValue, newValue);
+  }
+  /**
+   * @see HashEntry#getEntryHash()
+   */
+  public final int getEntryHash() {
+    return this.hash;
+  }
+  protected void setEntryHash(int v) {
+    this.hash = v;
+  }
+  /**
+   * @see HashEntry#getNextEntry()
+   */
+  public final HashEntry<Object, Object> getNextEntry() {
+    return this.next;
+  }
+  /**
+   * @see HashEntry#setNextEntry
+   */
+  public final void setNextEntry(final HashEntry<Object, Object> n) {
+    this.next = n;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // stats code
+  @Override
+  public final void updateStatsForGet(boolean hit, long time)
+  {
+    setLastAccessed(time);
+    if (hit) {
+      incrementHitCount();
+    } else {
+      incrementMissCount();
+    }
+  }
+  @Override
+  protected final void setLastModified(long lastModified) {
+    _setLastModified(lastModified);
+    if (!DISABLE_ACCESS_TIME_UPDATE_ON_PUT) {
+      setLastAccessed(lastModified);
+    }
+  }
+  private volatile long lastAccessed;
+  private volatile int hitCount;
+  private volatile int missCount;
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapUUIDKey> hitCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapUUIDKey.class, "hitCount");
+  private static final AtomicIntegerFieldUpdater<VersionedStatsRegionEntryOffHeapUUIDKey> missCountUpdater
+    = AtomicIntegerFieldUpdater.newUpdater(VersionedStatsRegionEntryOffHeapUUIDKey.class, "missCount");
+  @Override
+  public final long getLastAccessed() throws InternalStatisticsDisabledException {
+    return this.lastAccessed;
+  }
+  private void setLastAccessed(long lastAccessed) {
+    this.lastAccessed = lastAccessed;
+  }
+  @Override
+  public final long getHitCount() throws InternalStatisticsDisabledException {
+    return this.hitCount & 0xFFFFFFFFL;
+  }
+  @Override
+  public final long getMissCount() throws InternalStatisticsDisabledException {
+    return this.missCount & 0xFFFFFFFFL;
+  }
+  private void incrementHitCount() {
+    hitCountUpdater.incrementAndGet(this);
+  }
+  private void incrementMissCount() {
+    missCountUpdater.incrementAndGet(this);
+  }
+  @Override
+  public final void resetCounts() throws InternalStatisticsDisabledException {
+    hitCountUpdater.set(this,0);
+    missCountUpdater.set(this,0);
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  @Override
+  public final void txDidDestroy(long currTime) {
+    setLastModified(currTime);
+    setLastAccessed(currTime);
+    this.hitCount = 0;
+    this.missCount = 0;
+  }
+  @Override
+  public boolean hasStats() {
+    return true;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // versioned code
+  private VersionSource memberID;
+  private short entryVersionLowBytes;
+  private short regionVersionHighBytes;
+  private int regionVersionLowBytes;
+  private byte entryVersionHighByte;
+  private byte distributedSystemId;
+  public int getEntryVersion() {
+    return ((entryVersionHighByte << 16) & 0xFF0000) | (entryVersionLowBytes & 0xFFFF);
+  }
+  public long getRegionVersion() {
+    return (((long)regionVersionHighBytes) << 32) | (regionVersionLowBytes & 0x00000000FFFFFFFFL);
+  }
+  public long getVersionTimeStamp() {
+    return getLastModified();
+  }
+  public void setVersionTimeStamp(long time) {
+    setLastModified(time);
+  }
+  public VersionSource getMemberID() {
+    return this.memberID;
+  }
+  public int getDistributedSystemId() {
+    return this.distributedSystemId;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public void setVersions(VersionTag tag) {
+    this.memberID = tag.getMemberID();
+    int eVersion = tag.getEntryVersion();
+    this.entryVersionLowBytes = (short)(eVersion & 0xffff);
+    this.entryVersionHighByte = (byte)((eVersion & 0xff0000) >> 16);
+    this.regionVersionHighBytes = tag.getRegionVersionHighBytes();
+    this.regionVersionLowBytes = tag.getRegionVersionLowBytes();
+    if (!(tag.isGatewayTag()) && this.distributedSystemId == tag.getDistributedSystemId()) {
+      if (getVersionTimeStamp() <= tag.getVersionTimeStamp()) {
+        setVersionTimeStamp(tag.getVersionTimeStamp());
+      } else {
+        tag.setVersionTimeStamp(getVersionTimeStamp());
+      }
+    } else {
+      setVersionTimeStamp(tag.getVersionTimeStamp());
+    }
+    this.distributedSystemId = (byte)(tag.getDistributedSystemId() & 0xff);
+  }
+  public void setMemberID(VersionSource memberID) {
+    this.memberID = memberID;
+  }
+  @Override
+  public VersionStamp getVersionStamp() {
+    return this;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  public VersionTag asVersionTag() {
+    VersionTag tag = VersionTag.create(memberID);
+    tag.setEntryVersion(getEntryVersion());
+    tag.setRegionVersion(this.regionVersionHighBytes, this.regionVersionLowBytes);
+    tag.setVersionTimeStamp(getVersionTimeStamp());
+    tag.setDistributedSystemId(this.distributedSystemId);
+    return tag;
+  }
+  public void processVersionTag(LocalRegion r, VersionTag tag,
+      boolean isTombstoneFromGII, boolean hasDelta,
+      VersionSource thisVM, InternalDistributedMember sender, boolean checkForConflicts) {
+    basicProcessVersionTag(r, tag, isTombstoneFromGII, hasDelta, thisVM, sender, checkForConflicts);
+  }
+  @Override
+  public void processVersionTag(EntryEvent cacheEvent) {
+    // this keeps Eclipse happy.  without it the sender chain becomes confused
+    // while browsing this code
+    super.processVersionTag(cacheEvent);
+  }
+  /** get rvv internal high byte.  Used by region entries for transferring to storage */
+  public short getRegionVersionHighBytes() {
+    return this.regionVersionHighBytes;
+  }
+  /** get rvv internal low bytes.  Used by region entries for transferring to storage */
+  public int getRegionVersionLowBytes() {
+    return this.regionVersionLowBytes;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+  // key code
+  private final long keyMostSigBits;
+  private final long keyLeastSigBits;
+  @Override
+  public final Object getKey() {
+    return new UUID(this.keyMostSigBits, this.keyLeastSigBits);
+  }
+  @Override
+  public boolean isKeyEqual(Object k) {
+    if (k instanceof UUID) {
+      UUID uuid = (UUID)k;
+      return uuid.getLeastSignificantBits() == this.keyLeastSigBits && uuid.getMostSignificantBits() == this.keyMostSigBits;
+    }
+    return false;
+  }
+  // DO NOT modify this class. It was generated from LeafRegionEntry.cpp
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeap.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeap.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeap.java
index 76738d5..0af642d 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeap.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeap.java
@@ -53,5 +53,9 @@ public abstract class VersionedThinDiskLRURegionEntryHeap extends
     public RegionEntryFactory makeVersioned() {
       return this;
     }
+	@Override
+    public RegionEntryFactory makeOnHeap() {
+      return this;
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapIntKey.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapIntKey.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapIntKey.java
index 6e0baf6..83528f5 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapIntKey.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapIntKey.java
@@ -24,6 +24,7 @@ import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMa
 // lru: LRU
 // stats: STATS
 // versioned: VERSIONED
+// offheap: OFFHEAP
 // One of the following key macros must be defined:
 // key object: KEY_OBJECT
 // key int: KEY_INT
@@ -38,7 +39,8 @@ import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMa
  * that contains your build.xml.
  */
 public class VersionedThinDiskLRURegionEntryHeapIntKey extends VersionedThinDiskLRURegionEntryHeap {
-  public VersionedThinDiskLRURegionEntryHeapIntKey (RegionEntryContext context, int key, Object value
+  public VersionedThinDiskLRURegionEntryHeapIntKey (RegionEntryContext context, int key,
+      Object value
       ) {
     super(context,
           (value instanceof RecoveredEntry ? null : value)
@@ -56,10 +58,12 @@ public class VersionedThinDiskLRURegionEntryHeapIntKey extends VersionedThinDisk
   private static final AtomicLongFieldUpdater<VersionedThinDiskLRURegionEntryHeapIntKey> lastModifiedUpdater
     = AtomicLongFieldUpdater.newUpdater(VersionedThinDiskLRURegionEntryHeapIntKey.class, "lastModified");
   private volatile Object value;
-  protected final Object areGetValue() {
+  @Override
+  protected final Object getValueField() {
     return this.value;
   }
-  protected void areSetValue(Object v) {
+  @Override
+  protected void setValueField(Object v) {
     this.value = v;
   }
   protected long getlastModifiedField() {
@@ -190,8 +194,6 @@ public class VersionedThinDiskLRURegionEntryHeapIntKey extends VersionedThinDisk
                                                 Object value) {
     int oldSize = getEntrySize();
     int newSize = capacityController.entrySize( getKeyForSizing(), value);
-  //   GemFireCacheImpl.getInstance().getLoggerI18n().info("DEBUG updateEntrySize: oldSize=" + oldSize
-  //                                               + " newSize=" + newSize);
     setEntrySize(newSize);
     int delta = newSize - oldSize;
   //   if ( debug ) log( "updateEntrySize key=" + getKey()

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapLongKey.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapLongKey.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapLongKey.java
index 951cd22..48f1ea2 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapLongKey.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapLongKey.java
@@ -24,6 +24,7 @@ import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMa
 // lru: LRU
 // stats: STATS
 // versioned: VERSIONED
+// offheap: OFFHEAP
 // One of the following key macros must be defined:
 // key object: KEY_OBJECT
 // key int: KEY_INT
@@ -38,7 +39,8 @@ import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMa
  * that contains your build.xml.
  */
 public class VersionedThinDiskLRURegionEntryHeapLongKey extends VersionedThinDiskLRURegionEntryHeap {
-  public VersionedThinDiskLRURegionEntryHeapLongKey (RegionEntryContext context, long key, Object value
+  public VersionedThinDiskLRURegionEntryHeapLongKey (RegionEntryContext context, long key,
+      Object value
       ) {
     super(context,
           (value instanceof RecoveredEntry ? null : value)
@@ -56,10 +58,12 @@ public class VersionedThinDiskLRURegionEntryHeapLongKey extends VersionedThinDis
   private static final AtomicLongFieldUpdater<VersionedThinDiskLRURegionEntryHeapLongKey> lastModifiedUpdater
     = AtomicLongFieldUpdater.newUpdater(VersionedThinDiskLRURegionEntryHeapLongKey.class, "lastModified");
   private volatile Object value;
-  protected final Object areGetValue() {
+  @Override
+  protected final Object getValueField() {
     return this.value;
   }
-  protected void areSetValue(Object v) {
+  @Override
+  protected void setValueField(Object v) {
     this.value = v;
   }
   protected long getlastModifiedField() {
@@ -190,8 +194,6 @@ public class VersionedThinDiskLRURegionEntryHeapLongKey extends VersionedThinDis
                                                 Object value) {
     int oldSize = getEntrySize();
     int newSize = capacityController.entrySize( getKeyForSizing(), value);
-  //   GemFireCacheImpl.getInstance().getLoggerI18n().info("DEBUG updateEntrySize: oldSize=" + oldSize
-  //                                               + " newSize=" + newSize);
     setEntrySize(newSize);
     int delta = newSize - oldSize;
   //   if ( debug ) log( "updateEntrySize key=" + getKey()

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/31d1b20e/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapObjectKey.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapObjectKey.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapObjectKey.java
index 9efe8ba..e248d1b 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapObjectKey.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntryHeapObjectKey.java
@@ -24,6 +24,7 @@ import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMa
 // lru: LRU
 // stats: STATS
 // versioned: VERSIONED
+// offheap: OFFHEAP
 // One of the following key macros must be defined:
 // key object: KEY_OBJECT
 // key int: KEY_INT
@@ -38,7 +39,8 @@ import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMa
  * that contains your build.xml.
  */
 public class VersionedThinDiskLRURegionEntryHeapObjectKey extends VersionedThinDiskLRURegionEntryHeap {
-  public VersionedThinDiskLRURegionEntryHeapObjectKey (RegionEntryContext context, Object key, Object value
+  public VersionedThinDiskLRURegionEntryHeapObjectKey (RegionEntryContext context, Object key,
+      Object value
       ) {
     super(context,
           (value instanceof RecoveredEntry ? null : value)
@@ -56,10 +58,12 @@ public class VersionedThinDiskLRURegionEntryHeapObjectKey extends VersionedThinD
   private static final AtomicLongFieldUpdater<VersionedThinDiskLRURegionEntryHeapObjectKey> lastModifiedUpdater
     = AtomicLongFieldUpdater.newUpdater(VersionedThinDiskLRURegionEntryHeapObjectKey.class, "lastModified");
   private volatile Object value;
-  protected final Object areGetValue() {
+  @Override
+  protected final Object getValueField() {
     return this.value;
   }
-  protected void areSetValue(Object v) {
+  @Override
+  protected void setValueField(Object v) {
     this.value = v;
   }
   protected long getlastModifiedField() {
@@ -190,8 +194,6 @@ public class VersionedThinDiskLRURegionEntryHeapObjectKey extends VersionedThinD
                                                 Object value) {
     int oldSize = getEntrySize();
     int newSize = capacityController.entrySize( getKeyForSizing(), value);
-  //   GemFireCacheImpl.getInstance().getLoggerI18n().info("DEBUG updateEntrySize: oldSize=" + oldSize
-  //                                               + " newSize=" + newSize);
     setEntrySize(newSize);
     int delta = newSize - oldSize;
   //   if ( debug ) log( "updateEntrySize key=" + getKey()


Mime
View raw message