Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KAFKA-6292: Improved FileLogInputStream batch position checks in order to avoid type overflow related errors #4928

Merged
merged 7 commits into from
May 9, 2018

Conversation

SuppieRK
Copy link
Contributor

Basically, my change was very simple - switch from sum operations to subtraction to avoid type casting in checks and type overflow during FlieLogInputStream work, especially in cases where property log.segment.bytes was set close to the Integer.MAX_VALUE and used as a position inside nextBatch() function.

All related Unit tests are working as intended. No new tests (probably) required.

@ijuma
Copy link
Contributor

ijuma commented Apr 25, 2018

Thanks for the PR. Since this is fixing a bug, it would be great to add some unit tests.

@SuppieRK
Copy link
Contributor Author

SuppieRK commented Apr 26, 2018

@ijuma I added simple Unit test to cover this corner case, although it seems to me as a good idea to update documentation or add explicit checks for the position parameter as far as it compared against end - 17 bytes, where 17 is hidden behind magic HEADER_SIZE_UP_TO_MAGIC constant.

Copy link

@hachikuji hachikuji left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fix! Left a couple minor comments.

@@ -209,6 +209,14 @@ public void testBatchIterationIncompleteBatch() throws IOException {
}
}

@Test
public void testNextBatchSelectionAtMaxIntValue() throws IOException {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a test case which ensures correct behavior with start and end = 0 as well? Another good one would be to have a single batch which is truncated in the middle.

Copy link
Contributor Author

@SuppieRK SuppieRK Apr 28, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would be a good idea, but if the case includes position equal to size we will always get null. The case I covered was about type overflow when both parameters were set to their maximum values, so I think about renaming this method instead.

@@ -209,6 +209,14 @@ public void testBatchIterationIncompleteBatch() throws IOException {
}
}

@Test
public void testNextBatchSelectionAtMaxIntValue() throws IOException {
if (magic == 0 && compression == CompressionType.NONE) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems no harm running this test case for every parameterization. I know it's redundant since we are not using either of the fields, but it feels less arbitrary.

@SuppieRK
Copy link
Contributor Author

SuppieRK commented May 7, 2018

@hachikuji can you check my additions, please?

Copy link

@hachikuji hachikuji left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks for the patch!

@hachikuji hachikuji merged commit fcb15e3 into apache:trunk May 9, 2018
ying-zheng pushed a commit to ying-zheng/kafka that referenced this pull request Jul 6, 2018
… type overflow (apache#4928)

Switch from sum operations to subtraction to avoid type casting in checks and type overflow during `FlieLogInputStream` work, especially in cases where property `log.segment.bytes` was set close to the `Integer.MAX_VALUE` and used as a `position` inside `nextBatch()` function.

Reviewers: Ismael Juma <ismael@juma.me.uk>, Jason Gustafson <jason@confluent.io>
hachikuji pushed a commit that referenced this pull request Jul 6, 2018
… type overflow (#4928)

Switch from sum operations to subtraction to avoid type casting in checks and type overflow during `FlieLogInputStream` work, especially in cases where property `log.segment.bytes` was set close to the `Integer.MAX_VALUE` and used as a `position` inside `nextBatch()` function.

Reviewers: Ismael Juma <ismael@juma.me.uk>, Jason Gustafson <jason@confluent.io>
hachikuji pushed a commit that referenced this pull request Jul 6, 2018
… type overflow (#4928)

Switch from sum operations to subtraction to avoid type casting in checks and type overflow during `FlieLogInputStream` work, especially in cases where property `log.segment.bytes` was set close to the `Integer.MAX_VALUE` and used as a `position` inside `nextBatch()` function.

Reviewers: Ismael Juma <ismael@juma.me.uk>, Jason Gustafson <jason@confluent.io>
allenxwang pushed a commit to allenxwang/kafka that referenced this pull request Aug 24, 2018
…:1.1.1-sync to 1.1-nflx

* commit '9611672e287c1a7933a78590e3f381da2ae7d136': (57 commits)
  MINOR: increase dev version from 1.1.1-SNAPSHOT to 1.1.2-SNAPSHOT (apache#5409)
  MINOR: Add thread dumps if broker node cannot be stopped (apache#5373)
  MINOR: update release.py
  MINOR: fix upgrade docs for Streams (apache#5392)
  MINOR: improve docs version numbers (apache#5372)
  Update version on the branch to 1.1.2-SNAPSHOT
  KAFKA-6292; Improve FileLogInputStream batch position checks to avoid type overflow (apache#4928)
  HOTFIX: Fix checkstyle errors in MetricsTest (apache#5345)
  KAFKA-7136: Avoid deadlocks in synchronized metrics reporters (apache#5341)
  MINOR: Close timing window in SimpleAclAuthorizer startup (apache#5318)
  MINOR: Use kill_java_processes when killing ConsoleConsumer in system tests (apache#5297)
  KAFKA-7104: More consistent leader's state in fetch response (apache#5305)
  Revert "MINOR: Avoid coarse lock in Pool#getAndMaybePut (apache#5258)"
  MINOR: Avoid coarse lock in Pool#getAndMaybePut (apache#5258)
  MINOR: bugfix streams total metrics (apache#5277)
  KAFKA-7082: Concurrent create topics may throw NodeExistsException (apache#5259)
  MINOR: Upgrade to Gradle 4.8.1
  KAFKA-7012: Don't process SSL channels without data to process (apache#5237)
  KAFKA-7058: Comparing schema default values using Objects#deepEquals()
  KAFKA-7047: Added SimpleHeaderConverter to plugin isolation whitelist
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants