-
Notifications
You must be signed in to change notification settings - Fork 275
internal/cmd: Close individual IO pipes when the relay finishes #1025
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
msscotb
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm pending the jobcontainer and localprocess commnet
84bd2fa to
81f652e
Compare
|
I added a change to set |
internal/jobcontainers/process.go
Outdated
| return p.stdout.Close() | ||
| } | ||
|
|
||
| // CloseStderr closes the stdin pipe of the process. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
closes the stderr pipe*
dcantah
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm, quick comment fix
The shim is expected to close its end of the IO pipes from the gcs when it is done using them. This is done to ensure that no data is left buffered in the pipes on the gcs's end. Previously, this was accomplished via the ioChannel closing its underlying connection if Read returned EOF. However, this is not sufficiently robust, as it will not work in cases where the shim's IO relay breaks on the write end (e.g. if CRI has gone away). To resolve this, we now expose individual methods on cow.Process to close each IO pipe (in/out/err), and call those from the Cmd implementation once the IO relay completes. This should be a good first-pass fix here, until we can apply some more focused cleanup to the IO relay code in the future. Some minor renaming/cleanup as well. Signed-off-by: Kevin Parsons <[email protected]>
|
lgtm again, thanks! |
Related work items: microsoft#388, microsoft#389, microsoft#393, microsoft#394, microsoft#395, microsoft#396, microsoft#397, microsoft#398, microsoft#399, microsoft#400, microsoft#401, microsoft#402, microsoft#403, microsoft#404, microsoft#405, microsoft#931, microsoft#973, microsoft#1001, microsoft#1003, microsoft#1004, microsoft#1005, microsoft#1006, microsoft#1007, microsoft#1009, microsoft#1010, microsoft#1012, microsoft#1013, microsoft#1014, microsoft#1015, microsoft#1016, microsoft#1017, microsoft#1019, microsoft#1021, microsoft#1022, microsoft#1024, microsoft#1025, microsoft#1027, microsoft#1028, microsoft#1029, microsoft#1030, microsoft#1031, microsoft#1033
internal/cmd: Close individual IO pipes when the relay finishes
The shim is expected to close its end of the IO pipes from the gcs when
it is done using them. This is done to ensure that no data is left
buffered in the pipes on the gcs's end. Previously, this was
accomplished via the ioChannel closing its underlying connection if Read
returned EOF.
However, this is not sufficiently robust, as it will not work in cases
where the shim's IO relay breaks on the write end (e.g. if CRI has gone
away).
To resolve this, we now expose individual methods on cow.Process to
close each IO pipe (in/out/err), and call those from the Cmd
implementation once the IO relay completes.
This should be a good first-pass fix here, until we can apply some more
focused cleanup to the IO relay code in the future.
Some minor renaming/cleanup as well.
Signed-off-by: Kevin Parsons [email protected]