Hi Francis, Thanks for the detailed investigation! I found the `asyncPutAll` uses the wrong serialized form without the null flag, so when reading it gives the wrong. I'll fix this soon.
Best, Zakelly On Thu, Jul 16, 2026 at 3:54 PM Francis Altomare < [email protected]> wrote: > Hi all, > > We hit what looks like a race condition in the ForSt state backend on > Flink 2.2 with async state enabled, and I filed FLINK-40157 for it: > > https://issues.apache.org/jira/browse/FLINK-40157 > > Short version: in a KeyedProcessFunction with a MapState<String, String>, > writing with asyncPutAll and then chaining reads on the returned > StateFuture gives back the newly written keys with null values. asyncKeys() > returns everything, asyncValues() returns nothing, and asyncEntries() > produces entries whose values are all null. The data is not lost. We > inspected a checkpoint from the job and both keys and values are there, so > the write reaches the backend. It looks like the future returned by > asyncPutAll completes before the values are readable. > > This only shows up on ForSt. Our MiniCluster integration tests do not > reproduce it, and neither does the official docker image in single instance > mode. > > The workaround that fixed it for us was replacing asyncPutAll with > individual asyncPut calls combined with StateFutureUtils.combineAll. With > that change the chained reads return correct values. > > A minimal example and full details are in the ticket. Happy to provide > more info or help test a fix. > > Thanks, > Francis
