Author: tolusha
Date: 2011-10-04 05:57:12 -0400 (Tue, 04 Oct 2011)
New Revision: 5017
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBBackup.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBRestore.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/RestoreTableRule.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java
Log:
EXOJCR-1565: compress all dumps into single file
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBBackup.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBBackup.java 2011-10-04
09:03:41 UTC (rev 5016)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBBackup.java 2011-10-04
09:57:12 UTC (rev 5017)
@@ -25,6 +25,8 @@
import org.exoplatform.services.jcr.impl.backup.BackupException;
import org.exoplatform.services.jcr.impl.dataflow.serialization.ObjectZipWriterImpl;
import org.exoplatform.services.jcr.impl.storage.jdbc.DBConstants;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
import java.io.ByteArrayInputStream;
import java.io.File;
@@ -47,16 +49,33 @@
public class DBBackup
{
/**
+ * Logger.
+ */
+ protected static final Log LOG =
ExoLogger.getLogger("exo.jcr.component.core.DBBackup");
+
+ /**
* Suffix for content file.
*/
+ @Deprecated
public static final String CONTENT_FILE_SUFFIX = ".dump";
/**
* Suffix for content length file.
*/
+ @Deprecated
public static final String CONTENT_LEN_FILE_SUFFIX = ".len";
/**
+ * Suffix for content file.
+ */
+ public static final String CONTENT_ZIP_FILE = "dump.zip";
+
+ /**
+ * Suffix for content length file.
+ */
+ public static final String CONTENT_LEN_ZIP_FILE = "dump-len.zip";
+
+ /**
* MySQL dialect.
*/
public static final int DB_DIALECT_MYSQL = DBConstants.DB_DIALECT_MYSQL.hashCode();
@@ -100,19 +119,32 @@
*/
public static void backup(File storageDir, Connection jdbcConn, Map<String,
String> scripts) throws BackupException
{
+ Exception exc = null;
+
+ ObjectZipWriterImpl contentWriter = null;
+ ObjectZipWriterImpl contentLenWriter = null;
+
try
{
+ contentWriter =
+ new ObjectZipWriterImpl(PrivilegedFileHelper.zipOutputStream(new
File(storageDir, CONTENT_ZIP_FILE)));
+
+ contentLenWriter =
+ new ObjectZipWriterImpl(PrivilegedFileHelper.zipOutputStream(new
File(storageDir, CONTENT_LEN_ZIP_FILE)));
+
for (Entry<String, String> entry : scripts.entrySet())
{
- dumpTable(jdbcConn, entry.getKey(), entry.getValue(), storageDir);
+ dumpTable(jdbcConn, entry.getKey(), entry.getValue(), storageDir,
contentWriter, contentLenWriter);
}
}
catch (IOException e)
{
+ exc = e;
throw new BackupException(e);
}
catch (SQLException e)
{
+ exc = e;
throw new BackupException("SQL Exception: " +
ExceptionManagementHelper.getFullSQLExceptionMessage(e), e);
}
finally
@@ -125,6 +157,39 @@
}
catch (SQLException e)
{
+ if (exc != null)
+ {
+ LOG.error("Can't close connection", e);
+ throw new BackupException(exc);
+ }
+ else
+ {
+ throw new BackupException(e);
+ }
+ }
+ }
+
+ try
+ {
+ if (contentWriter != null)
+ {
+ contentWriter.close();
+ }
+
+ if (contentLenWriter != null)
+ {
+ contentLenWriter.close();
+ }
+ }
+ catch (Exception e)
+ {
+ if (exc != null)
+ {
+ LOG.error("Can't close zip", e);
+ throw new BackupException(exc);
+ }
+ else
+ {
throw new BackupException(e);
}
}
@@ -137,8 +202,8 @@
* @throws IOException
* @throws SQLException
*/
- private static void dumpTable(Connection jdbcConn, String tableName, String script,
File storageDir)
- throws IOException, SQLException
+ private static void dumpTable(Connection jdbcConn, String tableName, String script,
File storageDir,
+ ObjectZipWriterImpl contentWriter, ObjectZipWriterImpl contentLenWriter) throws
IOException, SQLException
{
// Need privileges
SecurityManager security = System.getSecurityManager();
@@ -147,18 +212,11 @@
security.checkPermission(JCRRuntimePermissions.MANAGE_REPOSITORY_PERMISSION);
}
- ObjectZipWriterImpl contentWriter = null;
- ObjectZipWriterImpl contentLenWriter = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try
{
- File contentFile = new File(storageDir, tableName + CONTENT_FILE_SUFFIX);
- contentWriter = new
ObjectZipWriterImpl(PrivilegedFileHelper.zipOutputStream(contentFile));
contentWriter.putNextEntry(new ZipEntry(tableName));
-
- File contentLenFile = new File(storageDir, tableName +
CONTENT_LEN_FILE_SUFFIX);
- contentLenWriter = new
ObjectZipWriterImpl(PrivilegedFileHelper.zipOutputStream(contentLenFile));
contentLenWriter.putNextEntry(new ZipEntry(tableName));
stmt = jdbcConn.prepareStatement(script);
@@ -212,21 +270,12 @@
}
}
}
+
+ contentWriter.closeEntry();
+ contentLenWriter.closeEntry();
}
finally
{
- if (contentWriter != null)
- {
- contentWriter.closeEntry();
- contentWriter.close();
- }
-
- if (contentLenWriter != null)
- {
- contentLenWriter.closeEntry();
- contentLenWriter.close();
- }
-
if (rs != null)
{
rs.close();
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBRestore.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBRestore.java 2011-10-04
09:03:41 UTC (rev 5016)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBRestore.java 2011-10-04
09:57:12 UTC (rev 5017)
@@ -372,13 +372,33 @@
try
{
- contentReader = new
ObjectZipReaderImpl(PrivilegedFileHelper.zipInputStream(restoreRule.getContentFile()));
- contentReader.getNextEntry();
+ File contentFile = new File(storageDir, restoreRule.getSrcTableName() +
DBBackup.CONTENT_FILE_SUFFIX);
- contentLenReader =
- new
ObjectZipReaderImpl(PrivilegedFileHelper.zipInputStream(restoreRule.getContentLenFile()));
- contentLenReader.getNextEntry();
+ // check old style backup format, when for every table was dedicated zip file
+ if (PrivilegedFileHelper.exists(contentFile))
+ {
+ contentReader = new
ObjectZipReaderImpl(PrivilegedFileHelper.zipInputStream(contentFile));
+ contentReader.getNextEntry();
+ File contentLenFile =
+ new File(storageDir, restoreRule.getSrcTableName() +
DBBackup.CONTENT_LEN_FILE_SUFFIX);
+
+ contentLenReader = new
ObjectZipReaderImpl(PrivilegedFileHelper.zipInputStream(contentLenFile));
+ contentLenReader.getNextEntry();
+ }
+ else
+ {
+ contentFile = new File(storageDir, DBBackup.CONTENT_ZIP_FILE);
+ contentReader = new
ObjectZipReaderImpl(PrivilegedFileHelper.zipInputStream(contentFile));
+
+ while
(!contentReader.getNextEntry().getName().equals(restoreRule.getSrcTableName()));
+
+ File contentLenFile = new File(storageDir, DBBackup.CONTENT_LEN_ZIP_FILE);
+ contentLenReader = new
ObjectZipReaderImpl(PrivilegedFileHelper.zipInputStream(contentLenFile));
+
+ while
(!contentLenReader.getNextEntry().getName().equals(restoreRule.getSrcTableName()));
+ }
+
// get information about source table
int sourceColumnCount = contentReader.readInt();
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/RestoreTableRule.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/RestoreTableRule.java 2011-10-04
09:03:41 UTC (rev 5016)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/RestoreTableRule.java 2011-10-04
09:57:12 UTC (rev 5017)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.backup.rdbms;
-import java.io.File;
import java.util.HashSet;
import java.util.Set;
@@ -28,10 +27,8 @@
*/
public class RestoreTableRule
{
- private File contentFile;
+ private String srcTableName;
- private File contentLenFile;
-
private Integer deleteColumnIndex = null;
private Integer skipColumnIndex = null;
@@ -52,26 +49,16 @@
private Boolean dstMultiDb = null;
- public File getContentFile()
+ public String getSrcTableName()
{
- return contentFile;
+ return srcTableName;
}
- public void setContentFile(File contentFile)
+ public void setSrcTableName(String srcTableName)
{
- this.contentFile = contentFile;
+ this.srcTableName = srcTableName;
}
- public File getContentLenFile()
- {
- return contentLenFile;
- }
-
- public void setContentLenFile(File contentLenFile)
- {
- this.contentLenFile = contentLenFile;
- }
-
public Integer getDeleteColumnIndex()
{
return deleteColumnIndex;
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java 2011-10-04
09:03:41 UTC (rev 5016)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java 2011-10-04
09:57:12 UTC (rev 5017)
@@ -1208,8 +1208,7 @@
restoreTableRule.setSrcMultiDb(srcMultiDb);
restoreTableRule.setDstContainerName(containerName);
restoreTableRule.setDstMultiDb(multiDb);
- restoreTableRule.setContentFile(new File(storageDir, srcTableName +
DBBackup.CONTENT_FILE_SUFFIX));
- restoreTableRule.setContentLenFile(new File(storageDir, srcTableName +
DBBackup.CONTENT_LEN_FILE_SUFFIX));
+ restoreTableRule.setSrcTableName(srcTableName);
if (multiDb)
{
@@ -1261,8 +1260,7 @@
restoreTableRule.setSrcMultiDb(srcMultiDb);
restoreTableRule.setDstContainerName(containerName);
restoreTableRule.setDstMultiDb(multiDb);
- restoreTableRule.setContentFile(new File(storageDir, srcTableName +
DBBackup.CONTENT_FILE_SUFFIX));
- restoreTableRule.setContentLenFile(new File(storageDir, srcTableName +
DBBackup.CONTENT_LEN_FILE_SUFFIX));
+ restoreTableRule.setSrcTableName(srcTableName);
// auto increment ID column
restoreTableRule.setSkipColumnIndex(0);
@@ -1285,8 +1283,7 @@
restoreTableRule.setSrcMultiDb(srcMultiDb);
restoreTableRule.setDstContainerName(containerName);
restoreTableRule.setDstMultiDb(multiDb);
- restoreTableRule.setContentFile(new File(storageDir, srcTableName +
DBBackup.CONTENT_FILE_SUFFIX));
- restoreTableRule.setContentLenFile(new File(storageDir, srcTableName +
DBBackup.CONTENT_LEN_FILE_SUFFIX));
+ restoreTableRule.setSrcTableName(srcTableName);
if (!multiDb || !srcMultiDb)
{