You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2013/05/25 07:01:23 UTC

[3/3] git commit: Duration-Time related refactoring changes.

Duration-Time related refactoring changes.

- Changed various old *time* and *duration* related variables from
  "double", "Seconds" type to use "Duration" and "Time" type.

From: Jiang Yan Xu <ya...@jxu.me>
Review: https://reviews.apache.org/r/11285


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

Branch: refs/heads/master
Commit: 304835d763ae54cd10bdfb65dd0539cac9af8e8e
Parents: 71fead6
Author: Benjamin Hindman <be...@twitter.com>
Authored: Fri May 24 17:37:20 2013 -0700
Committer: Benjamin Hindman <be...@twitter.com>
Committed: Fri May 24 17:37:21 2013 -0700

----------------------------------------------------------------------
 src/common/protobuf_utils.hpp                 |    2 +-
 src/exec/exec.cpp                             |    2 +-
 src/java/jni/org_apache_mesos_Log.cpp         |    6 +-
 src/linux/cgroups.hpp                         |    6 +-
 src/log/log.hpp                               |    2 +-
 src/log/network.hpp                           |    2 +-
 src/master/constants.cpp                      |    4 +-
 src/master/flags.hpp                          |    2 +-
 src/master/hierarchical_allocator_process.hpp |   27 +++++-
 src/master/http.cpp                           |   12 ++--
 src/master/master.cpp                         |   29 +++++--
 src/master/master.hpp                         |   18 ++--
 src/mesos/main.cpp                            |    2 +-
 src/sched/sched.cpp                           |    6 +-
 src/slave/cgroups_isolator.cpp                |    6 +-
 src/slave/constants.cpp                       |   14 ++--
 src/slave/gc.cpp                              |    2 +-
 src/slave/http.cpp                            |    4 +-
 src/slave/monitor.cpp                         |    9 ++-
 src/slave/process_isolator.cpp                |    2 +-
 src/slave/reaper.cpp                          |    2 +-
 src/slave/slave.cpp                           |    7 +-
 src/slave/slave.hpp                           |    2 +-
 src/tests/cgroups_tests.cpp                   |    8 +-
 src/tests/fault_tolerance_tests.cpp           |    2 +-
 src/tests/isolator_tests.cpp                  |    7 +-
 src/tests/log_tests.cpp                       |   92 ++++++++++----------
 src/tests/monitor_tests.cpp                   |    2 +-
 src/zookeeper/group.cpp                       |    5 +-
 29 files changed, 161 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/common/protobuf_utils.hpp
