Search in sources :

Example 1 with ErrorReport

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();
    }
}
Also used : Agent(org.exist.management.Agent) EXistException(org.exist.EXistException) TaskStatus(org.exist.management.TaskStatus) ConsistencyCheck(org.exist.backup.ConsistencyCheck) ErrorReport(org.exist.backup.ErrorReport) PermissionDeniedException(org.exist.security.PermissionDeniedException) SystemExport(org.exist.backup.SystemExport) TerminatedException(org.exist.xquery.TerminatedException) PrintWriter(java.io.PrintWriter)

Example 2 with ErrorReport

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
    }
}
Also used : ErrorReport(org.exist.backup.ErrorReport) TaskStatus(org.exist.management.TaskStatus) EXistException(org.exist.EXistException)

Example 3 with ErrorReport

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);
    }
}
Also used : ErrorReport(org.exist.backup.ErrorReport) SystemTask(org.exist.storage.SystemTask) ConsistencyCheckTask(org.exist.storage.ConsistencyCheckTask) EXistException(org.exist.EXistException)

Aggregations

EXistException (org.exist.EXistException)3 ErrorReport (org.exist.backup.ErrorReport)3 TaskStatus (org.exist.management.TaskStatus)2 PrintWriter (java.io.PrintWriter)1 ConsistencyCheck (org.exist.backup.ConsistencyCheck)1 SystemExport (org.exist.backup.SystemExport)1 Agent (org.exist.management.Agent)1 PermissionDeniedException (org.exist.security.PermissionDeniedException)1 ConsistencyCheckTask (org.exist.storage.ConsistencyCheckTask)1 SystemTask (org.exist.storage.SystemTask)1 TerminatedException (org.exist.xquery.TerminatedException)1