示例#1
0
  public static TaskStatus getTaskStatus(CompositeDataSupport compositeData) {

    TaskStatus status = new TaskStatus((Status) compositeData.get("status"));
    status._reason = compositeData.get("reason");
    status._statusChangeTime = (Date) compositeData.get("statusChangeTime");
    status._percentageDone = ((Integer) compositeData.get("percentage")).intValue();
    return status;
  }
  @Override
  public void execute(DBBroker broker) 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, 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, 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.getAbsolutePath());
        }

        LOG.info("Finished backup");
      }

    } catch (final TerminatedException e) {
      throw new EXistException(e.getMessage(), e);

    } catch (final PermissionDeniedException e) {
      // TODO should maybe throw PermissionDeniedException instead!
      throw new EXistException(e.getMessage(), e);

    } finally {
      if (report != null) {
        report.close();
      }

      agentInstance.changeStatus(brokerPool, endStatus);
      brokerPool.getProcessMonitor().endJob();
    }
  }