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

Side by Side Diff: update_check_scheduler.h

Issue 3215006: AU: Implement exponential back off for 500 and 503 HTTP response codes. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: elaborate on the CHECK Created 10 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « update_attempter_mock.h ('k') | update_check_scheduler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_CHECK_SCHEDULER_H__
6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_UPDATE_CHECK_SCHEDULER_H__
7
8 #include <base/basictypes.h>
9 #include <glib.h>
10 #include <gtest/gtest_prod.h> // for FRIEND_TEST
11
12 #include "update_engine/update_attempter.h"
13
14 namespace chromeos_update_engine {
15
16 // UpdateCheckScheduler manages the periodic background update checks. This is
17 // the basic update check cycle:
18 //
19 // Run
20 // |
21 // v
22 // /->ScheduleCheck
23 // | |
24 // | v
25 // | StaticCheck (invoked through a GLib timeout source)
26 // | |
27 // | v
28 // | UpdateAttempter::Update
29 // | |
30 // | v
31 // | SetUpdateStatus (invoked by UpdateAttempter on state transitions)
32 // | |
33 // | v
34 // | ScheduleNextCheck (invoked when UpdateAttempter becomes idle)
35 // \---/
36 class UpdateCheckScheduler {
37 public:
38 static const int kTimeoutOnce;
39 static const int kTimeoutPeriodic;
40 static const int kTimeoutRegularFuzz;
41 static const int kTimeoutMaxBackoff;
42
43 UpdateCheckScheduler(UpdateAttempter* update_attempter);
44 virtual ~UpdateCheckScheduler();
45
46 // Initiates the periodic update checks, if necessary.
47 void Run();
48
49 // Sets the new update status. This is invoked by UpdateAttempter.
50 void SetUpdateStatus(UpdateStatus status);
51
52 private:
53 friend class UpdateCheckSchedulerTest;
54 FRIEND_TEST(UpdateCheckSchedulerTest, CanScheduleTest);
55 FRIEND_TEST(UpdateCheckSchedulerTest, ComputeNextIntervalAndFuzzBackoffTest);
56 FRIEND_TEST(UpdateCheckSchedulerTest, ComputeNextIntervalAndFuzzTest);
57 FRIEND_TEST(UpdateCheckSchedulerTest, GTimeoutAddSecondsTest);
58 FRIEND_TEST(UpdateCheckSchedulerTest, IsBootDeviceRemovableTest);
59 FRIEND_TEST(UpdateCheckSchedulerTest, IsOfficialBuildTest);
60 FRIEND_TEST(UpdateCheckSchedulerTest, RunBootDeviceRemovableTest);
61 FRIEND_TEST(UpdateCheckSchedulerTest, RunNonOfficialBuildTest);
62 FRIEND_TEST(UpdateCheckSchedulerTest, RunTest);
63 FRIEND_TEST(UpdateCheckSchedulerTest, ScheduleCheckDisabledTest);
64 FRIEND_TEST(UpdateCheckSchedulerTest, ScheduleCheckEnabledTest);
65 FRIEND_TEST(UpdateCheckSchedulerTest, ScheduleCheckNegativeIntervalTest);
66 FRIEND_TEST(UpdateCheckSchedulerTest, ScheduleNextCheckDisabledTest);
67 FRIEND_TEST(UpdateCheckSchedulerTest, ScheduleNextCheckEnabledTest);
68 FRIEND_TEST(UpdateCheckSchedulerTest, SetUpdateStatusIdleDisabledTest);
69 FRIEND_TEST(UpdateCheckSchedulerTest, SetUpdateStatusIdleEnabledTest);
70 FRIEND_TEST(UpdateCheckSchedulerTest, SetUpdateStatusNonIdleTest);
71 FRIEND_TEST(UpdateCheckSchedulerTest, StaticCheckTest);
72
73 // Wraps GLib's g_timeout_add_seconds so that it can be mocked in tests.
74 virtual guint GTimeoutAddSeconds(guint interval, GSourceFunc function);
75
76 // Wrappers for utils functions so that they can be mocked in tests.
77 virtual bool IsBootDeviceRemovable();
78 virtual bool IsOfficialBuild();
79
80 // Returns true if an update check can be scheduled. An update check should
81 // not be scheduled if periodic update checks are disabled or if one is
82 // already scheduled.
83 bool CanSchedule() { return enabled_ && !scheduled_; }
84
85 // Schedules the next periodic update check |interval| seconds from now
86 // randomized by +/- |fuzz|/2.
87 void ScheduleCheck(int interval, int fuzz);
88
89 // GLib timeout source callback. Initiates an update check through the update
90 // attempter.
91 static gboolean StaticCheck(void* scheduler);
92
93 // Schedules the next update check by setting up a timeout source.
94 void ScheduleNextCheck();
95
96 // Computes the timeout interval along with its random fuzz range for the next
97 // update check by taking into account the last timeout interval as well as
98 // the last update status.
99 void ComputeNextIntervalAndFuzz(int* next_interval, int* next_fuzz);
100
101 // The UpdateAttempter to use for update checks.
102 UpdateAttempter* update_attempter_;
103
104 // True if automatic update checks should be scheduled, false otherwise.
105 bool enabled_;
106
107 // True if there's an update check scheduled already, false otherwise.
108 bool scheduled_;
109
110 // The timeout interval (before fuzzing) for the last update check.
111 int last_interval_;
112
113 DISALLOW_COPY_AND_ASSIGN(UpdateCheckScheduler);
114 };
115
116 } // namespace chromeos_update_engine
117
118 #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_CHECK_SCHEDULER_H__
OLDNEW
« no previous file with comments | « update_attempter_mock.h ('k') | update_check_scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698