Bug discovered in a customer job via an Out of Order exception, where the sync time was set to 0. The root cause is that some Afa operators cache pointers to output batch columns as local variables, but failed to refresh those cached locals when the output batch was flushed and reallocated.
For ASA to hit this there were many conditions that must be satisfied. This explains why it took hours to hit a repro for the customer job.
Punctuation event must be the last event in the output batch to trigger a call to FlushContents, which flushes then reallocates the output batch.
Punctuation event must not be the last event in the input batch
For the same input batch containing the above punctuation event, there must be other input events after the punctuation event that attempt to produce an output event
The global column pool must not be empty. If it's empty, the same column would be reused and the local caches would still be accurate.
From code inspection, Afa operators are the only ones that have such a bug.
Bug discovered in a customer job via an Out of Order exception, where the sync time was set to 0. The root cause is that some Afa operators cache pointers to output batch columns as local variables, but failed to refresh those cached locals when the output batch was flushed and reallocated.
For ASA to hit this there were many conditions that must be satisfied. This explains why it took hours to hit a repro for the customer job.
From code inspection, Afa operators are the only ones that have such a bug.