Jackie-Jiang opened a new pull request, #19594: URL: https://github.com/apache/pinot/pull/19594
## Summary The cluster config update API (`PUT /cluster/configs`) maps a JSON `null` to a Java `null`, `ConfigAccessor` merges it into the record, and the ZNRecord serializer persists it as `"key": null`. `DefaultClusterConfigChangeHandler` built its snapshot with `Map.copyOf`, which rejects null values, so once such an entry exists every cluster config callback fails with a `NullPointerException`. Helix's `CallbackHandler` logs and swallows it, so the handler silently stops applying cluster config changes until the key is deleted. This adds `PinotClusterConfigProvider.copyWithoutNullValues`, a default method next to `getChangedProperties`, and uses it to build the snapshot. A null value carries no information for a `String` config, so the key is treated as absent. Dropping the entry rather than keeping the null also keeps `getChangedProperties`, which compares with `equals` on the new value, and every listener free of nulls. The method lives on the SPI so other `PinotClusterConfigProvider` implementations can share it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) -- 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: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
