@Override public void run() { try { Runnable onBeforeWrite = writeSet.getOnBeforeWrite(); if ( onBeforeWrite != null ) { onBeforeWrite.run(); TransactionInfo transactionInfo = writeSet.getTransactionInfo(); if ( transactionInfo == null || transactionInfo.alive.get() == true ) { Transaction transaction = null; logger.trace("begin write batch {} to forest on host \"{}\"", writeSet.getBatchNumber(), writeSet.getClient().getHost()); if ( writeSet.getTemporalCollection() == null ) { writeSet.getClient().newDocumentManager().write( writeSet.getWriteSet(), writeSet.getTransform(), transaction ); } else { XMLDocumentManager docMgr = writeSet.getClient().newXMLDocumentManager(); docMgr.setContentFormat(Format.UNKNOWN); docMgr.write( writeSet.getWriteSet(), writeSet.getTransform(), transaction, writeSet.getTemporalCollection() ); Runnable onSuccess = writeSet.getOnSuccess(); if ( onSuccess != null ) { onSuccess.run(); logger.trace("failed batch sent to forest on host \"{}\"", writeSet.getClient().getHost());
private void sendSuccessToListeners(BatchWriteSet batchWriteSet) { batchWriteSet.setItemsSoFar(itemsSoFar.addAndGet(batchWriteSet.getWriteSet().size())); WriteBatch batch = batchWriteSet.getBatchOfWriteEvents(); for ( WriteBatchListener successListener : successListeners ) { try { successListener.processEvent(batch); } catch (Throwable t) { logger.error("Exception thrown by an onBatchSuccess listener", t); } } }
private void sendThrowableToListeners(Throwable t, String message, BatchWriteSet batchWriteSet) { batchWriteSet.setItemsSoFar(itemsSoFar.get()); WriteBatch batch = batchWriteSet.getBatchOfWriteEvents(); for ( WriteFailureListener failureListener : failureListeners ) { try { failureListener.processFailure(batch, t); } catch (Throwable t2) { logger.error("Exception thrown by an onBatchFailure listener", t2); } } if ( message != null ) logger.warn(message, t.toString()); }
HostInfo host = hostInfos[hostToUse]; DatabaseClient hostClient = host.client; BatchWriteSet batchWriteSet = new BatchWriteSet(this, hostClient.newDocumentManager().newWriteSet(), hostClient, getTransform(), getTemporalCollection()); batchWriteSet.setBatchNumber(batchNum); if ( usingTransactions ) { batchWriteSet.onBeforeWrite( () -> { long transactionCount = host.transactionCounter.getAndIncrement(); batchWriteSet.setTransactionInfo( transactionOpener(host, hostClient, transactionSize) ); } else { TransactionInfo transactionInfo = host.getTransactionInfo(); if ( transactionInfo != null ) { batchWriteSet.setTransactionInfo( transactionInfo ); transactionInfo.inProcess.incrementAndGet(); } else { batchWriteSet.setTransactionInfo( transactionOpener(host, hostClient, transactionSize) ); batchWriteSet.onSuccess( () -> { TransactionInfo transactionInfo = batchWriteSet.getTransactionInfo(); long batchNumFinished = transactionInfo.batchesFinished.incrementAndGet(); timeToCommit = (batchNumFinished == getTransactionSize()); batchWriteSet.onFailure( (throwable) -> {
if ( task instanceof BatchWriter ) { BatchWriter writerTask = (BatchWriter) task; if ( removedHostInfos.containsKey(writerTask.writeSet.getClient().getHost()) ) { BatchWriteSet writeSet = newBatchWriteSet(forceNewTransaction, writerTask.writeSet.getBatchNumber()); writeSet.onFailure(throwable -> { if ( throwable instanceof RuntimeException ) throw (RuntimeException) throwable; else throw new DataMovementException("Failed to retry batch after failover", throwable); }); for ( WriteEvent doc : writerTask.writeSet.getBatchOfWriteEvents().getItems() ) { writeSet.getWriteSet().add(doc.getTargetUri(), doc.getMetadata(), doc.getContent());