Search in sources :

Example 1 with CommandCloseProducer

use of org.apache.pulsar.common.api.proto.CommandCloseProducer in project pulsar by yahoo.

the class ServerCnx method handleCloseProducer.

@Override
protected void handleCloseProducer(CommandCloseProducer closeProducer) {
    checkArgument(state == State.Connected);
    final long producerId = closeProducer.getProducerId();
    final long requestId = closeProducer.getRequestId();
    CompletableFuture<Producer> producerFuture = producers.get(producerId);
    if (producerFuture == null) {
        log.info("[{}] Producer {} was not registered on the connection", remoteAddress, producerId);
        ctx.writeAndFlush(Commands.newSuccess(requestId));
        return;
    }
    if (!producerFuture.isDone() && producerFuture.completeExceptionally(new IllegalStateException("Closed producer before creation was complete"))) {
        // We have received a request to close the producer before it was actually completed, we have marked the
        // producer future as failed and we can tell the client the close operation was successful.
        log.info("[{}] Closed producer before its creation was completed. producerId={}", remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
        return;
    } else if (producerFuture.isCompletedExceptionally()) {
        log.info("[{}] Closed producer that already failed to be created. producerId={}", remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
        return;
    }
    // Proceed with normal close, the producer
    Producer producer = producerFuture.getNow(null);
    log.info("[{}][{}] Closing producer on cnx {}. producerId={}", producer.getTopic(), producer.getProducerName(), remoteAddress, producerId);
    producer.close(true).thenAccept(v -> {
        log.info("[{}][{}] Closed producer on cnx {}. producerId={}", producer.getTopic(), producer.getProducerName(), remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
    });
}
Also used : CommandProducer(org.apache.pulsar.common.api.proto.CommandProducer) CommandCloseProducer(org.apache.pulsar.common.api.proto.CommandCloseProducer)

Example 2 with CommandCloseProducer

use of org.apache.pulsar.common.api.proto.CommandCloseProducer in project incubator-pulsar by apache.

the class ServerCnx method handleCloseProducer.

@Override
protected void handleCloseProducer(CommandCloseProducer closeProducer) {
    checkArgument(state == State.Connected);
    final long producerId = closeProducer.getProducerId();
    final long requestId = closeProducer.getRequestId();
    CompletableFuture<Producer> producerFuture = producers.get(producerId);
    if (producerFuture == null) {
        log.info("[{}] Producer {} was not registered on the connection", remoteAddress, producerId);
        ctx.writeAndFlush(Commands.newSuccess(requestId));
        return;
    }
    if (!producerFuture.isDone() && producerFuture.completeExceptionally(new IllegalStateException("Closed producer before creation was complete"))) {
        // We have received a request to close the producer before it was actually completed, we have marked the
        // producer future as failed and we can tell the client the close operation was successful.
        log.info("[{}] Closed producer before its creation was completed. producerId={}", remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
        return;
    } else if (producerFuture.isCompletedExceptionally()) {
        log.info("[{}] Closed producer that already failed to be created. producerId={}", remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
        return;
    }
    // Proceed with normal close, the producer
    Producer producer = producerFuture.getNow(null);
    log.info("[{}][{}] Closing producer on cnx {}. producerId={}", producer.getTopic(), producer.getProducerName(), remoteAddress, producerId);
    producer.close(true).thenAccept(v -> {
        log.info("[{}][{}] Closed producer on cnx {}. producerId={}", producer.getTopic(), producer.getProducerName(), remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
    });
}
Also used : CommandProducer(org.apache.pulsar.common.api.proto.CommandProducer) CommandCloseProducer(org.apache.pulsar.common.api.proto.CommandCloseProducer)

Example 3 with CommandCloseProducer

use of org.apache.pulsar.common.api.proto.CommandCloseProducer in project pulsar by apache.

the class ServerCnx method handleCloseProducer.

@Override
protected void handleCloseProducer(CommandCloseProducer closeProducer) {
    checkArgument(state == State.Connected);
    final long producerId = closeProducer.getProducerId();
    final long requestId = closeProducer.getRequestId();
    CompletableFuture<Producer> producerFuture = producers.get(producerId);
    if (producerFuture == null) {
        log.info("[{}] Producer {} was not registered on the connection", remoteAddress, producerId);
        ctx.writeAndFlush(Commands.newSuccess(requestId));
        return;
    }
    if (!producerFuture.isDone() && producerFuture.completeExceptionally(new IllegalStateException("Closed producer before creation was complete"))) {
        // We have received a request to close the producer before it was actually completed, we have marked the
        // producer future as failed and we can tell the client the close operation was successful.
        log.info("[{}] Closed producer before its creation was completed. producerId={}", remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
        return;
    } else if (producerFuture.isCompletedExceptionally()) {
        log.info("[{}] Closed producer that already failed to be created. producerId={}", remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
        return;
    }
    // Proceed with normal close, the producer
    Producer producer = producerFuture.getNow(null);
    log.info("[{}][{}] Closing producer on cnx {}. producerId={}", producer.getTopic(), producer.getProducerName(), remoteAddress, producerId);
    producer.close(true).thenAccept(v -> {
        log.info("[{}][{}] Closed producer on cnx {}. producerId={}", producer.getTopic(), producer.getProducerName(), remoteAddress, producerId);
        commandSender.sendSuccessResponse(requestId);
        producers.remove(producerId, producerFuture);
    });
}
Also used : CommandProducer(org.apache.pulsar.common.api.proto.CommandProducer) CommandCloseProducer(org.apache.pulsar.common.api.proto.CommandCloseProducer)

Aggregations

CommandCloseProducer (org.apache.pulsar.common.api.proto.CommandCloseProducer)3 CommandProducer (org.apache.pulsar.common.api.proto.CommandProducer)3