KAFKA-12701: NPE in MetadataRequest when using topic IDs#10584
KAFKA-12701: NPE in MetadataRequest when using topic IDs#10584ijuma merged 14 commits intoapache:trunkfrom
Conversation
|
Test failures look unrelated. Some of the usual suspects like |
clients/src/main/java/org/apache/kafka/common/requests/MetadataRequest.java
Outdated
Show resolved
Hide resolved
ijuma
left a comment
There was a problem hiding this comment.
Thanks for the PRs, left a few comments.
clients/src/main/java/org/apache/kafka/common/requests/MetadataRequest.java
Outdated
Show resolved
Hide resolved
core/src/test/scala/unit/kafka/server/MetadataRequestTest.scala
Outdated
Show resolved
Hide resolved
clients/src/main/java/org/apache/kafka/common/requests/MetadataRequest.java
Show resolved
Hide resolved
|
I think you need to merge master to this branch or rebase this branch on master. Jenkins is failing due to:
|
|
Ok. This should fix the build. But now it will be a little bit extra work to cherry-pick to 2.8.x 😅 |
@jolshan you can open another PR target for 2.8.x if it's difficult to cherry-pick 😂 |
ijuma
left a comment
There was a problem hiding this comment.
Thanks, a couple more comments below.
clients/src/main/java/org/apache/kafka/common/requests/MetadataRequest.java
Outdated
Show resolved
Hide resolved
…string in getErrorResponse
ijuma
left a comment
There was a problem hiding this comment.
Thanks, LGTM. Just one nit question below.
clients/src/main/java/org/apache/kafka/common/requests/MetadataRequest.java
Outdated
Show resolved
Hide resolved
clients/src/main/java/org/apache/kafka/common/requests/MetadataRequest.java
Outdated
Show resolved
Hide resolved
|
Ah I see I didn't need that extra declaration but you also removed the comment. Not a huge deal though. |
|
Yeah, that unintentional while using the GitHub editor. Will add it back. |
|
@jolshan The test needs to be adjusted for 2.8. Can you please look into that? I started on it, but it also needs to handle the fact that an exception is thrown from the handleTopicMetadata method: @Test
def testInvalidMetadataRequestReturnsError(): Unit = {
// Construct invalid MetadataRequestTopics. We will try each one separately and ensure the error is thrown.
val topics = List(new MetadataRequestData.MetadataRequestTopic().setName(null).setTopicId(Uuid.randomUuid()),
new MetadataRequestData.MetadataRequestTopic().setName(null),
new MetadataRequestData.MetadataRequestTopic().setTopicId(Uuid.randomUuid()),
new MetadataRequestData.MetadataRequestTopic().setName("topic1").setTopicId(Uuid.randomUuid()))
// if version is 10 or 11, the invalid topic metadata should return an error
val invalidVersions = Set(10, 11)
invalidVersions.foreach( version =>
topics.foreach(topic => {
val metadataRequestData = new MetadataRequestData().setTopics(Collections.singletonList(topic))
val metadataRequest = new MetadataRequest(metadataRequestData, version.toShort)
val request = buildRequest(metadataRequest)
val capturedResponse = expectNoThrottling()
EasyMock.replay(replicaManager, clientRequestQuotaManager,
autoTopicCreationManager, forwardingManager, clientControllerQuotaManager, groupCoordinator, txnCoordinator)
createKafkaApis().handleTopicMetadataRequest(request)
val response = readResponse(metadataRequest, capturedResponse)
.asInstanceOf[MetadataResponse]
assertEquals(1, response.topicMetadata.size)
assertEquals(1, response.errorCounts.get(Errors.INVALID_REQUEST))
response.data.topics.forEach(topic => assertNotEquals(null, topic.name))
reset(requestChannel)
})
)
} |
We prevent handling MetadataRequests where the topic name is null (to prevent NPE) as well as prevent requests that set topic IDs since this functionality has not yet been implemented. When we do implement it in apache#9769, we should bump the request/response version. Added tests to ensure the error is thrown. Reviewers: dengziming <swzmdeng@163.com>, Ismael Juma <ismael@juma.me.uk>
|
I didn't see a branch or PR with the 2.8 version, so I opened my own here: #10885 |
Resolve merge conflicts in Jenkins file. * MINOR: clean up unneeded `@SuppressWarnings` (apache#10855) Reviewers: Luke Chen <showuon@gmail.com>, Matthias J. Sax <mjsax@apache.org>, Chia-Ping Tsai <chia7712@gmail.com> * KAFKA-12940: Enable JDK 16 builds in Jenkins (apache#10702) JDK 15 no longer receives updates, so we want to switch from JDK 15 to JDK 16. However, we have a number of tests that don't yet pass with JDK 16. Instead of replacing JDK 15 with JDK 16, we have both for now and we either disable (via annotations) or exclude (via gradle) the tests that don't pass with JDK 16 yet. The annotations approach is better, but it doesn't work for tests that rely on the PowerMock JUnit 4 runner. Also add `--illegal-access=permit` when building with JDK 16 to make MiniKdc work for now. This has been removed in JDK 17, so we'll have to figure out another solution when we migrate to that. Relevant JIRAs for the disabled tests: KAFKA-12790, KAFKA-12941, KAFKA-12942. Moved some assertions from `testTlsDefaults` to `testUnsupportedTlsVersion` since the former claims to test the success case while the former tests the failure case. Reviewers: Chia-Ping Tsai <chia7712@gmail.com> * KAFKA-12921: Upgrade zstd-jni to 1.5.0-2 (apache#10847) This PR aims to upgrade `zstd-jni` from `1.4.9-1` to `1.5.0-2`. This change will incorporate a number of bug fixes and performance improvements made in `1.5.0` of `zstd`: - https://github.com/facebook/zstd/releases/tag/v1.5.0 - https://github.com/luben/zstd-jni/releases/tag/v1.5.0-1 - https://github.com/luben/zstd-jni/releases/tag/v1.5.0-2 The most recent `1.5.0` release offers +25%-140% (compression) and +15% (decompression) performance improvements under certain conditions. Those conditions are unlikely to apply to Kafka with the default configuration, however. Since this is a dependency change, this should pass all the existing CIs. Reviewers: Lee Dongjin <dongjin@apache.org>, Ismael Juma <ismael@juma.me.uk> * KAFKA-8940: decrease session timeout to make test faster and reliable (apache#10871) While there might still be some issue about the test as described here by @ableegoldman , but I found the reason why this test failed quite frequently recently. It's because we increased the session timeout to 45 sec in KIP-735. The reason why increasing session timeout affected this test is because in this test, we will keep adding new stream clients and remove old one, to maintain only 3 stream clients alive. The problem here is, when old stream closed, we won't trigger rebalance immediately due to the stream clients are all static members as described in KIP-345, which means, we will trigger trigger group rebalance only when session.timeout expired. That said, when old client closed, we'll have at least 45 sec with some tasks not working. Also, in this test, we have 2 timeout conditions to fail this test before verification passed: 1. 6 minutes timeout 2. polling 30 times (each with 5 seconds) without getting any data. (that is, 5 * 30 = 150 sec without consuming any data) For (1), in my test under 45 session timeout, we'll create 8 stream clients, which means, we'll have 5 clients got closed. And each closed client need 45 sec to trigger rebalance, so we'll have 45 * 5 = 225 sec (~4 mins) of the time having some tasks not working. For (2), during new client created and old client closed, it need some time to do rebalance. With 45 session timeout, we only got ~100 sec left. In slow jenkins env, it might reach the 30 retries without getting any data timeout. Therefore, decreasing session timeout can make this test completes faster and more reliable. Reviewers: Guozhang Wang <wangguoz@gmail.com> * MINOR: enable EOS during smoke test IT (apache#10870) This IT has been failing on trunk recently. Enabling EOS during the integration test makes it easier to be sure that the test's assumptions are really true during verification and should make the test more reliable. I also noticed that in the actual system test file, we are using the deprecated property name "beta" instead of "v2". Reviewers: Boyang Chen <boyang@apache.org> * MINOR: Log formatting for exceptions during configuration related operations (apache#10843) Format configuration logging during exceptions or errors. Also make sure it redacts sensitive information or unknown values. Reviewers: Luke Chen <showuon@gmail.com>, David Jacot <djacot@confluent.io> * KAFKA-12914: StreamSourceNode should return `null` topic name for pattern subscription (apache#10846) Reviewers: Luke Chen <showuon@gmail.com>, Bruno Cadonna <bruno@confluent.io>, Guozhang Wang <guozhang@confluent.io> * KAFKA-12948: Remove node from ClusterConnectionStates.connectingNodes when node is removed (apache#10882) NetworkClient.poll() throws IllegalStateException when checking isConnectionSetupTimeout if all nodes in ClusterConnectionStates.connectingNodes aren't present in ClusterConnectionStates.nodeState. This commit ensures that when we remove a node from nodeState, we also remove from connectingNodes. Reviewers: David Jacot <djacot@confluent.io> * KAFKA-12701: NPE in MetadataRequest when using topic IDs (apache#10584) We prevent handling MetadataRequests where the topic name is null (to prevent NPE) as well as prevent requests that set topic IDs since this functionality has not yet been implemented. When we do implement it in apache#9769, we should bump the request/response version. Added tests to ensure the error is thrown. Reviewers: dengziming <swzmdeng@163.com>, Ismael Juma <ismael@juma.me.uk> Co-authored-by: Josep Prat <josep.prat@aiven.io> Co-authored-by: Ismael Juma <ismael@juma.me.uk> Co-authored-by: David Christle <dchristle@users.noreply.github.com> Co-authored-by: Luke Chen <showuon@gmail.com> Co-authored-by: John Roesler <vvcephei@users.noreply.github.com> Co-authored-by: YiDing-Duke <dingyi.zj@gmail.com> Co-authored-by: Rajini Sivaram <rajinisivaram@googlemail.com> Co-authored-by: Justine Olshan <jolshan@confluent.io>
We prevent handling MetadataRequests where the topic name is null (to prevent NPE) as well as prevent requests that set topic IDs since this functionality has not yet been implemented. When we do implement in in #9769, we should bump the request/response version.
Should also cherry-pick these changes to 2.8 for the next release.
Added tests to ensure the error is thrown.
Committer Checklist (excluded from commit message)