Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(771)

Unified Diff: main.cc

Issue 3173041: Add 10 minute random fuzz to automatic update check event schedule. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: review comments Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | testrunner.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: main.cc
diff --git a/main.cc b/main.cc
index f449fa401ece16536a0f9377eae0fe6ace3daa5a..251b10a7b72f38517b079be6d06984f55d0ad149 100644
--- a/main.cc
+++ b/main.cc
@@ -9,6 +9,7 @@
#include <gflags/gflags.h>
#include <glib.h>
+#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/logging.h"
#include "base/string_util.h"
@@ -45,16 +46,29 @@ gboolean UpdateBootFlags(void* arg) {
namespace {
+const int kTimeoutOnce = 7 * 60; // at 7 minutes
+const int kTimeoutPeriodic = 45 * 60; // every 45 minutes
+const int kTimeoutFuzz = 10 * 60; // +/- 5 minutes
+
+// Schedules an update check |seconds| from now, while adding some fuzz.
+void ScheduleUpdateCheck(int seconds,
+ GSourceFunc update_function,
+ UpdateAttempter* update_attempter) {
+ seconds = utils::FuzzInt(seconds, kTimeoutFuzz);
+ g_timeout_add_seconds(seconds, update_function, update_attempter);
+}
+
gboolean UpdateOnce(void* arg) {
UpdateAttempter* update_attempter = reinterpret_cast<UpdateAttempter*>(arg);
update_attempter->Update("", "");
- return FALSE;
+ return FALSE; // Don't run again.
}
gboolean UpdatePeriodically(void* arg) {
UpdateAttempter* update_attempter = reinterpret_cast<UpdateAttempter*>(arg);
update_attempter->Update("", "");
- return TRUE;
+ ScheduleUpdateCheck(kTimeoutPeriodic, &UpdatePeriodically, update_attempter);
+ return FALSE; // Don't run again.
}
void SchedulePeriodicUpdateChecks(UpdateAttempter* update_attempter) {
@@ -62,16 +76,13 @@ void SchedulePeriodicUpdateChecks(UpdateAttempter* update_attempter) {
LOG(WARNING) << "Non-official build: periodic update checks disabled.";
return;
}
-
if (utils::IsRemovableDevice(utils::RootDevice(utils::BootDevice()))) {
LOG(WARNING) << "Removable device boot: periodic update checks disabled.";
return;
}
-
- // Kick off periodic updating. First, update after 2 minutes. Also, update
- // every 30 minutes.
- g_timeout_add_seconds(2 * 60, &UpdateOnce, update_attempter);
- g_timeout_add_seconds(30 * 60, &UpdatePeriodically, update_attempter);
+ // Kick off periodic updating.
+ ScheduleUpdateCheck(kTimeoutOnce, &UpdateOnce, update_attempter);
+ ScheduleUpdateCheck(kTimeoutPeriodic, &UpdatePeriodically, update_attempter);
}
void SetupDbusService(UpdateEngineService* service) {
@@ -118,6 +129,7 @@ int main(int argc, char** argv) {
::g_type_init();
g_thread_init(NULL);
dbus_g_thread_init();
+ base::AtExitManager exit_manager; // Required for base/rand_util.h.
chromeos_update_engine::Subprocess::Init();
google::ParseCommandLineFlags(&argc, &argv, true);
CommandLine::Init(argc, argv);
« no previous file with comments | « no previous file | testrunner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698