private void releaseTheHounds() { Future<Boolean> future = sparqlOnDemandIndexer.asyncUpdatesAndDeletes(toUpdate, toDelete); boolean success = false; try { success = future.get(120, TimeUnit.SECONDS); } catch (Exception e) { logger.error("Async triplestore update exception", e); } if (!success) { logger.error("Triplestore update timed out, retrying."); future = sparqlOnDemandIndexer.asyncUpdatesAndDeletes(toUpdate, toDelete); try { success = future.get(120, TimeUnit.SECONDS); } catch (Exception e) { logger.error("Async triplestore retry update exception", e); } if (!success) { toUpdate.clear(); toDelete.clear(); throw new RuntimeException("Triplestore update timed out twice, that sux a big one."); } } toUpdate.clear(); toDelete.clear(); }
private void updateBinary(ZdoModel model) throws IOException { try (InputStream in = model.getContent()) { Response.StatusType statusInfo = ClientBuilder.newClient() .target(fitTransactionToUrl(model.getUrl())) .request() .put(Entity.entity(in, model.get(ZdoTerms.mimeType))) .getStatusInfo(); if (statusInfo.getFamily() != Response.Status.Family.SUCCESSFUL) { logError(model.getUrl(), statusInfo); throw new IOException("Failed to update resource " + model.getUrl()); } else { model.setUrl(model.getUrl() + "/fcr:metadata"); patchMetadata(model); model.setUrl( model.getUrl().substring(0, model.getUrl().length() - "/fcr:metadata".length())); // Also update triplestore model.stripPossibleBadUrlEnding(); // strip fcr:metadata if (transactionPath == null) { sparqlOnDemandIndexer.update(model); } else { // If in transaction, triplestore operations are delayed till its end toUpdate.add(model); } } } }
public void delete(String url) { Response.StatusType statusInfo = ClientBuilder.newClient() .target(fitTransactionToUrl(url)) .request() .delete() .getStatusInfo(); if (statusInfo.getFamily() != Response.Status.Family.SUCCESSFUL) { logError(fitTransactionToUrl(url), statusInfo); // Delete operations mostly fail because the item already is not there - which can be // considered a desired state, so no exception /*throw new IOException("Failed to update resource " + fitTransactionToUrl(url));*/ } // Also update triplestore if (transactionPath == null) { sparqlOnDemandIndexer.remove(removeTransactionFromUrl(url)); } else { // If in transaction, triplestore operations are delayed till its end toDelete.add(removeTransactionFromUrl(url)); } }
private void updateMetadata(ZdoModel model) throws IOException { Response.StatusType statusInfo = ClientBuilder.newClient() .target(fitTransactionToUrl(model.getUrl())) .request() .put(Entity.entity(model, RDF_SERIALIZATION)) .getStatusInfo(); if (statusInfo.getFamily() != Response.Status.Family.SUCCESSFUL) { logError(fitTransactionToUrl(model.getUrl()), statusInfo); throw new IOException("Failed to update resource " + fitTransactionToUrl(model.getUrl())); } model.removeAllValuesOfProperty(ZdoTerms.fedoraLastModified); if (ZdoType.isAbovePageCategory(model.get(ZdoTerms.zdoType))) { model.add( model.getSubject(), ZdoTerms.fedoraLastModified, OffsetDateTime.now().toString(), XSDDatatype.XSDdateTime); if (model.get(ZdoTerms.fedoraCreated) == null) { model.add( model.getSubject(), ZdoTerms.fedoraCreated, OffsetDateTime.now().toString(), XSDDatatype.XSDdateTime); } } else { model.removeAllValuesOfProperty(ZdoTerms.fedoraCreated); } // Also update triplestore model.stripPossibleBadUrlEnding(); // strip fcr:metadata if (transactionPath == null) { sparqlOnDemandIndexer.update(model); } else { // If in transaction, triplestore operations are delayed till its end toUpdate.add(model); } }