From 3ce9ce7f054a4b07cb648b0347810bfb79a6da9c Mon Sep 17 00:00:00 2001 From: Andre Kramer Date: Tue, 10 Nov 2020 16:45:59 +0000 Subject: [PATCH 1/4] consumer filtering 2.7.0 --- .../pulsar/broker/ServiceConfiguration.java | 12 + .../service/AbstractBaseDispatcher.java | 72 +++++- .../pulsar/broker/service/Consumer.java | 40 +++- .../pulsar/broker/service/ConsumerFilter.java | 52 +++++ .../broker/service/ConsumerFilterFactory.java | 47 ++++ .../broker/service/ConsumerNullFilter.java | 42 ++++ .../broker/service/ConsumerTagFilter.java | 135 +++++++++++ ...PersistentDispatcherMultipleConsumers.java | 2 +- ...sistentDispatcherSingleActiveConsumer.java | 2 +- ...tStickyKeyDispatcherMultipleConsumers.java | 2 +- ...PersistentDispatcherMultipleConsumers.java | 2 +- ...sistentDispatcherSingleActiveConsumer.java | 2 +- ...tStickyKeyDispatcherMultipleConsumers.java | 4 +- .../pulsar/client/impl/RawBatchConverter.java | 73 +++++- .../broker/service/ConsumerFilterTest.java | 215 ++++++++++++++++++ ...ckyKeyDispatcherMultipleConsumersTest.java | 1 + .../client/api/ConsumerFilteringTest.java | 124 ++++++++++ 17 files changed, 802 insertions(+), 25 deletions(-) create mode 100644 pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerFilter.java create mode 100644 pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerFilterFactory.java create mode 100644 pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerNullFilter.java create mode 100644 pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerTagFilter.java create mode 100644 pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ConsumerFilterTest.java create mode 100644 pulsar-broker/src/test/java/org/apache/pulsar/client/api/ConsumerFilteringTest.java diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java index 7fd7491f2cc42..ebba12484de1a 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java @@ -674,6 +674,18 @@ public class ServiceConfiguration implements PulsarConfiguration { doc = "Number of worker threads to serve non-persistent topic") private int numWorkerThreadsForNonPersistentTopic = Runtime.getRuntime().availableProcessors(); + @FieldContext( + category = CATEGORY_SERVER, + doc = "Enable broker to filter messages for consumer subscriptions" + ) + private boolean enableConsumerFilters = true; + + @FieldContext( + category = CATEGORY_SERVER, + doc = "Consumer filter implementation" + ) + private String consumerFilterClass = ""; + @FieldContext( category = CATEGORY_SERVER, doc = "Enable broker to load persistent topics" diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java index 513d6b72e0a8b..ffcc6c5aad69d 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Optional; import lombok.extern.slf4j.Slf4j; import org.apache.bookkeeper.mledger.Entry; @@ -33,6 +34,8 @@ import org.apache.bookkeeper.mledger.impl.PositionImpl; import org.apache.commons.lang3.tuple.Pair; import org.apache.pulsar.broker.service.persistent.PersistentTopic; +import org.apache.bookkeeper.mledger.impl.EntryImpl; +import org.apache.pulsar.client.impl.RawBatchConverter; import org.apache.pulsar.common.api.proto.PulsarApi; import org.apache.pulsar.common.api.proto.PulsarApi.CommandAck.AckType; import org.apache.pulsar.common.api.proto.PulsarApi.MessageMetadata; @@ -61,6 +64,9 @@ protected AbstractBaseDispatcher(Subscription subscription) { *
  • Message is not meant to be delivered immediately * * + * @param consumer + * the consumer we are filtering for. + * * @param entries * a list of entries as read from storage * @@ -71,7 +77,7 @@ protected AbstractBaseDispatcher(Subscription subscription) { * @param sendMessageInfo * an object where the total size in messages and bytes will be returned back to the caller */ - public void filterEntriesForConsumer(List entries, EntryBatchSizes batchSizes, + public void filterEntriesForConsumer(Consumer consumer, List entries, EntryBatchSizes batchSizes, SendMessageInfo sendMessageInfo, EntryBatchIndexesAcks indexesAcks, ManagedCursor cursor, boolean isReplayRead) { int totalMessages = 0; @@ -79,8 +85,11 @@ public void filterEntriesForConsumer(List entries, EntryBatchSizes batchS int totalChunkedMessages = 0; boolean isAfterTxnCommitMarker = false; + consumer.initFiltering(); // Ensure consumer filtering is initialized on first use. for (int i = 0, entriesSize = entries.size(); i < entriesSize; i++) { + + MessageMetadata msgMetadata = null; Entry entry = entries.get(i); if (entry == null) { continue; @@ -88,7 +97,55 @@ public void filterEntriesForConsumer(List entries, EntryBatchSizes batchS ByteBuf metadataAndPayload = entry.getDataBuffer(); - MessageMetadata msgMetadata = Commands.peekMessageMetadata(metadataAndPayload, subscription.toString(), -1); + msgMetadata = Commands.peekMessageMetadata(metadataAndPayload, subscription.toString(), consumer.consumerId()); + boolean isFiltering = consumer.getConsumerFilter().isFiltering(); + if (isFiltering) { + try { + if (msgMetadata.hasNumMessagesInBatch() && msgMetadata.getEncryptionKeysCount() == 0) { + msgMetadata = null; + int readerIdx = metadataAndPayload.readerIndex(); + Optional filteredOrEmpty; + try { + filteredOrEmpty = RawBatchConverter.filter(metadataAndPayload, consumer.getConsumerFilter()); + } finally { + metadataAndPayload.readerIndex(readerIdx); + } + if (filteredOrEmpty.isPresent()) { + ByteBuf filtered = filteredOrEmpty.get(); + Entry filteredEntry = EntryImpl.create(entry.getLedgerId(), entry.getEntryId(), filtered); + + entries.set(i, filteredEntry); + entry.release(); + metadataAndPayload.release(); + metadataAndPayload = filtered; + msgMetadata = Commands.peekMessageMetadata(metadataAndPayload, subscription.toString(), consumer.consumerId()); + } // else nothing to forwards and msgMetadata remains null which is handled below. + } else { + if (msgMetadata.getEncryptionKeysCount() == 0) { + // Filter single message. + List properties = msgMetadata.getPropertiesList(); + // Position reader to message. + int readerIdx = metadataAndPayload.readerIndex(); + try { + Commands.skipChecksumIfPresent(metadataAndPayload); + int metadataSize = (int) metadataAndPayload.readUnsignedInt(); + metadataAndPayload.readerIndex(metadataAndPayload.readerIndex() + metadataSize); + + if (!consumer.getConsumerFilter().filter(properties, metadataAndPayload)) { + msgMetadata.recycle(); + msgMetadata = null; + } + } finally { + metadataAndPayload.readerIndex(readerIdx); + } + } + } + } catch (IOException ioe) { + log.error("Error in filtering for consumer - dropping messages.", ioe); + entries.set(i, null); + entry.release(); + } + } try { if (!isReplayRead && msgMetadata != null @@ -106,7 +163,7 @@ public void filterEntriesForConsumer(List entries, EntryBatchSizes batchS continue; } else if (msgMetadata == null || Markers.isServerOnlyMarker(msgMetadata)) { PositionImpl pos = (PositionImpl) entry.getPosition(); - // Message metadata was corrupted or the messages was a server-only marker + // Message metadata was filtered out or corrupted or the messages was a server-only marker if (Markers.isReplicatedSubscriptionSnapshotMarker(msgMetadata)) { processReplicatedSubscriptionSnapshot(pos, metadataAndPayload); @@ -135,6 +192,7 @@ && trackDelayedDelivery(entry.getLedgerId(), entry.getEntryId(), msgMetadata)) { totalBytes += metadataAndPayload.readableBytes(); totalChunkedMessages += msgMetadata.hasChunkId() ? 1: 0; batchSizes.setBatchSize(i, batchSize); + if (indexesAcks != null && cursor != null) { long[] ackSet = cursor.getDeletedBatchIndexesAsLongArray(PositionImpl.get(entry.getLedgerId(), entry.getEntryId())); if (ackSet != null) { @@ -143,8 +201,14 @@ && trackDelayedDelivery(entry.getLedgerId(), entry.getEntryId(), msgMetadata)) { indexesAcks.setIndexesAcks(i,null); } } + } finally { - msgMetadata.recycle(); + if (msgMetadata != null) { + msgMetadata.recycle(); + } + if (isFiltering) { + metadataAndPayload.release(); + } } } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Consumer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Consumer.java index 0c2624be2ddd9..e9eb491b84ca3 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Consumer.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Consumer.java @@ -92,6 +92,8 @@ public class Consumer { private long lastAckedTimestamp; private Rate chuckedMessageRate; + private final ConsumerFilter consumerFilter; + // Represents how many messages we can safely send to the consumer without // overflowing its receiving queue. The consumer will use Flow commands to // increase its availability @@ -179,6 +181,8 @@ public Consumer(Subscription subscription, SubType subType, String topicName, lo // We don't need to keep track of pending acks if the subscription is not shared this.pendingAcks = null; } + + consumerFilter = ConsumerFilterFactory.createConsumerFilter(this.cnx.getBrokerService().getPulsar().getConfiguration()); } public SubType subType() { @@ -201,11 +205,11 @@ void notifyActiveConsumerChange(Consumer activeConsumer) { if (log.isDebugEnabled()) { log.debug("notify consumer {} - that [{}] for subscription {} has new active consumer : {}", - consumerId, topicName, subscription.getName(), activeConsumer); + consumerId, topicName, subscription.getName(), activeConsumer); } cnx.ctx().writeAndFlush( - Commands.newActiveConsumerChange(consumerId, this == activeConsumer), - cnx.ctx().voidPromise()); + Commands.newActiveConsumerChange(consumerId, this == activeConsumer), + cnx.ctx().voidPromise()); } public boolean readCompacted() { @@ -218,10 +222,10 @@ public boolean readCompacted() { * * @return a SendMessageInfo object that contains the detail of what was sent to consumer */ - public ChannelPromise sendMessages(final List entries, EntryBatchSizes batchSizes, EntryBatchIndexesAcks batchIndexesAcks, int totalMessages, long totalBytes, long totalChunkedMessages, RedeliveryTracker redeliveryTracker) { this.lastConsumedTimestamp = System.currentTimeMillis(); + final ChannelHandlerContext ctx = cnx.ctx(); final ChannelPromise writePromise = ctx.newPromise(); @@ -248,6 +252,7 @@ public ChannelPromise sendMessages(final List entries, EntryBatchSizes ba int batchSize = batchSizes.getBatchSize(i); pendingAcks.put(entry.getLedgerId(), entry.getEntryId(), batchSize, 0); } + } } @@ -287,10 +292,10 @@ public ChannelPromise sendMessages(final List entries, EntryBatchSizes ba MessageIdData.Builder messageIdBuilder = MessageIdData.newBuilder(); MessageIdData messageId = messageIdBuilder - .setLedgerId(entry.getLedgerId()) - .setEntryId(entry.getEntryId()) - .setPartition(partitionIdx) - .build(); + .setLedgerId(entry.getLedgerId()) + .setEntryId(entry.getEntryId()) + .setPartition(partitionIdx) + .build(); ByteBuf metadataAndPayload = entry.getDataBuffer(); // increment ref-count of data and release at the end of process: so, we can get chance to call entry.release @@ -390,6 +395,7 @@ void doUnsubscribe(final long requestId) { CompletableFuture messageAcked(CommandAck ack) { this.lastAckedTimestamp = System.currentTimeMillis(); Map properties = Collections.emptyMap(); + if (ack.getPropertiesCount() > 0) { properties = ack.getPropertiesList().stream() .collect(Collectors.toMap(PulsarApi.KeyLongValue::getKey, @@ -489,8 +495,7 @@ void flowPermits(int additionalNumberOfMessages) { * Triggers dispatcher to dispatch {@code blockedPermits} number of messages and adds same number of permits to * {@code messagePermits} as it maintains count of actual dispatched message-permits. * - * @param consumer: - * Consumer whose blockedPermits needs to be dispatched + * @param consumer: Consumer whose blockedPermits needs to be dispatched */ void flowConsumerBlockedPermits(Consumer consumer) { int additionalNumberOfPermits = PERMITS_RECEIVED_WHILE_CONSUMER_BLOCKED_UPDATER.getAndSet(consumer, 0); @@ -608,10 +613,9 @@ public int hashCode() { /** * first try to remove ack-position from the current_consumer's pendingAcks. * if ack-message doesn't present into current_consumer's pendingAcks - * a. try to remove from other connected subscribed consumers (It happens when client + * a. try to remove from other connected subscribed consumers (It happens when client * tries to acknowledge message through different consumer under the same subscription) * - * * @param position */ private void removePendingAcks(PositionImpl position) { @@ -725,6 +729,18 @@ public Subscription getSubscription() { return subscription; } + public Map getMetadata() { + return metadata; + } + + public void initFiltering() { + consumerFilter.initFiltering(this.getMetadata()); + } + + public ConsumerFilter getConsumerFilter() { + return consumerFilter; + } + private int addAndGetUnAckedMsgs(Consumer consumer, int ackedMessages) { subscription.addUnAckedMessages(ackedMessages); return UNACKED_MESSAGES_UPDATER.addAndGet(consumer, ackedMessages); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerFilter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerFilter.java new file mode 100644 index 0000000000000..5a15ceffd617e --- /dev/null +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerFilter.java @@ -0,0 +1,52 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pulsar.broker.service; + +import io.netty.buffer.ByteBuf; +import org.apache.pulsar.common.api.proto.PulsarApi; +import java.util.Map; +import java.util.List; + +/** + * ConsumerFilter - broker side filtering on consumer subscriptions. + */ +public interface ConsumerFilter { + + /** + * Initialize consumer filtering. + * @param metadata the consumer metadata. + */ + void initFiltering(Map metadata); + + /** + * Check is filtering. + * @return true if filtering otherwise false. + */ + boolean isFiltering(); + + /** + * Filter based on the given list of key value pairs. + * @param properties the key value properties to filter by. + * @param payload the message data buffer. + * @return true if the filter matches otherwise false. + */ + default boolean filter(List properties, ByteBuf payload) { + return true; + } +} diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerFilterFactory.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerFilterFactory.java new file mode 100644 index 0000000000000..0d1ac3e1ee9e0 --- /dev/null +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerFilterFactory.java @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pulsar.broker.service; + +import org.apache.pulsar.broker.ServiceConfiguration; + +/** + * Factory for consumer filters. + */ +public class ConsumerFilterFactory { + + /** + * Create a filter for a consumer. + * @param serviceConfiguration the service configuration which configures filtering. + * @return a consumer filter as configured in the service configuration. + */ + public static ConsumerFilter createConsumerFilter(ServiceConfiguration serviceConfiguration) throws BrokerServiceException { + if (!serviceConfiguration.isEnableConsumerFilters()) { + return new ConsumerNullFilter(); + } + String consumerFilterClass = serviceConfiguration.getConsumerFilterClass(); + if (consumerFilterClass != null && !consumerFilterClass.isEmpty()) { + try { + ConsumerFilter consumerFilter = (ConsumerFilter) Class.forName(consumerFilterClass).newInstance(); + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + throw new BrokerServiceException("Could not create consumer filter", e); + } + } + return new ConsumerTagFilter(); + } +} diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerNullFilter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerNullFilter.java new file mode 100644 index 0000000000000..50f367c36fab2 --- /dev/null +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerNullFilter.java @@ -0,0 +1,42 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pulsar.broker.service; + +import java.util.Map; + +/** + * Non filtering consumer filter. + */ +public class ConsumerNullFilter implements ConsumerFilter { + + public ConsumerNullFilter() { + } + + public void initFiltering(Map metadata) { + // NOOP + } + + /** + * Not filtering. + * @return false + */ + public boolean isFiltering() { + return false; + } +} diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerTagFilter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerTagFilter.java new file mode 100644 index 0000000000000..50d87d65651a3 --- /dev/null +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ConsumerTagFilter.java @@ -0,0 +1,135 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pulsar.broker.service; + +import io.netty.buffer.ByteBuf; +import org.apache.pulsar.common.api.proto.PulsarApi; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +/** + * TagConsumerFilter - consumer filtering based on tags. Tags are consumer properties with a key + * starting with "anytag" or "alltag" and the property as value to match for. + * (e.g. "anTag" or "allTag" or "anyTag0", "anyTag1" etc or "allTag0", "allTag1", "allTag2" etc.) + * Messages are to be checked for properties with keys starting with "tag" as prefix + * (e.g. "tag" or "tag0", "tag1", etc.) + * A message is only to be passed if at least one "anyTag" is matched by value against + * these message properties (if there are anyTags specified) and all the "allTags" are matched + * (if there are some allTags specified). + */ +public class ConsumerTagFilter implements ConsumerFilter { + + private ArrayList anyTags = null; + private ArrayList allTags = null; + + private boolean initFilter = false; + + public ConsumerTagFilter() { + } + + /** + * Inititialize for filtering by collecting filtering tags from the properties. + * Involves breaking out all consumer properties that are tags into separate lists. + * If both lists are null then there are no consumer tags to filter messages by. + * + * @param metadata the consumer metadata properties. + */ + public synchronized void initFiltering(Map metadata) { + if (initFilter) + return; + + ArrayList anyTags = null; + ArrayList allTags = null; + + for (Map.Entry kv : metadata.entrySet()) { + if (kv.getKey().startsWith("anytag")) { + if (anyTags == null) + anyTags = new ArrayList<>(); + if (!anyTags.contains(kv.getValue())) + anyTags.add(kv.getValue()); + } + if (kv.getKey().startsWith("alltag")) { + if (allTags == null) + allTags = new ArrayList<>(); + if (!allTags.contains(kv.getValue())) + allTags.add(kv.getValue()); + } + } + if (allTags != null) { + this.allTags = allTags; + } + if (anyTags != null) { + this.anyTags = anyTags; + } + initFilter = true; + } + + /** + * Check if filtering. + * @return true if there are tags to filter by; otherwise false. + */ + public boolean isFiltering() { + return anyTags != null || allTags != null; + } + + /** + * Filter by given list of message properties. + * @param properties the message properties to filter by. + * @param payload the message data buffer. + * @return true if the message properties contain proterties with "tag" as key prefix + * and values matching at least one of the filter's anyTag (if any) and all of the allTags. + */ + @Override + public boolean filter(List properties, ByteBuf payload) { + + if (false && payload != null) { + byte[] data = new byte[payload.readableBytes()]; + int readIdx = payload.readerIndex(); + payload.readBytes(data); + payload.readerIndex(readIdx); + String msg = new String(data); + System.out.println("ConsumerFiler message: " + msg); + } + + boolean anyMatch = false; + HashSet allMatch = null; + for (PulsarApi.KeyValue kv : properties) { + // System.out.println("msg prop key=" + kv.getKey() + " value=" + kv.getValue()); + if (kv.getKey().startsWith("tag")) { + if (anyTags != null && anyTags.contains(kv.getValue())) { + // System.out.println("anymatch"); + anyMatch = true; + if (allTags == null) + break; + } + if (allTags != null && allTags.contains(kv.getValue())) { + if (allMatch == null) + allMatch = new HashSet(); + allMatch.add(kv.getValue()); + } + } + } + // Match if we have at least one anyTag (if any anyTags) and all the allTags required. + return (anyTags == null || anyMatch) && + ((allMatch == null ? 0 : allMatch.size()) == (allTags == null ? 0 : allTags.size())); + } +} diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java index 2943636c182f6..8806e471de560 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java @@ -193,7 +193,7 @@ public void sendMessages(List entries) { if (consumer != null) { SendMessageInfo sendMessageInfo = SendMessageInfo.getThreadLocal(); EntryBatchSizes batchSizes = EntryBatchSizes.get(entries.size()); - filterEntriesForConsumer(entries, batchSizes, sendMessageInfo, null, null, false); + filterEntriesForConsumer(consumer, entries, batchSizes, sendMessageInfo, null, null, false); consumer.sendMessages(entries, batchSizes, null, sendMessageInfo.getTotalMessages(), sendMessageInfo.getTotalBytes(), sendMessageInfo.getTotalChunkedMessages(), getRedeliveryTracker()); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherSingleActiveConsumer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherSingleActiveConsumer.java index 1b51e0d71413b..0502f334ecf48 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherSingleActiveConsumer.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherSingleActiveConsumer.java @@ -66,7 +66,7 @@ public void sendMessages(List entries) { if (currentConsumer != null && currentConsumer.getAvailablePermits() > 0 && currentConsumer.isWritable()) { SendMessageInfo sendMessageInfo = SendMessageInfo.getThreadLocal(); EntryBatchSizes batchSizes = EntryBatchSizes.get(entries.size()); - filterEntriesForConsumer(entries, batchSizes, sendMessageInfo, null, null, false); + filterEntriesForConsumer(currentConsumer, entries, batchSizes, sendMessageInfo, null, null, false); currentConsumer.sendMessages(entries, batchSizes, null, sendMessageInfo.getTotalMessages(), sendMessageInfo.getTotalBytes(), sendMessageInfo.getTotalChunkedMessages(), getRedeliveryTracker()); } else { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumers.java index 736252e804154..5833e3dea04f3 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumers.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumers.java @@ -99,7 +99,7 @@ public void sendMessages(List entries) { SendMessageInfo sendMessageInfo = SendMessageInfo.getThreadLocal(); EntryBatchSizes batchSizes = EntryBatchSizes.get(entriesForConsumer.size()); - filterEntriesForConsumer(entriesForConsumer, batchSizes, sendMessageInfo, null, null, false); + filterEntriesForConsumer(consumer, entriesForConsumer, batchSizes, sendMessageInfo, null, null, false); consumer.sendMessages(entriesForConsumer, batchSizes, null, sendMessageInfo.getTotalMessages(), sendMessageInfo.getTotalBytes(), sendMessageInfo.getTotalChunkedMessages(), getRedeliveryTracker()); TOTAL_AVAILABLE_PERMITS_UPDATER.addAndGet(this, -sendMessageInfo.getTotalMessages()); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java index be9a7aaa88108..4195011feb0e5 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java @@ -514,7 +514,7 @@ protected void sendMessagesToConsumers(ReadType readType, List entries) { EntryBatchSizes batchSizes = EntryBatchSizes.get(entriesForThisConsumer.size()); EntryBatchIndexesAcks batchIndexesAcks = EntryBatchIndexesAcks.get(entriesForThisConsumer.size()); - filterEntriesForConsumer(entriesForThisConsumer, batchSizes, sendMessageInfo, batchIndexesAcks, cursor, + filterEntriesForConsumer(c, entriesForThisConsumer, batchSizes, sendMessageInfo, batchIndexesAcks, cursor, readType == ReadType.Replay); c.sendMessages(entriesForThisConsumer, batchSizes, batchIndexesAcks, sendMessageInfo.getTotalMessages(), diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherSingleActiveConsumer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherSingleActiveConsumer.java index e6ab5cb1d840b..fca5db87e46fd 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherSingleActiveConsumer.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherSingleActiveConsumer.java @@ -245,7 +245,7 @@ public synchronized void internalReadEntriesComplete(final List entries, EntryBatchSizes batchSizes = EntryBatchSizes.get(entries.size()); SendMessageInfo sendMessageInfo = SendMessageInfo.getThreadLocal(); EntryBatchIndexesAcks batchIndexesAcks = EntryBatchIndexesAcks.get(entries.size()); - filterEntriesForConsumer(entries, batchSizes, sendMessageInfo, batchIndexesAcks, cursor, isReplayRead); + filterEntriesForConsumer(currentConsumer, entries, batchSizes, sendMessageInfo, batchIndexesAcks, cursor, isReplayRead); int totalMessages = sendMessageInfo.getTotalMessages(); long totalBytes = sendMessageInfo.getTotalBytes(); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.java index 649e02dbe01c5..b508e81f72440 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.java @@ -200,9 +200,11 @@ protected void sendMessagesToConsumers(ReadType readType, List entries) { } SendMessageInfo sendMessageInfo = SendMessageInfo.getThreadLocal(); + EntryBatchSizes batchSizes = EntryBatchSizes.get(messagesForC); + EntryBatchIndexesAcks batchIndexesAcks = EntryBatchIndexesAcks.get(messagesForC); - filterEntriesForConsumer(entriesWithSameKey, batchSizes, sendMessageInfo, batchIndexesAcks, cursor, + filterEntriesForConsumer(consumer, entriesWithSameKey, batchSizes, sendMessageInfo, batchIndexesAcks, cursor, readType == ReadType.Replay); consumer.sendMessages(entriesWithSameKey, batchSizes, batchIndexesAcks, sendMessageInfo.getTotalMessages(), diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/RawBatchConverter.java b/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/RawBatchConverter.java index 4ad65af77e77a..c137c3bb8e257 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/RawBatchConverter.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/RawBatchConverter.java @@ -24,15 +24,15 @@ import io.netty.buffer.Unpooled; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.function.BiPredicate; import org.apache.commons.lang3.tuple.ImmutableTriple; +import org.apache.pulsar.broker.service.ConsumerFilter; import org.apache.pulsar.client.api.MessageId; import org.apache.pulsar.client.api.RawMessage; import org.apache.pulsar.common.allocator.PulsarByteBufAllocator; +import org.apache.pulsar.common.api.proto.PulsarApi; import org.apache.pulsar.common.protocol.Commands; import org.apache.pulsar.common.api.proto.PulsarApi.CompressionType; import org.apache.pulsar.common.api.proto.PulsarApi.MessageMetadata; @@ -165,4 +165,71 @@ public static Optional rebatchMessage(RawMessage msg, metadata.recycle(); } } + + /** + * Filter messages from payload using consumer filter. + * + * @param payload The payload of messages. + * @param consumerFilter The tags to OR filter on. + * @return An optional ByteBuf that is a replacement payload or an empty option if no message matched. + * The payload passed in is owned by the caller unless replaced by the buffer returned. In which case + * the caller then own the returned with the one passed in released. + * @throws IOException + */ + public static Optional filter(ByteBuf payload, ConsumerFilter consumerFilter) throws IOException { + + MessageMetadata metadata = Commands.parseMessageMetadata(payload); + ByteBuf batchBuffer = PulsarByteBufAllocator.DEFAULT.buffer(payload.capacity()); // Allocation could be delayed until needed. + + CompressionType compressionType = metadata.getCompression(); + CompressionCodec codec = CompressionCodecProvider.getCompressionCodec(compressionType); + + int uncompressedSize = metadata.getUncompressedSize(); + ByteBuf uncompressedPayload = codec.decode(payload, uncompressedSize); + try { + int batchSize = metadata.getNumMessagesInBatch(); + int messagesRetained = 0; + + for (int i = 0; i < batchSize; i++) { + SingleMessageMetadata.Builder singleMessageMetadataBuilder = SingleMessageMetadata.newBuilder(); + ByteBuf singleMessagePayload = Commands.deSerializeSingleMessageInBatch(uncompressedPayload, + singleMessageMetadataBuilder, + 0, batchSize); + + List properties = singleMessageMetadataBuilder.getPropertiesList(); + + if (consumerFilter.filter(properties, singleMessagePayload) && singleMessagePayload.readableBytes() > 0) { + messagesRetained++; + Commands.serializeSingleMessageInBatchWithPayload(singleMessageMetadataBuilder, + singleMessagePayload, batchBuffer); + } + singleMessageMetadataBuilder.recycle(); + singleMessagePayload.release(); + } + + if (messagesRetained > 0) { + int newUncompressedSize = batchBuffer.readableBytes(); + ByteBuf compressedPayload = codec.encode(batchBuffer); + + MessageMetadata.Builder metadataBuilder = metadata.toBuilder(); + metadataBuilder.setUncompressedSize(newUncompressedSize); + metadataBuilder.setNumMessagesInBatch(messagesRetained); + MessageMetadata newMetadata = metadataBuilder.build(); + + ByteBuf metadataAndPayload = Commands.serializeMetadataAndPayload(Commands.ChecksumType.Crc32c, + newMetadata, compressedPayload); + + metadataBuilder.recycle(); + newMetadata.recycle(); + compressedPayload.release(); + + return Optional.of(metadataAndPayload); + } else { + return Optional.empty(); + } + } finally { + batchBuffer.release(); + metadata.recycle(); + } + } } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ConsumerFilterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ConsumerFilterTest.java new file mode 100644 index 0000000000000..adab03cb449e4 --- /dev/null +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ConsumerFilterTest.java @@ -0,0 +1,215 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pulsar.broker.service; + +import io.netty.buffer.ByteBuf; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.pulsar.common.api.proto.PulsarApi; + +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; + +/** + * Consumer tag filtering tests. + */ +@Test +public class ConsumerFilterTest { + + private ByteBuf nullByteBuf = null; + + @Test(timeOut = 30000) + public void testNullFilter() throws Exception { + ConsumerFilter consumerFilter = new ConsumerNullFilter(); + List messageProperties = new ArrayList<>(); + + // Anything should match with no filter. + boolean match = consumerFilter.filter(messageProperties, nullByteBuf); + assertTrue(match); + } + + @Test(timeOut = 30000) + public void testAnyTag() throws Exception { + ConsumerFilter consumerFilter = new ConsumerTagFilter(); + + Map metadata = new HashMap<>(); + metadata.put("anytag0", "abc"); + consumerFilter.initFiltering(metadata); + + List messageProperties = new ArrayList<>(); + + // No tags should not match. + boolean match = consumerFilter.filter(messageProperties, nullByteBuf); + assertFalse(match); + + // Wrong tag should not match. + PulsarApi.KeyValue prop1 = PulsarApi.KeyValue.newBuilder() + .setKey("tag0") + .setValue("123") + .build(); + messageProperties.add(prop1); + + match = consumerFilter.filter(messageProperties, nullByteBuf); + assertFalse(match); + + messageProperties.clear(); + + // This tag should match. + PulsarApi.KeyValue prop2 = PulsarApi.KeyValue.newBuilder() + .setKey("tag1") + .setValue("abc") + .build(); + messageProperties.add(prop2); + + match = consumerFilter.filter(messageProperties, nullByteBuf); + assertTrue(match); + + messageProperties.clear(); + + // One of 3 tag should match. + PulsarApi.KeyValue prop3 = PulsarApi.KeyValue.newBuilder() + .setKey("tag2") + .setValue("123") + .build(); + + messageProperties.add(prop3); + messageProperties.add(prop2); + messageProperties.add(prop1); + + match = consumerFilter.filter(messageProperties, nullByteBuf); + assertTrue(match); + } + + @Test(timeOut = 30000) + public void testAllTag() throws Exception { + ConsumerFilter consumerFilter = new ConsumerTagFilter(); + + Map metadata = new HashMap<>(); + metadata.put("alltag0", "abc"); + consumerFilter.initFiltering(metadata); + + List messageProperties = new ArrayList<>(); + + // No tags should not match. + boolean match = consumerFilter.filter(messageProperties, nullByteBuf); + assertFalse(match); + + // Wrong tag should not match. + PulsarApi.KeyValue prop1 = PulsarApi.KeyValue.newBuilder() + .setKey("tag0") + .setValue("123") + .build(); + messageProperties.add(prop1); + + match = consumerFilter.filter(messageProperties, nullByteBuf); + assertFalse(match); + + messageProperties.clear(); + + // This tag should match. + PulsarApi.KeyValue prop2 = PulsarApi.KeyValue.newBuilder() + .setKey("tag0") + .setValue("abc") + .build(); + messageProperties.add(prop2); + + match = consumerFilter.filter(messageProperties, nullByteBuf); + assertTrue(match); + } + + @Test(timeOut = 30000) + public void testAllTags() throws Exception { + ConsumerFilter consumerFilter = new ConsumerTagFilter(); + + Map metadata = new HashMap<>(); + metadata.put("alltag0", "abc"); + metadata.put("alltag1", "xyz"); + consumerFilter.initFiltering(metadata); + + List messageProperties = new ArrayList<>(); + + // One tag should not match. + PulsarApi.KeyValue prop1 = PulsarApi.KeyValue.newBuilder() + .setKey("tag0") + .setValue("abc") + .build(); + messageProperties.add(prop1); + + boolean match = consumerFilter.filter(messageProperties, nullByteBuf); + assertFalse(match); + + // Two tags that should match. + PulsarApi.KeyValue prop2 = PulsarApi.KeyValue.newBuilder() + .setKey("tag1") + .setValue("xyz") + .build(); + messageProperties.add(prop2); + + match = consumerFilter.filter(messageProperties, nullByteBuf); + assertTrue(match); + } + + @Test(timeOut = 30000) + public void testAnyAllTags() throws Exception { + ConsumerFilter consumerFilter = new ConsumerTagFilter(); + + Map metadata = new HashMap<>(); + metadata.put("anytag0", "123"); + metadata.put("alltag0", "abc"); + metadata.put("alltag1", "xyz"); + consumerFilter.initFiltering(metadata); + + List messageProperties = new ArrayList<>(); + + // One tag should not match. + PulsarApi.KeyValue prop1 = PulsarApi.KeyValue.newBuilder() + .setKey("tag0") + .setValue("123") + .build(); + messageProperties.add(prop1); + + boolean match = consumerFilter.filter(messageProperties, nullByteBuf); + assertFalse(match); + + // Two tags that should not match. + PulsarApi.KeyValue prop2 = PulsarApi.KeyValue.newBuilder() + .setKey("tag1") + .setValue("abc") + .build(); + messageProperties.add(prop2); + + match = consumerFilter.filter(messageProperties, nullByteBuf); + assertFalse(match); + + // Three tags that should match. + PulsarApi.KeyValue prop3 = PulsarApi.KeyValue.newBuilder() + .setKey("tag1") + .setValue("xyz") + .build(); + messageProperties.add(prop3); + + match = consumerFilter.filter(messageProperties, nullByteBuf); + assertTrue(match); + } +} + diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumersTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumersTest.java index c281400db0bc3..059e7997e69ed 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumersTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumersTest.java @@ -101,6 +101,7 @@ public void setup() throws Exception { consumerMock = mock(Consumer.class); channelMock = mock(ChannelPromise.class); doReturn("consumer1").when(consumerMock).consumerName(); + doReturn(new ConsumerNullFilter()).when(consumerMock).getConsumerFilter(); doReturn(1000).when(consumerMock).getAvailablePermits(); doReturn(true).when(consumerMock).isWritable(); doReturn(channelMock).when(consumerMock).sendMessages( diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ConsumerFilteringTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ConsumerFilteringTest.java new file mode 100644 index 0000000000000..0f185fbb46086 --- /dev/null +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ConsumerFilteringTest.java @@ -0,0 +1,124 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pulsar.client.api; + +import java.util.concurrent.TimeUnit; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +public class ConsumerFilteringTest extends ProducerConsumerBase { + @BeforeClass + @Override + protected void setup() throws Exception { + conf.setManagedLedgerCacheEvictionFrequency(0.1); + super.internalSetup(); + super.producerBaseSetup(); + } + + @AfterClass + @Override + protected void cleanup() throws Exception { + super.internalCleanup(); + } + + private int messages = 100; + + private static boolean once = false; + private static boolean once2 = false; + + @Test + public void testConsumerFilterAnyRatioBatched() throws PulsarClientException { + if (once) + return; + once = true; + testConsumerFilterAnyRatio(true); + } + + @Test + public void testConsumerFilterAnyRatioNoBatching() throws PulsarClientException { + if (once2) + return; + once2 = true; + testConsumerFilterAnyRatio(false); + } + + private void testConsumerFilterAnyRatio(boolean batching) throws PulsarClientException { + testConsumerFilterAnyRatio(0, batching); + testConsumerFilterAnyRatio(1, batching); + testConsumerFilterAnyRatio(2, batching); + testConsumerFilterAnyRatio(10, batching); + testConsumerFilterAnyRatio(this.messages, batching); + } + + private void testConsumerFilterAnyRatio(int filterRatio, boolean batching) throws PulsarClientException { + + if (!conf.isEnableConsumerFilters()) + return; + + String topic = "persistent://my-property/my-ns/consumer-filter"; + Consumer consumer = pulsarClient.newConsumer(Schema.STRING) + .topic(topic) + .subscriptionName("s1") + .property("anytag", "abc") + .subscribe(); + + Producer producer = pulsarClient.newProducer(Schema.STRING) + .topic(topic) + .enableBatching(batching) + //.batchingMaxMessages(5) + //.batchingMaxPublishDelay(1, TimeUnit.SECONDS) + .create(); + + try { + for (int i = 0; i < this.messages; i++) { + String tag = filterRatio == 0 ? "xyz" : i % filterRatio == 0 ? "abc" : "xyz"; + producer.newMessage() + .property("tag", tag) + .value("my-message-" + i + "-eom") + .sendAsync(); + } + + int messageReceived = 0; + + while (true) { + Message message = consumer.receive(1, TimeUnit.SECONDS); + if (message == null) + break; + assertEquals(message.getProperty("tag"), "abc"); + assertTrue(message.getValue().startsWith("my-message-")); + assertTrue(message.getValue().endsWith("eom")); + + messageReceived++; + consumer.acknowledge(message); + + System.out.println("received " + messageReceived + " from " + this.messages); + assertEquals(messageReceived, filterRatio == 0 ? 0 : this.messages / filterRatio); + } + } finally { + producer.close(); + consumer.close(); + } + } +} + From 0e723dbb340f70c661ff3e4b251f1ab5a8d13d9a Mon Sep 17 00:00:00 2001 From: Andre Kramer Date: Wed, 11 Nov 2020 11:02:08 +0000 Subject: [PATCH 2/4] Add README --- README_CONSUMER_FILTERS | 85 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 README_CONSUMER_FILTERS diff --git a/README_CONSUMER_FILTERS b/README_CONSUMER_FILTERS new file mode 100644 index 0000000000000..7f5c200069ba8 --- /dev/null +++ b/README_CONSUMER_FILTERS @@ -0,0 +1,85 @@ +Enable broker side filtering of messages based on message properties. Consumers can specify message properties +as tags to filter on using consumer subscription (meta data) properties. Message properties which have a key +beginning with the string "tag" are matched by value against these consumer subscription properties with keys +starting with strings "anytag" or "alltag". The matching is by string equality of property values. + +An "anytag" matches successfully if any of the messages "tag" properities has the same property value +as the consumer property value. This allows "or" matching. + +e.g. Say a consumer subscribes with an "anyTag" property with "anyTag1" of "urgent" and another +with key "anyTag2" and value "compressed". Then a message with property "tag0" as key and "urgent" +as value will match as would a message with "tagA" / "compressed". + +To subscribe the consumer: + +Consumer consumer = client.newConsumer(Schema.STRING) + .topic("sometopic") + .property("anytag0", "urgent") // A filtering meta tag. + .property("anytag1", "compressed") // Another filtering meta tag. + .subscribe(); + +To send a message with a tag that matches: + +Producer producer = pulsarClient.newProducer(Schema.STRING) + .topic(topic) + .create(); + +producer.newMessage() + .property("tag0", "urgent") // tag with a matching property value. + .value("my-matching-message") + .sendAsync(); + +An "allTag" will only match if all other allTags in the consumer subscription meta data properties +also can be match. This allows "and" matching of multiple values. + +e.g. Say a consumer subscribes with an "allTag" property with "allTag1" of "urgent" and another +with key "allTag2" and value "compressed". Then a message with property "tag0" as key and "urgent" +and property "tag1" of "compressed" as value will match while a message with "tag0" of "urgent" +and "tag1" of "uncompressed" property values will not. + + +Consumer consumer = client.newConsumer(Schema.STRING) + .topic("sometopic") + .property("alltag0", "urgent") // A filtering meta tag. + .property("alltag1", "compressed") // Additional filtering meta tag. + .subscribe(); + +will match on the following message: + +producer.newMessage() + .property("tag0", "urgent") // A tag property value. + .property("tag1", "compressed") // A second tag property value. + .value("my-matching-message") + .sendAsync(); + +But the following will not match: + +producer.newMessage() + .property("tag0", "urgent") // A tag property value. + .property("tag1", "uncompressed") // A second tag property value. + .value("my-not-matching-message") + .sendAsync(); + +producer.newMessage() + .property("tag0", "urgent") // A tag property value. + .value("my-other-not-matching-message") + .sendAsync(); + +If the consumer subscribes with both anyTags and allTags then at least one anyTag and all of the +allTags must match tags in the message (with overlap allowed) for the message to be passed by the +filter. + +The default implementation matches only on properties that have keys beginning with "tag" to help +avoid unintended matching. A new Java ConsumerFilter interface and factory allows other property +based filtering schemes to be implented and deployed. + +Appart from message tag properties starting with (lowercase) "tag" and consumer tag subscription +meta data properties starting with "anyTag" and "allTag" there are no other requirements or +conventions on tag naming and usage. For example, tags could use more meaningful keys such as +"tag_priority" and namespace tag values such as values "prority_urgent" and "priority_low". + +Another possibliity is to use values such as "priority=ugent" and match by text on such +categories or classes (with keys just enumerating "tag0","tag1" etc as in examples above). +These suggestions are a convention only and not checked or enforced in any way. In the +examples above we have used "0" and "1" but other unique strings (such as "A","B" ..) +could have been used. From f1eaa31834772c532c9055a5ed928ef91f930c22 Mon Sep 17 00:00:00 2001 From: andrekramer1 <59014051+andrekramer1@users.noreply.github.com> Date: Thu, 12 Nov 2020 09:35:00 +0000 Subject: [PATCH 3/4] Update README_CONSUMER_FILTERS --- README_CONSUMER_FILTERS | 90 ++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 47 deletions(-) diff --git a/README_CONSUMER_FILTERS b/README_CONSUMER_FILTERS index 7f5c200069ba8..cfac7629ff4cf 100644 --- a/README_CONSUMER_FILTERS +++ b/README_CONSUMER_FILTERS @@ -1,21 +1,25 @@ -Enable broker side filtering of messages based on message properties. Consumers can specify message properties -as tags to filter on using consumer subscription (meta data) properties. Message properties which have a key -beginning with the string "tag" are matched by value against these consumer subscription properties with keys -starting with strings "anytag" or "alltag". The matching is by string equality of property values. - -An "anytag" matches successfully if any of the messages "tag" properities has the same property value -as the consumer property value. This allows "or" matching. - -e.g. Say a consumer subscribes with an "anyTag" property with "anyTag1" of "urgent" and another -with key "anyTag2" and value "compressed". Then a message with property "tag0" as key and "urgent" -as value will match as would a message with "tagA" / "compressed". +Tag based Consumer Filtering +---------------------------- + +Enables broker side "tag" based filtering of messages on selected message properties by allowing consumers to +specify a subset of message properties as being “tags” to filter on, using existing consumer (meta data) +property API (and underlying protocol). Message properties which have a key beginning with the string "tag" +are matched by value against the consumer subscription properties that are specified on subscription with +meta data string keys starting with either "anytag" or "alltag". What follows “tag”, “anytag”, “alltag” +textually is immaterial except to allow multiple key / values to be enumerated (e.g. “tag1”, “tag2” etc). + +An "anytag" matches successfully if any of the messages "tag" properties has the same property value as the +consumer property value. This allows "or" matching. +e.g. Say a consumer subscribes with an "anytag" property with "anytag1" of "urgent" and another with key +"anytag2" and value "compressed". Then a message with property "tag0" as key and "urgent" as value will match +as would a message with "tagA" / "compressed". To subscribe the consumer: Consumer consumer = client.newConsumer(Schema.STRING) - .topic("sometopic") - .property("anytag0", "urgent") // A filtering meta tag. - .property("anytag1", "compressed") // Another filtering meta tag. + .topic("sometopic") + .property("anytag0", "urgent") // A filtering meta data tag. + .property("anytag1", "compressed") // Another filtering meta data tag. .subscribe(); To send a message with a tag that matches: @@ -23,27 +27,24 @@ To send a message with a tag that matches: Producer producer = pulsarClient.newProducer(Schema.STRING) .topic(topic) .create(); - producer.newMessage() .property("tag0", "urgent") // tag with a matching property value. .value("my-matching-message") .sendAsync(); - -An "allTag" will only match if all other allTags in the consumer subscription meta data properties -also can be match. This allows "and" matching of multiple values. - -e.g. Say a consumer subscribes with an "allTag" property with "allTag1" of "urgent" and another -with key "allTag2" and value "compressed". Then a message with property "tag0" as key and "urgent" -and property "tag1" of "compressed" as value will match while a message with "tag0" of "urgent" -and "tag1" of "uncompressed" property values will not. - + +An "alltag" will only match if all other alltags in the consumer subscription meta data properties also +can be matched. This allows "and" matching of multiple values. +e.g. Say a consumer subscribes with an "alltag" property with "alltag1" of "urgent" and another with key +"alltag2" and value "compressed". Then a message with property "tag0" as key and "urgent" and property +"tag1" of "compressed" as value will match while a message with "tag0" of "urgent" and "tag1" of +"uncompressed" property values will not. Consumer consumer = client.newConsumer(Schema.STRING) .topic("sometopic") .property("alltag0", "urgent") // A filtering meta tag. .property("alltag1", "compressed") // Additional filtering meta tag. .subscribe(); - + will match on the following message: producer.newMessage() @@ -51,7 +52,7 @@ producer.newMessage() .property("tag1", "compressed") // A second tag property value. .value("my-matching-message") .sendAsync(); - + But the following will not match: producer.newMessage() @@ -59,27 +60,22 @@ producer.newMessage() .property("tag1", "uncompressed") // A second tag property value. .value("my-not-matching-message") .sendAsync(); - + producer.newMessage() .property("tag0", "urgent") // A tag property value. .value("my-other-not-matching-message") - .sendAsync(); - -If the consumer subscribes with both anyTags and allTags then at least one anyTag and all of the -allTags must match tags in the message (with overlap allowed) for the message to be passed by the -filter. - -The default implementation matches only on properties that have keys beginning with "tag" to help -avoid unintended matching. A new Java ConsumerFilter interface and factory allows other property -based filtering schemes to be implented and deployed. - -Appart from message tag properties starting with (lowercase) "tag" and consumer tag subscription -meta data properties starting with "anyTag" and "allTag" there are no other requirements or -conventions on tag naming and usage. For example, tags could use more meaningful keys such as -"tag_priority" and namespace tag values such as values "prority_urgent" and "priority_low". - -Another possibliity is to use values such as "priority=ugent" and match by text on such -categories or classes (with keys just enumerating "tag0","tag1" etc as in examples above). -These suggestions are a convention only and not checked or enforced in any way. In the -examples above we have used "0" and "1" but other unique strings (such as "A","B" ..) -could have been used. + .sendAsync(); + +If the consumer subscribes with both anytags and alltags then at least one anytag and all of the alltags +must match tags in the message (with overlap allowed) for the message to be passed by the filter. +The default implementation matches only on properties that have keys beginning with "tag" to help avoid +unintended matching. A new Java ConsumerFilter interface and factory allows other property-based filtering +schemes to be implemented and deployed. +Apart from message tag properties starting with (lowercase) "tag" and consumer tag subscription meta data +properties starting with "anytag" and "alltag" there are no other requirements or conventions on tag naming +and usage. For example, tags could use more meaningful keys such as "tag_priority" and namespace tag values +such as values "prority_urgent" and "priority_low". +Another possibility is to use values such as "priority=urgent" and match by text on such categories or classes +(with keys just enumerating "tag0","tag1" etc as in examples above). +These suggestions are a convention only and not checked or enforced in any way. In the examples above we have +used "0" and "1" but other unique strings (such as "A","B" etc) could have been used. From 20bc8bb65a0dc588dab6b1661c2e2dce728aa864 Mon Sep 17 00:00:00 2001 From: andrekramer1 <59014051+andrekramer1@users.noreply.github.com> Date: Thu, 12 Nov 2020 13:27:30 +0000 Subject: [PATCH 4/4] A PIP draft proposal --- PIP-XX - Consumer-filtering.pdf | Bin 0 -> 187567 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 PIP-XX - Consumer-filtering.pdf diff --git a/PIP-XX - Consumer-filtering.pdf b/PIP-XX - Consumer-filtering.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f542a79ef032846446750966ee3374cabcbfa18a GIT binary patch literal 187567 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 S>t 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