The RecordReader won't be closed if updateCompletedBytes() throws. Move the catch block from the getter to inside the update method, then this can go outside the try/catch.