You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2016/05/13 04:13:28 UTC

[4/5] mesos git commit: Updated mesos to work with new `flags.load()` signature.

Updated mesos to work with new `flags.load()` signature.

In addition to updating the code for the new signature, deprecation
warnings are also printed when loading deprecated flag names/aliases.

Review: https://reviews.apache.org/r/46815


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/ae0aee6e
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/ae0aee6e
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/ae0aee6e

Branch: refs/heads/master
Commit: ae0aee6e2bdecfe67a244cb5a5b343acaa2876d6
Parents: a7e8e94
Author: Vinod Kone <vi...@gmail.com>
Authored: Thu Apr 28 19:43:12 2016 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Thu May 12 21:13:02 2016 -0700

----------------------------------------------------------------------
 src/cli/execute.cpp                            |  7 ++++++-
 src/cli/resolve.cpp                            |  7 ++++++-
 src/docker/executor.cpp                        |  7 ++++++-
 src/examples/dynamic_reservation_framework.cpp |  7 ++++++-
 src/examples/load_generator_framework.cpp      |  7 ++++++-
 src/examples/long_lived_framework.cpp          |  7 ++++++-
 src/examples/no_executor_framework.cpp         |  7 ++++++-
 src/examples/persistent_volume_framework.cpp   |  7 ++++++-
 src/examples/test_framework.cpp                |  7 ++++++-
 src/examples/test_http_framework.cpp           |  7 ++++++-
 src/exec/exec.cpp                              |  7 ++++++-
 src/executor/executor.cpp                      |  7 ++++++-
 src/health-check/main.cpp                      |  7 ++++++-
 src/launcher/executor.cpp                      |  7 ++++++-
 src/launcher/fetcher.cpp                       |  7 ++++++-
 src/launcher/http_command_executor.cpp         |  7 ++++++-
 src/local/local.cpp                            | 14 ++++++++++++--
 src/local/main.cpp                             |  7 ++++++-
 src/log/tool/benchmark.cpp                     |  7 ++++++-
 src/log/tool/initialize.cpp                    |  7 ++++++-
 src/log/tool/read.cpp                          |  7 ++++++-
 src/log/tool/replica.cpp                       |  7 ++++++-
 src/master/main.cpp                            |  7 ++++++-
 src/sched/sched.cpp                            | 14 ++++++++++++--
 src/scheduler/scheduler.cpp                    |  7 ++++++-
 src/slave/container_loggers/lib_logrotate.cpp  |  7 ++++++-
 src/slave/container_loggers/logrotate.cpp      |  7 ++++++-
 src/slave/main.cpp                             |  7 ++++++-
 src/tests/main.cpp                             |  7 ++++++-
 src/usage/main.cpp                             |  7 ++++++-
 30 files changed, 192 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/cli/execute.cpp
----------------------------------------------------------------------
diff --git a/src/cli/execute.cpp b/src/cli/execute.cpp
index 4711e80..81a0388 100644
--- a/src/cli/execute.cpp
+++ b/src/cli/execute.cpp
@@ -624,7 +624,7 @@ int main(int argc, char** argv)
   Flags flags;
 
   // Load flags from command line only.
