chia7712 commented on code in PR #24015:
URL: https://github.com/apache/kafka/pull/24015#discussion_r4453197177


##########
streams/src/main/java/org/apache/kafka/streams/kstream/internals/KTableImpl.java:
##########
@@ -1505,7 +1505,15 @@ public Optional<Set<Integer>> partitions(final String 
topic,
                                                  final Headers headers,
                                                  final int numPartitions) {
             final Integer partition = value.primaryPartition();
-            return partition == null ? Optional.empty() : 
Optional.of(Set.of(partition));
+            if (partition == null) {
+                return Optional.empty();
+            }
+            if (partition < 0 || partition >= numPartitions) {

Review Comment:
   > Punctuation: the partition is -1 there, so a processValues() punctuator 
forwarding into toTable() + FK join fails with "Invalid partition: -1". With 
the guard it falls back to the default partitioner.
   
   I was wondering about this case before, but the production code forward uses 
`context().taskId().partition()`, which should never return -1 I guess ... ?
   
   ```java
           private void forward(final Record<KLeft, Change<VLeft>> record, 
final KRight foreignKey, final Instruction deleteKeyNoPropagate) {
               final SubscriptionWrapper<KLeft> wrapper = new 
SubscriptionWrapper<>(
                   hash(record),
                   deleteKeyNoPropagate,
                   record.key(),
                   context().taskId().partition()
               );
               context().forward(record.withKey(foreignKey).withValue(wrapper));
           }
   ```



-- 
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.

To unsubscribe, e-mail: [email protected]

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

Reply via email to