You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by nn...@apache.org on 2016/07/13 19:04:39 UTC
incubator-geode git commit: GEODE-1587: Replaced AtomicInteger with
AtomicIntegerFieldUpdater
Repository: incubator-geode
Updated Branches:
refs/heads/develop 31336f15a -> c4cf82101
GEODE-1587: Replaced AtomicInteger with AtomicIntegerFieldUpdater
* Use of AtomicIntegerFieldUpdater decereased the memory overhead per entry during index creation
This closes #191
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/c4cf8210
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/c4cf8210
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/c4cf8210
Branch: refs/heads/develop
Commit: c4cf821018e5727323f7819b783677f4dd8da21f
Parents: 31336f1
Author: nabarun <nn...@pivotal.io>
Authored: Mon Jun 27 10:25:20 2016 -0700
Committer: nabarun <nn...@pivotal.io>
Committed: Wed Jul 13 12:03:37 2016 -0700
----------------------------------------------------------------------
.../query/internal/index/AbstractIndex.java | 29 +++++++++++---------
1 file changed, 16 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/c4cf8210/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/AbstractIndex.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/AbstractIndex.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/AbstractIndex.java
index 393428b..6c0d509 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/AbstractIndex.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/AbstractIndex.java
@@ -24,7 +24,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -96,7 +96,10 @@ import com.gemstone.gemfire.pdx.internal.PdxString;
public abstract class AbstractIndex implements IndexProtocol
{
private static final Logger logger = LogService.getLogger();
-
+
+ private static final AtomicIntegerFieldUpdater<RegionEntryToValuesMap> atomicUpdater = AtomicIntegerFieldUpdater
+ .newUpdater(RegionEntryToValuesMap.class, "numValues");
+
final String indexName;
final Region region;
@@ -1421,7 +1424,7 @@ public abstract class AbstractIndex implements IndexProtocol
* @return true if limit is satisfied.
*/
protected boolean verifyLimit(Collection result, int limit,
- ExecutionContext context) {
+ ExecutionContext context) {
if (limit > 0) {
/* if (!context.isDistinct()) {
return ((Bag)result).size() == limit;
@@ -1737,7 +1740,7 @@ public abstract class AbstractIndex implements IndexProtocol
{
protected Map map;
private boolean useList;
- private AtomicInteger numValues = new AtomicInteger(0);
+ volatile int numValues;
RegionEntryToValuesMap(boolean useList) {
this.map = new ConcurrentHashMap(2, 0.75f, 1);
@@ -1786,7 +1789,7 @@ public abstract class AbstractIndex implements IndexProtocol
coll.add(value);
map.put(entry, coll);
}
- numValues.incrementAndGet();
+ atomicUpdater.incrementAndGet(this);
}
public void addAll(RegionEntry entry, Collection values)
@@ -1796,7 +1799,7 @@ public abstract class AbstractIndex implements IndexProtocol
Collection coll = useList?new ArrayList(values.size()):new IndexConcurrentHashSet(values.size(), 0.75f, 1);
coll.addAll(values);
map.put(entry, coll);
- numValues.addAndGet(values.size());
+ atomicUpdater.addAndGet(this,values.size());
} else if (object instanceof Collection) {
Collection coll = (Collection) object;
// If its a list query might get ConcurrentModificationException.
@@ -1815,7 +1818,7 @@ public abstract class AbstractIndex implements IndexProtocol
coll.add(object);
map.put(entry, coll);
}
- numValues.addAndGet(values.size());
+ atomicUpdater.addAndGet(this,values.size());
}
public Object get(RegionEntry entry)
@@ -1853,14 +1856,14 @@ public abstract class AbstractIndex implements IndexProtocol
if (coll.size() == 0) {
map.remove(entry);
}
- numValues.decrementAndGet();
+ atomicUpdater.decrementAndGet(this);
}
}
else {
if (object.equals(value)) {
map.remove(entry);
}
- this.numValues.decrementAndGet();
+ atomicUpdater.decrementAndGet(this);
}
}
@@ -1868,7 +1871,7 @@ public abstract class AbstractIndex implements IndexProtocol
{
Object retVal = map.remove(entry);
if (retVal != null) {
- numValues.addAndGet((retVal instanceof Collection) ?
+ atomicUpdater.addAndGet(this,(retVal instanceof Collection) ?
- ((Collection) retVal).size() : -1 );
}
return retVal;
@@ -1889,7 +1892,7 @@ public abstract class AbstractIndex implements IndexProtocol
public int getNumValues()
{
- return this.numValues.get();
+ return atomicUpdater.get(this);
}
public int getNumEntries()
@@ -2151,7 +2154,7 @@ public abstract class AbstractIndex implements IndexProtocol
public void clear()
{
map.clear();
- this.numValues.set(0);
+ atomicUpdater.set(this,0);
}
public Set entrySet()
@@ -2168,7 +2171,7 @@ public abstract class AbstractIndex implements IndexProtocol
public void replace(RegionEntry entry, Object values) {
int numOldValues = getNumValues(entry);
this.map.put(entry, values);
- this.numValues.addAndGet(((values instanceof Collection) ? ((Collection) values)
+ atomicUpdater.addAndGet(this,((values instanceof Collection) ? ((Collection) values)
.size() : 1) - numOldValues);
}
}