+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.argeo.server.backup;
import java.util.ArrayList;
private UserAuthenticator userAuthenticator = null;
private String backupsBase;
- private String name;
+ private String systemName;
private List<AtomicBackup> atomicBackups = new ArrayList<AtomicBackup>();
private BackupPurge backupPurge = new SimpleBackupPurge();
List<String> failures = new ArrayList<String>();
SimpleBackupContext backupContext = new SimpleBackupContext(
- fileSystemManager, backupsBase, name);
+ fileSystemManager, backupsBase, systemName);
// purge older backups
FileSystemOptions opts = new FileSystemOptions();
try {
- backupPurge.purge(fileSystemManager, backupsBase, name,
+ backupPurge.purge(fileSystemManager, backupsBase, systemName,
backupContext.getDateFormat(), opts);
} catch (Exception e) {
- failures.add(e.getMessage());
+ failures.add("Purge " + backupsBase + " failed: " + e.getMessage());
log.error("Purge of " + backupsBase + " failed", e);
}
if (log.isDebugEnabled())
log.debug("Performed backup " + target);
} catch (Exception e) {
- failures.add(e.getMessage());
- log.error("Atomic backup failed", e);
+ String msg = "Atomic backup " + atomickBackup.getName()
+ + " failed: " + ArgeoException.chainCausesMessages(e);
+ failures.add(msg);
+ log.error(msg);
+ if (log.isTraceEnabled())
+ log.trace(
+ "Stacktrace of atomic backup "
+ + atomickBackup.getName() + " failure.", e);
}
}
FileObject remoteBaseFo = null;
UserAuthenticator auth = remoteBases.get(remoteBase);
+ // authentication
+ FileSystemOptions remoteOpts = new FileSystemOptions();
try {
- // authentication
- FileSystemOptions remoteOpts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance()
.setUserAuthenticator(remoteOpts, auth);
- backupPurge.purge(fileSystemManager, remoteBase, name,
+ backupPurge.purge(fileSystemManager, remoteBase, systemName,
backupContext.getDateFormat(), remoteOpts);
+ } catch (Exception e) {
+ failures.add("Purge " + remoteBase + " failed: "
+ + e.getMessage());
+ log.error("Cannot purge " + remoteBase, e);
+ }
+ try {
localBaseFo = fileSystemManager.resolveFile(backupsBase + '/'
+ backupContext.getRelativeFolder(), opts);
remoteBaseFo = fileSystemManager.resolveFile(remoteBase + '/'
log.debug("Copied backup to " + remoteBaseFo + " from "
+ localBaseFo);
// }
- } catch (FileSystemException e) {
+ } catch (Exception e) {
+ failures.add("Dispatch to " + remoteBase + " failed: "
+ + e.getMessage());
log.error(
"Cannot dispatch backups from "
+ backupContext.getRelativeFolder() + " to "
BackupUtils.closeFOQuietly(remoteBaseFo);
}
+ int failureCount = 0;
if (failures.size() > 0) {
StringBuffer buf = new StringBuffer();
- for (String failure : failures)
- buf.append('\n').append(failure);
- throw new ArgeoException("Errors when running the backup,"
+ for (String failure : failures) {
+ buf.append('\n').append(failureCount).append(" - ")
+ .append(failure);
+ failureCount++;
+ }
+ throw new ArgeoException(failureCount
+ + " error(s) when running the backup,"
+ " check the logs and the backups as soon as possible."
+ buf);
}
this.backupsBase = backupsBase;
}
- public void setName(String name) {
- this.name = name;
+ public void setSystemName(String name) {
+ this.systemName = name;
}
public void setAtomicBackups(List<AtomicBackup> atomicBackups) {
fsm.init();
SystemBackup systemBackup = new SystemBackup();
- systemBackup.setName("mySystem");
+ systemBackup.setSystemName("mySystem");
systemBackup
.setBackupsBase("/home/mbaudier/dev/src/commons/server/runtime/org.argeo.server.core/target");
systemBackup.setFileSystemManager(fsm);
MySqlBackup mySqlBackup = new MySqlBackup("root", "", "test");
atomicBackups.add(mySqlBackup);
+ PostgreSqlBackup postgreSqlBackup = new PostgreSqlBackup(
+ "argeo", "argeo", "gis_template");
+ atomicBackups.add(postgreSqlBackup);
+ SvnBackup svnBackup = new SvnBackup(
+ "/home/mbaudier/tmp/testsvnrepo");
+ atomicBackups.add(svnBackup);
systemBackup.setAtomicBackups(atomicBackups);