migration changes
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/ESWorkspaceProviderImpl.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/ESWorkspaceProviderImpl.java index 4bf44e8..f50509f 100644 --- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/ESWorkspaceProviderImpl.java +++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/model/ESWorkspaceProviderImpl.java
@@ -207,7 +207,9 @@ // hrefs are persisted differently in 1.1+ in comparison to 1.0 // migrate, if needed, before loading if (resourceSetProvider instanceof ClientXMIResourceSetProvider) { - new ClientHrefMigrator().migrate(); + if (!new ClientHrefMigrator().migrate()) { + throw new RuntimeException("Migration failed"); + } } // file exists, load it,
diff --git a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/startup/ClientHrefMigrator.java b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/startup/ClientHrefMigrator.java index 9195e1a..3f6cd98 100644 --- a/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/startup/ClientHrefMigrator.java +++ b/bundles/org.eclipse.emf.emfstore.client/src/org/eclipse/emf/emfstore/internal/client/startup/ClientHrefMigrator.java
@@ -20,7 +20,6 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import org.apache.commons.io.FileUtils; import org.eclipse.emf.emfstore.internal.client.model.Configuration; import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil; import org.eclipse.emf.emfstore.internal.server.startup.ServerHrefMigrator; @@ -42,42 +41,46 @@ */ public class ClientHrefMigrator extends ServerHrefMigrator { + private File backup; + /** * Performs the migration, if needed. Creates a backup beforehand. + * + * @return <code>true</code> if migration was successful, <code>false</code> if an error occurred and the client + * startup should be canceled. */ @Override - public void migrate() { + public boolean migrate() { final String sEMFStoreClient = Configuration.getFileInfo().getWorkspaceDirectory(); // check if migration is needed if (isMigrationNeeded(sEMFStoreClient + "workspace.ucw")) { //$NON-NLS-1$ - // create backup - File backup = null; + if (backup != null) { + return false; + } + try { backup = createBackup(Configuration.getFileInfo().getWorkspaceDirectory(), Configuration.getFileInfo().getWorkspaceDirectory() + "../backup" + System.currentTimeMillis()); //$NON-NLS-1$ } catch (final IOException ex) { ModelUtil.logException( "Error during the backup creation.", ex); + return false; } // perform migration try { doMigrate(sEMFStoreClient); - if (backup != null) { - FileUtils.deleteDirectory(backup); - } - return; + return true; } catch (final InvocationTargetException ex) { ModelUtil.logException( "Error during the migration process.", ex); - } catch (final IOException ex) { - ModelUtil.logException( - "Deleting the backup failed", ex); + return false; } } + return true; } private boolean isMigrationNeeded(String pathToFile) { @@ -98,13 +101,14 @@ "Cannot determine whether migration is needed. Migration will be skipped, backup will be created.", ex); } try { - createBackup(Configuration.getFileInfo().getWorkspaceDirectory(), + backup = createBackup(Configuration.getFileInfo().getWorkspaceDirectory(), Configuration.getFileInfo().getWorkspaceDirectory() + "../backup" + System.currentTimeMillis()); //$NON-NLS-1$ } catch (final IOException ex) { + backup = new File(""); //$NON-NLS-1$ ModelUtil.logException( "Creating the backup failed.", ex); } - return false; + return true; } private void doMigrate(String sEMFStoreClient) throws InvocationTargetException {
diff --git a/bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF b/bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF index 65e6a87..ef92865 100644 --- a/bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.emf.emfstore.server/META-INF/MANIFEST.MF
@@ -50,7 +50,7 @@ org.eclipse.emf.emfstore.example.merging", org.eclipse.emf.emfstore.internal.server.filetransfer;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.test", org.eclipse.emf.emfstore.internal.server.impl.api;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.client.ui", - org.eclipse.emf.emfstore.internal.server.startup;version="1.0.4";x-internal:=true, + org.eclipse.emf.emfstore.internal.server.startup;version="1.0.4";x-friends:="org.eclipse.emf.emfstore.client", org.eclipse.emf.emfstore.internal.server.storage;version="1.0.4";x-internal:=true, org.eclipse.emf.emfstore.server;version="1.0.4", org.eclipse.emf.emfstore.server.exceptions;version="1.0.4",
diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/EMFStoreController.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/EMFStoreController.java index c34562e..c02c2d1 100644 --- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/EMFStoreController.java +++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/EMFStoreController.java
@@ -338,7 +338,10 @@ // hrefs are persisted differently in 1.1+ in comparison to 1.0 // migrate, if needed, before loading if (resourceSetProvider instanceof ServerXMIResourceSetProvider) { - new ServerHrefMigrator().migrate(); + if (!new ServerHrefMigrator().migrate()) { + throw new FatalESException("Error during migration"); + } + } resource = resourceSet.createResource(serverspaceURI); }
diff --git a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/startup/ServerHrefMigrator.java b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/startup/ServerHrefMigrator.java index e56a6da..23b60f9 100644 --- a/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/startup/ServerHrefMigrator.java +++ b/bundles/org.eclipse.emf.emfstore.server/src/org/eclipse/emf/emfstore/internal/server/startup/ServerHrefMigrator.java
@@ -27,7 +27,6 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.apache.commons.io.FileUtils; import org.eclipse.emf.emfstore.internal.common.model.util.FileUtil; import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil; import org.eclipse.emf.emfstore.internal.server.ServerConfiguration; @@ -50,41 +49,45 @@ */ public class ServerHrefMigrator { + private File backup; + /** * Performs the migration, if needed. Creates a backup beforehand. + * + * @return <code>true</code> if migration was successful, <code>false</code> if an error occurred and the server + * startup should be canceled. */ - public void migrate() { + public boolean migrate() { final String sEMFStoreServer = ServerConfiguration.getServerHome(); // check if migration is needed if (isMigrationNeeded(sEMFStoreServer + "storage.uss")) { //$NON-NLS-1$ - // create backup - File backup = null; + if (backup != null) { + return false; + } + try { backup = createBackup(ServerConfiguration.getServerHome(), ServerConfiguration.getServerHome() + "../backup" + System.currentTimeMillis()); //$NON-NLS-1$ } catch (final IOException ex) { ModelUtil.logException( "Error during the backup creation.", ex); + return false; } // perform migration try { doMigrate(sEMFStoreServer); - if (backup != null) { - FileUtils.deleteDirectory(backup); - } - return; + return true; } catch (final InvocationTargetException ex) { ModelUtil.logException( "Error during the migration process.", ex); - } catch (final IOException ex) { - ModelUtil.logException( - "Deleting the backup failed", ex); + return false; } } + return true; } private boolean isMigrationNeeded(String pathToServerSpace) { @@ -105,13 +108,14 @@ "Cannot determine whether migration is needed. Migration will be skipped, backup will be created.", ex); } try { - createBackup(ServerConfiguration.getServerHome(), + backup = createBackup(ServerConfiguration.getServerHome(), ServerConfiguration.getServerHome() + "../backup" + System.currentTimeMillis()); //$NON-NLS-1$ } catch (final IOException ex) { + backup = new File(""); //$NON-NLS-1$ ModelUtil.logException( "Creating the backup failed.", ex); } - return false; + return true; } /**