Closed hannesm closed 1 month ago
I checked the code, and this is likely related to the use of Lwt_condition.broadcast. Not sure how to properly deal with this, maybe use a Lwt_stream.t?
Hmm. I have thought about this before but for other reasons. When builder-server is busy receiving many output lines from a builder-worker lines to the client are dropped if the client can't keep up. To me this has been annoying because it's often long multi-line error messages that are dropped. In a similar manner the "end" message may be dropped.
For the output lines I understand that we may want to drop output lines so as to not have an indefinitely(*) growing queue of output lines in memory, but it seems crucial that we don't drop the "end" message. Maybe we can use a queue that is bounded for output lines but "unbounded" for "end" messages (of which there will be at most one in a well-behaving program). I'm not sure how best to implement that.
fixed by #48 \o/
we observed some errors, such as: uploading failed and external package installation failed. these errors didn't show up in the builder-client, and it didn't exit (the server didn't close the connection).