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]

Reply via email to