gaborgsomogyi commented on PR #28142: URL: https://github.com/apache/flink/pull/28142#issuecomment-4766476577
Per the [API compatibility guarantees](https://nightlies.apache.org/flink/flink-docs-master/docs/ops/upgrading/#api-compatibility-guarantees): any API without a stability annotation is considered internal, with no guarantees. The filter-related additions need explicit annotations. **`SavepointKeyFilter`** should be `@Experimental` at the class level. This covers `test()` and all factory methods (`exact()`, `range()`, `empty()`) which are the user-facing construction API. `@Experimental` is the right choice over `@PublicEvolving` because the feature is new and the API may still need to evolve. **The new `readKeyedState` overload** in `SavepointReader` should be `@Experimental` at the method level. `SavepointReader` is already `@PublicEvolving`; a method-level annotation overrides the class-level one for that specific overload without affecting the rest of the class. **`BoundInfo` vs `getLowerBound()`/`getUpperBound()`** — `BoundInfo` is `@Internal` but is the return type of two methods on the `@Experimental` interface, which is contradictory. These two methods are only used within the package by `RangeKeyFilter.intersect()`, which is package-private and can access `RangeKeyFilter` fields directly without going through the interface. Removing `getLowerBound()` and `getUpperBound()` from the interface resolves the contradiction cleanly and `BoundInfo` correctly stays `@Internal`. If they must stay, `BoundInfo` needs `@Experimental` too for consistency. -- 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]
