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

Side by Side Diff: components/offline_pages/background/request_coordinator.cc

Issue 2176453002: Update the request count when a request fails. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix test Created 4 years, 5 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
« no previous file with comments | « no previous file | components/offline_pages/background/request_coordinator_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/offline_pages/background/request_coordinator.h" 5 #include "components/offline_pages/background/request_coordinator.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 RequestQueue::AddRequestResult result, 89 RequestQueue::AddRequestResult result,
90 const SavePageRequest& request) { 90 const SavePageRequest& request) {
91 91
92 // Inform the scheduler that we have an outstanding task. 92 // Inform the scheduler that we have an outstanding task.
93 // TODO(petewil): Determine trigger conditions from policy. 93 // TODO(petewil): Determine trigger conditions from policy.
94 scheduler_->Schedule(GetTriggerConditionsForUserRequest()); 94 scheduler_->Schedule(GetTriggerConditionsForUserRequest());
95 } 95 }
96 96
97 // Called in response to updating a request in the request queue. 97 // Called in response to updating a request in the request queue.
98 void RequestCoordinator::UpdateRequestCallback( 98 void RequestCoordinator::UpdateRequestCallback(
99 RequestQueue::UpdateRequestResult result) {} 99 RequestQueue::UpdateRequestResult result) {
100 // If the request succeeded, nothing to do. If it failed, we can't really do
101 // much, so just log it.
102 if (result != RequestQueue::UpdateRequestResult::SUCCESS) {
103 // TODO(petewil): Consider adding UMA or showing on offline-internals page.
104 DLOG(WARNING) << "Failed to update a request retry count. "
105 << static_cast<int>(result);
106 }
107 }
100 108
101 void RequestCoordinator::StopProcessing() { 109 void RequestCoordinator::StopProcessing() {
102 is_canceled_ = true; 110 is_canceled_ = true;
103 if (offliner_ && is_busy_) 111 if (offliner_ && is_busy_)
104 offliner_->Cancel(); 112 offliner_->Cancel();
105 113
106 // Stopping offliner means it will not call callback. 114 // Stopping offliner means it will not call callback.
107 last_offlining_status_ = 115 last_offlining_status_ =
108 Offliner::RequestStatus::REQUEST_COORDINATOR_CANCELED; 116 Offliner::RequestStatus::REQUEST_COORDINATOR_CANCELED;
109 RecordOfflinerResultUMA(last_offlining_status_); 117 RecordOfflinerResultUMA(last_offlining_status_);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 event_logger_.RecordSavePageRequestUpdated( 198 event_logger_.RecordSavePageRequestUpdated(
191 request.client_id().name_space, 199 request.client_id().name_space,
192 "Saved", 200 "Saved",
193 request.request_id()); 201 request.request_id());
194 last_offlining_status_ = status; 202 last_offlining_status_ = status;
195 RecordOfflinerResultUMA(last_offlining_status_); 203 RecordOfflinerResultUMA(last_offlining_status_);
196 watchdog_timer_.Stop(); 204 watchdog_timer_.Stop();
197 205
198 is_busy_ = false; 206 is_busy_ = false;
199 207
200 // If the request succeeded, remove it from the Queue and maybe schedule 208 int64_t new_attempt_count = request.attempt_count() + 1;
201 // another one. 209
202 if (status == Offliner::RequestStatus::SAVED) { 210 // Remove the request from the queue if it either succeeded or exceeded the
211 // max number of retries.
212 if (status == Offliner::RequestStatus::SAVED
213 || new_attempt_count > policy_->GetMaxRetries()) {
203 queue_->RemoveRequest(request.request_id(), 214 queue_->RemoveRequest(request.request_id(),
204 base::Bind(&RequestCoordinator::UpdateRequestCallback, 215 base::Bind(&RequestCoordinator::UpdateRequestCallback,
205 weak_ptr_factory_.GetWeakPtr())); 216 weak_ptr_factory_.GetWeakPtr()));
217 } else {
218 // If we failed, but are not over the limit, update the request in the
219 // queue.
220 SavePageRequest updated_request(request);
221 updated_request.set_attempt_count(new_attempt_count);
222 updated_request.set_last_attempt_time(base::Time::Now());
223 RequestQueue::UpdateRequestCallback update_callback =
224 base::Bind(&RequestCoordinator::UpdateRequestCallback,
225 weak_ptr_factory_.GetWeakPtr());
226 queue_->UpdateRequest(
227 updated_request,
228 base::Bind(&RequestCoordinator::UpdateRequestCallback,
229 weak_ptr_factory_.GetWeakPtr()));
230 }
206 231
207 // TODO(petewil): Check time budget. Return to the scheduler if we are out. 232 // TODO(petewil): Check time budget. Return to the scheduler if we are out.
208 233 // Start another request if we have time.
209 // Start another request if we have time. 234 TryNextRequest();
210 TryNextRequest();
211 }
212 } 235 }
213 236
214 const Scheduler::TriggerConditions& 237 const Scheduler::TriggerConditions&
215 RequestCoordinator::GetTriggerConditionsForUserRequest() { 238 RequestCoordinator::GetTriggerConditionsForUserRequest() {
216 return kUserRequestTriggerConditions; 239 return kUserRequestTriggerConditions;
217 } 240 }
218 241
219 void RequestCoordinator::GetOffliner() { 242 void RequestCoordinator::GetOffliner() {
220 if (!offliner_) { 243 if (!offliner_) {
221 offliner_ = factory_->GetOffliner(policy_.get()); 244 offliner_ = factory_->GetOffliner(policy_.get());
222 } 245 }
223 } 246 }
224 247
225 } // namespace offline_pages 248 } // namespace offline_pages
OLDNEW
« no previous file with comments | « no previous file | components/offline_pages/background/request_coordinator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698