You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Matthias J. Sax (JIRA)" <ji...@apache.org> on 2016/07/20 23:19:20 UTC
[jira] [Created] (KAFKA-3981) Possible race condition between
controller cache and ZK on topic delete
Matthias J. Sax created KAFKA-3981:
--------------------------------------
Summary: Possible race condition between controller cache and ZK on topic delete
Key: KAFKA-3981
URL: https://issues.apache.org/jira/browse/KAFKA-3981
Project: Kafka
Issue Type: Bug
Reporter: Matthias J. Sax
Priority: Minor
In an integration test, I delete some topics and check with the following code if the topics got deleted:
{noformat}
final Set<String> expectedTopics = new HashSet<>();
expectedTopics.add(INPUT_TOPIC);
expectedTopics.add(INTERMEDIATE_USER_TOPIC);
expectedTopics.add(OUTPUT_TOPIC);
expectedTopics.add("__consumer_offsets");
Set<String> allTopics;
ZkUtils zkUtils = null;
try {
zkUtils = ZkUtils.apply(CLUSTER.zKConnectString(),
30000,
30000,
JaasUtils.isZkSecurityEnabled());
do {
allTopics = new HashSet<>();
alllTopics.addAll(scala.collection.JavaConversions.seqAsJavaList(zkUtils.getAllTopics()));
} while (allTopics.size() != expectedTopics.size());
} finally {
if (zkUtils != null) {
zkUtils.close();
}
}
assertThat(allTopics, equalTo(expectedTopics));
{noformat}
However, after the loop terminates (and {{assertThat}} passes), I try to re-create one of the deleted topics I get:
{noformat}
java.lang.IllegalStateException: Partition [cleanup-integration-test-KSTREAM-MAP-0000000011-repartition,0] should be in the NonExistentPartition states before moving to NewPartition state. Instead it is in OnlinePartition state
{noformat}
After discussion with [~guozhang] I got the following answer:
bq. I think I know the reason: the zk path of the topic is deleted by the background delete thread (see completeDeleteTopic in TopicDeletionManager), and once that is done, zkUtils.getAllTopics() will not have this topic any more;But the controller cache will only be clear this entry after that, by triggering the listener on this zk path, so there is still a window of race condition that the controller still have this entry in metadata.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)