jolshan commented on a change in pull request #10282: URL: https://github.com/apache/kafka/pull/10282#discussion_r605182627
########## File path: core/src/test/scala/unit/kafka/cluster/PartitionTest.scala ########## @@ -1633,10 +1633,102 @@ class PartitionTest extends AbstractPartitionTest { .setZkVersion(1) .setReplicas(replicas) .setIsNew(false) - partition.makeLeader(leaderState, offsetCheckpoints) + partition.makeLeader(leaderState, offsetCheckpoints, None) assertEquals(4, partition.localLogOrException.highWatermark) } + @Test + def testTopicIdAndPartitionMetadataFileForLeader(): Unit = { + val controllerEpoch = 3 + val leaderEpoch = 5 + val topicId = Uuid.randomUuid() + val replicas = List[Integer](brokerId, brokerId + 1).asJava + val leaderState = new LeaderAndIsrPartitionState() + .setControllerEpoch(controllerEpoch) + .setLeader(brokerId) + .setLeaderEpoch(leaderEpoch) + .setIsr(replicas) + .setZkVersion(1) + .setReplicas(replicas) + .setIsNew(false) + partition.makeLeader(leaderState, offsetCheckpoints, Some(topicId)) + + checkTopicId(topicId, partition) + + // Create new Partition object for same topicPartition + val partition2 = new Partition(topicPartition, + replicaLagTimeMaxMs = Defaults.ReplicaLagTimeMaxMs, + interBrokerProtocolVersion = ApiVersion.latestVersion, + localBrokerId = brokerId, + time, + isrChangeListener, + delayedOperations, + metadataCache, + logManager, + alterIsrManager) + + // partition2 should not yet be associated with the log, but should be able to get ID + assertTrue(partition2.topicId.isDefined) + assertEquals(topicId, partition2.topicId.get) + assertFalse(partition2.log.isDefined) + + // Calling makeLeader with a new topic ID should not overwrite the old topic ID. We should get the same log. Review comment: The inconsistentTopicId scenario is tested in ReplicaManagerTest/RaftReplicaManagerTest, since the inconsistent ID check logic is in the ReplicaManager, rather than in Partition. -- 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org