[ 
https://issues.apache.org/jira/browse/FLINK-41091?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated FLINK-41091:
-----------------------------------
    Labels: pull-request-available  (was: )

> Honor null-entry removal and reject null maps in ForSt asyncPutAll
> ------------------------------------------------------------------
>
>                 Key: FLINK-41091
>                 URL: https://issues.apache.org/jira/browse/FLINK-41091
>             Project: Flink
>          Issue Type: Bug
>          Components: Runtime / State Backends
>            Reporter: Aaron He
>            Priority: Major
>              Labels: pull-request-available
>
> h2. Contract and observed mismatch
> The V2 MapState.asyncPutAll contract says a null value removes that entry, an 
> empty map leaves state unchanged, and a null map pointer is not allowed.
> ForStDBBunchPutRequest currently serializes every entry value. Separately, 
> ForStMapState.buildDBBunchPutRequest permits a null MAP_PUT_ALL payload, 
> which reaches the same null sentinel used by CLEAR.
> h2. Proposed change
> * Remove keys whose supplied map value is null; serialize only non-null 
> values.
> * Reject null MAP_PUT_ALL payloads before DB work.
> * Preserve explicit CLEAR and empty-map behavior.
> * Do not change serialization formats.
> h2. Proposed regression
> {noformat}
> Initial: {remove: old, keep: retained}
> asyncPutAll({remove: null, add: new})
> Expected: {keep: retained, add: new}; contains(remove) == false
> Initial: {keep: retained}
> asyncPutAll(null)
> Expected: rejected; existing state remains unchanged
> ./mvnw -pl flink-state-backends/flink-statebackend-forst 
> -Dtest=ForStWriteBatchOperationTest,ForStStateExecutorTest,ForStAsyncAndSyncCompatibilityTest
>  test
> {noformat}
> Also cover null for an absent key, a null-rejecting serializer, empty maps, 
> explicit CLEAR, and key/namespace isolation. No runtime reproduction or tests 
> have been performed.
> h2. Public references
> [V2 
> contract|https://github.com/apache/flink/blob/dd8eeed0d0216d79ee19218ef256e9869fa19d31/flink-core-api/src/main/java/org/apache/flink/api/common/state/v2/MapState.java#L72-L86]
> [Bunch 
> request|https://github.com/apache/flink/blob/dd8eeed0d0216d79ee19218ef256e9869fa19d31/flink-state-backends/flink-statebackend-forst/src/main/java/org/apache/flink/state/forst/ForStDBBunchPutRequest.java#L60-L78]
> FLINK-40157 / [PR 28762|https://github.com/apache/flink/pull/28762] already 
> addressed null-marker serialization. This proposal does not repeat that 
> change. FLINK-38137 / PR 26831 concerns related synchronous handling.
> h2. Acceptance criteria
> Both null behaviors match the existing API contract, rejected null maps 
> preserve state, and explicit CLEAR/serialization compatibility remain intact.
> h2. Proposed release note
> ForSt asyncPutAll removes null-valued entries as documented and rejects a 
> null map without clearing existing state.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to