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 2014/02/13 23:53:44 UTC

[1/3] git commit: Updated boost library to include files for interval set.

Updated Branches:
  refs/heads/master 31a938441 -> f0fe3e1bf


Updated boost library to include files for interval set.


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

Branch: refs/heads/master
Commit: db6974bb10612bc3e9a012364cb108ab9bd2c72a
Parents: 31a9384
Author: Jie Yu <yu...@gmail.com>
Authored: Thu Feb 13 14:41:53 2014 -0800
Committer: Vinod Kone <vi...@twitter.com>
Committed: Thu Feb 13 14:42:39 2014 -0800

----------------------------------------------------------------------
 .../libprocess/3rdparty/boost-1.53.0.tar.gz     | Bin 988528 -> 1126805 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/db6974bb/3rdparty/libprocess/3rdparty/boost-1.53.0.tar.gz
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/boost-1.53.0.tar.gz b/3rdparty/libprocess/3rdparty/boost-1.53.0.tar.gz
index 770d837..b867ae9 100644
Binary files a/3rdparty/libprocess/3rdparty/boost-1.53.0.tar.gz and b/3rdparty/libprocess/3rdparty/boost-1.53.0.tar.gz differ


[2/3] git commit: Used interval set to store holes and unlearned positions in replica.

Posted by vi...@apache.org.
Used interval set to store holes and unlearned positions in replica.

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


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

Branch: refs/heads/master
Commit: 6eb9c50fde4ebfb0a3047535bfcbe5bc9c349dc6
Parents: db6974b
Author: Jie Yu <yu...@gmail.com>
Authored: Thu Feb 13 14:43:03 2014 -0800
Committer: Vinod Kone <vi...@twitter.com>
Committed: Thu Feb 13 14:43:03 2014 -0800

----------------------------------------------------------------------
 src/log/catchup.cpp     |  12 +++---
 src/log/catchup.hpp     |   4 +-
 src/log/coordinator.cpp |  10 ++---
 src/log/recover.cpp     |   6 ++-
 src/log/replica.cpp     | 100 +++++++++++++++++++------------------------
 src/log/replica.hpp     |   4 +-
 src/log/storage.hpp     |  11 +++--
 src/tests/log_tests.cpp |   5 ++-
 8 files changed, 75 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/6eb9c50f/src/log/catchup.cpp
----------------------------------------------------------------------
diff --git a/src/log/catchup.cpp b/src/log/catchup.cpp
index 4ee32f2..59facbf 100644
--- a/src/log/catchup.cpp
+++ b/src/log/catchup.cpp
@@ -34,7 +34,7 @@
 using namespace process;
 
 using std::list;