----------------------------------------------------------------------
diff --git a/src/common/protobuf_utils.hpp b/src/common/protobuf_utils.hpp
index 85d9ba7..5c5f052 100644
--- a/src/common/protobuf_utils.hpp
+++ b/src/common/protobuf_utils.hpp
@@ -52,7 +52,7 @@ inline StatusUpdate createStatusUpdate(
 {
   StatusUpdate update;
 
-  update.set_timestamp(process::Clock::now());
+  update.set_timestamp(process::Clock::now().secs());
   update.set_uuid(UUID::random().toBytes());
   update.mutable_framework_id()->MergeFrom(frameworkId);
   update.mutable_slave_id()->MergeFrom(slaveId);

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/exec/exec.cpp
----------------------------------------------------------------------
diff --git a/src/exec/exec.cpp b/src/exec/exec.cpp
index 1f022ca..116168f 100644
--- a/src/exec/exec.cpp
+++ b/src/exec/exec.cpp
@@ -398,7 +398,7 @@ protected:
     update->mutable_executor_id()->MergeFrom(executorId);
     update->mutable_slave_id()->MergeFrom(slaveId);
     update->mutable_status()->MergeFrom(status);
-    update->set_timestamp(Clock::now());
+    update->set_timestamp(Clock::now().secs());
     update->set_uuid(UUID::random().toBytes());
 
     VLOG(1) << "Executor sending status update " << *update;

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/java/jni/org_apache_mesos_Log.cpp
----------------------------------------------------------------------
diff --git a/src/java/jni/org_apache_mesos_Log.cpp b/src/java/jni/org_apache_mesos_Log.cpp
index a7cae14..c93f096 100644
--- a/src/java/jni/org_apache_mesos_Log.cpp
+++ b/src/java/jni/org_apache_mesos_Log.cpp
@@ -152,7 +152,7 @@ JNIEXPORT jobject JNICALL Java_org_apache_mesos_Log_00024Reader_read
   jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
 
   Result<std::list<Log::Entry> > entries =
-    reader->read(from, to, Timeout(Seconds(jseconds)));
+    reader->read(from, to, Timeout::in(Seconds(jseconds)));
 
   if (entries.isError()) {
     clazz = env->FindClass("org/apache/mesos/Log$OperationFailedException");
@@ -301,7 +301,7 @@ JNIEXPORT jobject JNICALL Java_org_apache_mesos_Log_00024Writer_append
   jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
 
   Result<Log::Position> position =
-    writer->append(data, Timeout(Seconds(jseconds)));
+    writer->append(data, Timeout::in(Seconds(jseconds)));
 
   env->ReleaseByteArrayElements(jdata, temp, 0);
 
@@ -353,7 +353,7 @@ JNIEXPORT jobject JNICALL Java_org_apache_mesos_Log_00024Writer_truncate
   jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
 
   Result<Log::Position> position =
-    writer->truncate(to, Timeout(Seconds(jseconds)));
+    writer->truncate(to, Timeout::in(Seconds(jseconds)));
 
   if (position.isError()) {
     clazz = env->FindClass("org/apache/mesos/Log$WriterFailedException");

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/linux/cgroups.hpp
----------------------------------------------------------------------
diff --git a/src/linux/cgroups.hpp b/src/linux/cgroups.hpp
index 3e86828..84edc97 100644
--- a/src/linux/cgroups.hpp
+++ b/src/linux/cgroups.hpp
@@ -309,7 +309,7 @@ process::Future<uint64_t> listen(
 process::Future<bool> freeze(
     const std::string& hierarchy,
     const std::string& cgroup,
-    const Duration& interval = Seconds(0.1),
+    const Duration& interval = Milliseconds(100),
     const unsigned int retries = FREEZE_RETRIES);
 
 
@@ -326,7 +326,7 @@ process::Future<bool> freeze(
 process::Future<bool> thaw(
     const std::string& hierarchy,
     const std::string& cgroup,
-    const Duration& interval = Seconds(0.1));
+    const Duration& interval = Milliseconds(100));
 
 
 // Destroy a cgroup under a given hierarchy. It will also recursively
@@ -349,7 +349,7 @@ process::Future<bool> thaw(
 process::Future<bool> destroy(
     const std::string& hierarchy,
     const std::string& cgroup = "/",
-    const Duration& interval = Seconds(0.1));
+    const Duration& interval = Milliseconds(100));
 
 
 // Cleanup the hierarchy, by first destroying all the underlying

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/log/log.hpp
----------------------------------------------------------------------
diff --git a/src/log/log.hpp b/src/log/log.hpp
index 15ec072..7fb0c4b 100644
--- a/src/log/log.hpp
+++ b/src/log/log.hpp
@@ -344,7 +344,7 @@ Log::Writer::Writer(Log* log, const Duration& timeout, int retries)
     coordinator(log->quorum, log->replica, log->network)
 {
   do {
-    Result<uint64_t> result = coordinator.elect(process::Timeout(timeout));
+    Result<uint64_t> result = coordinator.elect(process::Timeout::in(timeout));
     if (result.isNone()) {
       retries--;
     } else if (result.isSome()) {

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/log/network.hpp
----------------------------------------------------------------------
diff --git a/src/log/network.hpp b/src/log/network.hpp
index 0d9e9e3..d34cf78 100644
--- a/src/log/network.hpp
+++ b/src/log/network.hpp
@@ -281,7 +281,7 @@ inline void ZooKeeperNetwork::watched(
     futures.push_back(group->data(membership));
   }
 
-  process::collect(futures, process::Timeout(Seconds(5.0)))
+  process::collect(futures, process::Timeout::in(Seconds(5)))
     .onAny(executor.defer(lambda::bind(&This::collected, this, lambda::_1)));
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/master/constants.cpp
----------------------------------------------------------------------
diff --git a/src/master/constants.cpp b/src/master/constants.cpp
index 5d08645..7bc32eb 100644
--- a/src/master/constants.cpp
+++ b/src/master/constants.cpp
@@ -29,11 +29,11 @@ const uint32_t MIN_CPUS = 1;
 const uint32_t MIN_MEM = 32 * Megabyte;
 const uint32_t MAX_CPUS = 1000 * 1000;
 const uint32_t MAX_MEM = 1024 * 1024 * Megabyte;
-const Duration SLAVE_PING_TIMEOUT = Seconds(15.0);
+const Duration SLAVE_PING_TIMEOUT = Seconds(15);
 const uint32_t MAX_SLAVE_PING_TIMEOUTS = 5;
 const uint32_t MAX_COMPLETED_FRAMEWORKS = 50;
 const uint32_t MAX_COMPLETED_TASKS_PER_FRAMEWORK = 1000;
-const Duration WHITELIST_WATCH_INTERVAL = Seconds(5.0);
+const Duration WHITELIST_WATCH_INTERVAL = Seconds(5);
 
 } // namespace mesos {
 } // namespace internal {

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/master/flags.hpp
----------------------------------------------------------------------
diff --git a/src/master/flags.hpp b/src/master/flags.hpp
index 8481baa..23154f3 100644
--- a/src/master/flags.hpp
+++ b/src/master/flags.hpp
@@ -78,7 +78,7 @@ public:
         "allocation_interval",
         "Amount of time to wait between performing\n"
         " (batch) allocations (e.g., 500ms, 1sec, etc)",
-        Seconds(1.0));
+        Seconds(1));
 
     add(&Flags::cluster,
         "cluster",

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/master/hierarchical_allocator_process.hpp
----------------------------------------------------------------------
diff --git a/src/master/hierarchical_allocator_process.hpp b/src/master/hierarchical_allocator_process.hpp
index 2422fbd..f4afb71 100644
--- a/src/master/hierarchical_allocator_process.hpp
+++ b/src/master/hierarchical_allocator_process.hpp
@@ -489,18 +489,35 @@ HierarchicalAllocatorProcess<UserSorter, FrameworkSorter>::resourcesUnused(
   allocatable[slaveId] += resources;
 
   // Create a refused resources filter.
-  Seconds seconds(filters.isSome()
-                  ? filters.get().refuse_seconds()
-                  : Filters().refuse_seconds());
+  Try<Duration> seconds_ = Duration::create(Filters().refuse_seconds());
+  CHECK_SOME(seconds_);
+  Duration seconds = seconds_.get();
+
+  // Update the value of 'seconds' if the input isSome() and is
+  // valid.
+  if (filters.isSome()) {
+    seconds_ = Duration::create(filters.get().refuse_seconds());
+    if (seconds_.isError()) {
+      LOG(WARNING) << "Using the default value of 'refuse_seconds' to create "
+                   << "the refused resources filter because the input value is "
+                   << "invalid: " << seconds_.error();
+    } else if (seconds_.get() < Duration::zero()) {
+      LOG(WARNING) << "Using the default value of 'refuse_seconds' to create "
+                   << "the refused resources filter because the input value is "
+                   << "negative";
+    } else {
+      seconds = seconds_.get();
+    }
+  }
 
-  if (seconds != Seconds(0)) {
+  if (seconds != Duration::zero()) {
     LOG(INFO) << "Framework " << frameworkId
               << " filtered slave " << slaveId
               << " for " << seconds;
 
     // Create a new filter and delay it's expiration.
     mesos::internal::master::Filter* filter =
-      new RefusedFilter(slaveId, resources, Timeout(seconds));
+      new RefusedFilter(slaveId, resources, Timeout::in(seconds));
 
     this->filters.put(frameworkId, filter);
 

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 6d496f5..7e105a4 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -151,14 +151,14 @@ JSON::Object model(const Framework& framework)
   object.values["id"] = framework.id.value();
   object.values["name"] = framework.info.name();
   object.values["user"] = framework.info.user();
-  object.values["registered_time"] = framework.registeredTime;
-  object.values["unregistered_time"] = framework.unregisteredTime;
+  object.values["registered_time"] = framework.registeredTime.secs();
+  object.values["unregistered_time"] = framework.unregisteredTime.secs();
   object.values["active"] = framework.active;
   object.values["resources"] = model(framework.resources);
 
   // TODO(benh): Consider making reregisteredTime an Option.
   if (framework.registeredTime != framework.reregisteredTime) {
-    object.values["reregistered_time"] = framework.reregisteredTime;
+    object.values["reregistered_time"] = framework.reregisteredTime.secs();
   }
 
   // Model all of the tasks associated with a framework.
@@ -202,7 +202,7 @@ JSON::Object model(const Slave& slave)
   object.values["id"] = slave.id.value();
   object.values["pid"] = string(slave.pid);
   object.values["hostname"] = slave.info.hostname();
-  object.values["registered_time"] = slave.registeredTime;
+  object.values["registered_time"] = slave.registeredTime.secs();
   object.values["resources"] = model(slave.info.resources());
   object.values["attributes"] = model(slave.info.attributes());
   return object;
@@ -261,7 +261,7 @@ Future<Response> stats(
   VLOG(1) << "HTTP request for '" << request.path << "'";
 
   JSON::Object object;
-  object.values["uptime"] = Clock::now() - master.startTime;
+  object.values["uptime"] = (Clock::now() - master.startTime).secs();
   object.values["elected"] = master.elected; // Note: using int not bool.
   object.values["total_schedulers"] = master.frameworks.size();
   object.values["active_schedulers"] = master.getActiveFrameworks().size();
@@ -314,7 +314,7 @@ Future<Response> state(
   object.values["build_date"] = build::DATE;
   object.values["build_time"] = build::TIME;
   object.values["build_user"] = build::USER;
-  object.values["start_time"] = master.startTime;
+  object.values["start_time"] = master.startTime.secs();
   object.values["id"] = master.info.id();
   object.values["pid"] = string(master.self());
   object.values["activated_slaves"] = master.slaves.size();

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index d5e5804..5ee7763 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -402,13 +402,28 @@ void Master::exited(const UPID& pid)
       // Tell the allocator to stop allocating resources to this framework.
       allocator->frameworkDeactivated(framework->id);
 
-      Seconds failoverTimeout(framework->info.failover_timeout());
+      // Set 'failoverTimeout' to the default and update only if the
+      // input is valid.
+      Try<Duration> failoverTimeout_ =
+        Duration::create(FrameworkInfo().failover_timeout());
+      CHECK_SOME(failoverTimeout_);
+      Duration failoverTimeout = failoverTimeout_.get();
+
+      failoverTimeout_ =
+        Duration::create(framework->info.failover_timeout());
+      if (failoverTimeout_.isSome()) {
+        failoverTimeout = failoverTimeout_.get();
+      } else {
+        LOG(WARNING) << "Using the default value for 'failover_timeout' because"
+                     << "the input value is invalid: "
+                     << failoverTimeout_.error();
+      }
 
       LOG(INFO) << "Giving framework " << framework->id << " "
                 << failoverTimeout << " to failover";
 
       // Delay dispatching a message to ourselves for the timeout.
-    delay(failoverTimeout,
+      delay(failoverTimeout,
           self(),
           &Master::frameworkFailoverTimeout,
           framework->id,
@@ -748,7 +763,7 @@ void Master::launchTasks(const FrameworkID& frameworkId,
         status->mutable_task_id()->MergeFrom(task.task_id());
         status->set_state(TASK_LOST);
         status->set_message("Task launched with invalid offer");
-        update->set_timestamp(Clock::now());
+        update->set_timestamp(Clock::now().secs());
         update->set_uuid(UUID::random().toBytes());
         send(framework->pid, message);
       }
@@ -806,7 +821,7 @@ void Master::killTask(const FrameworkID& frameworkId,
       status->mutable_task_id()->MergeFrom(taskId);
       status->set_state(TASK_LOST);
       status->set_message("Task not found");
-      update->set_timestamp(Clock::now());
+      update->set_timestamp(Clock::now().secs());
       update->set_uuid(UUID::random().toBytes());
       send(framework->pid, message);
     }
@@ -1189,7 +1204,7 @@ void Master::deactivateSlave(const SlaveID& slaveId)
 
 
 void Master::frameworkFailoverTimeout(const FrameworkID& frameworkId,
-                                      double reregisteredTime)
+                                      const Time& reregisteredTime)
 {
   Framework* framework = getFramework(frameworkId);
   if (framework != NULL && !framework->active &&
@@ -1790,7 +1805,7 @@ void Master::removeFramework(Slave* slave, Framework* framework)
       status->mutable_task_id()->MergeFrom(task->task_id());
       status->set_state(TASK_LOST);
       status->set_message("Slave " + slave->info.hostname() + " disconnected");
-      update->set_timestamp(Clock::now());
+      update->set_timestamp(Clock::now().secs());
       update->set_uuid(UUID::random().toBytes());
       send(framework->pid, message);
 
@@ -1969,7 +1984,7 @@ void Master::removeSlave(Slave* slave)
       status->mutable_task_id()->MergeFrom(task->task_id());
       status->set_state(TASK_LOST);
       status->set_message("Slave " + slave->info.hostname() + " removed");
-      update->set_timestamp(Clock::now());
+      update->set_timestamp(Clock::now().secs());
       update->set_uuid(UUID::random().toBytes());
       send(framework->pid, message);
     }

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index 0a130d9..38d2a51 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -113,7 +113,7 @@ public:
                       int32_t status);
   void deactivateSlave(const SlaveID& slaveId);
   void frameworkFailoverTimeout(const FrameworkID& frameworkId,
-                                double reregisteredTime);
+                                const Time& reregisteredTime);
 
   void offer(const FrameworkID& framework,
              const hashmap<SlaveID, Resources>& resources);
@@ -242,7 +242,7 @@ private:
     uint64_t invalidFrameworkMessages;
   } stats;
 
-  double startTime; // Start time used to calculate uptime.
+  Time startTime; // Start time used to calculate uptime.
 };
 
 
@@ -252,7 +252,7 @@ struct Slave
   Slave(const SlaveInfo& _info,
         const SlaveID& _id,
         const UPID& _pid,
-        double time)
+        const Time& time)
     : id(_id),
       info(_info),
       pid(_pid),
@@ -354,8 +354,8 @@ struct Slave
 
   UPID pid;
 
-  double registeredTime;
-  double lastHeartbeat;
+  Time registeredTime;
+  Time lastHeartbeat;
 
   Resources resourcesOffered; // Resources offered.
   Resources resourcesInUse;   // Resources used by tasks and executors.
@@ -386,7 +386,7 @@ struct Framework
   Framework(const FrameworkInfo& _info,
             const FrameworkID& _id,
             const UPID& _pid,
-            double time)
+            const Time& time)
     : id(_id),
       info(_info),
       pid(_pid),
@@ -474,9 +474,9 @@ struct Framework
   UPID pid;
 
   bool active; // Turns false when framework is being removed.
-  double registeredTime;
-  double reregisteredTime;
-  double unregisteredTime;
+  Time registeredTime;
+  Time reregisteredTime;
+  Time unregisteredTime;
 
   hashmap<TaskID, Task*> tasks;
 

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/mesos/main.cpp
----------------------------------------------------------------------
diff --git a/src/mesos/main.cpp b/src/mesos/main.cpp
index 7983dd6..e7d0837 100644
--- a/src/mesos/main.cpp
+++ b/src/mesos/main.cpp
@@ -93,7 +93,7 @@ int main(int argc, char** argv)
 
   Future<SubmitSchedulerResponse> future = submit(master, request);
 
-  future.await(Seconds(5.0));
+  future.await(Seconds(5));
 
   if (future.isReady()) {
     if (future.get().okay()) {

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index b3593b1..e19251b 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -277,7 +277,7 @@ protected:
       send(master, message);
     }
 
-    delay(Seconds(1.0), self(), &Self::doReliableRegistration);
+    delay(Seconds(1), self(), &Self::doReliableRegistration);
   }
 
   void resourceOffers(const vector<Offer>& offers,
@@ -519,7 +519,7 @@ protected:
         status->mutable_task_id()->MergeFrom(task.task_id());
         status->set_state(TASK_LOST);
         status->set_message("Master Disconnected");
-        update.set_timestamp(Clock::now());
+        update.set_timestamp(Clock::now().secs());
         update.set_uuid(UUID::random().toBytes());
 
         statusUpdate(update, UPID());
@@ -538,7 +538,7 @@ protected:
         status->set_state(TASK_LOST);
         status->set_message(
             "TaskInfo must have either an 'executor' or a 'command'");
-        update.set_timestamp(Clock::now());
+        update.set_timestamp(Clock::now().secs());
         update.set_uuid(UUID::random().toBytes());
 
         statusUpdate(update, UPID());

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/cgroups_isolator.cpp
----------------------------------------------------------------------
diff --git a/src/slave/cgroups_isolator.cpp b/src/slave/cgroups_isolator.cpp
index 17a68df..8e8e99e 100644
--- a/src/slave/cgroups_isolator.cpp
+++ b/src/slave/cgroups_isolator.cpp
@@ -83,8 +83,8 @@ using state::RunState;
 // CPU subsystem constants.
 const size_t CPU_SHARES_PER_CPU = 1024;
 const size_t MIN_CPU_SHARES = 10;
-const Duration CPU_CFS_PERIOD = Milliseconds(100.0); // Linux default.
-const Duration MIN_CPU_CFS_QUOTA = Milliseconds(1.0);
+const Duration CPU_CFS_PERIOD = Milliseconds(100); // Linux default.
+const Duration MIN_CPU_CFS_QUOTA = Milliseconds(1);
 
 // Memory subsystem constants.
 const size_t MIN_MEMORY_MB = 32 * Megabyte;
@@ -688,7 +688,7 @@ Future<ResourceStatistics> CgroupsIsolator::usage(
   CHECK_NOTNULL(info);
 
   ResourceStatistics result;
-  result.set_timestamp(Clock::now());
+  result.set_timestamp(Clock::now().secs());
 
   Try<hashmap<string, uint64_t> > stat =
     cgroups::stat(hierarchy, info->name(), "cpuacct.stat");

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/constants.cpp
----------------------------------------------------------------------
diff --git a/src/slave/constants.cpp b/src/slave/constants.cpp
index 5a81f1f..e8d16ca 100644
--- a/src/slave/constants.cpp
+++ b/src/slave/constants.cpp
@@ -22,14 +22,14 @@ namespace mesos {
 namespace internal {
 namespace slave {
 
-const Duration EXECUTOR_REGISTRATION_TIMEOUT = Minutes(1.0);
-const Duration EXECUTOR_SHUTDOWN_GRACE_PERIOD = Seconds(5.0);
-const Duration EXECUTOR_REREGISTER_TIMEOUT = Seconds(2.0);
-const Duration STATUS_UPDATE_RETRY_INTERVAL = Seconds(10.0);
-const Duration GC_DELAY = Weeks(1.0);
+const Duration EXECUTOR_REGISTRATION_TIMEOUT = Minutes(1);
+const Duration EXECUTOR_SHUTDOWN_GRACE_PERIOD = Seconds(5);
+const Duration EXECUTOR_REREGISTER_TIMEOUT = Seconds(2);
+const Duration STATUS_UPDATE_RETRY_INTERVAL = Seconds(10);
+const Duration GC_DELAY = Weeks(1);
 const double GC_DISK_HEADROOM = 0.1;
-const Duration DISK_WATCH_INTERVAL = Minutes(1.0);
-const Duration RESOURCE_MONITORING_INTERVAL = Seconds(5.0);
+const Duration DISK_WATCH_INTERVAL = Minutes(1);
+const Duration RESOURCE_MONITORING_INTERVAL = Seconds(5);
 const uint32_t MAX_COMPLETED_FRAMEWORKS = 50;
 const uint32_t MAX_COMPLETED_EXECUTORS_PER_FRAMEWORK = 150;
 const uint32_t MAX_COMPLETED_TASKS_PER_EXECUTOR = 200;

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/gc.cpp
----------------------------------------------------------------------
diff --git a/src/slave/gc.cpp b/src/slave/gc.cpp
index 6119774..827534f 100644
--- a/src/slave/gc.cpp
+++ b/src/slave/gc.cpp
@@ -63,7 +63,7 @@ Future<Nothing> GarbageCollectorProcess::schedule(
 
   Owned<Promise<Nothing> > promise(new Promise<Nothing>());
 
-  Timeout removalTime(d);
+  Timeout removalTime = Timeout::in(d);
 
   timeouts[path] = removalTime;
   paths.put(removalTime, PathInfo(path, promise));

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/http.cpp
----------------------------------------------------------------------
diff --git a/src/slave/http.cpp b/src/slave/http.cpp
index 32a742a..67877c9 100644
--- a/src/slave/http.cpp
+++ b/src/slave/http.cpp
@@ -279,7 +279,7 @@ Future<Response> stats(
   LOG(INFO) << "HTTP request for '" << request.path << "'";
 
   JSON::Object object;
-  object.values["uptime"] = Clock::now() - slave.startTime;
+  object.values["uptime"] = (Clock::now() - slave.startTime).secs();
   object.values["total_frameworks"] = slave.frameworks.size();
   object.values["staged_tasks"] = slave.stats.tasks[TASK_STAGING];
   object.values["started_tasks"] = slave.stats.tasks[TASK_STARTING];
@@ -304,7 +304,7 @@ Future<Response> state(
   object.values["build_date"] = build::DATE;
   object.values["build_time"] = build::TIME;
   object.values["build_user"] = build::USER;
-  object.values["start_time"] = slave.startTime;
+  object.values["start_time"] = slave.startTime.secs();
   object.values["id"] = slave.info.id().value();
   object.values["pid"] = string(slave.self());
   object.values["hostname"] = slave.info.hostname();

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/monitor.cpp
----------------------------------------------------------------------
diff --git a/src/slave/monitor.cpp b/src/slave/monitor.cpp
index ed62bb5..5de1c15 100644
--- a/src/slave/monitor.cpp
+++ b/src/slave/monitor.cpp
@@ -183,7 +183,14 @@ void publish(
     const ExecutorID& executorId,
     const ResourceStatistics& statistics)
 {
-  Seconds time(statistics.timestamp());
+  Try<Time> time_ = Time::create(statistics.timestamp());
+  if (time_.isError()) {
+    LOG(ERROR) << "Not publishing the statistics because we cannot create a "
+               << "Duration from its timestamp: " << time_.error();
+    return;
+  }
+
+  Time time = time_.get();
 
   const string& prefix =
     strings::join("/", frameworkId.value(), executorId.value(), "");

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/process_isolator.cpp
----------------------------------------------------------------------
diff --git a/src/slave/process_isolator.cpp b/src/slave/process_isolator.cpp
index 2224d62..477af4e 100644
--- a/src/slave/process_isolator.cpp
+++ b/src/slave/process_isolator.cpp
@@ -362,7 +362,7 @@ Future<ResourceStatistics> ProcessIsolator::usage(
 
   ResourceStatistics result;
 
-  result.set_timestamp(Clock::now());
+  result.set_timestamp(Clock::now().secs());
 
 #ifdef __linux__
   // Get the page size, used for memory accounting.

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/reaper.cpp
----------------------------------------------------------------------
diff --git a/src/slave/reaper.cpp b/src/slave/reaper.cpp
index b4d8912..5a6de5a 100644
--- a/src/slave/reaper.cpp
+++ b/src/slave/reaper.cpp
@@ -118,7 +118,7 @@ void Reaper::reap()
       pids.erase(pid);
     }
   }
-  delay(Seconds(1.0), self(), &Reaper::reap); // Reap forever!
+  delay(Seconds(1), self(), &Reaper::reap); // Reap forever!
 }
 
 } // namespace slave {

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/slave.cpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp
index d3126cc..b451d90 100644
--- a/src/slave/slave.cpp
+++ b/src/slave/slave.cpp
@@ -701,7 +701,7 @@ void Slave::doReliableRegistration()
   }
 
   // Retry registration if necessary.
-  delay(Seconds(1.0), self(), &Slave::doReliableRegistration);
+  delay(Seconds(1), self(), &Slave::doReliableRegistration);
 }
 
 
@@ -2456,8 +2456,7 @@ void Slave::registerExecutorTimeout(
 // TODO(vinod): Figure out a way to express this function via cmd line.
 Duration Slave::age(double usage)
 {
- return Weeks(
-     flags.gc_delay.weeks() * std::max(0.0, (1.0 - GC_DISK_HEADROOM - usage)));
+  return flags.gc_delay * std::max(0.0, (1.0 - GC_DISK_HEADROOM - usage));
 }
 
 
@@ -2491,7 +2490,7 @@ void Slave::_checkDiskUsage(const Future<Try<double> >& usage)
       // the next 'gc_delay - age'. Since a directory is always
       // scheduled for deletion 'gc_delay' into the future, only directories
       // that are at least 'age' old are deleted.
-      gc.prune(Weeks(flags.gc_delay.weeks() - age(use).weeks()));
+      gc.prune(flags.gc_delay - age(use));
     } else {
       LOG(WARNING) << "Unable to get disk usage: " << result.error();
     }

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/slave/slave.hpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp
index 82d2804..26dc96e 100644
--- a/src/slave/slave.hpp
+++ b/src/slave/slave.hpp
@@ -305,7 +305,7 @@ private:
     uint64_t invalidFrameworkMessages;
   } stats;
 
-  double startTime;
+  Time startTime;
 
   GarbageCollector gc;
   ResourceMonitor monitor;

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/tests/cgroups_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/cgroups_tests.cpp b/src/tests/cgroups_tests.cpp
index 3734315..db33738 100644
--- a/src/tests/cgroups_tests.cpp
+++ b/src/tests/cgroups_tests.cpp
@@ -456,7 +456,7 @@ TEST_F(CgroupsAnyHierarchyWithCpuMemoryTest, ROOT_CGROUPS_Listen)
 
   if (pid > 0) {
     // In parent process.
-    future.await(Seconds(5.0));
+    future.await(Seconds(5));
 
     EXPECT_TRUE(future.isReady());
 
@@ -526,13 +526,13 @@ TEST_F(CgroupsAnyHierarchyWithCpuMemoryFreezerTest, ROOT_CGROUPS_Freeze)
 
     // Freeze the test cgroup.
     Future<bool> freeze = cgroups::freeze(hierarchy, TEST_CGROUPS_ROOT);
-    freeze.await(Seconds(5.0));
+    freeze.await(Seconds(5));
     ASSERT_TRUE(freeze.isReady());
     EXPECT_EQ(true, freeze.get());
 
     // Thaw the test cgroup.
     Future<bool> thaw = cgroups::thaw(hierarchy, TEST_CGROUPS_ROOT);
-    thaw.await(Seconds(5.0));
+    thaw.await(Seconds(5));
     ASSERT_TRUE(thaw.isReady());
     EXPECT_EQ(true, thaw.get());
 
@@ -658,7 +658,7 @@ TEST_F(CgroupsAnyHierarchyWithCpuMemoryFreezerTest, ROOT_CGROUPS_Destroy)
     ::close(pipes[0]);
 
     Future<bool> future = cgroups::destroy(hierarchy, TEST_CGROUPS_ROOT);
-    future.await(Seconds(5.0));
+    future.await(Seconds(5));
     ASSERT_TRUE(future.isReady());
     EXPECT_TRUE(future.get());
 

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/tests/fault_tolerance_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/fault_tolerance_tests.cpp b/src/tests/fault_tolerance_tests.cpp
index cc379f0..2e9416e 100644
--- a/src/tests/fault_tolerance_tests.cpp
+++ b/src/tests/fault_tolerance_tests.cpp
@@ -458,7 +458,7 @@ TEST_F(FaultToleranceClusterTest, PartitionedSlaveStatusUpdates)
   statusUpdate.mutable_update()->mutable_status()->mutable_task_id()->set_value(
       "task_id");
   statusUpdate.mutable_update()->mutable_status()->set_state(TASK_RUNNING);
-  statusUpdate.mutable_update()->set_timestamp(Clock::now());
+  statusUpdate.mutable_update()->set_timestamp(Clock::now().secs());
   statusUpdate.mutable_update()->set_uuid(stringify(UUID::random()));
   process::post(master.get(), statusUpdate);
 

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/tests/isolator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/isolator_tests.cpp b/src/tests/isolator_tests.cpp
index 435c780..4715fb7 100644
--- a/src/tests/isolator_tests.cpp
+++ b/src/tests/isolator_tests.cpp
@@ -165,7 +165,7 @@ TYPED_TEST(IsolatorTest, Usage)
   // TODO(bmahler): Also induce rss memory consumption, by re-using
   // the balloon framework.
   ResourceStatistics statistics;
-  Duration waited = Seconds(0);
+  Duration waited = Duration::zero();
   do {
     const Future<ResourceStatistics>& usage =
       isolator.usage(frameworkId.get(), executorId);
@@ -181,9 +181,8 @@ TYPED_TEST(IsolatorTest, Usage)
       break;
     }
 
-    const Duration& sleep = Milliseconds(100);
-    usleep((useconds_t) sleep.us());
-    waited = Seconds(waited.secs() + sleep.secs());
+    os::sleep(Milliseconds(100));
+    waited = waited + Milliseconds(100);
   } while (waited < Seconds(10));
 
   EXPECT_GE(statistics.memory_rss(), 1024u);

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/tests/log_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/log_tests.cpp b/src/tests/log_tests.cpp
index 57fb9db..208e83e 100644
--- a/src/tests/log_tests.cpp
+++ b/src/tests/log_tests.cpp
@@ -279,7 +279,7 @@ TEST(CoordinatorTest, Elect)
   Coordinator coord(2, &replica1, &network);
 
   {
-    Result<uint64_t> result = coord.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
@@ -317,7 +317,7 @@ TEST(CoordinatorTest, AppendRead)
   Coordinator coord(2, &replica1, &network);
 
   {
-    Result<uint64_t> result = coord.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
@@ -326,7 +326,7 @@ TEST(CoordinatorTest, AppendRead)
 
   {
     Result<uint64_t> result2 =
-      coord.append("hello world", Timeout(Seconds(5)));
+      coord.append("hello world", Timeout::in(Seconds(5)));
     ASSERT_SOME(result2);
     position = result2.get();
     EXPECT_EQ(1u, position);
@@ -366,7 +366,7 @@ TEST(CoordinatorTest, AppendReadError)
   Coordinator coord(2, &replica1, &network);
 
   {
-    Result<uint64_t> result = coord.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
@@ -375,7 +375,7 @@ TEST(CoordinatorTest, AppendReadError)
 
   {
     Result<uint64_t> result2 =
-      coord.append("hello world", Timeout(Seconds(5)));
+      coord.append("hello world", Timeout::in(Seconds(5)));
     ASSERT_SOME(result2);
     position = result2.get();
     EXPECT_EQ(1u, position);
@@ -410,7 +410,7 @@ TEST(CoordinatorTest, ElectNoQuorum)
   Clock::pause();
 
   // Create a timeout here so that we can advance time.
-  Timeout timeout(Seconds(5));
+  Timeout timeout = Timeout::in(Seconds(5));
 
   Clock::advance(Seconds(5));
 
@@ -444,7 +444,7 @@ TEST(CoordinatorTest, AppendNoQuorum)
   Coordinator coord(2, &replica1, &network);
 
   {
-    Result<uint64_t> result = coord.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
@@ -454,7 +454,7 @@ TEST(CoordinatorTest, AppendNoQuorum)
   Clock::pause();
 
   // Create a timeout here so that we can advance time.
-  Timeout timeout(Seconds(5));
+  Timeout timeout = Timeout::in(Seconds(5));
 
   Clock::advance(Seconds(5));
 
@@ -489,7 +489,7 @@ TEST(CoordinatorTest, Failover)
   Coordinator coord1(2, &replica1, &network1);
 
   {
-    Result<uint64_t> result = coord1.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
@@ -498,7 +498,7 @@ TEST(CoordinatorTest, Failover)
 
   {
     Result<uint64_t> result =
-      coord1.append("hello world", Timeout(Seconds(5)));
+      coord1.append("hello world", Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     position = result.get();
     EXPECT_EQ(1u, position);
@@ -512,7 +512,7 @@ TEST(CoordinatorTest, Failover)
   Coordinator coord2(2, &replica2, &network2);
 
   {
-    Result<uint64_t> result = coord2.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
@@ -551,7 +551,7 @@ TEST(CoordinatorTest, Demoted)
   Coordinator coord1(2, &replica1, &network1);
 
   {
-    Result<uint64_t> result = coord1.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
@@ -560,7 +560,7 @@ TEST(CoordinatorTest, Demoted)
 
   {
     Result<uint64_t> result =
-      coord1.append("hello world", Timeout(Seconds(5)));
+      coord1.append("hello world", Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     position = result.get();
     EXPECT_EQ(1u, position);
@@ -574,21 +574,21 @@ TEST(CoordinatorTest, Demoted)
   Coordinator coord2(2, &replica2, &network2);
 
   {
-    Result<uint64_t> result = coord2.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
 
   {
     Result<uint64_t> result =
-      coord1.append("hello moto", Timeout(Seconds(5)));
+      coord1.append("hello moto", Timeout::in(Seconds(5)));
     ASSERT_TRUE(result.isError());
     EXPECT_EQ("Coordinator demoted", result.error());
   }
 
   {
     Result<uint64_t> result =
-      coord2.append("hello hello", Timeout(Seconds(5)));
+      coord2.append("hello hello", Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     position = result.get();
     EXPECT_EQ(2u, position);
@@ -630,7 +630,7 @@ TEST(CoordinatorTest, Fill)
   Coordinator coord1(2, &replica1, &network1);
 
   {
-    Result<uint64_t> result = coord1.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
@@ -639,7 +639,7 @@ TEST(CoordinatorTest, Fill)
 
   {
     Result<uint64_t> result =
-      coord1.append("hello world", Timeout(Seconds(5)));
+      coord1.append("hello world", Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     position = result.get();
     EXPECT_EQ(1u, position);
@@ -655,9 +655,9 @@ TEST(CoordinatorTest, Fill)
   Coordinator coord2(2, &replica3, &network2);
 
   {
-    Result<uint64_t> result = coord2.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_TRUE(result.isNone());
-    result = coord2.elect(Timeout(Seconds(5)));
+    result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
@@ -701,7 +701,7 @@ TEST(CoordinatorTest, NotLearnedFill)
   Coordinator coord1(2, &replica1, &network1);
 
   {
-    Result<uint64_t> result = coord1.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
@@ -710,7 +710,7 @@ TEST(CoordinatorTest, NotLearnedFill)
 
   {
     Result<uint64_t> result =
-      coord1.append("hello world", Timeout(Seconds(5)));
+      coord1.append("hello world", Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     position = result.get();
     EXPECT_EQ(1u, position);
@@ -726,9 +726,9 @@ TEST(CoordinatorTest, NotLearnedFill)
   Coordinator coord2(2, &replica3, &network2);
 
   {
-    Result<uint64_t> result = coord2.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_TRUE(result.isNone());
-    result = coord2.elect(Timeout(Seconds(5)));
+    result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
@@ -768,14 +768,14 @@ TEST(CoordinatorTest, MultipleAppends)
   Coordinator coord(2, &replica1, &network);
 
   {
-    Result<uint64_t> result = coord.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
 
   for (uint64_t position = 1; position <= 10; position++) {
     Result<uint64_t> result =
-      coord.append(stringify(position), Timeout(Seconds(5)));
+      coord.append(stringify(position), Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
@@ -819,14 +819,14 @@ TEST(CoordinatorTest, MultipleAppendsNotLearnedFill)
   Coordinator coord1(2, &replica1, &network1);
 
   {
-    Result<uint64_t> result = coord1.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
 
   for (uint64_t position = 1; position <= 10; position++) {
     Result<uint64_t> result =
-      coord1.append(stringify(position), Timeout(Seconds(5)));
+      coord1.append(stringify(position), Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
@@ -841,9 +841,9 @@ TEST(CoordinatorTest, MultipleAppendsNotLearnedFill)
   Coordinator coord2(2, &replica3, &network2);
 
   {
-    Result<uint64_t> result = coord2.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_TRUE(result.isNone());
-    result = coord2.elect(Timeout(Seconds(5)));
+    result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(10u, result.get());
   }
@@ -884,20 +884,20 @@ TEST(CoordinatorTest, Truncate)
   Coordinator coord(2, &replica1, &network);
 
   {
-    Result<uint64_t> result = coord.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
 
   for (uint64_t position = 1; position <= 10; position++) {
     Result<uint64_t> result =
-      coord.append(stringify(position), Timeout(Seconds(5)));
+      coord.append(stringify(position), Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
 
   {
-    Result<uint64_t> result = coord.truncate(7, Timeout(Seconds(5)));
+    Result<uint64_t> result = coord.truncate(7, Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(11u, result.get());
   }
@@ -947,20 +947,20 @@ TEST(CoordinatorTest, TruncateNotLearnedFill)
   Coordinator coord1(2, &replica1, &network1);
 
   {
-    Result<uint64_t> result = coord1.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
 
   for (uint64_t position = 1; position <= 10; position++) {
     Result<uint64_t> result =
-      coord1.append(stringify(position), Timeout(Seconds(5)));
+      coord1.append(stringify(position), Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
 
   {
-    Result<uint64_t> result = coord1.truncate(7, Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.truncate(7, Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(11u, result.get());
   }
@@ -975,9 +975,9 @@ TEST(CoordinatorTest, TruncateNotLearnedFill)
   Coordinator coord2(2, &replica3, &network2);
 
   {
-    Result<uint64_t> result = coord2.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_TRUE(result.isNone());
-    result = coord2.elect(Timeout(Seconds(5)));
+    result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(11u, result.get());
   }
@@ -1026,20 +1026,20 @@ TEST(CoordinatorTest, TruncateLearnedFill)
   Coordinator coord1(2, &replica1, &network1);
 
   {
-    Result<uint64_t> result = coord1.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(0u, result.get());
   }
 
   for (uint64_t position = 1; position <= 10; position++) {
     Result<uint64_t> result =
-      coord1.append(stringify(position), Timeout(Seconds(5)));
+      coord1.append(stringify(position), Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(position, result.get());
   }
 
   {
-    Result<uint64_t> result = coord1.truncate(7, Timeout(Seconds(5)));
+    Result<uint64_t> result = coord1.truncate(7, Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(11u, result.get());
   }
@@ -1054,9 +1054,9 @@ TEST(CoordinatorTest, TruncateLearnedFill)
   Coordinator coord2(2, &replica3, &network2);
 
   {
-    Result<uint64_t> result = coord2.elect(Timeout(Seconds(5)));
+    Result<uint64_t> result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_TRUE(result.isNone());
-    result = coord2.elect(Timeout(Seconds(5)));
+    result = coord2.elect(Timeout::in(Seconds(5)));
     ASSERT_SOME(result);
     EXPECT_EQ(11u, result.get());
   }
@@ -1102,14 +1102,14 @@ TEST(LogTest, WriteRead)
   Log::Writer writer(&log, Seconds(5));
 
   Result<Log::Position> position =
-    writer.append("hello world", Timeout(Seconds(5)));
+    writer.append("hello world", Timeout::in(Seconds(5)));
 
   ASSERT_SOME(position);
 
   Log::Reader reader(&log);
 
   Result<std::list<Log::Entry> > entries =
-    reader.read(position.get(), position.get(), Timeout(Seconds(5)));
+    reader.read(position.get(), position.get(), Timeout::in(Seconds(5)));
 
   ASSERT_SOME(entries);
   ASSERT_EQ(1u, entries.get().size());
@@ -1139,7 +1139,7 @@ TEST(LogTest, Position)
   Log::Writer writer(&log, Seconds(5));
 
   Result<Log::Position> position =
-    writer.append("hello world", Timeout(Seconds(5)));
+    writer.append("hello world", Timeout::in(Seconds(5)));
 
   ASSERT_SOME(position);
 

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/tests/monitor_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/monitor_tests.cpp b/src/tests/monitor_tests.cpp
index 9973f98..6a7be76 100644
--- a/src/tests/monitor_tests.cpp
+++ b/src/tests/monitor_tests.cpp
@@ -76,7 +76,7 @@ TEST(MonitorTest, WatchUnwatch)
   statistics.set_cpu_user_time(5);
   statistics.set_cpu_system_time(1);
   statistics.set_memory_rss(1024);
-  statistics.set_timestamp(Clock::now());
+  statistics.set_timestamp(Clock::now().secs());
 
   TestingIsolator isolator;
 

http://git-wip-us.apache.org/repos/asf/incubator-mesos/blob/304835d7/src/zookeeper/group.cpp
----------------------------------------------------------------------
diff --git a/src/zookeeper/group.cpp b/src/zookeeper/group.cpp
index 159454e..c1a587a 100644
--- a/src/zookeeper/group.cpp
+++ b/src/zookeeper/group.cpp
@@ -39,7 +39,7 @@ using std::vector;
 namespace zookeeper {
 
 // Time to wait after retryable errors.
-const Duration RETRY_INTERVAL = Seconds(2.0);
+const Duration RETRY_INTERVAL = Seconds(2);
 
 
 class GroupProcess : public Process<GroupProcess>
@@ -780,7 +780,8 @@ void GroupProcess::retry(const Duration& duration)
   } else if (error.isNone() && state == CONNECTED) {
     bool synced = sync(); // Might get another retryable error.
     if (!synced && error.isNone()) {
-      Seconds seconds(std::min(duration.secs() * 2.0, 60.0)); // Backoff.
+      // Backoff.
+      Seconds seconds = std::min(duration * 2, Duration(Seconds(60)));
       delay(seconds, self(), &GroupProcess::retry, seconds);
     } else {
       retrying = false;