Author: nzamosenchuk
Date: 2009-12-25 06:46:14 -0500 (Fri, 25 Dec 2009)
New Revision: 1182
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerCacheLoader.java
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexChangesFilter.java
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexInfos.java
Log:
EXOJCR-334: IndexerCacheLoader updates index on prepare and does nothing on commit.
JbossCacheIndex filter and index infos pushes to cache only if transaction is present with
ACTIVE status or no transaction present. SearchManager doesn't store log before it is
started.
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
===================================================================
---
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2009-12-25
11:14:40 UTC (rev 1181)
+++
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2009-12-25
11:46:14 UTC (rev 1182)
@@ -137,11 +137,6 @@
protected IndexerChangesFilter changesFilter;
/**
- * ChangesLog Buffer (used for saves before start).
- */
- private List<ItemStateChangesLog> changesLogBuffer = new
ArrayList<ItemStateChangesLog>();
-
- /**
* Creates a new <code>SearchManager</code>.
*
* @param config
@@ -379,12 +374,8 @@
if (itemStates.getSize() > 0)
{
//Check if SearchManager started and filter configured
- if (changesFilter == null)
+ if (changesFilter != null)
{
- changesLogBuffer.add(itemStates);
- }
- else
- {
changesFilter.onSaveItems(itemStates);
}
}
@@ -461,16 +452,6 @@
}
initializeQueryHandler();
- if (changesLogBuffer.size() > 0)
- {
- for (ItemStateChangesLog bufferedChangesLog : changesLogBuffer)
- {
- onSaveItems(bufferedChangesLog);
- }
- changesLogBuffer.clear();
- changesLogBuffer = null;
- }
-
}
catch (RepositoryException e)
{
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerCacheLoader.java
===================================================================
---
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerCacheLoader.java 2009-12-25
11:14:40 UTC (rev 1181)
+++
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerCacheLoader.java 2009-12-25
11:46:14 UTC (rev 1182)
@@ -23,8 +23,6 @@
import
org.exoplatform.services.jcr.impl.storage.jbosscache.AbstractWriteOnlyCacheLoader;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
-import org.jboss.cache.CacheException;
-import org.jboss.cache.Fqn;
import org.jboss.cache.Modification;
import org.jboss.cache.Modification.ModificationType;
@@ -52,6 +50,15 @@
private QueryHandler parentHandler;
/**
+ * @see org.jboss.cache.loader.AbstractCacheLoader#commit(java.lang.Object)
+ */
+ @Override
+ public void commit(Object tx) throws Exception
+ {
+ // do nothing. Everything is done on prepare phase.
+ }
+
+ /**
* Inject dependencies needed for CacheLoader: SearchManagers and QueryHandlers.
*
* @param searchManager
@@ -70,31 +77,64 @@
}
/**
- * @see
org.exoplatform.services.jcr.impl.storage.jbosscache.AbstractWriteOnlyCacheLoader#put(org.jboss.cache.Fqn,
java.lang.Object, java.lang.Object)
+ * @see org.jboss.cache.loader.AbstractCacheLoader#prepare(java.lang.Object,
java.util.List, boolean)
*/
@Override
- public Object put(Fqn arg0, Object key, Object val) throws Exception
+ public void prepare(Object tx, List<Modification> modifications, boolean
onePhase) throws Exception
{
- log.info("Entering PUT.");
- try
+ // update index on prepare phase
+ for (Modification m : modifications)
{
- if (key.equals(JbossCacheIndexChangesFilter.LISTWRAPPER) && val
instanceof ChangesFilterListsWrapper)
+ // this is put-key-value modification
+ if (m.getType() == ModificationType.PUT_KEY_VALUE)
{
- if (log.isDebugEnabled())
+ if (m.getKey().equals(JbossCacheIndexChangesFilter.LISTWRAPPER)
+ && m.getValue() instanceof ChangesFilterListsWrapper)
{
- log.info("Received list wrapper, start indexing...");
+ if (log.isDebugEnabled())
+ {
+ log.info("Received list wrapper, start indexing...");
+ }
+ // updating index
+ ChangesFilterListsWrapper wrapper =
(ChangesFilterListsWrapper)m.getValue();
+ updateIndex(wrapper.getAddedNodes(), wrapper.getRemovedNodes(),
wrapper.getParentAddedNodes(), wrapper
+ .getParentRemovedNodes());
}
- ChangesFilterListsWrapper wrapper = (ChangesFilterListsWrapper)val;
- //System.out.println("UPDATE INDEX: "+wrapper.getAddedNodes() +
wrapper.getRemovedNodes());
- updateIndex(wrapper.getAddedNodes(), wrapper.getRemovedNodes(),
wrapper.getParentAddedNodes(), wrapper
- .getParentRemovedNodes());
}
}
- catch (Exception e)
+ }
+
+ /**
+ * @see
org.exoplatform.services.jcr.impl.storage.jbosscache.AbstractWriteOnlyCacheLoader#put(java.util.List)
+ */
+ @Override
+ public void put(List<Modification> modifications) throws Exception
+ {
+ // do nothing. Index is updated on prepare phase.
+ }
+
+ /**
+ * Switches Indexer mode from RO to RW, or from RW to RO
+ *
+ * @param ioMode
+ */
+ public void setMode(IndexerIoMode ioMode)
+ {
+ try
{
- e.printStackTrace();
+ if (handler != null)
+ {
+ handler.setIndexerIoMode(ioMode);
+ }
+ if (parentHandler != null)
+ {
+ parentHandler.setIndexerIoMode(ioMode);
+ }
}
- return null;
+ catch (IOException e)
+ {
+ log.error("Unable to set indexer mode to " + ioMode, e);
+ }
}
/**
@@ -158,48 +198,4 @@
}
}
- /**
- * Switches Indexer mode from RO to RW, or from RW to RO
- *
- * @param ioMode
- */
- public void setMode(IndexerIoMode ioMode)
- {
- try
- {
- if (handler != null)
- {
- handler.setIndexerIoMode(ioMode);
- }
- if (parentHandler != null)
- {
- parentHandler.setIndexerIoMode(ioMode);
- }
- }
- catch (IOException e)
- {
- log.error("Unable to set indexer mode to " + ioMode, e);
- }
- }
-
- /**
- * @see
org.exoplatform.services.jcr.impl.storage.jbosscache.AbstractWriteOnlyCacheLoader#put(java.util.List)
- */
- @Override
- public void put(List<Modification> modifications) throws Exception
- {
- }
-
- @Override
- public void prepare(Object tx, List<Modification> modifications, boolean
onePhase) throws Exception
- {
- log.info("Entering PREPARE.");
- for (Modification m : modifications)
- {
- if (m.getType() == ModificationType.PUT_KEY_VALUE)
- {
- put(m.getFqn(), m.getKey(), m.getValue());
- }
- }
- }
}
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexChangesFilter.java
===================================================================
---
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexChangesFilter.java 2009-12-25
11:14:40 UTC (rev 1181)
+++
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexChangesFilter.java 2009-12-25
11:46:14 UTC (rev 1182)
@@ -26,7 +26,6 @@
import org.exoplatform.services.jcr.impl.core.query.IndexingTree;
import org.exoplatform.services.jcr.impl.core.query.QueryHandler;
import org.exoplatform.services.jcr.impl.core.query.SearchManager;
-import
org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache;
import org.exoplatform.services.jcr.util.IdGenerator;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
@@ -155,7 +154,7 @@
cache.put(id, LISTWRAPPER, new ChangesFilterListsWrapper(addedNodes,
removedNodes, parentAddedNodes,
parentRemovedNodes));
}
- else
+ else if (tm.getStatus() == Status.STATUS_NO_TRANSACTION)
{
// no active transaction, creating new one
tm.begin();
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexInfos.java
===================================================================
---
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexInfos.java 2009-12-25
11:14:40 UTC (rev 1181)
+++
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexInfos.java 2009-12-25
11:46:14 UTC (rev 1182)
@@ -154,7 +154,7 @@
{
cache.put(namesFqn, LIST_KEY, getNames());
}
- else
+ else if (tm.getStatus() == Status.STATUS_NO_TRANSACTION)
{
// no active transaction, creating new one
tm.begin();