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

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

Issue 2372043002: [Offline pages] Applying TaskQueue to RequestQueue::ChangeRequestsState (Closed)
Patch Set: Addressing feedback from dougarnett Created 4 years, 2 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
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_queue_store_sql.h" 5 #include "components/offline_pages/background/request_queue_store_sql.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); 128 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
129 statement.BindInt64(0, request_id); 129 statement.BindInt64(0, request_id);
130 if (!statement.Run()) 130 if (!statement.Run())
131 return RequestQueue::UpdateRequestResult::STORE_FAILURE; 131 return RequestQueue::UpdateRequestResult::STORE_FAILURE;
132 else if (db->GetLastChangeCount() == 0) 132 else if (db->GetLastChangeCount() == 0)
133 return RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST; 133 return RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
134 else 134 else
135 return RequestQueue::UpdateRequestResult::SUCCESS; 135 return RequestQueue::UpdateRequestResult::SUCCESS;
136 } 136 }
137 137
138 bool ChangeRequestState(sql::Connection* db,
139 const int64_t request_id,
140 const SavePageRequest::RequestState new_state) {
141 const char kSql[] = "UPDATE " REQUEST_QUEUE_TABLE_NAME
142 " SET state=?"
143 " WHERE request_id=?";
144 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
145 statement.BindInt64(0, static_cast<int64_t>(new_state));
146 statement.BindInt64(1, request_id);
147 return statement.Run();
148 }
149
150 // Helper function to delete requests corresponding to passed in requestIds, 138 // Helper function to delete requests corresponding to passed in requestIds,
151 // and fill an outparam with the removed requests. 139 // and fill an outparam with the removed requests.
152 bool DeleteRequestsByIds( 140 bool DeleteRequestsByIds(
153 sql::Connection* db, 141 sql::Connection* db,
154 const std::vector<int64_t>& request_ids, 142 const std::vector<int64_t>& request_ids,
155 RequestQueue::UpdateMultipleRequestResults& results, 143 RequestQueue::UpdateMultipleRequestResults& results,
156 std::vector<std::unique_ptr<SavePageRequest>>* requests) { 144 std::vector<std::unique_ptr<SavePageRequest>>* requests) {
157 // If you create a transaction but don't Commit() it is automatically 145 // If you create a transaction but don't Commit() it is automatically
158 // rolled back by its destructor when it falls out of scope. 146 // rolled back by its destructor when it falls out of scope.
159 sql::Transaction transaction(db); 147 sql::Transaction transaction(db);
(...skipping 15 matching lines...) Expand all
175 163
176 if (!transaction.Commit()) { 164 if (!transaction.Commit()) {
177 requests->clear(); 165 requests->clear();
178 BuildFailedResultList(request_ids, results); 166 BuildFailedResultList(request_ids, results);
179 return false; 167 return false;
180 } 168 }
181 169
182 return true; 170 return true;
183 } 171 }
184 172
185 bool ChangeRequestsState(
186 sql::Connection* db,
187 const std::vector<int64_t>& request_ids,
188 SavePageRequest::RequestState new_state,
189 RequestQueue::UpdateMultipleRequestResults& results,
190 std::vector<std::unique_ptr<SavePageRequest>>& requests) {
191 // If you create a transaction but don't Commit() it is automatically
192 // rolled back by its destructor when it falls out of scope.
193 sql::Transaction transaction(db);
194 if (!transaction.Begin()) {
195 BuildFailedResultList(request_ids, results);
196 return false;
197 }
198
199 // Update a request, then get it, and put the item we got on the output list.
200 for (const auto& request_id : request_ids) {
201 RequestQueue::UpdateRequestResult status;
202 if (!ChangeRequestState(db, request_id, new_state))
203 status = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
204 else
205 status = RequestQueue::UpdateRequestResult::SUCCESS;
206
207 // Make output request_id/status pair, and put a copy of the updated request
208 // on output list.
209 results.push_back(std::make_pair(request_id, status));
210 requests.push_back(GetOneRequest(db, request_id));
211 }
212
213 if (!transaction.Commit()) {
214 requests.clear();
215 BuildFailedResultList(request_ids, results);
216 return false;
217 }
218
219 return true;
220 }
221
222 ItemActionStatus Insert(sql::Connection* db, const SavePageRequest& request) { 173 ItemActionStatus Insert(sql::Connection* db, const SavePageRequest& request) {
223 const char kSql[] = 174 const char kSql[] =
224 "INSERT OR IGNORE INTO " REQUEST_QUEUE_TABLE_NAME 175 "INSERT OR IGNORE INTO " REQUEST_QUEUE_TABLE_NAME
225 " (request_id, creation_time, activation_time," 176 " (request_id, creation_time, activation_time,"
226 " last_attempt_time, started_attempt_count, completed_attempt_count," 177 " last_attempt_time, started_attempt_count, completed_attempt_count,"
227 " state, url, client_namespace, client_id)" 178 " state, url, client_namespace, client_id)"
228 " VALUES " 179 " VALUES "
229 " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 180 " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
230 181
231 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); 182 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 const std::vector<int64_t>& request_ids, 328 const std::vector<int64_t>& request_ids,
378 const RequestQueueStore::RemoveCallback& callback) { 329 const RequestQueueStore::RemoveCallback& callback) {
379 RequestQueue::UpdateMultipleRequestResults results; 330 RequestQueue::UpdateMultipleRequestResults results;
380 std::vector<std::unique_ptr<SavePageRequest>> requests; 331 std::vector<std::unique_ptr<SavePageRequest>> requests;
381 // TODO(fgorski): add UMA metrics here. 332 // TODO(fgorski): add UMA metrics here.
382 DeleteRequestsByIds(db, request_ids, results, &requests); 333 DeleteRequestsByIds(db, request_ids, results, &requests);
383 runner->PostTask(FROM_HERE, 334 runner->PostTask(FROM_HERE,
384 base::Bind(callback, results, base::Passed(&requests))); 335 base::Bind(callback, results, base::Passed(&requests)));
385 } 336 }
386 337
387 void ChangeRequestsStateSync(
388 sql::Connection* db,
389 scoped_refptr<base::SingleThreadTaskRunner> runner,
390 const std::vector<int64_t>& request_ids,
391 const SavePageRequest::RequestState new_state,
392 const RequestQueue::UpdateMultipleRequestsCallback& callback) {
393 RequestQueue::UpdateMultipleRequestResults results;
394 std::vector<std::unique_ptr<SavePageRequest>> requests;
395 // TODO(fgorski): add UMA metrics here.
396 offline_pages::ChangeRequestsState(db, request_ids, new_state, results,
397 requests);
398 runner->PostTask(FROM_HERE,
399 base::Bind(callback, results, base::Passed(&requests)));
400 }
401
402 void OpenConnectionSync(sql::Connection* db, 338 void OpenConnectionSync(sql::Connection* db,
403 scoped_refptr<base::SingleThreadTaskRunner> runner, 339 scoped_refptr<base::SingleThreadTaskRunner> runner,
404 const base::FilePath& path, 340 const base::FilePath& path,
405 const base::Callback<void(bool)>& callback) { 341 const base::Callback<void(bool)>& callback) {
406 bool success = InitDatabase(db, path); 342 bool success = InitDatabase(db, path);
407 runner->PostTask(FROM_HERE, base::Bind(callback, success)); 343 runner->PostTask(FROM_HERE, base::Bind(callback, success));
408 } 344 }
409 345
410 void ResetSync(sql::Connection* db, 346 void ResetSync(sql::Connection* db,
411 const base::FilePath& db_file_path, 347 const base::FilePath& db_file_path,
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 base::Passed(std::vector<std::unique_ptr<SavePageRequest>>())))) { 434 base::Passed(std::vector<std::unique_ptr<SavePageRequest>>())))) {
499 return; 435 return;
500 } 436 }
501 437
502 background_task_runner_->PostTask( 438 background_task_runner_->PostTask(
503 FROM_HERE, 439 FROM_HERE,
504 base::Bind(&RemoveRequestsSync, db_.get(), 440 base::Bind(&RemoveRequestsSync, db_.get(),
505 base::ThreadTaskRunnerHandle::Get(), request_ids, callback)); 441 base::ThreadTaskRunnerHandle::Get(), request_ids, callback));
506 } 442 }
507 443
508 void RequestQueueStoreSQL::ChangeRequestsState(
509 const std::vector<int64_t>& request_ids,
510 const SavePageRequest::RequestState new_state,
511 const UpdateMultipleRequestsCallback& callback) {
512 RequestQueue::UpdateMultipleRequestResults results;
513 std::vector<std::unique_ptr<SavePageRequest>> requests;
514 if (!CheckDb(base::Bind(callback, results, base::Passed(&requests)))) {
515 return;
516 }
517
518 background_task_runner_->PostTask(
519 FROM_HERE, base::Bind(&ChangeRequestsStateSync, db_.get(),
520 base::ThreadTaskRunnerHandle::Get(), request_ids,
521 new_state, callback));
522 }
523
524 void RequestQueueStoreSQL::Reset(const ResetCallback& callback) { 444 void RequestQueueStoreSQL::Reset(const ResetCallback& callback) {
525 DCHECK(db_.get()); 445 DCHECK(db_.get());
526 if (!CheckDb(base::Bind(callback, false))) 446 if (!CheckDb(base::Bind(callback, false)))
527 return; 447 return;
528 448
529 background_task_runner_->PostTask( 449 background_task_runner_->PostTask(
530 FROM_HERE, 450 FROM_HERE,
531 base::Bind(&ResetSync, db_.get(), db_file_path_, 451 base::Bind(&ResetSync, db_.get(), db_file_path_,
532 base::ThreadTaskRunnerHandle::Get(), 452 base::ThreadTaskRunnerHandle::Get(),
533 base::Bind(&RequestQueueStoreSQL::OnResetDone, 453 base::Bind(&RequestQueueStoreSQL::OnResetDone,
(...skipping 20 matching lines...) Expand all
554 } 474 }
555 475
556 void RequestQueueStoreSQL::OnResetDone(const ResetCallback& callback, 476 void RequestQueueStoreSQL::OnResetDone(const ResetCallback& callback,
557 bool success) { 477 bool success) {
558 // Complete connection initialization post reset. 478 // Complete connection initialization post reset.
559 OnOpenConnectionDone(success); 479 OnOpenConnectionDone(success);
560 callback.Run(success); 480 callback.Run(success);
561 } 481 }
562 482
563 } // namespace offline_pages 483 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698