[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