[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