[exo-jcr-commits] exo-jcr SVN: r2737 - in jcr/trunk/exo.jcr.component.ext/src: test/java/org/exoplatform/services/jcr/ext/backup and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Jul 1 09:51:27 EDT 2010
Author: tolusha
Date: 2010-07-01 09:51:27 -0400 (Thu, 01 Jul 2010)
New Revision: 2737
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/JobRepositoryRestore.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestBackupManager.java
Log:
EXOJCR-819: HTTPBackupAgent can provide information about last successfully restored repositories if restore was launched in synchronous mode
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 2010-07-01 10:08:10 UTC (rev 2736)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/BackupManagerImpl.java 2010-07-01 13:51:27 UTC (rev 2737)
@@ -162,7 +162,7 @@
private final WorkspaceBackupAutoStopper workspaceBackupStopper;
private final RepositoryBackupAutoStopper repositoryBackupStopper;
-
+
/**
* Temporary directory;
*/
@@ -284,6 +284,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public void run()
{
while (true)
@@ -331,6 +332,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public void run()
{
while (true)
@@ -1364,16 +1366,16 @@
BackupConfigurationException, RepositoryException, RepositoryConfigurationException
{
// Checking repository exists.
- try
+ try
{
repoService.getRepository(repositoryEntry.getName());
throw new BackupConfigurationException("Repository \"" + repositoryEntry.getName() + "\" is already exists.");
- }
- catch (RepositoryException e)
+ }
+ catch (RepositoryException e)
{
//OK. Repository with "repositoryEntry.getName" is not exists.
- }
-
+ }
+
Map<String, BackupChainLog> workspacesMapping = new HashedMap();
Map<String, BackupChainLog> backups = new HashedMap();
@@ -1469,9 +1471,9 @@
JobRepositoryRestore jobRepositoryRestore =
new JobRepositoryRestore(repoService, this, repositoryEntry, workspacesMapping, rblog);
+ restoreRepositoryJobs.add(jobRepositoryRestore);
if (asynchronous)
{
- restoreRepositoryJobs.add(jobRepositoryRestore);
jobRepositoryRestore.start();
}
else
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobRepositoryRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobRepositoryRestore.java 2010-07-01 10:08:10 UTC (rev 2736)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobRepositoryRestore.java 2010-07-01 13:51:27 UTC (rev 2737)
@@ -119,13 +119,40 @@
}
/**
+ * Restore repository. Provide information about start and finish process.
+ *
+ * @throws RepositoryRestoreExeption
+ * if exception occurred during restore
+ */
+ protected void restore() throws RepositoryRestoreExeption
+ {
+ try
+ {
+ stateRestore = REPOSITORY_RESTORE_STARTED;
+ startTime = Calendar.getInstance();
+
+ restoreRepository();
+
+ stateRestore = REPOSITORY_RESTORE_SUCCESSFUL;
+ endTime = Calendar.getInstance();
+ }
+ catch (Throwable t)
+ {
+ stateRestore = REPOSITORY_RESTORE_FAIL;
+ restoreException = t;
+
+ throw new RepositoryRestoreExeption(t.getMessage(), t);
+ }
+ }
+
+ /**
* Will be restored the workspace.
* @throws RepositoryRestoreExeption
*
* @throws Throwable
* will be generated the Throwable
*/
- protected void restore() throws RepositoryRestoreExeption
+ protected void restoreRepository() throws RepositoryRestoreExeption
{
List<WorkspaceEntry> originalWorkspaceEntrys = repositoryEntry.getWorkspaceEntries();
@@ -187,28 +214,31 @@
{
currennWorkspaceName = wsEntry.getName();
backupManager.restore(workspacesMapping.get(wsEntry.getName()), repositoryEntry.getName(), wsEntry,
- false);
+ false);
}
}
}
catch (InvalidItemStateException e)
{
restored = false;
-
- log.error("Can not restore workspace \"" + currennWorkspaceName + " in repository \"" + repositoryEntry.getName() + "\".", e);
-
- throw new RepositoryRestoreExeption("Can not restore workspace \"" + currennWorkspaceName + " in repository \"" + repositoryEntry.getName() + "\"."
- + " There was database error.", e);
+ log.error("Can not restore workspace \"" + currennWorkspaceName + " in repository \""
+ + repositoryEntry.getName() + "\".", e);
+
+ throw new RepositoryRestoreExeption("Can not restore workspace \"" + currennWorkspaceName
+ + " in repository \"" + repositoryEntry.getName() + "\"." + " There was database error.", e);
+
}
catch (Throwable t)
{
restored = false;
-
- log.error("Can not restore workspace \"" + currennWorkspaceName + " in repository \"" + repositoryEntry.getName() + "\".", t);
-
- throw new RepositoryRestoreExeption("Can not restore workspace \"" + currennWorkspaceName + " in repository \"" + repositoryEntry.getName() + "\".", t);
+ log.error("Can not restore workspace \"" + currennWorkspaceName + " in repository \""
+ + repositoryEntry.getName() + "\".", t);
+
+ throw new RepositoryRestoreExeption("Can not restore workspace \"" + currennWorkspaceName
+ + " in repository \"" + repositoryEntry.getName() + "\".", t);
+
}
finally
{
@@ -236,7 +266,8 @@
}
catch (Throwable thr)
{
- log.error("The partly restored repository \"" + repositoryEntry.getName() + "\" can not be removed.", thr);
+ log.error("The partly restored repository \"" + repositoryEntry.getName() + "\" can not be removed.",
+ thr);
}
}
}
@@ -265,15 +296,15 @@
/**
* {@inheritDoc}
*/
+ @Override
public void run()
{
-
try
{
stateRestore = REPOSITORY_RESTORE_STARTED;
startTime = Calendar.getInstance();
- restore();
+ restoreRepository();
stateRestore = REPOSITORY_RESTORE_SUCCESSFUL;
endTime = Calendar.getInstance();
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestBackupManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestBackupManager.java 2010-07-01 10:08:10 UTC (rev 2736)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/TestBackupManager.java 2010-07-01 13:51:27 UTC (rev 2737)
@@ -502,8 +502,8 @@
{
SessionImpl sessionWS1 = (SessionImpl)repository.login(credentials, "ws3");
- sessionWS1.getRootNode().addNode("asdasdasda", "nt:unstructured")
- .setProperty("data", new FileInputStream(createBLOBTempFile(1024)));
+ sessionWS1.getRootNode().addNode("asdasdasda", "nt:unstructured").setProperty("data",
+ new FileInputStream(createBLOBTempFile(1024)));
sessionWS1.save();
// 1-st backup
@@ -540,8 +540,8 @@
assertNotNull(back1.getRootNode().getNode("asdasdasda").getProperty("data"));
// add date to restored workspace
- back1.getRootNode().addNode("gdfgrghfhf", "nt:unstructured")
- .setProperty("data", new FileInputStream(createBLOBTempFile(1024)));
+ back1.getRootNode().addNode("gdfgrghfhf", "nt:unstructured").setProperty("data",
+ new FileInputStream(createBLOBTempFile(1024)));
back1.save();
}
else
@@ -739,8 +739,7 @@
else
fail("There are no backup files in " + backDir.getAbsolutePath());
}
-
-
+
public void testRepositoryFullBackupRestore() throws Exception
{
// backup
@@ -767,13 +766,13 @@
// stop fullBackup
backup.stopBackup(bch);
-
// restore
RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
-
+
String newRepositoryName = "repo_restored_1";
- RepositoryEntry newRepositoryEntry = makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_1", null);
+ RepositoryEntry newRepositoryEntry =
+ makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_1", null);
File backLog = new File(bch.getLogFilePath());
if (backLog.exists())
@@ -784,6 +783,8 @@
assertNotNull(bchLog.getFinishedTime());
backup.restore(bchLog, newRepositoryEntry, false);
+ assertEquals(JobWorkspaceRestore.RESTORE_SUCCESSFUL, backup.getLastRepositoryRestore(
+ newRepositoryEntry.getName()).getStateRestore());
// check
ManageableRepository restoredRepository = repositoryService.getRepository(newRepositoryName);
@@ -813,7 +814,7 @@
else
fail("There are no backup files in " + backDir.getAbsolutePath());
}
-
+
public void testRepositoryFullAndIncrementalBackupRestore() throws Exception
{
// backup
@@ -844,9 +845,10 @@
// restore
RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
-
+
String newRepositoryName = "repo_restored_4";
- RepositoryEntry newRepositoryEntry = makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_4", null);
+ RepositoryEntry newRepositoryEntry =
+ makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_4", null);
File backLog = new File(bch.getLogFilePath());
if (backLog.exists())
@@ -886,7 +888,7 @@
else
fail("There are no backup files in " + backDir.getAbsolutePath());
}
-
+
public void testRepositoryFullBackupAsynchronusRestore() throws Exception
{
// backup
@@ -916,9 +918,10 @@
// restore
RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
-
+
String newRepositoryName = "repo_restored_2";
- RepositoryEntry newRepositoryEntry = makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_2", null);
+ RepositoryEntry newRepositoryEntry =
+ makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_2", null);
File backLog = new File(bch.getLogFilePath());
if (backLog.exists())
@@ -929,11 +932,11 @@
assertNotNull(bchLog.getFinishedTime());
backup.restore(bchLog, newRepositoryEntry, true);
-
+
JobRepositoryRestore job = backup.getLastRepositoryRestore(newRepositoryName);
-
+
while (job.getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL
- || job.getStateRestore() == JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
+ || job.getStateRestore() == JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
{
Thread.yield();
Thread.sleep(50);
@@ -967,7 +970,7 @@
else
fail("There are no backup files in " + backDir.getAbsolutePath());
}
-
+
public void testRepositoryFullBackupAsynchronusRestoreWorkspaceMapping() throws Exception
{
// backup
@@ -994,21 +997,21 @@
// stop fullBackup
backup.stopBackup(bch);
-
// restore
RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
-
+
String newRepositoryName = "repo_restored_3";
- RepositoryEntry newRepositoryEntry = makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_3", null);
-
+ RepositoryEntry newRepositoryEntry =
+ makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_3", null);
+
// create workspace mappingS
- Map<String, String> workspaceMapping = new HashedMap();
+ Map<String, String> workspaceMapping = new HashedMap();
for (WorkspaceEntry we : newRepositoryEntry.getWorkspaceEntries())
{
workspaceMapping.put(we.getName(), we.getName() + "_mapped");
}
-
+
// Change workspaeNames
for (WorkspaceEntry we : newRepositoryEntry.getWorkspaceEntries())
{
@@ -1017,7 +1020,7 @@
newRepositoryEntry.setSystemWorkspaceName(workspaceMapping.get(we.getName()));
newRepositoryEntry.setDefaultWorkspaceName(workspaceMapping.get(we.getName()));
}
-
+
we.setName(workspaceMapping.get(we.getName()));
we.setUniqueName(we.getUniqueName() + workspaceMapping.get(we.getName()));
}
@@ -1030,12 +1033,12 @@
assertNotNull(bchLog.getStartedTime());
assertNotNull(bchLog.getFinishedTime());
- backup.restore(bchLog, newRepositoryEntry, workspaceMapping,true);
-
+ backup.restore(bchLog, newRepositoryEntry, workspaceMapping, true);
+
JobRepositoryRestore job = backup.getLastRepositoryRestore(newRepositoryName);
-
+
while (job.getStateRestore() != JobRepositoryRestore.REPOSITORY_RESTORE_SUCCESSFUL
- || job.getStateRestore() == JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
+ || job.getStateRestore() == JobRepositoryRestore.REPOSITORY_RESTORE_FAIL)
{
Thread.yield();
Thread.sleep(50);
@@ -1093,26 +1096,28 @@
if (bch.getBackupId().equals(chain.getBackupId()))
fail("The backup with id '" + chain.getBackupId() + "' should not be active");
}
-
+
public void testRepositoryRestoreFail() throws Exception
{
// restore
RepositoryEntry re = (RepositoryEntry)ws1Session.getContainer().getComponentInstanceOfType(RepositoryEntry.class);
-
+
String newRepositoryName = "repo_restored_5";
- RepositoryEntry newRepositoryEntry = makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_5", null);
-
+ RepositoryEntry newRepositoryEntry =
+ makeRepositoryEntry(newRepositoryName, re, "jdbcjcr_to_repository_restore_5", null);
+
//create broken system workspaceEntry
newRepositoryEntry.getWorkspaceEntries().get(0).getQueryHandler().setType("gg");
File backLog = new File(backup.getRepositoryBackupsLogs()[0].getLogFilePath());
-
+
RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
- try {
+ try
+ {
backup.restore(bchLog, newRepositoryEntry, false);
- fail("The backup " + backLog.getAbsolutePath() + "shoulde not restored.");
- }
+ fail("The backup " + backLog.getAbsolutePath() + "shoulde not restored.");
+ }
catch (RepositoryRestoreExeption e)
{
// ok.
@@ -1130,7 +1135,7 @@
// ok.
}
}
-
+
public void testIncrementalBackupRestoreEXOJCR_737() throws Exception
{
// full backup with BLOBs & incremental with BLOBs
@@ -1159,7 +1164,7 @@
Thread.yield();
Thread.sleep(50);
}
-
+
// add data
ws1Session.getRootNode().addNode("node_101").setProperty("exo:data", new FileInputStream(tempf));
ws1Session.getRootNode().addNode("node_102").setProperty("exo:extraData", new FileInputStream(tempf));
@@ -1170,7 +1175,7 @@
backup.stopBackup(bch);
else
fail("Can't get fullBackup chain");
-
+
//remove data
ws1Session.getRootNode().getNode("node_101").remove();
ws1Session.getRootNode().getNode("node_102").remove();
@@ -1200,12 +1205,12 @@
assertNotNull(node_101);
assertEquals(tempf.length(), node_101.getProperty("exo:data").getStream().available());
compareStream(new FileInputStream(tempf), node_101.getProperty("exo:data").getStream());
-
+
Node node_102 = back1.getRootNode().getNode("node_102");
assertNotNull(node_102);
assertEquals(tempf.length(), node_102.getProperty("exo:extraData").getStream().available());
compareStream(new FileInputStream(tempf), node_102.getProperty("exo:extraData").getStream());
-
+
}
catch (Exception e)
{
More information about the exo-jcr-commits
mailing list