@Override public String convert(BulkWriteFailure entry) { return String.format( "Dropping failed bulk entry (response [%s] from server) after [%s] attempts due to error [%s]:%n" + "Entry Contents:%n%s", entry.getResponseCode(), entry.getNumberOfAttempts(), entry.getException().getMessage(), ((FastByteArrayInputStream) entry.getEntryContents()).bytes().toString() ); } }
@Override public HandlerResult onError(BulkWriteFailure entry, DelayableErrorCollector<byte[]> collector) throws Exception { // BWC: Versions before 2.x have no status on failure. In those cases we check the error message contents. boolean legacyRetry = entry.getResponseCode() == -1 && entry.getException().getMessage().contains("EsRejectedExecutionException"); if (legacyRetry || retry.retry(entry.getResponseCode())) { // Negative retry limit? Retry forever. if (retryLimit < 0 || entry.getNumberOfAttempts() <= retryLimit) { return collector.backoffAndRetry(retryTime, TimeUnit.MILLISECONDS); } else { return collector.pass("Document bulk write attempts [" + entry.getNumberOfAttempts() + "] exceeds configured automatic retry limit of [" + retryLimit + "]"); } } else { return collector.pass("Non retryable code [" + entry.getResponseCode() + "] encountered."); } } }
attemptCount++; if (attemptCount == 1) { assertEquals(1, entry.getNumberOfAttempts()); assertEquals(401, entry.getResponseCode()); return collector.retry(((FastByteArrayInputStream)entry.getEntryContents()).bytes().bytes()); } else if (attemptCount == 2) { assertEquals(2, entry.getNumberOfAttempts()); assertEquals(402, entry.getResponseCode()); assertEquals(3, entry.getNumberOfAttempts()); assertEquals(403, entry.getResponseCode()); return collector.retry(newData.getBytes(Charsets.UTF_8)); } else if (attemptCount == 4) { assertEquals(1, entry.getNumberOfAttempts()); // New document should reset attempt count assertEquals(404, entry.getResponseCode());
/** * Visible for testing */ @Override public String getRawEvent(BulkWriteFailure event) throws IOException { return IOUtils.asString(event.getEntryContents()); } }
BulkWriteFailure iaeFailure = new BulkWriteFailure(400, new IllegalArgumentException("garbage"), bytes, 4, new ArrayList<String>()); BulkWriteFailure remoteFailure = new BulkWriteFailure(400, new EsHadoopRemoteException("io_exception", "Faiiiil"), bytes, 4, new ArrayList<String>());
@Override public HandlerResult onError(BulkWriteFailure entry, DelayableErrorCollector<byte[]> collector) throws Exception { assertEquals(401, entry.getResponseCode()); // Copy the bytes into a byte array and retry the byte array. byte[] copyDoc = copyDocumentBytes(entry); copyDoc[25] = (byte) (copyDoc[25] + 1); return collector.retry(copyDoc); } }
@Override public HandlerResult onError(BulkWriteFailure entry, DelayableErrorCollector<byte[]> collector) throws Exception { // BWC: Versions before 2.x have no status on failure. In those cases we check the error message contents. boolean legacyRetry = entry.getResponseCode() == -1 && entry.getException().getMessage().contains("EsRejectedExecutionException"); if (legacyRetry || retry.retry(entry.getResponseCode())) { // Negative retry limit? Retry forever. if (retryLimit < 0 || entry.getNumberOfAttempts() <= retryLimit) { return collector.backoffAndRetry(retryTime, TimeUnit.MILLISECONDS); } else { return collector.pass("Document bulk write attempts [" + entry.getNumberOfAttempts() + "] exceeds configured automatic retry limit of [" + retryLimit + "]"); } } else { return collector.pass("Non retryable code [" + entry.getResponseCode() + "] encountered."); } } }
private static byte[] copyDocumentBytes(BulkWriteFailure entry) throws IOException { InputStream inputStream = entry.getEntryContents(); int docLen = inputStream.available(); byte[] copyDoc = new byte[docLen]; int read = inputStream.read(copyDoc); assertEquals(docLen, read); assertEquals(0, inputStream.available()); assertEquals(-1, inputStream.read()); return copyDoc; } }
BulkWriteFailure failure = new BulkWriteFailure( status, error,
@Override public String convert(BulkWriteFailure entry) { return String.format( "Dropping failed bulk entry (response [%s] from server) after [%s] attempts due to error [%s]:%n" + "Entry Contents:%n%s", entry.getResponseCode(), entry.getNumberOfAttempts(), entry.getException().getMessage(), ((FastByteArrayInputStream) entry.getEntryContents()).bytes().toString() ); } }
@Override public HandlerResult onError(BulkWriteFailure entry, DelayableErrorCollector<byte[]> collector) throws Exception { // BWC: Versions before 2.x have no status on failure. In those cases we check the error message contents. boolean legacyRetry = entry.getResponseCode() == -1 && entry.getException().getMessage().contains("EsRejectedExecutionException"); if (legacyRetry || retry.retry(entry.getResponseCode())) { // Negative retry limit? Retry forever. if (retryLimit < 0 || entry.getNumberOfAttempts() <= retryLimit) { return collector.backoffAndRetry(retryTime, TimeUnit.MILLISECONDS); } else { return collector.pass("Document bulk write attempts [" + entry.getNumberOfAttempts() + "] exceeds configured automatic retry limit of [" + retryLimit + "]"); } } else { return collector.pass("Non retryable code [" + entry.getResponseCode() + "] encountered."); } } }
/** * Visible for testing */ @Override public String getRawEvent(BulkWriteFailure event) throws IOException { return IOUtils.asString(event.getEntryContents()); } }
BulkWriteFailure failure = new BulkWriteFailure( status, error,
@Override public String convert(BulkWriteFailure entry) { return String.format( "Dropping failed bulk entry (response [%s] from server) after [%s] attempts due to error [%s]:%n" + "Entry Contents:%n%s", entry.getResponseCode(), entry.getNumberOfAttempts(), entry.getException().getMessage(), ((FastByteArrayInputStream) entry.getEntryContents()).bytes().toString() ); } }
@Override public HandlerResult onError(BulkWriteFailure entry, DelayableErrorCollector<byte[]> collector) throws Exception { // BWC: Versions before 2.x have no status on failure. In those cases we check the error message contents. boolean legacyRetry = entry.getResponseCode() == -1 && entry.getException().getMessage().contains("EsRejectedExecutionException"); if (legacyRetry || retry.retry(entry.getResponseCode())) { // Negative retry limit? Retry forever. if (retryLimit < 0 || entry.getNumberOfAttempts() <= retryLimit) { return collector.backoffAndRetry(retryTime, TimeUnit.MILLISECONDS); } else { return collector.pass("Document bulk write attempts [" + entry.getNumberOfAttempts() + "] exceeds configured automatic retry limit of [" + retryLimit + "]"); } } else { return collector.pass("Non retryable code [" + entry.getResponseCode() + "] encountered."); } } }
/** * Visible for testing */ @Override public String getRawEvent(BulkWriteFailure event) throws IOException { return IOUtils.asString(event.getEntryContents()); } }
BulkWriteFailure failure = new BulkWriteFailure( status, error,
@Override public String convert(BulkWriteFailure entry) { return String.format( "Dropping failed bulk entry (response [%s] from server) after [%s] attempts due to error [%s]:%n" + "Entry Contents:%n%s", entry.getResponseCode(), entry.getNumberOfAttempts(), entry.getException().getMessage(), ((FastByteArrayInputStream) entry.getEntryContents()).bytes().toString() ); } }
/** * Visible for testing */ @Override public String getRawEvent(BulkWriteFailure event) throws IOException { return IOUtils.asString(event.getEntryContents()); } }
BulkWriteFailure failure = new BulkWriteFailure( status, error,