[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