> On Nov. 7, 2016, 4:38 p.m., Qian Zhang wrote: > > I do not quite understand the intention of this patch. The description of > > this patch says that `Previously, the headers did not contain includes for > > any of the classes used in the file.`, but actually `stout/os.hpp` has been > > already included which almost has all the needed headers, like > > `stout/nothing.hpp`, `stout/try.hpp`, etc. So I guess the intention of this > > patch is to remove the inclusion of `stout/os.hpp` and instead include each > > needed headers directly, right? But I still see `stout/os.hpp` in both > > `utils.hpp` and `utils.cpp` in this patch which makes me a bit confused. > > Joseph Wu wrote: > The style for our include headers is to include all dependencies, so that > changing the include headers of a dependency does not break any upstream code. > > i.e. > foo.hpp: > ``` > #include <string> > > typedef std::string Fooo; > ``` > > bar.hpp: > ``` > #include <map> > #include <string> // <- Need this because we use it in this file. > > #include "foo.hpp" > > std::map<Fooo, std::string> bar; > ``` > > The exception is any headers that are effectively aliases to other > headers, like `stout/lambda.hpp` (to various `<functional>` types) or > `src/messages/messages.hpp` (to the protobuf `messages.pb.h`). > > Qian Zhang wrote: > Thanks for the explanation! So if a header is needed by `utils.cpp`, then > `utils.cpp` should always include it even it has already been included in > `utils.hpp`. > > And I have a further comment: in your updated patch, I see in > `utils.cpp`, you include `stout/os.hpp` and also `stout/try.hpp`, > `stout/nothing.hpp`, etc. which are actually already included in > `stout/os.hpp`. I think that is not what we are doing in Mesos, if we have > included `stout/os.hpp` in a .cpp, we do not need to include the header files > in it again. See the following code as examples: > > https://github.com/apache/mesos/blob/1.0.1/src/slave/containerizer/mesos/provisioner/backend.cpp#L19 > > https://github.com/apache/mesos/blob/1.0.1/src/slave/containerizer/docker.cpp#L38 > > Both of the above two files use `Try` and `Nothing`, but they only > include `stout/os.hpp` not `stout/try.hpp` and `stout/nothing.hpp`.
We're a bit inconsistent about this. Maybe once we have the whole clang-tidy thing setup, we can define some rules about this. Almost every file includes `Try` and `Option` and `Nothing` (and a few other common things). We have a few hundred files which include those headers directly... and a few hundred that do not. In this patch, my thought process is, "if I'm correcting the headers, I might as well add all the appropriate ones". - Joseph ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/53556/#review155230 ----------------------------------------------------------- On Nov. 7, 2016, 4:56 p.m., Joseph Wu wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/53556/ > ----------------------------------------------------------- > > (Updated Nov. 7, 2016, 4:56 p.m.) > > > Review request for mesos, Benjamin Bannier, Jie Yu, and Qian Zhang. > > > Bugs: MESOS-6360 > https://issues.apache.org/jira/browse/MESOS-6360 > > > Repository: mesos > > > Description > ------- > > This fixes the headers in the provisioner utility. Previously, the > headers did not contain includes for any of the classes used in the > file. > > > Diffs > ----- > > src/slave/containerizer/mesos/provisioner/utils.hpp > 4efce0ed67312417495af8c884ce26ef6affaccb > src/slave/containerizer/mesos/provisioner/utils.cpp > 340cf48819679cdd8d08d76dcd2328234477a15f > > Diff: https://reviews.apache.org/r/53556/diff/ > > > Testing > ------- > > make check (OSX) > make check (CentOS 7) > msbuild ... (Windows 10) > > > Thanks, > > Joseph Wu > >
