[exo-jcr-commits] exo-jcr SVN: r4908 - in jcr/trunk/exo.jcr.component.ext/src: test/java/org/exoplatform/services/jcr/ext/backup and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Sep 14 03:05:54 EDT 2011
Author: areshetnyak
Date: 2011-09-14 03:05:54 -0400 (Wed, 14 Sep 2011)
New Revision: 4908
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/JobExistingWorkspaceSameConfigRestore.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.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 06:03:55 UTC (rev 4907)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java 2011-09-14 07:05:54 UTC (rev 4908)
@@ -954,39 +954,68 @@
WorkspaceInitializerEntry wiEntry = new WorkspaceInitializerEntry();
- if ((Class.forName(fBackupType).equals(FullBackupJob.class)))
+ try
{
- // set the initializer SysViewWorkspaceInitializer
- wiEntry.setType(SysViewWorkspaceInitializer.class.getCanonicalName());
+ if ((Class.forName(fBackupType).equals(FullBackupJob.class)))
+ {
+ // 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 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 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());
- 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);
+ //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);
+ }
+ }
}
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/JobExistingWorkspaceSameConfigRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingWorkspaceSameConfigRestore.java 2011-09-14 06:03:55 UTC (rev 4907)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingWorkspaceSameConfigRestore.java 2011-09-14 07:05:54 UTC (rev 4908)
@@ -74,12 +74,21 @@
try
{
- repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .setState(ManageableRepository.SUSPENDED);
+ ManageableRepository repository = repositoryService.getRepository(repositoryName);
+ if (wEntry.getContainer().getParameterBoolean("multi-db") == false)
+ {
+ repository.setState(ManageableRepository.SUSPENDED);
+ }
+ else
+ {
+ repository.getWorkspaceContainer(wEntry.getName()).setState(
+ ManageableRepository.SUSPENDED);
+ }
+
// get all restorers
List<Backupable> backupable =
- repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
+ repository.getWorkspaceContainer(wEntry.getName())
.getComponentInstancesOfType(Backupable.class);
File storageDir = backupChainLog.getBackupConfig().getBackupDir();
@@ -105,16 +114,23 @@
restorer.commit();
}
- repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .setState(ManageableRepository.ONLINE);
+ if (wEntry.getContainer().getParameterBoolean("multi-db") == false)
+ {
+ repository.setState(ManageableRepository.ONLINE);
+ }
+ else
+ {
+ repository.getWorkspaceContainer(wEntry.getName()).setState(
+ ManageableRepository.ONLINE);
+ }
// incremental restore
DataManager dataManager =
- (WorkspacePersistentDataManager)repositoryService.getRepository(repositoryName)
- .getWorkspaceContainer(wEntry.getName()).getComponent(WorkspacePersistentDataManager.class);
+ (WorkspacePersistentDataManager) repository.getWorkspaceContainer(wEntry.getName()).getComponent(
+ WorkspacePersistentDataManager.class);
FileCleanerHolder fileCleanHolder =
- (FileCleanerHolder)repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
+ (FileCleanerHolder) repository.getWorkspaceContainer(wEntry.getName())
.getComponent(FileCleanerHolder.class);
JCRRestore restorer = new JCRRestore(dataManager, fileCleanHolder.getFileCleaner());
@@ -157,8 +173,22 @@
try
{
- repositoryService.getRepository(repositoryName).getWorkspaceContainer(wEntry.getName())
- .setState(ManageableRepository.ONLINE);
+ ManageableRepository repository = repositoryService.getRepository(repositoryName);
+
+ if (wEntry.getContainer().getParameterBoolean("multi-db") == false)
+ {
+ if (repository.getState() != ManageableRepository.ONLINE)
+ {
+ repository.setState(ManageableRepository.ONLINE);
+ }
+ }
+ else
+ {
+ if (repository.getWorkspaceContainer(wEntry.getName()).getState() != ManageableRepository.ONLINE)
+ {
+ repository.getWorkspaceContainer(wEntry.getName()).setState(ManageableRepository.ONLINE);
+ }
+ }
}
catch (RepositoryException e)
{
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java 2011-09-14 06:03:55 UTC (rev 4907)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java 2011-09-14 07:05:54 UTC (rev 4908)
@@ -20,6 +20,7 @@
import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.commons.utils.PrivilegedSystemHelper;
import org.exoplatform.services.jcr.config.RepositoryEntry;
+import org.exoplatform.services.jcr.config.SimpleParameterEntry;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.jcr.ext.backup.impl.JobRepositoryRestore;
@@ -31,6 +32,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.List;
import java.util.Map;
/**
@@ -1306,6 +1308,107 @@
}
/**
+ * Use JobExistingWorkspaceSameConfigRestore to restore.
+ */
+ public void testExistedWorkspaceRestoreSingleDBTwoWS() throws Exception
+ {
+ // prepare
+ String dsName1 = helper.createDatasource();
+ String dsName2 = helper.createDatasource();
+
+ ManageableRepository repository = helper.createRepository(container, false, dsName1);
+ WorkspaceEntry wsEntry1 = helper.createWorkspaceEntry(false, dsName1);
+ helper.addWorkspace(repository, wsEntry1);
+ addConent(repository, wsEntry1.getName());
+
+ WorkspaceEntry wsEntry2 = helper.createWorkspaceEntry(false, dsName2);
+ helper.addWorkspace(repository, wsEntry2);
+ addConent(repository, wsEntry2.getName());
+
+ // backup
+ File backDir = new File("target/backup/" + IdGenerator.generate());
+ backDir.mkdirs();
+
+ BackupConfig config = new BackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry1.getName());
+ config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
+ config.setBackupDir(backDir);
+
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
+
+ // restore
+ File backLog = new File(bch.getLogFilePath());
+ assertTrue(backLog.exists());
+
+ BackupChainLog bchLog = new BackupChainLog(backLog);
+
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
+
+ backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), repository.getConfiguration()
+ .getWorkspaceEntries().get(1), false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(2).getName());
+ }
+
+ /**
+ * Use JobExistingWorkspaceRestore to restore.
+ */
+ public void testExistedWorkspaceRestoreSingleDBTwoWSWithDiffConfig() throws Exception
+ {
+ // prepare
+ String dsName1 = helper.createDatasource();
+ String dsName2 = helper.createDatasource();
+
+ ManageableRepository repository = helper.createRepository(container, false, dsName1);
+ WorkspaceEntry wsEntry1 = helper.createWorkspaceEntry(false, dsName1);
+ helper.addWorkspace(repository, wsEntry1);
+ addConent(repository, wsEntry1.getName());
+
+ WorkspaceEntry wsEntry2 = helper.createWorkspaceEntry(false, dsName2);
+ helper.addWorkspace(repository, wsEntry2);
+ addConent(repository, wsEntry2.getName());
+
+ // backup
+ File backDir = new File("target/backup/" + IdGenerator.generate());
+ backDir.mkdirs();
+
+ BackupConfig config = new BackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry1.getName());
+ config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
+ config.setBackupDir(backDir);
+
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
+
+ // restore
+ File backLog = new File(bch.getLogFilePath());
+ assertTrue(backLog.exists());
+
+ BackupChainLog bchLog = new BackupChainLog(backLog);
+
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
+
+ // change cofig
+ WorkspaceEntry wsEntry = helper.copyWorkspaceEntry(repository.getConfiguration().getWorkspaceEntries().get(1));
+
+ List<SimpleParameterEntry> params = wsEntry.getContainer().getParameters();
+ params.set(2, new SimpleParameterEntry("max-buffer-size", "307200"));
+
+ wsEntry.getContainer().setParameters(params);
+
+ backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), wsEntry, false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(2).getName());
+ }
+
+ /**
* Set new backup directory in RepositoryBackupChainLog
*
* @param src
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java 2011-09-14 06:03:55 UTC (rev 4907)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java 2011-09-14 07:05:54 UTC (rev 4908)
@@ -129,8 +129,91 @@
return repository;
}
+
+ /**
+ * Create copy of workspace entry.
+ */
+ public WorkspaceEntry copyWorkspaceEntry(WorkspaceEntry baseWorkspaceEntry) throws Exception
+ {
+ // container entry
+ ArrayList<SimpleParameterEntry> params = new ArrayList<SimpleParameterEntry>();
+ params.addAll(copyList(baseWorkspaceEntry.getContainer().getParameters()));
+ ContainerEntry containerEntry =
+ new ContainerEntry(baseWorkspaceEntry.getContainer().getType(), params);
+ containerEntry.setParameters(params);
+ // value storage
+ ArrayList<ValueStorageEntry> list = new ArrayList<ValueStorageEntry>();
+
+
+ for (ValueStorageEntry baseValueStorageEntry : baseWorkspaceEntry.getContainer().getValueStorages())
+ {
+ ArrayList<ValueStorageFilterEntry> vsparams = new ArrayList<ValueStorageFilterEntry>();
+
+ for (ValueStorageFilterEntry baseValueStorageFilterEntry : baseValueStorageEntry.getFilters())
+ {
+ ValueStorageFilterEntry filterEntry = new ValueStorageFilterEntry();
+ filterEntry.setPropertyType(baseValueStorageFilterEntry.getPropertyType());
+ filterEntry.setPropertyName(baseValueStorageFilterEntry.getPropertyName());
+ filterEntry.setAncestorPath(baseValueStorageFilterEntry.getAncestorPath());
+ filterEntry.setMinValueSize(baseValueStorageFilterEntry.getMinValueSize());
+
+ vsparams.add(filterEntry);
+ }
+
+ ValueStorageEntry valueStorageEntry =
+ new ValueStorageEntry(baseValueStorageEntry.getType(),vsparams);
+ ArrayList<SimpleParameterEntry> spe = new ArrayList<SimpleParameterEntry>();
+ spe.addAll(copyList(baseValueStorageEntry.getParameters()));
+ valueStorageEntry.setId(baseValueStorageEntry.getId());
+ valueStorageEntry.setParameters(spe);
+ valueStorageEntry.setFilters(vsparams);
+
+ // containerEntry.setValueStorages();
+ list.add(valueStorageEntry);
+ }
+
+ containerEntry.setValueStorages(list);
+
+ // Indexer
+ params = new ArrayList<SimpleParameterEntry>();
+ params.addAll(copyList(baseWorkspaceEntry.getQueryHandler().getParameters()));
+ QueryHandlerEntry qEntry =
+ new QueryHandlerEntry(baseWorkspaceEntry.getQueryHandler().getType(), params);
+
+ // Cache
+ params = new ArrayList<SimpleParameterEntry>();
+ params.addAll(copyList(baseWorkspaceEntry.getCache().getParameters()));
+ CacheEntry cacheEntry = new CacheEntry(params);
+ cacheEntry.setType(baseWorkspaceEntry.getCache().getType());
+
+ WorkspaceEntry workspaceEntry = new WorkspaceEntry();
+ workspaceEntry.setContainer(containerEntry);
+ workspaceEntry.setCache(cacheEntry);
+ workspaceEntry.setQueryHandler(qEntry);
+ workspaceEntry.setName(baseWorkspaceEntry.getName());
+ workspaceEntry.setUniqueName(baseWorkspaceEntry.getUniqueName());
+
+ return workspaceEntry;
+
+ }
+
/**
+ * Create copy of list with SimpleParameterEntry-s
+ */
+ private List<SimpleParameterEntry> copyList(List<SimpleParameterEntry> baseArrayList)
+ {
+ ArrayList<SimpleParameterEntry> arrayList = new ArrayList<SimpleParameterEntry>();
+
+ for (SimpleParameterEntry baseParameter : baseArrayList)
+ {
+ arrayList.add(new SimpleParameterEntry(baseParameter.getName(), baseParameter.getValue()));
+ }
+
+ return arrayList;
+ }
+
+ /**
* Create workspace entry.
*/
public WorkspaceEntry createWorkspaceEntry(boolean isMultiDb, String dsName) throws Exception
More information about the exo-jcr-commits
mailing list