[exo-jcr-commits] exo-jcr SVN: r973 - jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Dec 9 11:14:33 EST 2009
Author: nzamosenchuk
Date: 2009-12-09 11:14:33 -0500 (Wed, 09 Dec 2009)
New Revision: 973
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerCacheLoader.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java
Log:
EXOJCR-291: Added code to notify Indexer's mode (RO/RW) on cache creation.
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerCacheLoader.java 2009-12-09 15:47:19 UTC (rev 972)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerCacheLoader.java 2009-12-09 16:14:33 UTC (rev 973)
@@ -144,6 +144,7 @@
*/
public void setMode(IndexerIoMode ioMode)
{
+ log.info("Setting indexer mode to: "+ioMode);
if (handler != null)
{
try
Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java 2009-12-09 15:47:19 UTC (rev 972)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java 2009-12-09 16:14:33 UTC (rev 973)
@@ -19,11 +19,15 @@
package org.exoplatform.services.jcr.impl.core.query.jbosscache;
import org.exoplatform.services.jcr.impl.core.query.IndexerIoMode;
+import org.exoplatform.services.jcr.util.IdGenerator;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.jboss.cache.Fqn;
import org.jboss.cache.NodeSPI;
import org.jboss.cache.loader.SingletonStoreCacheLoader;
+import org.jboss.cache.notifications.annotation.CacheListener;
+import org.jboss.cache.notifications.annotation.CacheStarted;
+import org.jboss.cache.notifications.event.Event;
import java.util.Collection;
import java.util.HashSet;
@@ -37,24 +41,42 @@
*/
public class IndexerSingletonStoreCacheLoader extends SingletonStoreCacheLoader
{
-
private final Log log = ExoLogger.getLogger(this.getClass().getName());
+ @CacheListener
+ public class InitialStateListener
+ {
+ /**
+ * Cache started, check whether the node is the coordinator and set indexer mode.
+ */
+ @CacheStarted
+ public void cacheStarted(Event e)
+ {
+ // set whether this cluster node is writable or not
+ setIndexerMode(cache.getRPCManager().isCoordinator());
+ }
+ }
+
+ /**
+ * @see org.jboss.cache.loader.SingletonStoreCacheLoader#activeStatusChanged(boolean)
+ */
@Override
protected void activeStatusChanged(boolean newActiveState) throws PushStateException
{
// at first change indexer mode
- // get base cache loader that is configured under SingletonStoreCacheLoader
- // if it is IndexerCacheLoader need to call setMode(ioMode)
- if (getCacheLoader() instanceof IndexerCacheLoader)
- {
- // if newActiveState is true IndexerCacheLoader is coordinator with write enabled;
- ((IndexerCacheLoader)getCacheLoader()).setMode(newActiveState ? IndexerIoMode.READ_WRITE
- : IndexerIoMode.READ_ONLY);
- }
+ setIndexerMode(newActiveState);
// and them push states if needed
super.activeStatusChanged(newActiveState);
+ }
+ /**
+ * @see org.jboss.cache.loader.SingletonStoreCacheLoader#create()
+ */
+ @Override
+ public void create() throws Exception
+ {
+ super.create();
+ cache.addCacheListener(new InitialStateListener());
}
@Override
@@ -73,9 +95,8 @@
final Set<String> addedNodes = new HashSet<String>();
final Set<String> parentRemovedNodes = new HashSet<String>();
final Set<String> parentAddedNodes = new HashSet<String>();
- // merging all lists stored in memory
- //TODO: re-write: lists are now stored in wrapper.
- Collection<NodeSPI> children = cache.getRoot().getChildrenDirect();
+ // merging all lists stored in memory
+ Collection<NodeSPI> children = cache.getRoot().getChildren();
for (NodeSPI aChildren : children)
{
Fqn<?> fqn = aChildren.getFqn();
@@ -92,11 +113,31 @@
parentRemovedNodes.addAll(listsWrapper.getParentAddedNodes());
};
}
- //TODO: recover logic is here, lists are: removedNodes and addedNodes
+ //TODO: recover logic is here, lists are: removedNodes and addedNodes String id = IdGenerator.generate();
+ String id = IdGenerator.generate();
+ cache.put(id, JbossCacheIndexChangesFilter.LISTWRAPPER, new ChangesFilterListsWrapper(addedNodes,
+ removedNodes, parentAddedNodes, parentRemovedNodes));
if (debugEnabled)
log.debug("in-memory state passed to cache cacheLoader successfully");
return null;
}
};
}
+
+ /**
+ * Sets/changes indexer mode
+ *
+ * @param writeEnabled
+ */
+ protected void setIndexerMode(boolean writeEnabled)
+ {
+ // get base cache loader that is configured under SingletonStoreCacheLoader
+ // if it is IndexerCacheLoader need to call setMode(ioMode)
+ if (getCacheLoader() instanceof IndexerCacheLoader)
+ {
+ // if newActiveState is true IndexerCacheLoader is coordinator with write enabled;
+ ((IndexerCacheLoader)getCacheLoader()).setMode(writeEnabled ? IndexerIoMode.READ_WRITE
+ : IndexerIoMode.READ_ONLY);
+ }
+ }
}
More information about the exo-jcr-commits
mailing list