All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.debezium.connector.spanner.StreamEventQueue Maven / Gradle / Ivy

There is a newer version: 3.0.0.CR1
Show newest version
/*
 * Copyright Debezium Authors.
 *
 * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
 */
package io.debezium.connector.spanner;

import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;

import io.debezium.connector.spanner.db.model.event.ChangeStreamEvent;
import io.debezium.connector.spanner.metrics.MetricsEventPublisher;
import io.debezium.connector.spanner.metrics.event.SpannerEventQueueUpdateEvent;

/**
 * Internal queue which holds Spanner Events
 * before they will be processed
 */
public class StreamEventQueue {
    private final BlockingDeque queue;
    private final MetricsEventPublisher metricsEventPublisher;

    public StreamEventQueue(int capacity, MetricsEventPublisher metricsEventPublisher) {
        this.queue = new LinkedBlockingDeque<>(capacity);
        this.metricsEventPublisher = metricsEventPublisher;

        this.metricsEventPublisher.publishMetricEvent(
                new SpannerEventQueueUpdateEvent(queue.remainingCapacity() + queue.size(), queue.remainingCapacity()));
    }

    public void put(ChangeStreamEvent changeStreamEvent) throws InterruptedException {
        this.queue.put(changeStreamEvent);

        this.metricsEventPublisher.publishMetricEvent(
                new SpannerEventQueueUpdateEvent(queue.remainingCapacity() + queue.size(), queue.remainingCapacity()));
    }

    public ChangeStreamEvent take() throws InterruptedException {
        ChangeStreamEvent event = this.queue.take();

        this.metricsEventPublisher.publishMetricEvent(
                new SpannerEventQueueUpdateEvent(queue.remainingCapacity() + queue.size(), queue.remainingCapacity()));

        return event;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy