Author: nzamosenchuk
Date: 2011-01-19 03:00:16 -0500 (Wed, 19 Jan 2011)
New Revision: 3818
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java
Log:
EXOJCR-1134: fixed memory leak by removing from cache stale data.
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java 2011-01-19
07:40:16 UTC (rev 3817)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java 2011-01-19
08:00:16 UTC (rev 3818)
@@ -62,7 +62,9 @@
final boolean debugEnabled = log.isDebugEnabled();
if (debugEnabled)
+ {
log.debug("start pushing in-memory state to cache cacheLoader
collection");
+ }
// merging all lists stored in memory
Collection<NodeSPI> children = cache.getRoot().getChildren();
@@ -89,13 +91,21 @@
parentRemovedNodes.addAll(listsWrapper.getParentAddedNodes());
}
}
- //TODO: recover logic is here, lists are: removedNodes and addedNodes
String id = IdGenerator.generate();
String id = IdGenerator.generate();
cache.put(Fqn.fromRelativeElements(wsChildren.getFqn(), id),
JBossCacheIndexChangesFilter.LISTWRAPPER, new ChangesFilterListsWrapper(addedNodes,
removedNodes, parentAddedNodes, parentRemovedNodes));
+ // Once we put the merged changes into the cache we can remove other
changes from the cache
+ for (NodeSPI aChildren : children)
+ {
+ // Remove the node from the cache and do it asynchronously
+
cache.getInvocationContext().getOptionOverrides().setForceAsynchronous(true);
+ cache.removeNode(aChildren.getFqn());
+ }
}
if (debugEnabled)
+ {
log.debug("in-memory state passed to cache cacheLoader
successfully");
+ }
return null;
}
};
Show replies by date