| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "sync/syncable/directory.h" | 5 #include "sync/syncable/directory.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 | 9 |
| 10 #include "base/base64.h" | 10 #include "base/base64.h" |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 | 104 |
| 105 Directory::Directory( | 105 Directory::Directory( |
| 106 DirectoryBackingStore* store, | 106 DirectoryBackingStore* store, |
| 107 UnrecoverableErrorHandler* unrecoverable_error_handler, | 107 UnrecoverableErrorHandler* unrecoverable_error_handler, |
| 108 ReportUnrecoverableErrorFunction report_unrecoverable_error_function, | 108 ReportUnrecoverableErrorFunction report_unrecoverable_error_function, |
| 109 NigoriHandler* nigori_handler, | 109 NigoriHandler* nigori_handler, |
| 110 Cryptographer* cryptographer) | 110 Cryptographer* cryptographer) |
| 111 : kernel_(NULL), | 111 : kernel_(NULL), |
| 112 store_(store), | 112 store_(store), |
| 113 unrecoverable_error_handler_(unrecoverable_error_handler), | 113 unrecoverable_error_handler_(unrecoverable_error_handler), |
| 114 report_unrecoverable_error_function_(report_unrecoverable_error_function), | 114 report_unrecoverable_error_function_( |
| 115 report_unrecoverable_error_function), |
| 115 unrecoverable_error_set_(false), | 116 unrecoverable_error_set_(false), |
| 116 nigori_handler_(nigori_handler), | 117 nigori_handler_(nigori_handler), |
| 117 cryptographer_(cryptographer), | 118 cryptographer_(cryptographer), |
| 118 invariant_check_level_(VERIFY_CHANGES), | 119 invariant_check_level_(VERIFY_CHANGES) { |
| 119 weak_ptr_factory_(this) { | |
| 120 } | 120 } |
| 121 | 121 |
| 122 Directory::~Directory() { | 122 Directory::~Directory() { |
| 123 Close(); | 123 Close(); |
| 124 } | 124 } |
| 125 | 125 |
| 126 DirOpenResult Directory::Open( | 126 DirOpenResult Directory::Open( |
| 127 const string& name, | 127 const string& name, |
| 128 DirectoryChangeDelegate* delegate, | 128 DirectoryChangeDelegate* delegate, |
| 129 const WeakHandle<TransactionObserver>& transaction_observer) { | 129 const WeakHandle<TransactionObserver>& transaction_observer) { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 | 201 |
| 202 // Write back the share info to reserve some space in 'next_id'. This will | 202 // Write back the share info to reserve some space in 'next_id'. This will |
| 203 // prevent local ID reuse in the case of an early crash. See the comments in | 203 // prevent local ID reuse in the case of an early crash. See the comments in |
| 204 // TakeSnapshotForSaveChanges() or crbug.com/142987 for more information. | 204 // TakeSnapshotForSaveChanges() or crbug.com/142987 for more information. |
| 205 kernel_->info_status = KERNEL_SHARE_INFO_DIRTY; | 205 kernel_->info_status = KERNEL_SHARE_INFO_DIRTY; |
| 206 | 206 |
| 207 kernel_->metahandles_to_purge.swap(metahandles_to_purge); | 207 kernel_->metahandles_to_purge.swap(metahandles_to_purge); |
| 208 if (!SaveChanges()) | 208 if (!SaveChanges()) |
| 209 return FAILED_INITIAL_WRITE; | 209 return FAILED_INITIAL_WRITE; |
| 210 | 210 |
| 211 // Now that we've successfully opened the store, install an error handler to | |
| 212 // deal with catastrophic errors that may occur later on. Use a weak pointer | |
| 213 // because we cannot guarantee that this Directory will outlive the Closure. | |
| 214 store_->SetCatastrophicErrorHandler(base::Bind( | |
| 215 &Directory::OnCatastrophicError, weak_ptr_factory_.GetWeakPtr())); | |
| 216 | |
| 217 return OPENED; | 211 return OPENED; |
| 218 } | 212 } |
| 219 | 213 |
| 220 DeleteJournal* Directory::delete_journal() { | 214 DeleteJournal* Directory::delete_journal() { |
| 221 DCHECK(delete_journal_.get()); | 215 DCHECK(delete_journal_.get()); |
| 222 return delete_journal_.get(); | 216 return delete_journal_.get(); |
| 223 } | 217 } |
| 224 | 218 |
| 225 void Directory::Close() { | 219 void Directory::Close() { |
| 226 store_.reset(); | 220 store_.reset(); |
| (...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1553 // server. To avoid re-uploading the same attachment mulitple times, we | 1547 // server. To avoid re-uploading the same attachment mulitple times, we |
| 1554 // remove any ids known to be on the server from the id_set we are about to | 1548 // remove any ids known to be on the server from the id_set we are about to |
| 1555 // return. | 1549 // return. |
| 1556 // | 1550 // |
| 1557 // TODO(maniscalco): Eliminate redundant metadata storage (bug 415203). | 1551 // TODO(maniscalco): Eliminate redundant metadata storage (bug 415203). |
| 1558 std::set_difference(not_on_server_id_set.begin(), not_on_server_id_set.end(), | 1552 std::set_difference(not_on_server_id_set.begin(), not_on_server_id_set.end(), |
| 1559 on_server_id_set.begin(), on_server_id_set.end(), | 1553 on_server_id_set.begin(), on_server_id_set.end(), |
| 1560 std::back_inserter(*ids)); | 1554 std::back_inserter(*ids)); |
| 1561 } | 1555 } |
| 1562 | 1556 |
| 1563 void Directory::OnCatastrophicError() { | |
| 1564 ReadTransaction trans(FROM_HERE, this); | |
| 1565 OnUnrecoverableError(&trans, FROM_HERE, | |
| 1566 "Catastrophic error detected, Sync DB is unrecoverable"); | |
| 1567 } | |
| 1568 | |
| 1569 Directory::Kernel* Directory::kernel() { | 1557 Directory::Kernel* Directory::kernel() { |
| 1570 return kernel_; | 1558 return kernel_; |
| 1571 } | 1559 } |
| 1572 | 1560 |
| 1573 const Directory::Kernel* Directory::kernel() const { | 1561 const Directory::Kernel* Directory::kernel() const { |
| 1574 return kernel_; | 1562 return kernel_; |
| 1575 } | 1563 } |
| 1576 | 1564 |
| 1577 } // namespace syncable | 1565 } // namespace syncable |
| 1578 } // namespace syncer | 1566 } // namespace syncer |
| OLD | NEW |