@Override public String getDescription() { return "Permanently removes AIP(s) from the repository whose ingest failed (state=" + AIPState.INGEST_PROCESSING.toString() + "). Data, metadata and event history will be deleted permanently. WARNING: This operation cannot be undone. Use with extreme caution."; }
private IterableIndexResult<IndexedAIP> findAipsToDelete(IndexService index, List<String> activeJobsIds) throws GenericException, RequestNotValidException { Filter aipsFilter = new Filter(); // all aips whose job id is not one of the active job ids activeJobsIds.forEach(e -> aipsFilter.add(new NotSimpleFilterParameter(RodaConstants.INGEST_JOB_ID, e))); // aip state is INGEST_PROCESSING aipsFilter.add(new SimpleFilterParameter(RodaConstants.AIP_STATE, AIPState.INGEST_PROCESSING.toString())); return index.findAll(IndexedAIP.class, aipsFilter, false, Arrays.asList(RodaConstants.INDEX_UUID)); }
public static void cleanJobObjects(Job job, ModelService model, IndexService index) { if (RodaCoreFactory.getNodeType() == NodeType.MASTER) { // find all AIPs that should be removed Filter filter = new Filter(); // FIXME 20161128 hsilva: perhaps we should avoid ghosts??? // FIXME 20170308 nvieira: it should rollback if job is update filter.add(new SimpleFilterParameter(RodaConstants.INGEST_JOB_ID, job.getId())); filter.add(new OneOfManyFilterParameter(RodaConstants.AIP_STATE, Arrays.asList(AIPState.CREATED.toString(), AIPState.INGEST_PROCESSING.toString()))); try (IterableIndexResult<IndexedAIP> result = index.findAll(IndexedAIP.class, filter, false, Arrays.asList(RodaConstants.INDEX_UUID))) { for (IndexedAIP aip : result) { String aipId = aip.getUUID(); try { LOGGER.info("Deleting AIP {} during job {} cleanup", aipId, job.getId()); model.deleteAIP(aipId); } catch (RequestNotValidException | NotFoundException | GenericException | AuthorizationDeniedException e) { LOGGER.error("Error deleting AIP {} during job {} cleanup", aipId, job.getId(), e); } } } catch (IOException | GenericException | RequestNotValidException e) { LOGGER.error("Error getting AIP iterator when cleaning job objects", e); } } }
@Override public List<Field> getFields() { List<Field> ret = new ArrayList<>(); if (SolrCollection.hasId(getIndexClass())) { ret.add(new Field(RodaConstants.INDEX_ID, Field.TYPE_STRING)); } if (SolrCollection.hasStateFilter(getIndexClass())) { boolean stored = SolrCollection.hasState(getIndexClass()); ret.add(new Field(RodaConstants.INDEX_STATE, Field.TYPE_STRING).setStored(stored) .setDefaultValue(AIPState.getDefault().toString())); } ret.add(SolrCollection.getSearchField()); return ret; }
if (doc.containsKey(RodaConstants.JOB_REPORT_OUTCOME_OBJECT_STATE)) { jobReport.setOutcomeObjectState(AIPState.valueOf(SolrUtils .objectToString(doc.get(RodaConstants.JOB_REPORT_OUTCOME_OBJECT_STATE), AIPState.getDefault().toString())));
@Override public SolrInputDocument toSolrDocument(Report jobReport, IndexingAdditionalInfo info) throws RequestNotValidException, GenericException, NotFoundException, AuthorizationDeniedException { SolrInputDocument doc = super.toSolrDocument(jobReport, info); doc.addField(RodaConstants.JOB_REPORT_JOB_ID, jobReport.getJobId()); doc.addField(RodaConstants.JOB_REPORT_SOURCE_OBJECT_ID, jobReport.getSourceObjectId()); doc.addField(RodaConstants.JOB_REPORT_SOURCE_OBJECT_ORIGINAL_IDS, jobReport.getSourceObjectOriginalIds()); doc.addField(RodaConstants.JOB_REPORT_SOURCE_OBJECT_ORIGINAL_NAME, jobReport.getSourceObjectOriginalName()); doc.addField(RodaConstants.JOB_REPORT_OUTCOME_OBJECT_ID, jobReport.getOutcomeObjectId()); doc.addField(RodaConstants.JOB_REPORT_OUTCOME_OBJECT_STATE, jobReport.getOutcomeObjectState().toString()); doc.addField(RodaConstants.JOB_REPORT_TITLE, jobReport.getTitle()); doc.addField(RodaConstants.JOB_REPORT_DATE_CREATED, SolrUtils.formatDateWithMillis(jobReport.getDateCreated())); doc.addField(RodaConstants.JOB_REPORT_DATE_UPDATED, SolrUtils.formatDateWithMillis(jobReport.getDateUpdated())); doc.addField(RodaConstants.JOB_REPORT_COMPLETION_PERCENTAGE, jobReport.getCompletionPercentage()); doc.addField(RodaConstants.JOB_REPORT_STEPS_COMPLETED, jobReport.getStepsCompleted()); doc.addField(RodaConstants.JOB_REPORT_TOTAL_STEPS, jobReport.getTotalSteps()); doc.addField(RodaConstants.JOB_REPORT_PLUGIN, jobReport.getPlugin()); doc.addField(RodaConstants.JOB_REPORT_PLUGIN_NAME, jobReport.getPluginName()); doc.addField(RodaConstants.JOB_REPORT_PLUGIN_VERSION, jobReport.getPluginVersion()); doc.addField(RodaConstants.JOB_REPORT_PLUGIN_STATE, jobReport.getPluginState().toString()); doc.addField(RodaConstants.JOB_REPORT_PLUGIN_DETAILS, jobReport.getPluginDetails()); doc.addField(RodaConstants.JOB_REPORT_HTML_PLUGIN_DETAILS, jobReport.isHtmlPluginDetails()); doc.addField(RodaConstants.JOB_REPORT_REPORTS, JsonUtils.getJsonFromObject(jobReport.getReports())); doc.addField(RodaConstants.JOB_REPORT_SOURCE_OBJECT_CLASS, jobReport.getSourceObjectClass()); doc.addField(RodaConstants.JOB_REPORT_OUTCOME_OBJECT_CLASS, jobReport.getOutcomeObjectClass()); return doc; }