[fix][broker][branch-2.9] Fix system topic schema not compatible bug - #17986
Conversation
codelipenghui
left a comment
There was a problem hiding this comment.
Nice catch!
The change looks good.
I try to understand why the setSchemaCompatibilityStrategy is not been called and why it is related to #13557
It looks like we will go to here https://github.com/apache/pulsar/blob/branch-2.9/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java#L339-L343 which cause missed the setSchemaCompatibilityStrategy?
As for why the After #13557 merged, the system topic schema has been changed, see: And before this bugfix, |

Fixes #17979
Motivation
While upgrading broker version from 2.8.2 to 2.9.3, broker log shows lots of
Unable to read schemaerror, which should not happen.#12598 has tried to fix the same bug but not completely.
schemaCompatibilityStrategyinorg.apache.pulsar.broker.service.AbstractTopicisSchemaCompatibilityStrategy.FULLdefaultly and only be updated inorg.apache.pulsar.broker.service.AbstractTopic#setSchemaCompatibilityStrategy.pulsar/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java
Lines 552 to 567 in 4abd4d2
Once
org.apache.pulsar.broker.service.AbstractTopic#setSchemaCompatibilityStrategynot called, theschemaCompatibilityStrategyof system topics will always beSchemaCompatibilityStrategy.FULL, which should bebrokerService.pulsar().getConfig().getSystemTopicSchemaCompatibilityStrategy()(defaultSchemaCompatibilityStrategy.ALWAYS_COMPATIBLE) instead.This bug only exists in branch 2.9 after #13557 meged. The master code is fine.
Modifications
Add
schemaCompatibilityStrategyupdate logic if the topic is system topic, as #12598 did, in constructor ofAbstractTopic.Verifying this change
This change added tests and can be verified as follows:
org.apache.pulsar.broker.systopic.NamespaceEventsSystemTopicServiceTest#testSystemTopicSchemaCompatibilityDoes this pull request potentially affect one of the following parts:
If the box was checked, please highlight the changes
Documentation
docdoc-requireddoc-not-neededdoc-completeMatching PR in forked repository
PR in forked repository: dragonls#1