Qinghui Xu created KAFKA-8735:
---------------------------------
Summary: BrokerMetadataCheckPoint should check metadata.properties
existence itself
Key: KAFKA-8735
URL: https://issues.apache.org/jira/browse/KAFKA-8735
Project: Kafka
Issue Type: Improvement
Reporter: Qinghui Xu
BrokerMetadataCheckPoint tries to read metadata.properties from log directory
during server start up. And it relies on org.apache.kafka.common.util.Utils
(from org.apache.kafka:kafka-clients) to load the properties file in a given
directory.
During the process, we need to handle the case in which the properties file
does not exist (not as an error). Currently, BrokerMetadataCheckPoint relies on
the behavior of `org.apache.kafka.common.util.Utils#loadProps` to find out if
the file exists or not: if the properties file is absent, it is expecting
NoSuchFileException (for branch 2.1 and above), and it was expecting
FileNotFoundException (for branch 2.0 and before). Knowing that
`org.apache.kafka.common.util.Utils#loadProps` signature throws only
IOException, this exception pattern matching is thus sort of leak of
abstraction making BrokerMetadataCheckPoint relies on the implementation
details of `org.apache.kafka.common.util.Utils#loadProps`.
This makes BrokerMetadataCheckPoint very fragile, especially when
`org.apache.kafka.common.util.Utils` and
`kafka.server.BrokerMetadataCheckPoint` are from different artifacts, an
example that I just ran into:
* We have a project A that depends on project B, and project B has a compile
time dependency on `org.apache.kafka:kafka-clients`. A is relying
`org.apach.kafka:kafka_2.11` in its tests: it will spawn some kafka brokers in
the tests.
* At first A and B are both using kafka libraries 2.0.1, and everything is
working fine
* At some point a newer version of B upgrades `org.apache.kafka:kafka-clients`
to 2.3.0
* When A wants to use the newer version of B, its tests are broken because
kafka brokers fail to start: now `org.apache.kafka.common.util.Utils` (2.3.0)
throws NoSucheFileException while BrokerMetadataCheckPoint (2.0.1) expects to
catch FileNotFoundException
It would be much more reliable for BrokerMetadataCheckPoint to check the file
existence before trying to load the properties from the file.
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)