Hi All, TLDR: We currently use "mesos::internal" namespace for almost everything inside src/. However, in most cases, it is directly enclosing another namespace. This makes the "internal" namespace redundant and we should kill it.
I learned from Ben Hindman that the original motivation for introducing an explicit internal namespace was to discourage people from exposing internal symbols through "extern", etc. Since we don't seem to expose symbols through "extern" in our codebase, I think it's safe to kill this namespace. Here is a list of files that define classes directly in the mesos::internal namespace (i.e. without enclosing a separate namespace) [1]: authorizer/authorizer.hpp common/http.hpp common/attributes.hpp common/lock.hpp files/files.hpp hook/manager.hpp master/contender.hpp master/detector.hpp usage/usage.hpp watcher/whitelist_watcher.hpp messages/messages.pb.h Of the above list, things like hook/manager.hpp and master/{contender,detector}.hpp can be moved into their own namespaces. I am sure, we can come up with a strategy for the rest as well. One possible concern here might be messages.proto and the effects on upgrades, etc., if we change the namespace/package for these protobufs. If this turns out to be a real concern, we can possibly keep the internal namespace for messages.proto. If we kill the "internal" namespace altogether, it would make it much easier to expose some headers as public headers for modularization, etc.. This will also help us get rid of "namespace internal" from some of the public headers that we already have. The motivation for killing the "internal" namespace comes from a patch-set[2] that tries to expose slave/containerizer/isolator.hpp as include/mesos/slave/isolator.hpp. We wanted to keep Isolator inside the "mesos::slave" namespace instead of putting it directly in the "mesos" namespace. This change causes a lot of conflicts due to "mesos::slave" and "mesos::internal::slave" and we had to resort to using fully qualified names for a large number of definition in src/slave, src/tests, etc. Best, Kapil [1] List obtained by running the following command and then filtering out the instances where "internal" was enclosed in something other than "mesos": grep -nr "} // namespace internal" * -B1 |grep -v "namespace\|\-\-\|\.cpp"|cut -d'-' -f1 [2] https://reviews.apache.org/r/30238/ https://reviews.apache.org/r/29602/ https://reviews.apache.org/r/29603/