Is a valid hashCode on Coder part of our contract or not? If it is, then the lack of hashCode on SchemaCoder is simply a bug.
On Thu, May 9, 2019 at 7:42 AM Jan Lukavský <je...@seznam.cz> wrote: > Hi, > > I have spent several hour digging into strange issue with DirectRunner, > that manifested as non-deterministic run of pipeline. The pipeline > contains basically only single stateful ParDo, which adds elements into > state and after some timeout flushes these elements into output. The > issues was, that sometimes (very often) when the timer fired, the state > appeared to be empty, although I actually added something into the > state. I will skip details, but the problem boils down to the fact, that > StateSpecs hash Coder into hashCode - e.g. > > @Override > public int hashCode() { > return Objects.hash(getClass(), coder); > } > > in ValueStateSpec. Now, when Coder doesn't have hashCode and equals > implemented (and there are some of those in the codebase itself - e.g. > SchemaCoder), it all blows up in a very hard-to-debug manner. So the > proposal is - either to add abstract hashCode and equals to Coder, or > don't hash the Coder into hashCode of StateSpecs (we can generate unique > ID for each StateSpec instance for example). > > Any thoughts about which path to follow? Or maybe both? :) > > Jan > > >