@Override public WriteBatcher add(WriteEvent... docs) { for ( WriteEvent doc : docs ) { add( doc.getTargetUri(), doc.getMetadata(), doc.getContent() ); } return this; }
/** * This implements the WriteFailureListener interface * * @param batch the batch of WriteEvents * @param throwable the exception */ public void processFailure(WriteBatch batch, Throwable throwable) { boolean isHostUnavailableException = processException(batch.getBatcher(), throwable, batch.getClient().getHost()); if ( isHostUnavailableException == true ) { try { logger.warn("Retrying failed batch: {}, results so far: {}, uris: {}", batch.getJobBatchNumber(), batch.getJobWritesSoFar(), Stream.of(batch.getItems()).map(event->event.getTargetUri()).collect(Collectors.toList())); batch.getBatcher().retryWithFailureListeners(batch); } catch (RuntimeException e) { logger.error("Exception during retry", e); processFailure(batch, e); } } }
}); for ( WriteEvent doc : writerTask.writeSet.getBatchOfWriteEvents().getItems() ) { writeSet.getWriteSet().add(doc.getTargetUri(), doc.getMetadata(), doc.getContent());
private void retry(WriteBatch batch, boolean callFailListeners) { if ( isStopped() == true ) { logger.warn("Job is now stopped, aborting the retry"); return; } if ( batch == null ) throw new IllegalArgumentException("batch must not be null"); boolean forceNewTransaction = true; BatchWriteSet writeSet = newBatchWriteSet(forceNewTransaction, batch.getJobBatchNumber()); if ( !callFailListeners ) { writeSet.onFailure(throwable -> { if ( throwable instanceof RuntimeException ) throw (RuntimeException) throwable; else throw new DataMovementException("Failed to retry batch", throwable); }); } for (WriteEvent doc : batch.getItems()) { writeSet.getWriteSet().add(doc.getTargetUri(), doc.getMetadata(), doc.getContent()); } BatchWriter runnable = new BatchWriter(writeSet); runnable.run(); } @Override
public OurJbossESBPlugin(DatabaseClient client) { moveMgr = client.newDataMovementManager(); batcher = moveMgr.newWriteBatcher() .withJobName("OurJbossESBPlugin") .withBatchSize(BATCH_SIZE) // every time a batch is full, write it to the database via mlcp // this is the default, only included here to make it obvious //.onBatchFull( new MlcpBatchFullListener() ) // log a summary report after each successful batch .onBatchSuccess( batch -> logger.info(getSummaryReport()) ) .onBatchFailure( (batch, throwable) -> { List<String> uris = new ArrayList<>(); for ( WriteEvent event : batch.getItems() ) { uris.add(event.getTargetUri()); } logger.warn("FAILURE on batch:" + uris + "\n", throwable); }); ticket = moveMgr.startJob(batcher); }
System.out.println("Failure Batch size "+batch.getItems().length); for(WriteEvent w:batch.getItems()){ System.out.println("Failure "+w.getTargetUri());
throwable.printStackTrace(); for(WriteEvent w:batch.getItems()){ System.out.println("Failure "+w.getTargetUri());
", host: " + batch.getClient().getHost() + ", uris: " + Stream.of(batch.getItems()).map(event->event.getTargetUri()).collect(Collectors.toList())); return; ", host: " + batch.getClient().getHost() + ", uris: " + Stream.of(batch.getItems()).map(event->event.getTargetUri()).collect(Collectors.toList())); }); moveMgr.startJob(ihbMT);
batch.getJobBatchNumber(), batch.getItems().length); for(WriteEvent w: batch.getItems()){ successBatch.append(w.getTargetUri()+":"); (batch, throwable) -> { for(WriteEvent w: batch.getItems()){ failureBatch.append(w.getTargetUri()+":");
.onBatchSuccess( batch -> { for ( WriteEvent event : batch.getItems() ) { sentUris.add(event.getTargetUri());
throwable.printStackTrace(); for ( WriteEvent event : batch.getItems() ) { logger.debug("failure event.getTargetUri()=[{}]", event.getTargetUri());