/** * After batch is sent and get acknowledged successfully, this method will be invoked */ public void onSuccess (final WriteResponse response) { for (final Thunk thunk: this.thunks) { thunk.callback.onSuccess(new WriteResponse() { @Override public Object getRawResponse() { return response.getRawResponse(); } @Override public String getStringResponse() { return response.getStringResponse(); } @Override public long bytesWritten() { return thunk.sizeInBytes; } }); } }
/** * When batch is sent with an error return, this method will be invoked */ public void onFailure (Throwable throwable) { for (Thunk thunk: this.thunks) { thunk.callback.onFailure(throwable); } }
@Override public void onSuccess(WriteResponse writeResponse) { _writeResponse = writeResponse; synchronized (this) { _callbackFired = true; if (_innerCallback != null) { try { _innerCallback.onSuccess(writeResponse); } catch (Exception e) { log.error("Ignoring error thrown in callback", e); } } notifyAll(); } }
@Override public void onFailure(Throwable throwable) { synchronized (this) { _throwable = throwable; _callbackFired = true; if (_innerCallback != null) { _innerCallback.onFailure(throwable); } notifyAll(); } } }
/** * Callback on sending the asyncRequest successfully */ protected void onSuccess(AsyncRequest<D, RQ> asyncRequest, ResponseStatus status) { final WriteResponse response = WriteResponse.EMPTY; for (final AsyncRequest.Thunk thunk: asyncRequest.getThunks()) { WriteCallback callback = (WriteCallback) thunk.callback; callback.onSuccess(new WriteResponse() { @Override public Object getRawResponse() { return response.getRawResponse(); } @Override public String getStringResponse() { return response.getStringResponse(); } @Override public long bytesWritten() { return thunk.sizeInBytes; } }); } }
@Override public void onError(Throwable e) { callbackFired.set(true); writeResponseQueue.add(new Pair<WriteResponse, Throwable>(null, e)); callback.onFailure(e); }
/** * Write a whole batch to eventhub */ public Future<WriteResponse> write (Batch<String> batch, WriteCallback callback) { Timer.Context context = writeTimer.time(); int returnCode = 0; LOG.info ("Dispatching batch " + batch.getId()); recordsAttempted.mark(batch.getRecords().size()); try { String encoded = encodeBatch(batch); returnCode = request (encoded); WriteResponse<Integer> response = WRITE_RESPONSE_WRAPPER.wrap(returnCode); callback.onSuccess(response); bytesWritten.mark(encoded.length()); recordsSuccess.mark(batch.getRecords().size()); } catch (Exception e) { LOG.error("Dispatching batch " + batch.getId() + " failed :" + e.toString()); callback.onFailure(e); recordsFailed.mark(batch.getRecords().size()); } context.close(); Future<Integer> future = Futures.immediateFuture(returnCode); return new WriteResponseFuture<>(future, WRITE_RESPONSE_WRAPPER); }
@Override public void onNext(D doc) { try { callbackFired.set(true); WriteResponse writeResponse = new GenericWriteResponse<D>(doc); writeResponseQueue.add(new Pair<WriteResponse, Throwable>(writeResponse, null)); callback.onSuccess(writeResponse); } finally { if (doc instanceof TupleDocument) { ((TupleDocument) doc).content().value1().release(); } } } });
@Override public void onFailure(Exception exception) { writeResponseQueue.add(new Pair<WriteResponse, Throwable>(null, exception)); if (exceptionLogger != null) { exceptionLogger.log(exception); } if (callback != null) { callback.onFailure(exception); } } };
@Test public void testSingleBatch() { // mock eventhub data writer Properties props = new Properties(); EventhubDataWriter eventhubDataWriter = Mockito.spy(new EventhubDataWriter(props, mockHttpClient)); Mockito.doNothing().when(eventhubDataWriter).refreshSignature(); List<String> records = new LinkedList<>(); for (int i=0; i<50; ++i) records.add(new String("abcdefgh")); Batch<String> batch = mock(Batch.class); WriteCallback callback = mock(WriteCallback.class); Mockito.when(batch.getRecords()).thenReturn(records); Future<WriteResponse> future = eventhubDataWriter.write(batch,callback); verify(callback, times(1)).onSuccess(isA(WriteResponse.class)); verify(callback, never()).onFailure(isA(Exception.class)); Assert.assertTrue(future.isDone(), "Future should be done"); }
+ record); future = Futures.immediateFuture(new RecordMetadata(0)); callback.onSuccess(WriteResponse.EMPTY); return future;
/** * When batch is sent with an error return, this method will be invoked */ public void onFailure (Throwable throwable) { for (Thunk thunk: this.thunks) { thunk.callback.onFailure(throwable); } }
@Override public void onFailure(Throwable throwable) { synchronized (this) { _throwable = throwable; _callbackFired = true; if (_innerCallback != null) { _innerCallback.onFailure(throwable); } notifyAll(); } } }
@Test public void testStringSerialization() throws IOException, InterruptedException { String topic = "testStringSerialization08"; _kafkaTestHelper.provisionTopic(topic); Properties props = new Properties(); props.setProperty(KafkaWriterConfigurationKeys.KAFKA_TOPIC, topic); props.setProperty(KafkaWriterConfigurationKeys.KAFKA_PRODUCER_CONFIG_PREFIX+"bootstrap.servers", "localhost:" + _kafkaTestHelper.getKafkaServerPort()); props.setProperty(KafkaWriterConfigurationKeys.KAFKA_PRODUCER_CONFIG_PREFIX+"value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Kafka08DataWriter<String> kafka08DataWriter = new Kafka08DataWriter<String>(props); String messageString = "foobar"; WriteCallback callback = mock(WriteCallback.class); try { kafka08DataWriter.write(messageString, callback); } finally { kafka08DataWriter.close(); } verify(callback, times(1)).onSuccess(isA(WriteResponse.class)); verify(callback, never()).onFailure(isA(Exception.class)); byte[] message = _kafkaTestHelper.getIteratorForTopic(topic).next().message(); String messageReceived = new String(message); Assert.assertEquals(messageReceived, messageString); }
/** * After batch is sent and get acknowledged successfully, this method will be invoked */ public void onSuccess (final WriteResponse response) { for (final Thunk thunk: this.thunks) { thunk.callback.onSuccess(new WriteResponse() { @Override public Object getRawResponse() { return response.getRawResponse(); } @Override public String getStringResponse() { return response.getStringResponse(); } @Override public long bytesWritten() { return thunk.sizeInBytes; } }); } }
@Override public void onFailure(Exception exception) { writeResponseQueue.add(new Pair<WriteResponse, Throwable>(null, exception)); if (exceptionLogger != null) { exceptionLogger.log(exception); } if (callback != null) { callback.onFailure(exception); } } };