use of org.exist.backup.ErrorReport in project exist by eXist-db.
the class ConsistencyCheckTask method execute.
@Override
public void execute(final DBBroker broker, final Txn transaction) throws EXistException {
final Agent agentInstance = AgentFactory.getInstance();
final BrokerPool brokerPool = broker.getBrokerPool();
final TaskStatus endStatus = new TaskStatus(TaskStatus.Status.STOPPED_OK);
agentInstance.changeStatus(brokerPool, new TaskStatus(TaskStatus.Status.INIT));
if (paused) {
LOG.info("Consistency check is paused.");
agentInstance.changeStatus(brokerPool, new TaskStatus(TaskStatus.Status.PAUSED));
return;
}
brokerPool.getProcessMonitor().startJob(ProcessMonitor.ACTION_BACKUP, null, monitor);
PrintWriter report = null;
try {
boolean doBackup = createBackup;
// TODO: don't use the direct access feature for now. needs more testing
List<ErrorReport> errors = null;
if (!incremental || incrementalCheck) {
LOG.info("Starting consistency check...");
report = openLog();
final CheckCallback cb = new CheckCallback(report);
final ConsistencyCheck check = new ConsistencyCheck(broker, transaction, false, checkDocs);
agentInstance.changeStatus(brokerPool, new TaskStatus(TaskStatus.Status.RUNNING_CHECK));
errors = check.checkAll(cb);
if (!errors.isEmpty()) {
endStatus.setStatus(TaskStatus.Status.STOPPED_ERROR);
endStatus.setReason(errors);
LOG.error("Errors found: {}", errors.size());
doBackup = true;
if (fatalErrorsFound(errors)) {
LOG.error("Fatal errors were found: pausing the consistency check task.");
paused = true;
}
}
LOG.info("Finished consistency check");
}
if (doBackup) {
LOG.info("Starting backup...");
final SystemExport sysexport = new SystemExport(broker, transaction, logCallback, monitor, false);
lastExportedBackup = sysexport.export(exportDir, incremental, maxInc, createZip, errors);
agentInstance.changeStatus(brokerPool, new TaskStatus(TaskStatus.Status.RUNNING_BACKUP));
if (lastExportedBackup != null) {
LOG.info("Created backup to file: {}", lastExportedBackup.toAbsolutePath().toString());
}
LOG.info("Finished backup");
}
} catch (final TerminatedException | PermissionDeniedException e) {
throw new EXistException(e.getMessage(), e);
} finally {
if (report != null) {
report.close();
}
agentInstance.changeStatus(brokerPool, endStatus);
brokerPool.getProcessMonitor().endJob();
}
}
use of org.exist.backup.ErrorReport in project exist by eXist-db.
the class SanityReport method changeStatus.
protected void changeStatus(TaskStatus status) {
status.setStatusChangeTime();
switch(status.getStatus()) {
case INIT:
actualCheckStart = status.getStatusChangeTime();
break;
case STOPPED_ERROR:
case STOPPED_OK:
lastCheckStart = actualCheckStart;
actualCheckStart = null;
lastCheckEnd = status.getStatusChangeTime();
if (status.getReason() != null) {
this.errors = (List<ErrorReport>) status.getReason();
}
lastActionInfo = taskstatus.toString() + " to [" + output + "] ended with status [" + status.toString() + "]";
break;
default:
break;
}
final TaskStatus oldState = taskstatus;
try {
taskstatus = status;
final Notification event = new AttributeChangeNotification(this, seqNum++, taskstatus.getStatusChangeTime().getTime(), "Status change", "status", "String", oldState.toString(), taskstatus.toString());
event.setUserData(taskstatus.getCompositeData());
sendNotification(event);
} catch (final Exception e) {
// ignore
}
}
use of org.exist.backup.ErrorReport in project exist by eXist-db.
the class SanityReport method triggerCheck.
@Override
public void triggerCheck(String output, String backup, String incremental) {
try {
this.output = output;
final SystemTask task = new ConsistencyCheckTask();
final Properties properties = parseParameter(output, backup, incremental);
task.configure(pool.getConfiguration(), properties);
pool.triggerSystemTask(task);
} catch (final EXistException existException) {
taskstatus.setStatus(TaskStatus.Status.STOPPED_ERROR);
final List<ErrorReport> errors = new ArrayList<>();
errors.add(new ErrorReport(ErrorReport.CONFIGURATION_FAILD, existException.getMessage(), existException));
taskstatus.setReason(errors);
changeStatus(taskstatus);
taskstatus.setStatusChangeTime();
taskstatus.setReason(existException.toString());
LOG.warn("Failed to trigger db sanity check: {}", existException.getMessage(), existException);
}
}
Aggregations