Transform retries per default 10 times for non-permanent errors and goes into failed state if it fails 10 times in a row.
However, inspecting the code, it turns out the counter is reset per checkpoint. This does not take into account the amount of data processed for a checkpoint, neither does a success reset the counter to 0.
If a checkpoint looks like this with s==success and f== failure:
ssfffsfssfffsssssssssfssssssssssssfsssssssssf
the transform fails, although the failures were not in a row and there could be many s in between.