You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by GitBox <gi...@apache.org> on 2022/12/19 15:19:01 UTC

[GitHub] [kafka] cadonna commented on a diff in pull request #12801: KAFKA-14343: Upgrade tests for state updater

cadonna commented on code in PR #12801:
URL: https://github.com/apache/kafka/pull/12801#discussion_r1052298197


##########
tests/kafkatest/tests/streams/streams_upgrade_test.py:
##########
@@ -211,23 +211,13 @@ def test_rolling_upgrade_with_2_bounces(self, from_version, to_version):
         else:
             extra_properties = {}
 
-        self.zk = ZookeeperService(self.test_context, num_nodes=1)
-        self.zk.start()
 
-        self.kafka = KafkaService(self.test_context, num_nodes=1, zk=self.zk, topics=self.topics)
-        self.kafka.start()
-
-        self.driver = StreamsSmokeTestDriverService(self.test_context, self.kafka)
-        self.driver.disable_auto_terminate()
-        self.processor1 = StreamsUpgradeTestJobRunnerService(self.test_context, self.kafka)
-        self.processor2 = StreamsUpgradeTestJobRunnerService(self.test_context, self.kafka)
-        self.processor3 = StreamsUpgradeTestJobRunnerService(self.test_context, self.kafka)
+        self.set_up_services()
 
         self.driver.start()
 
         self.start_all_nodes_with(from_version, extra_properties)
 
-        self.processors = [self.processor1, self.processor2, self.processor3]
 

Review Comment:
   nit:
   ```suggestion
   ```



##########
tests/kafkatest/tests/streams/streams_upgrade_test.py:
##########
@@ -293,7 +262,62 @@ def test_version_probing_upgrade(self):
             current_generation = self.do_rolling_bounce(p, counter, current_generation)
             counter = counter + 1
 
-        # shutdown
+        self.stop_and_await()
+
+    @cluster(num_nodes=6)
+    @matrix(from_version=[str(LATEST_3_2), str(DEV_VERSION)], to_version=[str(DEV_VERSION)], upgrade=[True, False])
+    def test_upgrade_downgrade_state_updater(self, from_version, to_version, upgrade):
+        """
+        Starts 3 KafkaStreams instances, and enables / disables state restoration
+        for the instances in a rolling bounce.
+
+        Once same-thread state restoration is removed from the code, this test
+        should use different versions of the code.
+        """
+        if upgrade:
+            extra_properties_first = { '__state.updater.enabled__': 'false' }
+            first_version = from_version
+            extra_properties_second = { '__state.updater.enabled__': 'true' }
+            second_version = to_version
+        else:
+            extra_properties_first = { '__state.updater.enabled__': 'true' }
+            first_version = to_version
+            extra_properties_second = { '__state.updater.enabled__': 'false' }
+            second_version = from_version
+
+        self.set_up_services()
+
+        self.driver.start()
+        self.start_all_nodes_with(first_version, extra_properties_first)
+
+        counter = 1
+        random.seed()
+
+        # rolling bounce
+        random.shuffle(self.processors)
+        for p in self.processors:
+            p.CLEAN_NODE_ENABLED = False
+            self.do_stop_start_bounce(p, None, second_version, counter, extra_properties_second)
+            counter = counter + 1
+
+        self.stop_and_await()
+
+    def set_up_services(self):
+        self.zk = ZookeeperService(self.test_context, num_nodes=1)
+        self.zk.start()
+
+        self.kafka = KafkaService(self.test_context, num_nodes=1, zk=self.zk, topics=self.topics)
+        self.kafka.start()
+
+        self.driver = StreamsSmokeTestDriverService(self.test_context, self.kafka)
+        self.driver.disable_auto_terminate()
+        self.processor1 = StreamsUpgradeTestJobRunnerService(self.test_context, self.kafka)
+        self.processor2 = StreamsUpgradeTestJobRunnerService(self.test_context, self.kafka)
+        self.processor3 = StreamsUpgradeTestJobRunnerService(self.test_context, self.kafka)
+
+        self.processors = [self.processor1, self.processor2, self.processor3]
+
+    def stop_and_await(self):
         self.driver.stop()

Review Comment:
   Nice refactor!



##########
tests/kafkatest/tests/streams/streams_upgrade_test.py:
##########
@@ -211,23 +211,13 @@ def test_rolling_upgrade_with_2_bounces(self, from_version, to_version):
         else:
             extra_properties = {}
 

Review Comment:
   nit:
   ```suggestion
   ```



##########
tests/kafkatest/tests/streams/streams_upgrade_test.py:
##########
@@ -293,7 +262,62 @@ def test_version_probing_upgrade(self):
             current_generation = self.do_rolling_bounce(p, counter, current_generation)
             counter = counter + 1
 
-        # shutdown
+        self.stop_and_await()
+
+    @cluster(num_nodes=6)
+    @matrix(from_version=[str(LATEST_3_2), str(DEV_VERSION)], to_version=[str(DEV_VERSION)], upgrade=[True, False])
+    def test_upgrade_downgrade_state_updater(self, from_version, to_version, upgrade):
+        """
+        Starts 3 KafkaStreams instances, and enables / disables state restoration
+        for the instances in a rolling bounce.
+
+        Once same-thread state restoration is removed from the code, this test
+        should use different versions of the code.
+        """
+        if upgrade:
+            extra_properties_first = { '__state.updater.enabled__': 'false' }
+            first_version = from_version
+            extra_properties_second = { '__state.updater.enabled__': 'true' }
+            second_version = to_version
+        else:
+            extra_properties_first = { '__state.updater.enabled__': 'true' }
+            first_version = to_version
+            extra_properties_second = { '__state.updater.enabled__': 'false' }
+            second_version = from_version
+
+        self.set_up_services()
+
+        self.driver.start()
+        self.start_all_nodes_with(first_version, extra_properties_first)
+
+        counter = 1
+        random.seed()
+
+        # rolling bounce
+        random.shuffle(self.processors)
+        for p in self.processors:
+            p.CLEAN_NODE_ENABLED = False

Review Comment:
   What do you think about cleaning the state on the node before we bounce so that some restoration is going on? 
   I think setting `p.CLEAN_NODE_ENABLED` to `True` would achieve this.



-- 
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.

To unsubscribe, e-mail: jira-unsubscribe@kafka.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org