Search in sources :

Example 21 with BatchItem

use of org.zalando.nakadi.domain.BatchItem in project nakadi by zalando.

the class EventPublisher method enrich.

private void enrich(final List<BatchItem> batch, final EventType eventType) throws EnrichmentException {
    for (final BatchItem batchItem : batch) {
        try {
            batchItem.setStep(EventPublishingStep.ENRICHING);
            enrichment.enrich(batchItem, eventType);
        } catch (EnrichmentException e) {
            batchItem.updateStatusAndDetail(EventPublishingStatus.FAILED, e.getMessage());
            throw e;
        }
    }
}
Also used : BatchItem(org.zalando.nakadi.domain.BatchItem) EnrichmentException(org.zalando.nakadi.exceptions.EnrichmentException)

Example 22 with BatchItem

use of org.zalando.nakadi.domain.BatchItem in project nakadi by zalando.

the class EventPublisher method publishInternal.

EventPublishResult publishInternal(final String events, final String eventTypeName, final boolean useAuthz) throws NoSuchEventTypeException, InternalNakadiException, EventTypeTimeoutException, AccessDeniedException, ServiceTemporarilyUnavailableException {
    Closeable publishingCloser = null;
    final List<BatchItem> batch = BatchFactory.from(events);
    try {
        publishingCloser = timelineSync.workWithEventType(eventTypeName, nakadiSettings.getTimelineWaitTimeoutMs());
        final EventType eventType = eventTypeCache.getEventType(eventTypeName);
        if (useAuthz) {
            authValidator.authorizeEventTypeWrite(eventType);
        }
        validate(batch, eventType);
        partition(batch, eventType);
        enrich(batch, eventType);
        submit(batch, eventType);
        return ok(batch);
    } catch (final EventValidationException e) {
        LOG.debug("Event validation error: {}", e.getMessage());
        return aborted(EventPublishingStep.VALIDATING, batch);
    } catch (final PartitioningException e) {
        LOG.debug("Event partition error: {}", e.getMessage());
        return aborted(EventPublishingStep.PARTITIONING, batch);
    } catch (final EnrichmentException e) {
        LOG.debug("Event enrichment error: {}", e.getMessage());
        return aborted(EventPublishingStep.ENRICHING, batch);
    } catch (final EventPublishingException e) {
        LOG.error("error publishing event", e);
        return failed(batch);
    } catch (final InterruptedException e) {
        Thread.currentThread().interrupt();
        LOG.error("Failed to wait for timeline switch", e);
        throw new EventTypeTimeoutException("Event type is currently in maintenance, please repeat request");
    } catch (final TimeoutException e) {
        LOG.error("Failed to wait for timeline switch", e);
        throw new EventTypeTimeoutException("Event type is currently in maintenance, please repeat request");
    } finally {
        try {
            if (publishingCloser != null) {
                publishingCloser.close();
            }
        } catch (final IOException e) {
            LOG.error("Exception occurred when releasing usage of event-type", e);
        }
    }
}
Also used : EventValidationException(org.zalando.nakadi.exceptions.EventValidationException) PartitioningException(org.zalando.nakadi.exceptions.PartitioningException) EventType(org.zalando.nakadi.domain.EventType) Closeable(java.io.Closeable) BatchItem(org.zalando.nakadi.domain.BatchItem) EnrichmentException(org.zalando.nakadi.exceptions.EnrichmentException) IOException(java.io.IOException) EventTypeTimeoutException(org.zalando.nakadi.exceptions.EventTypeTimeoutException) EventPublishingException(org.zalando.nakadi.exceptions.EventPublishingException) TimeoutException(java.util.concurrent.TimeoutException) EventTypeTimeoutException(org.zalando.nakadi.exceptions.EventTypeTimeoutException)

Example 23 with BatchItem

use of org.zalando.nakadi.domain.BatchItem in project nakadi by zalando.

the class EventPublisher method partition.

private void partition(final List<BatchItem> batch, final EventType eventType) throws PartitioningException {
    for (final BatchItem item : batch) {
        item.setStep(EventPublishingStep.PARTITIONING);
        try {
            final String partitionId = partitionResolver.resolvePartition(eventType, item.getEvent());
            item.setPartition(partitionId);
        } catch (final PartitioningException e) {
            item.updateStatusAndDetail(EventPublishingStatus.FAILED, e.getMessage());
            throw e;
        }
    }
}
Also used : PartitioningException(org.zalando.nakadi.exceptions.PartitioningException) BatchItem(org.zalando.nakadi.domain.BatchItem)

Aggregations

BatchItem (org.zalando.nakadi.domain.BatchItem)23 Test (org.junit.Test)16 EventType (org.zalando.nakadi.domain.EventType)12 TestUtils.createBatchItem (org.zalando.nakadi.utils.TestUtils.createBatchItem)12 TestUtils.buildDefaultEventType (org.zalando.nakadi.utils.TestUtils.buildDefaultEventType)11 JSONObject (org.json.JSONObject)10 ArrayList (java.util.ArrayList)8 EventPublishingException (org.zalando.nakadi.exceptions.EventPublishingException)7 PartitionInfo (org.apache.kafka.common.PartitionInfo)6 Collections (java.util.Collections)3 List (java.util.List)3 Set (java.util.Set)3 TimeoutException (java.util.concurrent.TimeoutException)3 Collectors (java.util.stream.Collectors)3 Collectors.toList (java.util.stream.Collectors.toList)3 Consumer (org.apache.kafka.clients.consumer.Consumer)3 ProducerRecord (org.apache.kafka.clients.producer.ProducerRecord)3 Node (org.apache.kafka.common.Node)3 Matchers.isEmptyString (org.hamcrest.Matchers.isEmptyString)3 InvalidCursorException (org.zalando.nakadi.exceptions.InvalidCursorException)3