Author: tolusha
Date: 2011-12-08 04:11:28 -0500 (Thu, 08 Dec 2011)
New Revision: 5278
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SysViewWorkspaceInitializer.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsBackupWorkspaceInitializer.java
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/test/java/org/exoplatform/services/jcr/util/TesterRdbmsWorkspaceInitializer.java
Log:
EXOJCR-1639: avoiding possible issue with NullData in cache after restoring
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java 2011-12-07
15:54:06 UTC (rev 5277)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java 2011-12-08
09:11:28 UTC (rev 5278)
@@ -23,11 +23,6 @@
import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
import org.exoplatform.services.jcr.config.RepositoryEntry;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
-import org.exoplatform.services.jcr.dataflow.TransactionChangesLog;
-import org.exoplatform.services.jcr.datamodel.IllegalNameException;
-import org.exoplatform.services.jcr.datamodel.NodeData;
-import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.backup.JCRRestore;
import org.exoplatform.services.jcr.impl.core.nodetype.NodeTypeManagerImpl;
import org.exoplatform.services.jcr.impl.core.value.ValueFactoryImpl;
@@ -35,12 +30,9 @@
import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
import java.io.File;
-import java.io.IOException;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLStreamException;
/**
* Created by The eXo Platform SAS Author : Alex Reshetnyak
alex.reshetnyak(a)exoplatform.com.ua
@@ -59,7 +51,7 @@
PathNotFoundException, RepositoryException
{
super(config, repConfig, dataManager, namespaceRegistry, locationFactory,
nodeTypeManager, valueFactory,
- accessManager, cleanerHolder);
+ accessManager, cleanerHolder);
restoreDir = restorePath;
@@ -75,60 +67,19 @@
}
}
+ /**
+ * {@inheritDoc}
+ */
@Override
- public NodeData initWorkspace() throws RepositoryException
+ protected void doRestore() throws Throwable
{
+ super.doRestore();
- if (isWorkspaceInitialized())
+ // restore from incremental backup
+ JCRRestore restorer = new JCRRestore(dataManager, fileCleaner);
+ for (File incrBackupFile : JCRRestore.getIncrementalFiles(new File(restoreDir)))
{
- return (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
+ restorer.incrementalRestore(incrBackupFile);
}
-
- try
- {
- long start = System.currentTimeMillis();
-
- // restore from full backup
- PlainChangesLog changes = read();
-
- TransactionChangesLog tLog = new TransactionChangesLog(changes);
- tLog.setSystemId(Constants.JCR_CORE_RESTORE_WORKSPACE_INITIALIZER_SYSTEM_ID); //
mark changes
-
- dataManager.save(tLog);
-
- // restore from incremental backup
- JCRRestore restorer = new JCRRestore(dataManager, fileCleaner);
- for (File incrBackupFile : JCRRestore.getIncrementalFiles(new
File(restoreDir)))
- {
- restorer.incrementalRestore(incrBackupFile);
- }
-
- final NodeData root = (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
-
- log.info("Workspace " + workspaceName + " restored from file
" + restorePath + " in "
- + (System.currentTimeMillis() - start) * 1d / 1000 + "sec");
-
- return root;
- }
- catch (XMLStreamException e)
- {
- throw new RepositoryException("The XML file is corrupted : " +
restorePath, e);
- }
- catch (FactoryConfigurationError e)
- {
- throw new RepositoryException(e);
- }
- catch (IOException e)
- {
- throw new RepositoryException(e);
- }
- catch (IllegalNameException e)
- {
- throw new RepositoryException(e);
- }
- catch (ClassNotFoundException e)
- {
- throw new RepositoryException(e);
- }
}
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SysViewWorkspaceInitializer.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SysViewWorkspaceInitializer.java 2011-12-07
15:54:06 UTC (rev 5277)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SysViewWorkspaceInitializer.java 2011-12-08
09:11:28 UTC (rev 5278)
@@ -120,6 +120,11 @@
protected final File tempDir;
+ /**
+ * Indicates if restore action in progress or not.
+ */
+ volatile private boolean isRestoreInProgress = false;
+
protected class TempOutputStream extends ByteArrayOutputStream
{
@@ -507,49 +512,49 @@
*/
public NodeData initWorkspace() throws RepositoryException
{
-
if (isWorkspaceInitialized())
{
return (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
}
+ long start = System.currentTimeMillis();
+
+ isRestoreInProgress = true;
try
{
- long start = System.currentTimeMillis();
-
- PlainChangesLog changes = read();
-
- TransactionChangesLog tLog = new TransactionChangesLog(changes);
- tLog.setSystemId(Constants.JCR_CORE_RESTORE_WORKSPACE_INITIALIZER_SYSTEM_ID); //
mark changes
-
- dataManager.save(tLog);
-
- final NodeData root = (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
-
- log.info("Workspace " + workspaceName + " restored from file
" + restorePath + " in "
- + (System.currentTimeMillis() - start) * 1d / 1000 + "sec");
-
- return root;
+ doRestore();
}
- catch (XMLStreamException e)
+ catch (Throwable e)
{
throw new RepositoryException(e);
}
- catch (FactoryConfigurationError e)
+ finally
{
- throw new RepositoryException(e);
+ isRestoreInProgress = false;
}
- catch (IOException e)
- {
- throw new RepositoryException(e);
- }
- catch (IllegalNameException e)
- {
- throw new RepositoryException(e);
- }
+
+ final NodeData root = (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
+
+ log.info("Workspace [" + workspaceName + "] restored from storage
" + restorePath + " in "
+ + (System.currentTimeMillis() - start) * 1d / 1000 + "sec");
+
+ return root;
}
/**
+ * Perform restore operation.
+ */
+ protected void doRestore() throws Throwable
+ {
+ PlainChangesLog changes = read();
+
+ TransactionChangesLog tLog = new TransactionChangesLog(changes);
+ tLog.setSystemId(Constants.JCR_CORE_RESTORE_WORKSPACE_INITIALIZER_SYSTEM_ID); //
mark changes
+
+ dataManager.save(tLog);
+ }
+
+ /**
* Parse of SysView export content and fill changes log within it.
*
* @throws XMLStreamException
@@ -894,19 +899,30 @@
}
}
+ /**
+ * {@inheritDoc}
+ */
public void start()
{
}
+ /**
+ * {@inheritDoc}
+ */
public void stop()
{
}
+ /**
+ * {@inheritDoc}
+ */
public boolean isWorkspaceInitialized()
{
try
{
- return dataManager.getItemData(Constants.ROOT_UUID) == null ? false : true;
+ // If someone invoke isWorkspaceInitialized() during restore action then
NullNodeData for root node will be pushed
+ // into the cache and will be there even restore is finished and data will be
placed into DB.
+ return isRestoreInProgress ? false :
dataManager.getItemData(Constants.ROOT_UUID) != null;
}
catch (RepositoryException e)
{
Modified:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsBackupWorkspaceInitializer.java
===================================================================
---
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsBackupWorkspaceInitializer.java 2011-12-07
15:54:06 UTC (rev 5277)
+++
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsBackupWorkspaceInitializer.java 2011-12-08
09:11:28 UTC (rev 5278)
@@ -32,8 +32,6 @@
import org.exoplatform.services.log.Log;
import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
@@ -70,31 +68,16 @@
* {@inheritDoc}
*/
@Override
- protected void restoreAction() throws RepositoryException
+ protected void doRestore() throws Throwable
{
// restore from full rdbms backup
- fullRdbmsRestore();
+ super.doRestore();
// restore from incremental backup
JCRRestore restorer = new JCRRestore(dataManager, fileCleaner);
for (File incrBackupFile : JCRRestore.getIncrementalFiles(new File(restoreDir)))
{
- try
- {
- restorer.incrementalRestore(incrBackupFile);
- }
- catch (FileNotFoundException e)
- {
- throw new RepositoryException(e);
- }
- catch (IOException e)
- {
- throw new RepositoryException(e);
- }
- catch (ClassNotFoundException e)
- {
- throw new RepositoryException(e);
- }
+ restorer.incrementalRestore(incrBackupFile);
}
}
}
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-12-07
15:54:06 UTC (rev 5277)
+++
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java 2011-12-08
09:11:28 UTC (rev 5278)
@@ -25,8 +25,6 @@
import org.exoplatform.services.jcr.config.WorkspaceEntry;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
-import org.exoplatform.services.jcr.datamodel.NodeData;
-import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.backup.BackupException;
import org.exoplatform.services.jcr.impl.backup.Backupable;
import org.exoplatform.services.jcr.impl.backup.DataRestore;
@@ -65,11 +63,6 @@
protected final RepositoryService repositoryService;
/**
- * Indicates if RDBMS restore in progress or not.
- */
- volatile private boolean isRestoreInProgress = false;
-
- /**
* Constructor RdbmsWorkspaceInitializer.
*/
public RdbmsWorkspaceInitializer(WorkspaceEntry config, RepositoryEntry repConfig,
@@ -88,59 +81,8 @@
* {@inheritDoc}
*/
@Override
- public boolean isWorkspaceInitialized()
+ protected void doRestore() throws Throwable
{
- // If someone invoke isWorkspaceInitialized() during restore then NullNodeData for
root node will be pushed
- // into the cache and will be there even restore is finished and data will be
placed into DB.
- return isRestoreInProgress ? false : super.isWorkspaceInitialized();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public NodeData initWorkspace() throws RepositoryException
- {
- if (isWorkspaceInitialized())
- {
- return (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
- }
-
- long start = System.currentTimeMillis();
-
- isRestoreInProgress = true;
- try
- {
- restoreAction();
- }
- finally
- {
- isRestoreInProgress = false;
- }
-
- final NodeData root = (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
-
- log.info("Workspace [" + workspaceName + "] restored from storage
" + restorePath + " in "
- + (System.currentTimeMillis() - start) * 1d / 1000 + "sec");
-
- return root;
- }
-
- /**
- * Calls restoring methods.
- *
- * @throws RepositoryException if any Exception is occurred
- */
- protected void restoreAction() throws RepositoryException
- {
- fullRdbmsRestore();
- }
-
- /**
- * Restore from full rdbms backup.
- */
- protected void fullRdbmsRestore() throws RepositoryException
- {
List<DataRestore> dataRestorers = new ArrayList<DataRestore>();
ManageableRepository repository = null;
@@ -213,11 +155,11 @@
}
catch (BackupException e1)
{
- log.error("Can't rollback restorer", e);
+ log.error("Can't rollback restorer", e1);
}
}
- throw new RepositoryException(e);
+ throw e;
}
finally
{
@@ -248,8 +190,8 @@
}
else
{
- throw new RepositoryException("Con not set ONLYNE state for
repository "
- + repository.getConfiguration().getName(), e);
+ throw new RepositoryException("Con not set ONLINE state for
repository "
+ + repository.getConfiguration().getName(), e);
}
}
}
Modified:
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterRdbmsWorkspaceInitializer.java
===================================================================
---
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterRdbmsWorkspaceInitializer.java 2011-12-07
15:54:06 UTC (rev 5277)
+++
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterRdbmsWorkspaceInitializer.java 2011-12-08
09:11:28 UTC (rev 5278)
@@ -59,9 +59,9 @@
}
@Override
- public void fullRdbmsRestore() throws RepositoryException
+ public void doRestore() throws Throwable
{
- super.fullRdbmsRestore();
+ super.doRestore();
}
}