[exo-jcr-commits] exo-jcr SVN: r6000 - in jcr/branches/1.14.x/patch/1.14.8-GA: JCR-1731 and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Mar 30 09:15:57 EDT 2012
Author: areshetnyak
Date: 2012-03-30 09:15:56 -0400 (Fri, 30 Mar 2012)
New Revision: 6000
Added:
jcr/branches/1.14.x/patch/1.14.8-GA/JCR-1731/
jcr/branches/1.14.x/patch/1.14.8-GA/JCR-1731/JCR-1731.patch
Log:
JCR-1731 : Patch for fix probleb with "JbossCache in CacheableLockManagerImpl is not load data from cache loader after second start repository (stop and start on repository) in "jbosscache-shareable" mode." was propoused.
Added: jcr/branches/1.14.x/patch/1.14.8-GA/JCR-1731/JCR-1731.patch
===================================================================
--- jcr/branches/1.14.x/patch/1.14.8-GA/JCR-1731/JCR-1731.patch (rev 0)
+++ jcr/branches/1.14.x/patch/1.14.8-GA/JCR-1731/JCR-1731.patch 2012-03-30 13:15:56 UTC (rev 6000)
@@ -0,0 +1,395 @@
+Index: exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java
+===================================================================
+--- exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java (revision 5992)
++++ exo.jcr.component.core.impl.infinispan.v5/src/main/java/org/exoplatform/services/jcr/impl/core/lock/infinispan/ISPNCacheableLockManagerImpl.java (working copy)
+@@ -119,7 +119,6 @@
+ configureJDBCCacheLoader(config.getLockManager());
+
+ cache = factory.createCache("L" + config.getUniqueName().replace("_", ""), config.getLockManager());
+- PrivilegedISPNCacheHelper.start(cache);
+ }
+ else
+ {
+@@ -350,11 +349,19 @@
+ LOG.warn("CacheLoader DataSource " + INFINISPAN_JDBC_CL_DATASOURCE + " is not configured.");
+ }
+ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void start()
++ {
++ PrivilegedISPNCacheHelper.start(cache);
++ super.start();
++ }
+
+ /**
+ * {@inheritDoc}
+ */
+- @Override
+ public void stop()
+ {
+ super.stop();
+Index: exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestLockImpl.java
+===================================================================
+--- exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestLockImpl.java (revision 5992)
++++ exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestLockImpl.java (working copy)
+@@ -167,5 +167,37 @@
+ // node should not be locked after removing lock data from lock tables
+ assertFalse(node.isLocked());
+ }
++
++ public void testLoadLocksAfterStopStart() throws Exception
++ {
++ Node node = session.getRootNode().addNode("testLock");
++ node.addMixin("mix:lockable");
++ node.addMixin("mix:referenceable");
++ session.save();
+
++ node.lock(false, false);
++ session.save();
++
++ assertTrue(node.isLocked());
++
++ AbstractCacheableLockManager lockManager =
++ (AbstractCacheableLockManager)repository.getWorkspaceContainer("ws").getComponent(
++ AbstractCacheableLockManager.class);
++
++ lockManager.stop();
++
++ try
++ {
++ assertFalse(lockManager.lockExist(node.getUUID()));
++ }
++ catch (IllegalStateException e)
++ {
++ // not check for ISPN cache.
++ }
++
++ lockManager.start();
++
++ assertTrue(lockManager.lockExist(node.getUUID()));
++ }
++
+ }
+Index: exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config-jbc.xml
+===================================================================
+--- exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config-jbc.xml (revision 5992)
++++ exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config-jbc.xml (working copy)
+@@ -77,10 +77,10 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1_ws" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1_ws_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+@@ -136,14 +136,14 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1_ws1" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1_ws1_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+- <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr1" />
++ <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" />
+ <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+ </properties>
+ </lock-manager>
+@@ -195,14 +195,14 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1_ws2" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1_ws2_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+- <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr2" />
++ <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" />
+ <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+ </properties>
+ </lock-manager>
+@@ -276,14 +276,14 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1_ws3" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1_ws3_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+- <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr3" />
++ <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" />
+ <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+ </properties>
+ </lock-manager>
+@@ -345,10 +345,10 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2_ws" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_ws_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+@@ -403,14 +403,14 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2_ws1" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_ws1_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+- <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr1db2" />
++ <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcrdb2" />
+ <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+ </properties>
+ </lock-manager>
+@@ -481,10 +481,10 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1tck_ws" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1tck" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1tck_ws_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1tck_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+@@ -548,14 +548,14 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1tck_ws1" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1tck" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1tck_ws1_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1tck_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+- <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr1tck" />
++ <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcrtck" />
+ <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+ </properties>
+ </lock-manager>
+@@ -618,14 +618,14 @@
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+- <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1tck_ws2" />
++ <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db1tck" />
+ <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+ <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+- <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1tck_ws2_pk" />
++ <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db1tck_pk" />
+ <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+ <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+ <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+- <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr2tck" />
++ <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcrtck" />
+ <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+ </properties>
+ </lock-manager>
+Index: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
+===================================================================
+--- exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java (revision 5992)
++++ exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java (working copy)
+@@ -208,6 +208,7 @@
+ }
+ });
+ }
++
+ PrivilegedJBossCacheHelper.create(cache);
+ if (cache.getCacheStatus().startAllowed())
+ {
+@@ -215,13 +216,12 @@
+ addCacheLoader();
+ PrivilegedJBossCacheHelper.start(cache);
+ }
+-
+- createStructuredNode(lockRoot);
+ }
+ else
+ {
+ throw new RepositoryConfigurationException("Cache configuration not found");
+ }
++
+
+ this.getNumLocks = new LockActionNonTxAware<Integer, Object>()
+ {
+@@ -479,6 +479,7 @@
+ }
+
+ ControllerCacheLoader ccl = new ControllerCacheLoader(currentCL);
++
+ List<IndividualCacheLoaderConfig> newConfig = new ArrayList<IndividualCacheLoaderConfig>(1);
+ // create CacheLoaderConfig
+ IndividualCacheLoaderConfig cclConfig = new IndividualCacheLoaderConfig();
+@@ -498,11 +499,62 @@
+ LOG.info("The configured cache loader has been encapsulated successfully");
+ }
+ }
++
++ private ControllerCacheLoader getControllerCacheLoader()
++ {
++ CacheLoaderConfig config = cache.getConfiguration().getCacheLoaderConfig();
++ List<IndividualCacheLoaderConfig> oldConfigs;
++ if (config == null || (oldConfigs = config.getIndividualCacheLoaderConfigs()) == null || oldConfigs.isEmpty())
++ {
++ if (LOG.isInfoEnabled())
++ {
++ LOG.info("No cache loader has been defined, thus no need to encapsulate any cache loader.");
++ }
++ return null;
++ }
++ CacheLoaderManager clm =
++ ((CacheSPI<Serializable, Object>)cache).getComponentRegistry().getComponent(CacheLoaderManager.class);
++ if (clm == null)
++ {
++ LOG.error("The CacheLoaderManager cannot be found");
++ return null;
++ }
++ CacheLoader currentCL = clm.getCacheLoader();
++ if (currentCL == null)
++ {
++ LOG.error("The CacheLoader cannot be found");
++ return null;
++ }
+
++ return (ControllerCacheLoader)currentCL;
++ }
++
+ /**
+ * {@inheritDoc}
+ */
+- @Override
++ public void start()
++ {
++ ControllerCacheLoader ccl = getControllerCacheLoader();
++ if (ccl != null)
++ {
++ try
++ {
++ ccl.enableDirectAccess();
++ createStructuredNode(lockRoot);
++ getLockList();
++ }
++ finally
++ {
++ ccl.disableDirectAccess();
++ }
++ }
++
++ super.start();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
+ public void stop()
+ {
+ super.stop();
+Index: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/ControllerCacheLoader.java
+===================================================================
+--- exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/ControllerCacheLoader.java (revision 5992)
++++ exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/ControllerCacheLoader.java (working copy)
+@@ -31,6 +31,7 @@
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
++import java.util.concurrent.atomic.AtomicBoolean;
+
+ /**
+ * This {@link CacheLoader} is used to encapsulate the {@link CacheLoader} used to persist the data of the Locks.
+@@ -50,6 +51,11 @@
+ public class ControllerCacheLoader implements CacheLoader
+ {
+ /**
++ * Thread local parameter for allow direct access to the data from cache loader.
++ */
++ private final ThreadLocal<Boolean> allowDirectAccess = new ThreadLocal<Boolean>();
++
++ /**
+ * The nested cache loader
+ */
+ private final CacheLoader cl;
+@@ -103,6 +109,11 @@
+ return cl.exists(name);
+ }
+ }
++ else if (allowDirectAccess.get() != null && allowDirectAccess.get())
++ {
++ return cl.exists(name);
++ }
++
+ // All the data is loaded at startup, so no need to call the nested cache loader for another
+ // cache status other than CacheStatus.STARTING
+ return false;
+@@ -130,6 +141,11 @@
+ return cl.get(name);
+ }
+ }
++ else if (allowDirectAccess.get() != null && allowDirectAccess.get())
++ {
++ return cl.get(name);
++ }
++
+ // All the data is loaded at startup, so no need to call the nested cache loader for another
+ // cache status other than CacheStatus.STARTING
+ return null;
+@@ -305,4 +321,21 @@
+ cl.stop();
+ }
+
++
++ /**
++ * Enable direct access to the data from cache loader.
++ */
++ protected void enableDirectAccess()
++ {
++ allowDirectAccess.set(true);
++ }
++
++ /**
++ * Disable direct access to the data from cache loader.
++ */
++ protected void disableDirectAccess()
++ {
++ allowDirectAccess.set(null);
++ }
++
+ }
More information about the exo-jcr-commits
mailing list