-  Try<Nothing> load = flags.load(None(), argc, argv);
+  Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -640,6 +640,11 @@ int main(int argc, char** argv)
     return EXIT_SUCCESS;
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   if (flags.master.isNone()) {
     cerr << flags.usage("Missing required option --master") << endl;
     return EXIT_FAILURE;

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/cli/resolve.cpp
----------------------------------------------------------------------
diff --git a/src/cli/resolve.cpp b/src/cli/resolve.cpp
index 23bb0f1..ac6be05 100644
--- a/src/cli/resolve.cpp
+++ b/src/cli/resolve.cpp
@@ -61,7 +61,7 @@ int main(int argc, char** argv)
 
   // Load flags from environment and command line, and remove
   // them from argv.
-  Try<Nothing> load = flags.load(None(), &argc, &argv);
+  Try<flags::Warnings> load = flags.load(None(), &argc, &argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -73,6 +73,11 @@ int main(int argc, char** argv)
     return EXIT_SUCCESS;
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   // 'master' argument must be the only argument left after parsing.
   if (argc != 2) {
     cerr << flags.usage("There must be only one argument: <master>") << endl;

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/docker/executor.cpp
----------------------------------------------------------------------
diff --git a/src/docker/executor.cpp b/src/docker/executor.cpp
index d60addc..04f4404 100644
--- a/src/docker/executor.cpp
+++ b/src/docker/executor.cpp
@@ -607,7 +607,7 @@ int main(int argc, char** argv)
   mesos::internal::docker::Flags flags;
 
   // Load flags from environment and command line.
-  Try<Nothing> load = flags.load(None(), &argc, &argv);
+  Try<flags::Warnings> load = flags.load(None(), &argc, &argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -618,6 +618,11 @@ int main(int argc, char** argv)
 
   mesos::internal::logging::initialize(argv[0], flags, true); // Catch signals.
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   if (flags.help) {
     cout << flags.usage() << endl;
     return EXIT_SUCCESS;

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/examples/dynamic_reservation_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/dynamic_reservation_framework.cpp b/src/examples/dynamic_reservation_framework.cpp
index 4ad5f4b..01149cc 100644
--- a/src/examples/dynamic_reservation_framework.cpp
+++ b/src/examples/dynamic_reservation_framework.cpp
@@ -353,7 +353,7 @@ int main(int argc, char** argv)
 {
   Flags flags;
 
-  Try<Nothing> load = flags.load(None(), argc, argv);
+  Try<flags::Warnings> load = flags.load(None(), argc, argv);
   if (load.isError()) {
     EXIT(EXIT_FAILURE) << flags.usage(load.error());
   } else if (flags.master.isNone()) {
@@ -365,6 +365,11 @@ int main(int argc, char** argv)
       << flags.usage("Role is incorrect; the default '*' role cannot be used");
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   FrameworkInfo framework;
   framework.set_user(""); // Mesos'll fill in the current user.
   framework.set_name("Dynamic Reservation Framework (C++)");

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/examples/load_generator_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/load_generator_framework.cpp b/src/examples/load_generator_framework.cpp
index b22a09e..5fac65f 100644
--- a/src/examples/load_generator_framework.cpp
+++ b/src/examples/load_generator_framework.cpp
@@ -284,7 +284,7 @@ int main(int argc, char** argv)
 {
   Flags flags;
 
-  Try<Nothing> load = flags.load("MESOS_", argc, argv);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -314,6 +314,11 @@ int main(int argc, char** argv)
   // We want the logger to catch failure signals.
   mesos::internal::logging::initialize(argv[0], flags, true);
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   LoadGeneratorScheduler scheduler(flags.qps.get(), flags.duration);
 
   FrameworkInfo framework;

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/examples/long_lived_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/long_lived_framework.cpp b/src/examples/long_lived_framework.cpp
index 1740d7c..8269e38 100644
--- a/src/examples/long_lived_framework.cpp
+++ b/src/examples/long_lived_framework.cpp
@@ -519,12 +519,17 @@ public:
 int main(int argc, char** argv)
 {
   Flags flags;
-  Try<Nothing> load = flags.load("MESOS_", argc, argv);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
   if (load.isError()) {
     EXIT(EXIT_FAILURE) << flags.usage(load.error());
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   const Resources resources = Resources::parse(
       "cpus:" + stringify(CPUS_PER_EXECUTOR) +
       ";mem:" + stringify(MEM_PER_EXECUTOR)).get();

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/examples/no_executor_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/no_executor_framework.cpp b/src/examples/no_executor_framework.cpp
index f578edf..5742572 100644
--- a/src/examples/no_executor_framework.cpp
+++ b/src/examples/no_executor_framework.cpp
@@ -297,13 +297,18 @@ int main(int argc, char** argv)
 {
   Flags flags;
 
-  Try<Nothing> load = flags.load("MESOS_", argc, argv);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
   if (load.isError()) {
     EXIT(EXIT_FAILURE)
       << flags.usage(load.error());
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   if (flags.help) {
     EXIT(EXIT_SUCCESS)
       << flags.usage();

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/examples/persistent_volume_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/persistent_volume_framework.cpp b/src/examples/persistent_volume_framework.cpp
index b4faa0e..616d9b1 100644
--- a/src/examples/persistent_volume_framework.cpp
+++ b/src/examples/persistent_volume_framework.cpp
@@ -419,7 +419,7 @@ int main(int argc, char** argv)
 {
   Flags flags;
 
-  Try<Nothing> load = flags.load("MESOS_", argc, argv);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -438,6 +438,11 @@ int main(int argc, char** argv)
 
   logging::initialize(argv[0], flags, true); // Catch signals.
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   FrameworkInfo framework;
   framework.set_user(""); // Have Mesos fill in the current user.
   framework.set_name("Persistent Volume Framework (C++)");

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/examples/test_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/test_framework.cpp b/src/examples/test_framework.cpp
index 79113fb..e4d221c 100644
--- a/src/examples/test_framework.cpp
+++ b/src/examples/test_framework.cpp
@@ -216,7 +216,7 @@ int main(int argc, char** argv)
             "master",
             "ip:port of master to connect");
 
-  Try<Nothing> load = flags.load(None(), argc, argv);
+  Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
   if (load.isError()) {
     cerr << load.error() << endl;
@@ -230,6 +230,11 @@ int main(int argc, char** argv)
 
   internal::logging::initialize(argv[0], flags, true); // Catch signals.
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   ExecutorInfo executor;
   executor.mutable_executor_id()->set_value("default");
   executor.mutable_command()->set_value(uri);

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/examples/test_http_framework.cpp
----------------------------------------------------------------------
diff --git a/src/examples/test_http_framework.cpp b/src/examples/test_http_framework.cpp
index db0463d..683384d 100644
--- a/src/examples/test_http_framework.cpp
+++ b/src/examples/test_http_framework.cpp
@@ -393,7 +393,7 @@ int main(int argc, char** argv)
             "master",
             "ip:port of master to connect");
 
-  Try<Nothing> load = flags.load(None(), argc, argv);
+  Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
   if (load.isError()) {
     cerr << load.error() << endl;
@@ -408,6 +408,11 @@ int main(int argc, char** argv)
   process::initialize();
   mesos::internal::logging::initialize(argv[0], flags, true); // Catch signals.
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   FrameworkInfo framework;
   framework.set_name("Event Call Scheduler using libprocess (C++)");
   framework.set_role(role);

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/exec/exec.cpp
----------------------------------------------------------------------
diff --git a/src/exec/exec.cpp b/src/exec/exec.cpp
index a2e6d86..69a1fb2 100644
--- a/src/exec/exec.cpp
+++ b/src/exec/exec.cpp
@@ -596,7 +596,7 @@ MesosExecutorDriver::MesosExecutorDriver(Executor* _executor)
   // Load any logging flags from the environment.
   logging::Flags flags;
 
-  Try<Nothing> load = flags.load("MESOS_");
+  Try<flags::Warnings> load = flags.load("MESOS_");
 
   if (load.isError()) {
     status = DRIVER_ABORTED;
@@ -617,6 +617,11 @@ MesosExecutorDriver::MesosExecutorDriver(Executor* _executor)
     VLOG(1) << "Disabling initialization of GLOG logging";
   }
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   spawn(new VersionProcess(), true);
 }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/executor/executor.cpp
----------------------------------------------------------------------
diff --git a/src/executor/executor.cpp b/src/executor/executor.cpp
index c7187ea..921872c 100644
--- a/src/executor/executor.cpp
+++ b/src/executor/executor.cpp
@@ -155,7 +155,7 @@ public:
     // Load any logging flags from the environment.
     logging::Flags flags;
 
-    Try<Nothing> load = flags.load("MESOS_");
+    Try<flags::Warnings> load = flags.load("MESOS_");
 
     if (load.isError()) {
       EXIT(EXIT_FAILURE) << "Failed to load flags: " << load.error();
@@ -171,6 +171,11 @@ public:
       VLOG(1) << "Disabling initialization of GLOG logging";
     }
 
+    // Log any flag warnings (after logging is initialized).
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
+
     LOG(INFO) << "Version: " << MESOS_VERSION;
 
     spawn(new VersionProcess(), true);

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/health-check/main.cpp
----------------------------------------------------------------------
diff --git a/src/health-check/main.cpp b/src/health-check/main.cpp
index 98ea5d3..3cf8583 100644
--- a/src/health-check/main.cpp
+++ b/src/health-check/main.cpp
@@ -310,7 +310,7 @@ int main(int argc, char** argv)
 
   Flags flags;
 
-  Try<Nothing> load = flags.load(None(), argc, argv);
+  Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -322,6 +322,11 @@ int main(int argc, char** argv)
     return EXIT_SUCCESS;
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   if (flags.health_check_json.isNone()) {
     cerr << flags.usage("Expected JSON with health check description") << endl;
     return EXIT_FAILURE;

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/launcher/executor.cpp
----------------------------------------------------------------------
diff --git a/src/launcher/executor.cpp b/src/launcher/executor.cpp
index fa4a89e..7d111e6 100644
--- a/src/launcher/executor.cpp
+++ b/src/launcher/executor.cpp
@@ -880,7 +880,7 @@ int main(int argc, char** argv)
   Flags flags;
 
   // Load flags from command line.
-  Try<Nothing> load = flags.load(None(), &argc, &argv);
+  Try<flags::Warnings> load = flags.load(None(), &argc, &argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -892,6 +892,11 @@ int main(int argc, char** argv)
     return EXIT_SUCCESS;
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   // After flags.load(..., &argc, &argv) all flags will have been
   // stripped from argv. Additionally, arguments after a "--"
   // terminator will be preservered in argv and it is therefore

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/launcher/fetcher.cpp
----------------------------------------------------------------------
diff --git a/src/launcher/fetcher.cpp b/src/launcher/fetcher.cpp
index d323f63..0539b01 100644
--- a/src/launcher/fetcher.cpp
+++ b/src/launcher/fetcher.cpp
@@ -444,12 +444,17 @@ int main(int argc, char* argv[])
 
   mesos::internal::logging::Flags flags;
 
-  Try<Nothing> load = flags.load("MESOS_", argc, argv);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
   CHECK_SOME(load) << "Could not load flags: " << load.error();
 
   logging::initialize(argv[0], flags, true); // Catch signals.
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   const Option<string> jsonFetcherInfo = os::getenv("MESOS_FETCHER_INFO");
   CHECK_SOME(jsonFetcherInfo)
     << "Missing MESOS_FETCHER_INFO environment variable";

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/launcher/http_command_executor.cpp
----------------------------------------------------------------------
diff --git a/src/launcher/http_command_executor.cpp b/src/launcher/http_command_executor.cpp
index c62fe3e..bd1d6c2 100644
--- a/src/launcher/http_command_executor.cpp
+++ b/src/launcher/http_command_executor.cpp
@@ -977,7 +977,7 @@ int main(int argc, char** argv)
   ExecutorID executorId;
 
   // Load flags from command line.
-  Try<Nothing> load = flags.load(None(), &argc, &argv);
+  Try<flags::Warnings> load = flags.load(None(), &argc, &argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -989,6 +989,11 @@ int main(int argc, char** argv)
     return EXIT_SUCCESS;
   }
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   // After flags.load(..., &argc, &argv) all flags will have been
   // stripped from argv. Additionally, arguments after a "--"
   // terminator will be preservered in argv and it is therefore

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/local/local.cpp
----------------------------------------------------------------------
diff --git a/src/local/local.cpp b/src/local/local.cpp
index 1c679ec..352f423 100644
--- a/src/local/local.cpp
+++ b/src/local/local.cpp
@@ -173,13 +173,18 @@ PID<Master> launch(const Flags& flags, Allocator* _allocator)
 
   {
     master::Flags flags;
-    Try<Nothing> load = flags.load("MESOS_");
+    Try<flags::Warnings> load = flags.load("MESOS_");
     if (load.isError()) {
       EXIT(EXIT_FAILURE)
         << "Failed to start a local cluster while loading"
         << " master flags from the environment: " << load.error();
     }
 
+    // Log any flag warnings.
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
+
     // Load modules. Note that this covers both, master and slave
     // specific modules as both use the same flag (--modules).
     if (flags.modules.isSome()) {
@@ -342,7 +347,7 @@ PID<Master> launch(const Flags& flags, Allocator* _allocator)
 
   for (int i = 0; i < flags.num_slaves; i++) {
     slave::Flags flags;
-    Try<Nothing> load = flags.load("MESOS_");
+    Try<flags::Warnings> load = flags.load("MESOS_");
 
     if (load.isError()) {
       EXIT(EXIT_FAILURE)
@@ -350,6 +355,11 @@ PID<Master> launch(const Flags& flags, Allocator* _allocator)
         << " agent flags from the environment: " << load.error();
     }
 
+    // Log any flag warnings (after logging is initialized).
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
+
     // Use a different work directory for each slave.
     flags.work_dir = path::join(flags.work_dir, stringify(i));
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/local/main.cpp
----------------------------------------------------------------------
diff --git a/src/local/main.cpp b/src/local/main.cpp
index 51bbdfb..578b65e 100644
--- a/src/local/main.cpp
+++ b/src/local/main.cpp
@@ -70,7 +70,7 @@ int main(int argc, char **argv)
 
   // Load flags from environment and command line but allow unknown
   // flags since we might have some master/slave flags as well.
-  Try<Nothing> load = flags.load("MESOS_", argc, argv, true);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv, true);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -93,6 +93,11 @@ int main(int argc, char **argv)
 
   logging::initialize(argv[0], flags);
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   spawn(new VersionProcess(), true);
 
   process::wait(local::launch(flags));

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/log/tool/benchmark.cpp
----------------------------------------------------------------------
diff --git a/src/log/tool/benchmark.cpp b/src/log/tool/benchmark.cpp
index 8981ea8..0f556e1 100644
--- a/src/log/tool/benchmark.cpp
+++ b/src/log/tool/benchmark.cpp
@@ -112,7 +112,7 @@ Try<Nothing> Benchmark::execute(int argc, char** argv)
 
   // Configure the tool by parsing command line arguments.
   if (argc > 0 && argv != NULL) {
-    Try<Nothing> load = flags.load(None(), argc, argv);
+    Try<flags::Warnings> load = flags.load(None(), argc, argv);
     if (load.isError()) {
       return Error(flags.usage(load.error()));
     }
@@ -123,6 +123,11 @@ Try<Nothing> Benchmark::execute(int argc, char** argv)
 
     process::initialize();
     logging::initialize(argv[0], flags);
+
+    // Log any flag warnings (after logging is initialized).
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
   }
 
   if (flags.quorum.isNone()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/log/tool/initialize.cpp
----------------------------------------------------------------------
diff --git a/src/log/tool/initialize.cpp b/src/log/tool/initialize.cpp
index bd1e9ef..e980772 100644
--- a/src/log/tool/initialize.cpp
+++ b/src/log/tool/initialize.cpp
@@ -54,7 +54,7 @@ Try<Nothing> Initialize::execute(int argc, char** argv)
 
   // Configure the tool by parsing command line arguments.
   if (argc > 0 && argv != NULL) {
-    Try<Nothing> load = flags.load(None(), argc, argv);
+    Try<flags::Warnings> load = flags.load(None(), argc, argv);
     if (load.isError()) {
       return Error(flags.usage(load.error()));
     }
@@ -65,6 +65,11 @@ Try<Nothing> Initialize::execute(int argc, char** argv)
 
     process::initialize();
     logging::initialize(argv[0], flags);
+
+    // Log any flag warnings (after logging is initialized).
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
   }
 
   if (flags.path.isNone()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/log/tool/read.cpp
----------------------------------------------------------------------
diff --git a/src/log/tool/read.cpp b/src/log/tool/read.cpp
index b9e90e4..415038d 100644
--- a/src/log/tool/read.cpp
+++ b/src/log/tool/read.cpp
@@ -70,7 +70,7 @@ Try<Nothing> Read::execute(int argc, char** argv)
 
   // Configure the tool by parsing command line arguments.
   if (argc > 0 && argv != NULL) {
-    Try<Nothing> load = flags.load(None(), argc, argv);
+    Try<flags::Warnings> load = flags.load(None(), argc, argv);
     if (load.isError()) {
       return Error(flags.usage(load.error()));
     }
@@ -81,6 +81,11 @@ Try<Nothing> Read::execute(int argc, char** argv)
 
     process::initialize();
     logging::initialize(argv[0], flags);
+
+    // Log any flag warnings (after logging is initialized).
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
   }
 
   if (flags.path.isNone()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/log/tool/replica.cpp
----------------------------------------------------------------------
diff --git a/src/log/tool/replica.cpp b/src/log/tool/replica.cpp
index e3661df..11aef65 100644
--- a/src/log/tool/replica.cpp
+++ b/src/log/tool/replica.cpp
@@ -72,7 +72,7 @@ Try<Nothing> Replica::execute(int argc, char** argv)
 
   // Configure the tool by parsing command line arguments.
   if (argc > 0 && argv != NULL) {
-    Try<Nothing> load = flags.load(None(), argc, argv);
+    Try<flags::Warnings> load = flags.load(None(), argc, argv);
     if (load.isError()) {
       return Error(flags.usage(load.error()));
     }
@@ -83,6 +83,11 @@ Try<Nothing> Replica::execute(int argc, char** argv)
 
     process::initialize();
     logging::initialize(argv[0], flags);
+
+    // Log any flag warnings (after logging is initialized).
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
   }
 
   if (flags.quorum.isNone()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/master/main.cpp
----------------------------------------------------------------------
diff --git a/src/master/main.cpp b/src/master/main.cpp
index 2d1bd55..172c099 100644
--- a/src/master/main.cpp
+++ b/src/master/main.cpp
@@ -182,7 +182,7 @@ int main(int argc, char** argv)
             "the IP address which the master will try to bind to.\n"
             "Cannot be used in conjunction with `--ip`.");
 
-  Try<Nothing> load = flags.load("MESOS_", argc, argv);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -252,6 +252,11 @@ int main(int argc, char** argv)
 
   logging::initialize(argv[0], flags, true); // Catch signals.
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   // Initialize modules. Note that since other subsystems may depend
   // upon modules, we should initialize modules before anything else.
   if (flags.modules.isSome()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index 4693d0d..cc3aac9 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -1634,7 +1634,7 @@ void MesosSchedulerDriver::initialize() {
   // we'll probably want a way to load master::Flags and slave::Flags
   // as well.
   local::Flags flags;
-  Try<Nothing> load = flags.load("MESOS_");
+  Try<flags::Warnings> load = flags.load("MESOS_");
 
   if (load.isError()) {
     status = DRIVER_ABORTED;
@@ -1662,6 +1662,11 @@ void MesosSchedulerDriver::initialize() {
     VLOG(1) << "Disabling initialization of GLOG logging";
   }
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   spawn(new VersionProcess(), true);
 
   // Initialize Latch.
@@ -1850,7 +1855,7 @@ Status MesosSchedulerDriver::start()
 
     // Load scheduler flags.
     internal::scheduler::Flags flags;
-    Try<Nothing> load = flags.load("MESOS_");
+    Try<flags::Warnings> load = flags.load("MESOS_");
 
     if (load.isError()) {
       status = DRIVER_ABORTED;
@@ -1858,6 +1863,11 @@ Status MesosSchedulerDriver::start()
       return status;
     }
 
+    // Log any flag warnings.
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
+
     // Initialize modules. Note that since other subsystems may depend
     // upon modules, we should initialize modules before anything else.
     if (flags.modules.isSome()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/scheduler/scheduler.cpp
----------------------------------------------------------------------
diff --git a/src/scheduler/scheduler.cpp b/src/scheduler/scheduler.cpp
index 7d83f3c..255454d 100644
--- a/src/scheduler/scheduler.cpp
+++ b/src/scheduler/scheduler.cpp
@@ -148,7 +148,7 @@ public:
     // master::Flags and slave::Flags as well.
     local::Flags flags;
 
-    Try<Nothing> load = flags.load("MESOS_");
+    Try<flags::Warnings> load = flags.load("MESOS_");
 
     if (load.isError()) {
       EXIT(EXIT_FAILURE) << "Failed to load flags: " << load.error();
@@ -174,6 +174,11 @@ public:
       VLOG(1) << "Disabling initialization of GLOG logging";
     }
 
+    // Log any flag warnings (after logging is initialized).
+    foreach (const flags::Warning& warning, load->warnings) {
+      LOG(WARNING) << warning.message;
+    }
+
     LOG(INFO) << "Version: " << MESOS_VERSION;
 
     // Launch a local cluster if necessary.

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/slave/container_loggers/lib_logrotate.cpp
----------------------------------------------------------------------
diff --git a/src/slave/container_loggers/lib_logrotate.cpp b/src/slave/container_loggers/lib_logrotate.cpp
index 1f22880..89d2bd0 100644
--- a/src/slave/container_loggers/lib_logrotate.cpp
+++ b/src/slave/container_loggers/lib_logrotate.cpp
@@ -277,12 +277,17 @@ org_apache_mesos_LogrotateContainerLogger(
 
       // Load and validate flags from the map.
       mesos::internal::logger::Flags flags;
-      Try<Nothing> load = flags.load(values);
+      Try<flags::Warnings> load = flags.load(values);
 
       if (load.isError()) {
         LOG(ERROR) << "Failed to parse parameters: " << load.error();
         return NULL;
       }
 
+      // Log any flag warnings.
+      foreach (const flags::Warning& warning, load->warnings) {
+        LOG(WARNING) << warning.message;
+      }
+
       return new mesos::internal::logger::LogrotateContainerLogger(flags);
     });

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/slave/container_loggers/logrotate.cpp
----------------------------------------------------------------------
diff --git a/src/slave/container_loggers/logrotate.cpp b/src/slave/container_loggers/logrotate.cpp
index 7d36c05..08abea9 100644
--- a/src/slave/container_loggers/logrotate.cpp
+++ b/src/slave/container_loggers/logrotate.cpp
@@ -219,12 +219,17 @@ int main(int argc, char** argv)
   Flags flags;
 
   // Load and validate flags from the environment and command line.
-  Try<Nothing> load = flags.load(None(), &argc, &argv);
+  Try<flags::Warnings> load = flags.load(None(), &argc, &argv);
 
   if (load.isError()) {
     EXIT(EXIT_FAILURE) << flags.usage(load.error());
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   // Make sure this process is running in its own session.
   // This ensures that, if the parent process (presumably the Mesos agent)
   // terminates, this logger process will continue to run.

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/slave/main.cpp
----------------------------------------------------------------------
diff --git a/src/slave/main.cpp b/src/slave/main.cpp
index 66aea8c..13ddfb9 100644
--- a/src/slave/main.cpp
+++ b/src/slave/main.cpp
@@ -151,7 +151,7 @@ int main(int argc, char** argv)
             "the IP address which the agent will try to bind to.\n"
             "Cannot be used in conjunction with `--ip`.");
 
-  Try<Nothing> load = flags.load("MESOS_", argc, argv);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv);
 
   // TODO(marco): this pattern too should be abstracted away
   // in FlagsBase; I have seen it at least 15 times.
@@ -222,6 +222,11 @@ int main(int argc, char** argv)
 
   logging::initialize(argv[0], flags, true); // Catch signals.
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   // Initialize modules. Note that since other subsystems may depend
   // upon modules, we should initialize modules before anything else.
   if (flags.modules.isSome()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/tests/main.cpp
----------------------------------------------------------------------
diff --git a/src/tests/main.cpp b/src/tests/main.cpp
index c3ccf91..efec922 100644
--- a/src/tests/main.cpp
+++ b/src/tests/main.cpp
@@ -51,7 +51,7 @@ int main(int argc, char** argv)
 
   // Load flags from environment and command line but allow unknown
   // flags (since we might have gtest/gmock flags as well).
-  Try<Nothing> load = flags.load("MESOS_", argc, argv, true);
+  Try<flags::Warnings> load = flags.load("MESOS_", argc, argv, true);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -91,6 +91,11 @@ int main(int argc, char** argv)
   // Initialize logging.
   logging::initialize(argv[0], flags, true);
 
+  // Log any flag warnings (after logging is initialized).
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   // Initialize gmock/gtest.
   testing::InitGoogleTest(&argc, argv);
   testing::FLAGS_gtest_death_test_style = "threadsafe";

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae0aee6e/src/usage/main.cpp
----------------------------------------------------------------------
diff --git a/src/usage/main.cpp b/src/usage/main.cpp
index 7777731..ab3bb23 100644
--- a/src/usage/main.cpp
+++ b/src/usage/main.cpp
@@ -64,7 +64,7 @@ int main(int argc, char** argv)
 
   Flags flags;
 
-  Try<Nothing> load = flags.load(None(), argc, argv);
+  Try<flags::Warnings> load = flags.load(None(), argc, argv);
 
   if (load.isError()) {
     cerr << flags.usage(load.error()) << endl;
@@ -76,6 +76,11 @@ int main(int argc, char** argv)
     return EXIT_SUCCESS;
   }
 
+  // Log any flag warnings.
+  foreach (const flags::Warning& warning, load->warnings) {
+    LOG(WARNING) << warning.message;
+  }
+
   if (flags.pid.isNone()) {
     cerr << flags.usage("Missing required option --pid") << endl;
     return EXIT_FAILURE;