[exo-jcr-commits] exo-jcr SVN: r4910 - in jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl: rdbms and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Sep 14 04:29:13 EDT 2011


Author: areshetnyak
Date: 2011-09-14 04:29:13 -0400 (Wed, 14 Sep 2011)
New Revision: 4910

Modified:
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java
Log:
EXOJCR-1487 : Repository was suspended for use case of RDBMS restore workspace if using single-db. Suspending of repository is necessary to avoid inconsistency DB, because in during RDBMS restoring is removing constraints on DB. 

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java	2011-09-14 07:17:22 UTC (rev 4909)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java	2011-09-14 08:29:13 UTC (rev 4910)
@@ -31,7 +31,6 @@
 import org.exoplatform.services.jcr.config.SimpleParameterEntry;
 import org.exoplatform.services.jcr.config.WorkspaceEntry;
 import org.exoplatform.services.jcr.config.WorkspaceInitializerEntry;
-import org.exoplatform.services.jcr.core.ManageableRepository;
 import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
 import org.exoplatform.services.jcr.ext.backup.BackupChain;
 import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
@@ -954,68 +953,39 @@
 
       WorkspaceInitializerEntry wiEntry = new WorkspaceInitializerEntry();
 
-      try
+      if ((Class.forName(fBackupType).equals(FullBackupJob.class)))
       {
-         if ((Class.forName(fBackupType).equals(FullBackupJob.class)))
-         {
-            // set the initializer SysViewWorkspaceInitializer
-            wiEntry.setType(SysViewWorkspaceInitializer.class.getCanonicalName());
+         // set the initializer SysViewWorkspaceInitializer
+         wiEntry.setType(SysViewWorkspaceInitializer.class.getCanonicalName());
 
-            List<SimpleParameterEntry> wieParams = new ArrayList<SimpleParameterEntry>();
-            wieParams.add(new SimpleParameterEntry(SysViewWorkspaceInitializer.RESTORE_PATH_PARAMETER, pathBackupFile));
+         List<SimpleParameterEntry> wieParams = new ArrayList<SimpleParameterEntry>();
+         wieParams.add(new SimpleParameterEntry(SysViewWorkspaceInitializer.RESTORE_PATH_PARAMETER, pathBackupFile));
 
-            wiEntry.setParameters(wieParams);
-         }
-         else if ((Class.forName(fBackupType)
-                  .equals(org.exoplatform.services.jcr.ext.backup.impl.rdbms.FullBackupJob.class)))
-         {
-            // set state SUSPENDED to other workspaces if singledb
-            if (workspaceEntry.getContainer().getParameterBoolean("multi-db") == false)
-            {
-               defRep.setState(ManageableRepository.SUSPENDED);
-            }
-            // set the initializer RdbmsWorkspaceInitializer
-            wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
+         wiEntry.setParameters(wieParams);
+      }
+      else if ((Class.forName(fBackupType)
+               .equals(org.exoplatform.services.jcr.ext.backup.impl.rdbms.FullBackupJob.class)))
+      {
+         // set the initializer RdbmsWorkspaceInitializer
+         wiEntry.setType(RdbmsWorkspaceInitializer.class.getCanonicalName());
 
-            List<SimpleParameterEntry> wieParams = new ArrayList<SimpleParameterEntry>();
-            wieParams.add(new SimpleParameterEntry(RdbmsWorkspaceInitializer.RESTORE_PATH_PARAMETER, new File(
-                     pathBackupFile).getParent()));
+         List<SimpleParameterEntry> wieParams = new ArrayList<SimpleParameterEntry>();
+         wieParams.add(new SimpleParameterEntry(RdbmsWorkspaceInitializer.RESTORE_PATH_PARAMETER, new File(
+                  pathBackupFile).getParent()));
 
-            wiEntry.setParameters(wieParams);
-         }
+         wiEntry.setParameters(wieParams);
+      }
 
-         workspaceEntry.setInitializer(wiEntry);
+      workspaceEntry.setInitializer(wiEntry);
 
-         //restore
-         defRep.configWorkspace(workspaceEntry);
-         defRep.createWorkspace(workspaceEntry.getName());
+      //restore
+      defRep.configWorkspace(workspaceEntry);
+      defRep.createWorkspace(workspaceEntry.getName());
 
-         //set original workspace initializer
-         WorkspaceContainerFacade wcf = defRep.getWorkspaceContainer(workspaceEntry.getName());
-         WorkspaceEntry createdWorkspaceEntry = (WorkspaceEntry) wcf.getComponent(WorkspaceEntry.class);
-         createdWorkspaceEntry.setInitializer(wieOriginal);
-      }
-      finally
-      {
-         try
-         {
-            if (workspaceEntry.getContainer().getParameterBoolean("multi-db") == false)
-            {
-               if (defRep.getState() != ManageableRepository.ONLINE)
-               {
-                  defRep.setState(ManageableRepository.ONLINE);
-               }
-            }
-         }
-         catch (RepositoryException e)
-         {
-            log.error("Con not set ONLYNE state for repository +\"" + defRep.getName() + "\"", e);
-         }
-         catch (RepositoryConfigurationException e)
-         {
-            log.error("Con not set ONLYNE state for repository +\"" + defRep.getName() + "\"", e);
-         }
-      }
+      //set original workspace initializer
+      WorkspaceContainerFacade wcf = defRep.getWorkspaceContainer(workspaceEntry.getName());
+      WorkspaceEntry createdWorkspaceEntry = (WorkspaceEntry) wcf.getComponent(WorkspaceEntry.class);
+      createdWorkspaceEntry.setInitializer(wieOriginal);
    }
 
    private void incrementalRestore(String pathBackupFile, String repositoryName, String workspaceName)

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-09-14 07:17:22 UTC (rev 4909)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java	2011-09-14 08:29:13 UTC (rev 4910)
@@ -154,8 +154,20 @@
       List<Backupable> backupableComponents =
          repository.getWorkspaceContainer(workspaceName).getComponentInstancesOfType(Backupable.class);
       
+      boolean isRepositorySuspended = false;
+      Throwable throwable = null;
       try
       {
+         // set state SUSPENDED to other workspaces if singledb
+         if (workspaceEntry.getContainer().getParameterBoolean("multi-db") == false)
+         {
+            if (repositoryEntry.getWorkspaceEntries().size() != 1)
+            {
+               repository.setState(ManageableRepository.SUSPENDED);
+               isRepositorySuspended = true;
+            }
+         }
+
          // restore all components
          for (Backupable component : backupableComponents)
          {
@@ -179,6 +191,8 @@
       }
       catch (Throwable e)
       {
+         throwable = e;
+
          for (DataRestore restorer : dataRestorers)
          {
             try
@@ -206,6 +220,26 @@
                log.error("Can't close restorer", e);
             }
          }
+
+         try
+         {
+            if (isRepositorySuspended)
+            {
+               repository.setState(ManageableRepository.ONLINE);
+            }
+         }
+         catch (RepositoryException e)
+         {
+            if (throwable == null)
+            {
+               log.error("Con not set ONLYNE state for repository " + repository.getConfiguration().getName(), e);
+            }
+            else
+            {
+               throw new RepositoryException("Con not set ONLYNE state for repository "
+                        + repository.getConfiguration().getName(), e);
+            }
+         }
       }
    }
 }



More information about the exo-jcr-commits mailing list