Github user srdo commented on a diff in the pull request:
https://github.com/apache/storm/pull/2380#discussion_r147053713
--- Diff:
external/storm-kafka-client/src/main/java/org/apache/storm/kafka/spout/KafkaSpout.java
---
@@ -438,55 +440,53 @@ private void commitOffsetsForAckedTuples() {
// ======== Ack =======
@Override
public void ack(Object messageId) {
- if (!isAtLeastOnce()) {
- // Only need to keep track of acked tuples if commits are done
based on acks
- return;
- }
-
+ // Only need to keep track of acked tuples if commits to Kafka are
done after a tuple ack is received
final KafkaSpoutMessageId msgId = (KafkaSpoutMessageId) messageId;
- if (!emitted.contains(msgId)) {
- if (msgId.isEmitted()) {
- LOG.debug("Received ack for message [{}], associated with
tuple emitted for a ConsumerRecord that "
- + "came from a topic-partition that this consumer
group instance is no longer tracking "
- + "due to rebalance/partition reassignment. No action
taken.", msgId);
+ if (isAtLeastOnceProcessing()) {
--- End diff --
@hmcl I agree that
```
if condition == false
do nothing
else
do something
```
is bad, but as @HeartSaVioR mentions early return (guard clause) isn't the
same thing. Instead of writing
```
if precondition == true
rest of function
return
```
it can make the function more readable to write
```
if precondition == false
return
rest of function
```
because the guarding `if` now doesn't cover the rest of the function, and
the indendation level is reduced. See
https://blog.codinghorror.com/flattening-arrow-code/ or
https://en.wikibooks.org/wiki/Computer_Programming/Coding_Style/Minimize_nesting#Early_return.
I agree that since there's no code after the `if` closes it's not that
important. Will leave it up to your judgement.
---