[exo-jcr-commits] exo-jcr SVN: r4343 - jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu May 5 04:38:09 EDT 2011


Author: tolusha
Date: 2011-05-05 04:38:08 -0400 (Thu, 05 May 2011)
New Revision: 4343

Modified:
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java
Log:
EXOJCR-1331: Cache can contain NullNodeData for root node after RDBMS restore

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java	2011-05-05 07:18:58 UTC (rev 4342)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java	2011-05-05 08:38:08 UTC (rev 4343)
@@ -63,6 +63,11 @@
    protected final RepositoryService repositoryService;
 
    /**
+    * Indicates if RDBMS restore in progress or not.
+    */
+   volatile private boolean isRestoreInProgress = false;
+
+   /**
     * Constructor RdbmsWorkspaceInitializer.
     */
    public RdbmsWorkspaceInitializer(WorkspaceEntry config, RepositoryEntry repConfig,
@@ -81,6 +86,17 @@
     * {@inheritDoc}
     */
    @Override
+   public boolean isWorkspaceInitialized()
+   {
+      // If someone invoke isWorkspaceInitialized() during restore then NullNodeData for root node will be pushed
+      // into the cache and will be there even restore is finished and data will be placed into DB. 
+      return isRestoreInProgress ? false : super.isWorkspaceInitialized();
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
    public NodeData initWorkspace() throws RepositoryException
    {
       if (isWorkspaceInitialized())
@@ -90,7 +106,15 @@
 
       long start = System.currentTimeMillis();
 
-      restoreAction();
+      isRestoreInProgress = true;
+      try
+      {
+         restoreAction();
+      }
+      finally
+      {
+         isRestoreInProgress = false;
+      }
 
       final NodeData root = (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
 



More information about the exo-jcr-commits mailing list