dlg99 commented on a change in pull request #10498:
URL: https://github.com/apache/pulsar/pull/10498#discussion_r633740600



##########
File path: 
pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java
##########
@@ -706,4 +714,67 @@ public void close() {
             logger.warn("Failed to close producers", e);
         }
     }
+
+    @Override
+    public void seek(String topic, int partition, MessageId messageId) throws 
PulsarClientException {
+        Consumer<?> consumer = getConsumer(topic, partition);
+        consumer.seek(messageId);
+    }
+
+    @Override
+    public void pause(String topic, int partition) throws 
PulsarClientException {
+        getConsumer(topic, partition).pause();
+    }
+
+    @Override
+    public void resume(String topic, int partition) throws 
PulsarClientException {
+        getConsumer(topic, partition).resume();
+    }
+
+    public void setInputConsumers(List<Consumer<?>> inputConsumers) {
+        this.inputConsumers = inputConsumers;
+        inputConsumers.stream()
+            .flatMap(consumer ->
+                    consumer instanceof MultiTopicsConsumerImpl
+                            ? ((MultiTopicsConsumerImpl<?>) 
consumer).getConsumers().stream()
+                            : Stream.of(consumer))
+            .forEach(consumer -> 
topicConsumers.putIfAbsent(TopicName.get(consumer.getTopic()), consumer));
+    }
+
+    @VisibleForTesting
+    Consumer<?> getConsumer(String topic, int partition) throws 
PulsarClientException {
+        if (inputConsumers == null) {
+            throw new PulsarClientException("Getting consumer is not 
supported");
+        }
+        for (int i = 0; i < 2; i++) {

Review comment:
       @jerrypeng this is not arbitrary.
   I have no access to callbacks/events when the MultiTopicsConsumers adds 
another partition or a topic (for pattern-based subscription). 
MultiTopicsConsumers do have that internally.
   So if the check of previously cached topic/partition -> consumer map finds 
nothing it means that it:
   - either doesn't exist
   - or the topic/partition (and consumer) got added after the initial map was 
built.
   In that case it makes sense to check MultiTopicsConsumers once to update the 
map and try again. 
   I don't think blocking and polling is justified, at least I don't have such 
usecase.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to