-using std::set;
+using std::vector;
 
 namespace mesos {
 namespace internal {
@@ -174,7 +174,7 @@ public:
       const Shared<Replica>& _replica,
       const Shared<Network>& _network,
       uint64_t _proposal,
-      const set<uint64_t>& _positions,
+      const vector<uint64_t>& _positions,
       const Duration& _timeout)
     : ProcessBase(ID::generate("log-bulk-catch-up")),
       quorum(_quorum),
@@ -195,7 +195,7 @@ protected:
     promise.future().onDiscarded(lambda::bind(
         static_cast<void(*)(const UPID&, bool)>(terminate), self(), true));
 
-    // Catch-up each position in the set sequentially.
+    // Catch-up sequentially.
     it = positions.begin();
 
     catchup();
@@ -264,11 +264,11 @@ private:
   const size_t quorum;
   const Shared<Replica> replica;
   const Shared<Network> network;
-  const set<uint64_t> positions;
+  const vector<uint64_t> positions;
   const Duration timeout;
 
   uint64_t proposal;
-  set<uint64_t>::iterator it;
+  vector<uint64_t>::const_iterator it;
 
   process::Promise<Nothing> promise;
   Future<uint64_t> catching;
@@ -285,7 +285,7 @@ Future<Nothing> catchup(
     const Shared<Replica>& replica,
     const Shared<Network>& network,
     const Option<uint64_t>& proposal,
-    const set<uint64_t>& positions,
+    const vector<uint64_t>& positions,
     const Duration& timeout)
 {
   BulkCatchUpProcess* process =

http://git-wip-us.apache.org/repos/asf/mesos/blob/6eb9c50f/src/log/catchup.hpp
----------------------------------------------------------------------
diff --git a/src/log/catchup.hpp b/src/log/catchup.hpp
index c72ed81..45dc016 100644
--- a/src/log/catchup.hpp
+++ b/src/log/catchup.hpp
@@ -21,7 +21,7 @@
 
 #include <stdint.h>
 
-#include <set>
+#include <vector>
 
 #include <process/future.hpp>
 #include <process/shared.hpp>
@@ -50,7 +50,7 @@ extern process::Future<Nothing> catchup(
     const process::Shared<Replica>& replica,
     const process::Shared<Network>& network,
     const Option<uint64_t>& proposal,
-    const std::set<uint64_t>& positions,
+    const std::vector<uint64_t>& positions,
     const Duration& timeout = Seconds(10));
 
 } // namespace log {

http://git-wip-us.apache.org/repos/asf/mesos/blob/6eb9c50f/src/log/coordinator.cpp
----------------------------------------------------------------------
diff --git a/src/log/coordinator.cpp b/src/log/coordinator.cpp
index bc85e66..daa1ca8 100644
--- a/src/log/coordinator.cpp
+++ b/src/log/coordinator.cpp
@@ -35,8 +35,8 @@
 
 using namespace process;
 
-using std::set;
 using std::string;
+using std::vector;
 
 namespace mesos {
 namespace internal {
@@ -81,8 +81,8 @@ private:
   Future<Nothing> updateProposal(uint64_t promised);
   Future<PromiseResponse> runPromisePhase();
   Future<Option<uint64_t> > checkPromisePhase(const PromiseResponse& response);
-  Future<set<uint64_t> > getMissingPositions();
-  Future<Nothing> catchupMissingPositions(const set<uint64_t>& positions);
+  Future<vector<uint64_t> > getMissingPositions();
+  Future<Nothing> catchupMissingPositions(const vector<uint64_t>& positions);
   Future<Option<uint64_t> > updateIndexAfterElected();
   void electingFinished(const Option<uint64_t>& position);
   void electingFailed();
@@ -217,14 +217,14 @@ Future<Option<uint64_t> > CoordinatorProcess::checkPromisePhase(
 }
 
 
-Future<set<uint64_t> > CoordinatorProcess::getMissingPositions()
+Future<vector<uint64_t> > CoordinatorProcess::getMissingPositions()
 {
   return replica->missing(0, index);
 }
 
 
 Future<Nothing> CoordinatorProcess::catchupMissingPositions(
-    const set<uint64_t>& positions)
+    const vector<uint64_t>& positions)
 {
   LOG(INFO) << "Coordinator attemping to fill missing position";
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/6eb9c50f/src/log/recover.cpp
----------------------------------------------------------------------
diff --git a/src/log/recover.cpp b/src/log/recover.cpp
index bb32e51..d06e5ad 100644
--- a/src/log/recover.cpp
+++ b/src/log/recover.cpp
@@ -19,6 +19,7 @@
 #include <stdlib.h>
 
 #include <set>
+#include <vector>
 
 #include <process/defer.hpp>
 #include <process/delay.hpp>
@@ -41,6 +42,7 @@
 using namespace process;
 
 using std::set;
+using std::vector;
 
 namespace mesos {
 namespace internal {
@@ -336,9 +338,9 @@ private:
               << lowestBeginPosition.get() << " to "
               << highestEndPosition.get();
 
-    set<uint64_t> positions;
+    vector<uint64_t> positions;
     for (uint64_t p = begin; p <= end; ++p) {
-      positions.insert(p);
+      positions.push_back(p);
     }
 
     // Share the ownership of the replica. From this point until the

http://git-wip-us.apache.org/repos/asf/mesos/blob/6eb9c50f/src/log/replica.cpp
----------------------------------------------------------------------
diff --git a/src/log/replica.cpp b/src/log/replica.cpp
index ec6e38c..746d6c3 100644
--- a/src/log/replica.cpp
+++ b/src/log/replica.cpp
@@ -18,6 +18,9 @@
 
 #include <algorithm>
 
+#include <boost/icl/interval.hpp>
+#include <boost/icl/interval_set.hpp>
+
 #include <process/dispatch.hpp>
 #include <process/id.hpp>
 
@@ -36,11 +39,13 @@
 #include "log/replica.hpp"
 #include "log/storage.hpp"
 
+using namespace boost::icl;
+
 using namespace process;
 
 using std::list;
-using std::set;
 using std::string;
+using std::vector;
 
 namespace mesos {
 namespace internal {
@@ -83,7 +88,7 @@ public:
 
   // Returns missing positions in the log (i.e., unlearned or holes)
   // within the specified range [from, to].
-  set<uint64_t> missing(uint64_t from, uint64_t to);
+  vector<uint64_t> missing(uint64_t from, uint64_t to);
 
   // Returns the beginning position of the log.
   uint64_t beginning();
@@ -141,10 +146,10 @@ private:
   uint64_t end;
 
   // Holes in the log.
-  set<uint64_t> holes;
+  interval_set<uint64_t> holes;
 
   // Unlearned positions in the log.
-  set<uint64_t> unlearned;
+  interval_set<uint64_t> unlearned;
 };
 
 
@@ -186,7 +191,7 @@ Result<Action> ReplicaProcess::read(uint64_t position)
     return Error("Attempted to read truncated position");
   } else if (end < position) {
     return None(); // These semantics are assumed above!
-  } else if (holes.count(position) > 0) {
+  } else if (contains(holes, position)) {
     return None();
   }
 
@@ -246,7 +251,7 @@ bool ReplicaProcess::missing(uint64_t position)
   } else if (position > end) {
     return true;
   } else {
-    if (unlearned.count(position) != 0 || holes.count(position) != 0) {
+    if (contains(unlearned, position) || contains(holes, position)) {
       return true;
     } else {
       return false;
@@ -255,31 +260,30 @@ bool ReplicaProcess::missing(uint64_t position)
 }
 
 
-set<uint64_t> ReplicaProcess::missing(uint64_t from, uint64_t to)
+vector<uint64_t> ReplicaProcess::missing(uint64_t from, uint64_t to)
 {
-  // TODO(jieyu): Optimize the performence for the common case.
-  set<uint64_t> positions;
+  if (from > to) {
+    return vector<uint64_t>();
+  }
+
+  interval_set<uint64_t> positions;
 
   // Add unlearned positions.
-  foreach (uint64_t p, unlearned) {
-    if (p >= from && p <= to) {
-      positions.insert(p);
-    }
-  }
+  positions += unlearned;
 
   // Add holes.
-  foreach (uint64_t p, holes) {
-    if (p >= from && p <= to) {
-      positions.insert(p);
-    }
-  }
+  positions += holes;
 
   // Add all the unknown positions beyond our end.
-  for (; to > end; to--) {
-    positions.insert(to);
+  if (to > end) {
+    positions += interval<uint64_t>::closed(end + 1, to);
   }
 
-  return positions;
+  // Do not consider positions outside [from, to].
+  positions &= interval<uint64_t>::closed(from, to);
+
+  // Generate the resultant vector.
+  return vector<uint64_t>(elements_begin(positions), elements_end(positions));
 }
 
 
@@ -667,39 +671,31 @@ bool ReplicaProcess::persist(const Action& action)
   LOG(INFO) << "Persisted action at " << action.position();
 
   // No longer a hole here (if there even was one).
-  holes.erase(action.position());
+  holes -= action.position();
 
   // Update unlearned positions and deal with truncation actions.
   if (action.has_learned() && action.learned()) {
-    unlearned.erase(action.position());
+    unlearned -= action.position();
     if (action.has_type() && action.type() == Action::TRUNCATE) {
       // No longer consider truncated positions as holes (so that a
       // coordinator doesn't try and fill them).
-      foreach (uint64_t position, utils::copy(holes)) {
-        if (position < action.truncate().to()) {
-          holes.erase(position);
-        }
-      }
+      holes -= interval<uint64_t>::open(0, action.truncate().to());
 
       // No longer consider truncated positions as unlearned (so that
       // a coordinator doesn't try and fill them).
-      foreach (uint64_t position, utils::copy(unlearned)) {
-        if (position < action.truncate().to()) {
-          unlearned.erase(position);
-        }
-      }
+      unlearned -= interval<uint64_t>::open(0, action.truncate().to());
 
       // And update the beginning position.
       begin = std::max(begin, action.truncate().to());
     }
   } else {
     // We just introduced an unlearned position.
-    unlearned.insert(action.position());
+    unlearned += action.position();
   }
 
   // Update holes if we just wrote many positions past the last end.
-  for (uint64_t position = end + 1; position < action.position(); position++) {
-    holes.insert(position);
+  if (action.position() > end) {
+    holes += interval<uint64_t>::open(end, action.position());
   }
 
   // And update the end position.
@@ -722,27 +718,21 @@ void ReplicaProcess::restore(const string& path)
   unlearned = state.get().unlearned;
 
   // Only use the learned positions to help determine the holes.
-  const set<uint64_t>& learned = state.get().learned;
-
-  // We need to assume that position 0 is a hole for a brand new log
-  // (a coordinator will simply fill it with a no-op when it first
-  // gets elected), unless the position was found during recovery or
-  // it has been truncated.
-  if (learned.count(0) == 0 && unlearned.count(0) == 0 && begin == 0) {
-    holes.insert(0);
-  }
+  const interval_set<uint64_t>& learned = state.get().learned;
 
-  // Now determine the rest of the holes.
-  for (uint64_t position = begin; position < end; position++) {
-    if (learned.count(position) == 0 && unlearned.count(position) == 0) {
-      holes.insert(position);
-    }
-  }
+  // Holes are those positions in [begin, end] that are not in both
+  // learned and unlearned sets. In the case of a brand new log (begin
+  // and end are 0, and learned and unlearned are empty), we assume
+  // position 0 is a hole, and a coordinator will simply fill it with
+  // a no-op when it first gets elected.
+  holes += interval<uint64_t>::closed(begin, end);
+  holes -= learned;
+  holes -= unlearned;
 
   LOG(INFO) << "Replica recovered with log positions "
             << begin << " -> " << end
-            << " and holes " << stringify(holes)
-            << " and unlearned " << stringify(unlearned);
+            << " with " << holes.size() << " holes"
+            << " and " << unlearned.size() << " unlearned";
 }
 
 
@@ -773,7 +763,7 @@ Future<bool> Replica::missing(uint64_t position) const
 }
 
 
-Future<set<uint64_t> > Replica::missing(uint64_t from, uint64_t to) const
+Future<vector<uint64_t> > Replica::missing(uint64_t from, uint64_t to) const
 {
   return dispatch(process, &ReplicaProcess::missing, from, to);
 }

http://git-wip-us.apache.org/repos/asf/mesos/blob/6eb9c50f/src/log/replica.hpp
----------------------------------------------------------------------
diff --git a/src/log/replica.hpp b/src/log/replica.hpp
index 467d0d9..08ddcb1 100644
--- a/src/log/replica.hpp
+++ b/src/log/replica.hpp
@@ -22,8 +22,8 @@
 #include <stdint.h>
 
 #include <list>
-#include <set>
 #include <string>
+#include <vector>
 
 #include <process/future.hpp>
 #include <process/pid.hpp>
@@ -73,7 +73,7 @@ public:
 
   // Returns missing positions in the log (i.e., unlearned or holes)
   // within the specified range [from, to].
-  process::Future<std::set<uint64_t> > missing(
+  process::Future<std::vector<uint64_t> > missing(
       uint64_t from,
       uint64_t to) const;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/6eb9c50f/src/log/storage.hpp
----------------------------------------------------------------------
diff --git a/src/log/storage.hpp b/src/log/storage.hpp
index 663146f..c0eba1b 100644
--- a/src/log/storage.hpp
+++ b/src/log/storage.hpp
@@ -21,9 +21,10 @@
 
 #include <stdint.h>
 
-#include <set>
 #include <string>
 
+#include <boost/icl/interval_set.hpp>
+
 #include <stout/nothing.hpp>
 #include <stout/try.hpp>
 
@@ -42,8 +43,12 @@ public:
     Metadata metadata; // The metadata for the replica.
     uint64_t begin; // Beginning position of the log.
     uint64_t end; // Ending position of the log.
-    std::set<uint64_t> learned; // Positions present and learned
-    std::set<uint64_t> unlearned; // Positions present but unlearned.
+
+    // Note that here we use boost interval set to store learned and
+    // unlearned positions in a more compact way. Adjacent positions
+    // will be merged and represented using an interval.
+    boost::icl::interval_set<uint64_t> learned;
+    boost::icl::interval_set<uint64_t> unlearned;
   };
 
   virtual ~Storage() {}

http://git-wip-us.apache.org/repos/asf/mesos/blob/6eb9c50f/src/tests/log_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/log_tests.cpp b/src/tests/log_tests.cpp
index b1fb200..7e6dbde 100644
--- a/src/tests/log_tests.cpp
+++ b/src/tests/log_tests.cpp
@@ -64,6 +64,7 @@ using namespace process;
 using std::list;
 using std::set;
 using std::string;
+using std::vector;
 
 using testing::_;
 using testing::Eq;
@@ -1365,13 +1366,13 @@ TEST_F(RecoverTest, CatchupRetry)
     EXPECT_EQ(0u, electing.get().get());
   }
 
-  set<uint64_t> positions;
+  vector<uint64_t> positions;
 
   for (uint64_t position = 1; position <= 10; position++) {
     Future<uint64_t> appending = coord.append(stringify(position));
     AWAIT_READY_FOR(appending, Seconds(10));
     EXPECT_EQ(position, appending.get());
-    positions.insert(position);
+    positions.push_back(position);
   }
 
   Shared<Replica> replica3(new Replica(path3));


[3/3] git commit: Updated logging levels for scheduler and executor drivers.

Posted by vi...@apache.org.
Updated logging levels for scheduler and executor drivers.

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


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

Branch: refs/heads/master
Commit: f0fe3e1bfc0257608e42bd59e1d01f40b38addaf
Parents: 6eb9c50
Author: Vinod Kone <vi...@gmail.com>
Authored: Thu Feb 13 14:44:21 2014 -0800
Committer: Vinod Kone <vi...@twitter.com>
Committed: Thu Feb 13 14:44:21 2014 -0800

----------------------------------------------------------------------
 src/exec/exec.cpp   | 26 +++++++++++++-------------
 src/sched/sched.cpp | 41 ++++++++++++++++++++++-------------------
 2 files changed, 35 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/f0fe3e1b/src/exec/exec.cpp
----------------------------------------------------------------------
diff --git a/src/exec/exec.cpp b/src/exec/exec.cpp
index 6c5c483..0ab5cc2 100644
--- a/src/exec/exec.cpp
+++ b/src/exec/exec.cpp
@@ -202,7 +202,7 @@ protected:
       return;
     }
 
-    VLOG(1) << "Executor registered on slave " << slaveId;
+    LOG(INFO) << "Executor registered on slave " << slaveId;
 
     connected = true;
     connection = UUID::random();
@@ -225,7 +225,7 @@ protected:
       return;
     }
 
-    VLOG(1) << "Executor re-registered on slave " << slaveId;
+    LOG(INFO) << "Executor re-registered on slave " << slaveId;
 
     connected = true;
     connection = UUID::random();
@@ -248,7 +248,7 @@ protected:
       return;
     }
 
-    VLOG(1) << "Received reconnect request from slave " << slaveId;
+    LOG(INFO) << "Received reconnect request from slave " << slaveId;
 
     // Update the slave link.
     slave = from;
@@ -375,7 +375,7 @@ protected:
       return;
     }
 
-    VLOG(1) << "Executor asked to shutdown";
+    LOG(INFO) << "Executor asked to shutdown";
 
     if (!local) {
       // Start the Shutdown Process.
@@ -409,7 +409,7 @@ protected:
 
   void abort()
   {
-    VLOG(1) << "De-activating the executor libprocess";
+    LOG(INFO) << "Deactivating the executor libprocess";
     CHECK(aborted);
 
     Lock lock(mutex);
@@ -427,8 +427,8 @@ protected:
     // not been any subsequent re-registrations with the slave in the
     // interim.
     if (connection == _connection) {
-      VLOG(1) << "Recovery timeout of " << recoveryTimeout << " exceeded; "
-              << "Shutting down";
+      LOG(INFO) << "Recovery timeout of " << recoveryTimeout << " exceeded; "
+                << "Shutting down";
       shutdown();
     }
   }
@@ -446,16 +446,16 @@ protected:
     if (checkpoint && connected) {
       connected = false;
 
-      VLOG(1) << "Slave exited, but framework has checkpointing enabled. "
-              << "Waiting " << recoveryTimeout << " to reconnect with slave "
-              << slaveId;
+      LOG(INFO) << "Slave exited, but framework has checkpointing enabled. "
+                << "Waiting " << recoveryTimeout << " to reconnect with slave "
+                << slaveId;
 
       delay(recoveryTimeout, self(), &Self::_recoveryTimeout, connection);
 
       return;
     }
 
-    VLOG(1) << "Slave exited ... shutting down";
+    LOG(INFO) << "Slave exited ... shutting down";
 
     connected = false;
 
@@ -489,8 +489,8 @@ protected:
   void sendStatusUpdate(const TaskStatus& status)
   {
     if (status.state() == TASK_STAGING) {
-      VLOG(1) << "Executor is not allowed to send "
-              << "TASK_STAGING status update. Aborting!";
+      LOG(ERROR) << "Executor is not allowed to send "
+                 << "TASK_STAGING status update. Aborting!";
 
       driver->abort();
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/f0fe3e1b/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index 153d4fe..dcb3158 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -214,7 +214,7 @@ protected:
     connected = false;
 
     if (master.isSome()) {
-      VLOG(1) << "New master detected at " << master.get();
+      LOG(INFO) << "New master detected at " << master.get();
       link(master.get());
 
       if (credential.isSome()) {
@@ -230,11 +230,10 @@ protected:
     } else {
       // In this case, we don't actually invoke Scheduler::error
       // since we might get reconnected to a master imminently.
-      VLOG(1) << "No master detected";
+      LOG(INFO) << "No master detected";
     }
 
     // Keep detecting masters.
-    LOG(INFO) << "Detecting new master";
     detector->detect(_master.get())
       .onAny(defer(self(), &SchedulerProcess::detected, lambda::_1));
   }
@@ -320,7 +319,7 @@ protected:
     }
 
     if (reauthenticate || !future.isReady()) {
-      LOG(WARNING)
+      LOG(INFO)
         << "Failed to authenticate with master " << master.get() << ": "
         << (reauthenticate ? "master changed" :
            (future.isFailed() ? future.failure() : "future discarded"));
@@ -382,13 +381,14 @@ protected:
     }
 
     if (master != from) {
-      VLOG(1) << "Ignoring framework registered message because it was sent "
-              << "from '" << from << "' instead of the leading master '"
-              << (master.isSome() ? master.get() : UPID()) << "'";
+      LOG(WARNING)
+        << "Ignoring framework registered message because it was sent "
+        << "from '" << from << "' instead of the leading master '"
+        << (master.isSome() ? master.get() : UPID()) << "'";
       return;
     }
 
-    VLOG(1) << "Framework registered with " << frameworkId;
+    LOG(INFO) << "Framework registered with " << frameworkId;
 
     framework.mutable_id()->MergeFrom(frameworkId);
 
@@ -423,13 +423,14 @@ protected:
     }
 
     if (master != from) {
-      VLOG(1) << "Ignoring framework re-registered message because it was sent "
-              << "from '" << from << "' instead of the leading master '"
-              << (master.isSome() ? master.get() : UPID()) << "'";
+      LOG(WARNING)
+        << "Ignoring framework re-registered message because it was sent "
+        << "from '" << from << "' instead of the leading master '"
+        << (master.isSome() ? master.get() : UPID()) << "'";
       return;
     }
 
-    VLOG(1) << "Framework re-registered with " << frameworkId;
+    LOG(INFO) << "Framework re-registered with " << frameworkId;
 
     CHECK(framework.id() == frameworkId);
 
@@ -456,6 +457,8 @@ protected:
       return;
     }
 
+    VLOG(1) << "Sending registration request to " << master.get();
+
     if (!framework.has_id() || framework.id() == "") {
       // Touched for the very first time.
       RegisterFrameworkMessage message;
@@ -708,7 +711,7 @@ protected:
       return;
     }
 
-    VLOG(1) << "Got error '" << message << "'";
+    LOG(INFO) << "Got error '" << message << "'";
 
     driver->abort();
 
@@ -724,7 +727,7 @@ protected:
 
   void stop(bool failover)
   {
-    VLOG(1) << "Stopping framework '" << framework.id() << "'";
+    LOG(INFO) << "Stopping framework '" << framework.id() << "'";
 
     // Whether or not we send an unregister message, we want to
     // terminate this process.
@@ -749,7 +752,7 @@ protected:
   // SchedulerProcess::stop.
   void abort()
   {
-    VLOG(1) << "Aborting framework '" << framework.id() << "'";
+    LOG(INFO) << "Aborting framework '" << framework.id() << "'";
 
     CHECK(aborted);
 
@@ -891,12 +894,12 @@ protected:
             savedSlavePids[task.slave_id()] =
               savedOffers[offerId][task.slave_id()];
           } else {
-            VLOG(1) << "Attempting to launch task " << task.task_id()
-                    << " with the wrong slave id " << task.slave_id();
+            LOG(WARNING) << "Attempting to launch task " << task.task_id()
+                         << " with the wrong slave id " << task.slave_id();
           }
         } else {
-          VLOG(1) << "Attempting to launch task " << task.task_id()
-                  << " with an unknown offer " << offerId;
+          LOG(WARNING) << "Attempting to launch task " << task.task_id()
+                       << " with an unknown offer " << offerId;
         }
 
         // Remove the offer since we saved all the PIDs we might use.