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

io.nosqlbench.driver.pulsar.ops.PulsarConsumerMapper Maven / Gradle / Ivy

Go to download

A Pulsar driver for nosqlbench. This provides the ability to inject synthetic data into a pulsar system.

There is a newer version: 4.15.102
Show newest version
package io.nosqlbench.driver.pulsar.ops;

import com.codahale.metrics.Counter;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Timer;
import io.nosqlbench.driver.pulsar.PulsarActivity;
import io.nosqlbench.driver.pulsar.PulsarSpace;
import io.nosqlbench.engine.api.templating.CommandTemplate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.Schema;
import org.apache.pulsar.client.api.transaction.Transaction;

import java.util.function.LongFunction;
import java.util.function.Supplier;

/**
 * This maps a set of specifier functions to a pulsar operation. The pulsar operation contains
 * enough state to define a pulsar operation such that it can be executed, measured, and possibly
 * retried if needed.
 *
 * This function doesn't act *as* the operation. It merely maps the construction logic into
 * a simple functional type, given the component functions.
 *
 * For additional parameterization, the command template is also provided.
 */
public class PulsarConsumerMapper extends PulsarTransactOpMapper {

    private final static Logger logger = LogManager.getLogger(PulsarProducerMapper.class);

    private final LongFunction> consumerFunc;
    private final LongFunction topicMsgDedupFunc;
    private final boolean e2eMsProc;

    public PulsarConsumerMapper(CommandTemplate cmdTpl,
                                PulsarSpace clientSpace,
                                PulsarActivity pulsarActivity,
                                LongFunction asyncApiFunc,
                                LongFunction useTransactionFunc,
                                LongFunction seqTrackingFunc,
                                LongFunction> transactionSupplierFunc,
                                LongFunction topicMsgDedupFunc,
                                LongFunction> consumerFunc,
                                boolean e2eMsgProc) {
        super(cmdTpl, clientSpace, pulsarActivity, asyncApiFunc, useTransactionFunc, seqTrackingFunc, transactionSupplierFunc);
        this.consumerFunc = consumerFunc;
        this.topicMsgDedupFunc = topicMsgDedupFunc;
        this.e2eMsProc = e2eMsgProc;
    }

    @Override
    public PulsarOp apply(long value) {
        Consumer consumer = consumerFunc.apply(value);
        boolean asyncApi = asyncApiFunc.apply(value);
        boolean useTransaction = useTransactionFunc.apply(value);
        boolean seqTracking = seqTrackingFunc.apply(value);
        Supplier transactionSupplier = transactionSupplierFunc.apply(value);
        boolean topicMsgDedup = topicMsgDedupFunc.apply(value);

        return new PulsarConsumerOp(
            pulsarActivity,
            asyncApi,
            useTransaction,
            seqTracking,
            transactionSupplier,
            topicMsgDedup,
            consumer,
            clientSpace.getPulsarSchema(),
            clientSpace.getPulsarClientConf().getConsumerTimeoutSeconds(),
            value,
            e2eMsProc);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy