You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Benjamin Mahler (Jira)" <ji...@apache.org> on 2020/04/21 17:08:00 UTC
[jira] [Created] (MESOS-10123) Windows overlapped IO discard
handling can drop data.
Benjamin Mahler created MESOS-10123:
---------------------------------------
Summary: Windows overlapped IO discard handling can drop data.
Key: MESOS-10123
URL: https://issues.apache.org/jira/browse/MESOS-10123
Project: Mesos
Issue Type: Bug
Components: libprocess
Reporter: Benjamin Mahler
Assignee: Benjamin Mahler
When getting a discard request for an io operation on windows, a cancellation is requested [1] and when the io operation completes we check whether the future had a discard request to decide whether to discard it [2]:
{code}
template <typename T>
static void set_io_promise(Promise<T>* promise, const T& data, DWORD error)
{
if (promise->future().hasDiscard()) {
promise->discard();
} else if (error == ERROR_SUCCESS) {
promise->set(data);
} else {
promise->fail("IO failed with error code: " + WindowsError(error).message);
}
}
{code}
However, it's possible the operation completed successfully, in which case we did not succeed at canceling it. We need to check for {{ERROR_OPERATION_ABORTED}} [3]:
{code}
template <typename T>
static void set_io_promise(Promise<T>* promise, const T& data, DWORD error)
{
if (promise->future().hasDiscard() && error == ERROR_OPERATION_ABORTED) {
promise->discard();
} else if (error == ERROR_SUCCESS) {
promise->set(data);
} else {
promise->fail("IO failed with error code: " + WindowsError(error).message);
}
}
{code}
I don't think there are currently any major consequences to this issue, since most callers tend to be discarding only when they're essentially abandoning the entire process of reading or writing.
[1] https://github.com/apache/mesos/blob/1.9.0/3rdparty/libprocess/src/windows/libwinio.cpp#L448
[2] https://github.com/apache/mesos/blob/1.9.0/3rdparty/libprocess/src/windows/libwinio.cpp#L141-L151
[3] https://docs.microsoft.com/en-us/windows/win32/fileio/cancelioex-func
--
This message was sent by Atlassian Jira
(v8.3.4#803005)