Cache and frame size mismatch can cause an IO error
This is the cause of computing help desk issue 6613.
The frame size was 60s, the calculated max cache block size was 8s. The server could not put the last bit of the frame into the cache as it was not a full cache block (4s instead of 8s). So it did not and could not read it back from the cache, so the IO failed.
A fix is to override the max block size each frame, looking to see if if frame_duration % max_block_size != 0. If so, determine a new smaller cache block size that is divisible. A quick one is the GCD, but you could do a larger size (in the example a gcd would be 4, but a max size of 6 would work as well).
This can be done in data_source.py in the _fetch_frame_data call.