| 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 : kernel_info_status(KERNEL_SHARE_INFO_INVALID) { | 70 : kernel_info_status(KERNEL_SHARE_INFO_INVALID) { |
| 71 } | 71 } |
| 72 | 72 |
| 73 Directory::SaveChangesSnapshot::~SaveChangesSnapshot() { | 73 Directory::SaveChangesSnapshot::~SaveChangesSnapshot() { |
| 74 STLDeleteElements(&dirty_metas); | 74 STLDeleteElements(&dirty_metas); |
| 75 STLDeleteElements(&delete_journals); | 75 STLDeleteElements(&delete_journals); |
| 76 } | 76 } |
| 77 | 77 |
| 78 Directory::Kernel::Kernel( | 78 Directory::Kernel::Kernel( |
| 79 const std::string& name, | 79 const std::string& name, |
| 80 const KernelLoadInfo& info, DirectoryChangeDelegate* delegate, | 80 const KernelLoadInfo& info, |
| 81 DirectoryChangeDelegate* delegate, |
| 81 const WeakHandle<TransactionObserver>& transaction_observer) | 82 const WeakHandle<TransactionObserver>& transaction_observer) |
| 82 : next_write_transaction_id(0), | 83 : next_write_transaction_id(0), |
| 83 name(name), | 84 name(name), |
| 84 info_status(Directory::KERNEL_SHARE_INFO_VALID), | 85 info_status(Directory::KERNEL_SHARE_INFO_VALID), |
| 85 persisted_info(info.kernel_info), | 86 persisted_info(info.kernel_info), |
| 86 cache_guid(info.cache_guid), | 87 cache_guid(info.cache_guid), |
| 87 next_metahandle(info.max_metahandle + 1), | 88 next_metahandle(info.max_metahandle + 1), |
| 88 delegate(delegate), | 89 delegate(delegate), |
| 89 transaction_observer(transaction_observer) { | 90 transaction_observer(transaction_observer) { |
| 90 DCHECK(delegate); | 91 DCHECK(delegate); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 DirectoryChangeDelegate* delegate, | 172 DirectoryChangeDelegate* delegate, |
| 172 const WeakHandle<TransactionObserver>& | 173 const WeakHandle<TransactionObserver>& |
| 173 transaction_observer) { | 174 transaction_observer) { |
| 174 KernelLoadInfo info; | 175 KernelLoadInfo info; |
| 175 // Temporary indices before kernel_ initialized in case Load fails. We 0(1) | 176 // Temporary indices before kernel_ initialized in case Load fails. We 0(1) |
| 176 // swap these later. | 177 // swap these later. |
| 177 Directory::MetahandlesMap tmp_handles_map; | 178 Directory::MetahandlesMap tmp_handles_map; |
| 178 | 179 |
| 179 // Avoids mem leaks on failure. Harmlessly deletes the empty hash map after | 180 // Avoids mem leaks on failure. Harmlessly deletes the empty hash map after |
| 180 // the swap in the success case. | 181 // the swap in the success case. |
| 181 STLValueDeleter<Directory::MetahandlesMap> deleter(&tmp_handles_map); | 182 STLValueDeleter<MetahandlesMap> deleter(&tmp_handles_map); |
| 182 | 183 |
| 183 JournalIndex delete_journals; | 184 JournalIndex delete_journals; |
| 185 MetahandleSet metahandles_to_purge; |
| 184 | 186 |
| 185 DirOpenResult result = | 187 DirOpenResult result = store_->Load(&tmp_handles_map, &delete_journals, |
| 186 store_->Load(&tmp_handles_map, &delete_journals, &info); | 188 &metahandles_to_purge, &info); |
| 187 if (OPENED != result) | 189 if (OPENED != result) |
| 188 return result; | 190 return result; |
| 189 | 191 |
| 190 kernel_ = new Kernel(name, info, delegate, transaction_observer); | 192 kernel_ = new Kernel(name, info, delegate, transaction_observer); |
| 191 delete_journal_.reset(new DeleteJournal(&delete_journals)); | 193 delete_journal_.reset(new DeleteJournal(&delete_journals)); |
| 192 InitializeIndices(&tmp_handles_map); | 194 InitializeIndices(&tmp_handles_map); |
| 193 | 195 |
| 194 // Write back the share info to reserve some space in 'next_id'. This will | 196 // Write back the share info to reserve some space in 'next_id'. This will |
| 195 // prevent local ID reuse in the case of an early crash. See the comments in | 197 // prevent local ID reuse in the case of an early crash. See the comments in |
| 196 // TakeSnapshotForSaveChanges() or crbug.com/142987 for more information. | 198 // TakeSnapshotForSaveChanges() or crbug.com/142987 for more information. |
| 197 kernel_->info_status = KERNEL_SHARE_INFO_DIRTY; | 199 kernel_->info_status = KERNEL_SHARE_INFO_DIRTY; |
| 200 |
| 201 kernel_->metahandles_to_purge.swap(metahandles_to_purge); |
| 198 if (!SaveChanges()) | 202 if (!SaveChanges()) |
| 199 return FAILED_INITIAL_WRITE; | 203 return FAILED_INITIAL_WRITE; |
| 200 | 204 |
| 201 return OPENED; | 205 return OPENED; |
| 202 } | 206 } |
| 203 | 207 |
| 204 DeleteJournal* Directory::delete_journal() { | 208 DeleteJournal* Directory::delete_journal() { |
| 205 DCHECK(delete_journal_.get()); | 209 DCHECK(delete_journal_.get()); |
| 206 return delete_journal_.get(); | 210 return delete_journal_.get(); |
| 207 } | 211 } |
| (...skipping 1337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1545 // TODO(maniscalco): Eliminate redundant metadata storage (bug 415203). | 1549 // TODO(maniscalco): Eliminate redundant metadata storage (bug 415203). |
| 1546 std::set_difference(not_on_server_id_set.begin(), | 1550 std::set_difference(not_on_server_id_set.begin(), |
| 1547 not_on_server_id_set.end(), | 1551 not_on_server_id_set.end(), |
| 1548 on_server_id_set.begin(), | 1552 on_server_id_set.begin(), |
| 1549 on_server_id_set.end(), | 1553 on_server_id_set.end(), |
| 1550 std::inserter(*id_set, id_set->end())); | 1554 std::inserter(*id_set, id_set->end())); |
| 1551 } | 1555 } |
| 1552 | 1556 |
| 1553 } // namespace syncable | 1557 } // namespace syncable |
| 1554 } // namespace syncer | 1558 } // namespace syncer |
| OLD | NEW |