> On Фев. 24, 2020, 1:49 п.п., Andrei Sekretenko wrote: > > src/linux/systemd.cpp > > Line 400 (original), 400 (patched) > > <https://reviews.apache.org/r/72158/diff/1/?file=2211995#file2211995line400> > > > > If this function starts to behave this way to work around older > > systemds, at the bare minimum it should be renamed. Otherwise the code in > > `slave/main.cpp` becomes totally misleading. > > > > Also, this workaround (and, honestly, the whole situation with pre-277 > > systemds) looks rather fragile. > > This makes me wonder if there is a simple reliable way to detect > > systemd version (I'm looking at some other code in this file that seems to > > do this) and suppress this workaround for newer versions (and log warning > > for older versions!). > > If there is no simple way, this should probably be left as TODO... > > > > > > I see at least two options how to avoid misleading readers of > > `slave/main.cpp`. > > > > 1) change signature to `listenFdsWithNames(const std::set<string>& > > names)` so that the code in main.cpp looks like > > ``` > > // NOTE: pre-277 systemd versions do not support FileDescriptorName, > > thus we also need to listen on descriptiors with name "unknown" > > Try<std::vector<int>> socketFds = > > systemd::socket_activation::listenFdsWithNames({name , "unknown"}) > > ``` > > > > 2) Rename this function (with added `== "unknown"`) into > > `listenFds(const string& name)` and, optionally, make `listenFds()` with no > > arguments static. > > This way, systemd version check, if we decide to add it, can be > > introduced into this fucntion, instead of going somewhere outside.
Updated the function (choose option 1 from your suggestion). - Andrei ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/72158/#review219636 ----------------------------------------------------------- On Фев. 24, 2020, 4:39 п.п., Andrei Budnik wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/72158/ > ----------------------------------------------------------- > > (Updated Фев. 24, 2020, 4:39 п.п.) > > > Review request for mesos, Andrei Sekretenko, Greg Mann, and Qian Zhang. > > > Bugs: MESOS-10098 > https://issues.apache.org/jira/browse/MESOS-10098 > > > Repository: mesos > > > Description > ------- > > This patch fixes the bug when `listenFdsWithName` function returns > an empty set of file descriptors on pre-227 systemd versions when > `domain_socket_location` value is not equals to the "systemd:unknown". > This happens when a user expects a newer version of systemd and > specifies a "systemd/<value taken from FileDescriptorName>", but > the actual systemd version does not support `FileDescriptorName`. > In this case, `LISTEN_FDNAMES` env variable is not specified, > so all socket FDs, which are specified by the `LISTEN_FDS`, > must be used to locate the path to the domain socket. > > > Diffs > ----- > > src/linux/systemd.hpp ba960009d4e47f253fccfcd0edeedf4e6cdc0dca > src/linux/systemd.cpp 9897473115ac0f9809734c109ba412eefd32e59e > src/slave/main.cpp c1e65519f4c684dcd608cbd1a67d7f5945161af4 > > > Diff: https://reviews.apache.org/r/72158/diff/2/ > > > Testing > ------- > > internal CI (including CoreOS) > > > Thanks, > > Andrei Budnik > >
