Search in sources :

Example 1 with CompressionType

use of com.yahoo.pulsar.common.api.proto.PulsarApi.CompressionType in project pulsar by yahoo.

the class ConsumerImpl method uncompressPayloadIfNeeded.

private ByteBuf uncompressPayloadIfNeeded(MessageIdData messageId, MessageMetadata msgMetadata, ByteBuf payload, ClientCnx currentCnx) {
    CompressionType compressionType = msgMetadata.getCompression();
    CompressionCodec codec = codecProvider.getCodec(compressionType);
    int uncompressedSize = msgMetadata.getUncompressedSize();
    if (uncompressedSize > PulsarDecoder.MaxMessageSize) {
        // Uncompressed size is itself corrupted since it cannot be bigger than the MaxMessageSize
        log.error("[{}][{}] Got corrupted uncompressed message size {} at {}", topic, subscription, uncompressedSize, messageId);
        discardCorruptedMessage(messageId, currentCnx, ValidationError.UncompressedSizeCorruption);
        return null;
    }
    try {
        ByteBuf uncompressedPayload = codec.decode(payload, uncompressedSize);
        return uncompressedPayload;
    } catch (IOException e) {
        log.error("[{}][{}] Failed to decompress message with {} at {}: {}", topic, subscription, compressionType, messageId, e.getMessage(), e);
        discardCorruptedMessage(messageId, currentCnx, ValidationError.DecompressionError);
        return null;
    }
}
Also used : CompressionCodec(com.yahoo.pulsar.common.compression.CompressionCodec) IOException(java.io.IOException) ByteBuf(io.netty.buffer.ByteBuf) CompressionType(com.yahoo.pulsar.common.api.proto.PulsarApi.CompressionType)

Aggregations

CompressionType (com.yahoo.pulsar.common.api.proto.PulsarApi.CompressionType)1 CompressionCodec (com.yahoo.pulsar.common.compression.CompressionCodec)1 ByteBuf (io.netty.buffer.ByteBuf)1 IOException (java.io.IOException)1