[ https://issues.apache.org/jira/browse/BEAM-5307?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kenneth Knowles resolved BEAM-5307. ----------------------------------- Resolution: Duplicate Fix Version/s: Not applicable > Allow injection of state in DoFn.FinishBundle > --------------------------------------------- > > Key: BEAM-5307 > URL: https://issues.apache.org/jira/browse/BEAM-5307 > Project: Beam > Issue Type: Improvement > Components: sdk-java-core > Reporter: Sander Ploegsma > Assignee: Kenneth Knowles > Priority: Major > Fix For: Not applicable > > > Example use case: a stateful {{DoFn}} that requires persisting its state to > an external database. Instead of writing to the external database for each > element, it is much more efficient to flush the state every once in a while, > or when cleaning up. > Currently, this is not possible because the {{@StateId}} injection is only > available in processing functions and timers. > [This|https://stackoverflow.com/questions/51789776/calculating-deltas-in-apache-beam-using-stateful-processing] > might be a workaround, but I'm not even sure if it works. > Instead, by allowing the use of {{@StateId}} inside a {{@FinishBundle}} > function, we can make sure the internal state is persisted in all scenarios: > {code:java} > @FinishBundle > public void flush(FinishBundleContext context, @StateId("myState") > ValueState<StateObj> state) { > repository.save(state.read()); > } > {code} > -- This message was sent by Atlassian JIRA (v7.6.3#76005)