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

Side by Side Diff: components/sync/syncable/syncable_delete_journal.cc

Issue 2292393004: Remove stl_util from sync. (Closed)
Patch Set: rebase Created 4 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
OLDNEW
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 "components/sync/syncable/syncable_delete_journal.h" 5 #include "components/sync/syncable/syncable_delete_journal.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/stl_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "components/sync/base/model_type.h" 11 #include "components/sync/base/model_type.h"
12 12
13 namespace syncer { 13 namespace syncer {
14 namespace syncable { 14 namespace syncable {
15 15
16 DeleteJournal::DeleteJournal(JournalIndex* initial_journal) { 16 DeleteJournal::DeleteJournal(std::unique_ptr<JournalIndex> initial_journal) {
17 CHECK(initial_journal); 17 CHECK(initial_journal);
18 delete_journals_.swap(*initial_journal); 18 delete_journals_.swap(*initial_journal);
19 } 19 }
20 20
21 DeleteJournal::~DeleteJournal() { 21 DeleteJournal::~DeleteJournal() {}
22 base::STLDeleteElements(&delete_journals_);
23 }
24 22
25 size_t DeleteJournal::GetDeleteJournalSize(BaseTransaction* trans) const { 23 size_t DeleteJournal::GetDeleteJournalSize(BaseTransaction* trans) const {
26 DCHECK(trans); 24 DCHECK(trans);
27 return delete_journals_.size(); 25 return delete_journals_.size();
28 } 26 }
29 27
30 void DeleteJournal::UpdateDeleteJournalForServerDelete( 28 void DeleteJournal::UpdateDeleteJournalForServerDelete(
31 BaseTransaction* trans, 29 BaseTransaction* trans,
32 bool was_deleted, 30 bool was_deleted,
33 const EntryKernel& entry) { 31 const EntryKernel& entry) {
34 DCHECK(trans); 32 DCHECK(trans);
35 33
36 // Should be sufficient to check server type only but check for local 34 // Should be sufficient to check server type only but check for local
37 // type too because of incomplete test setup. 35 // type too because of incomplete test setup.
38 if (!(IsDeleteJournalEnabled(entry.GetServerModelType()) || 36 if (!(IsDeleteJournalEnabled(entry.GetServerModelType()) ||
39 IsDeleteJournalEnabled( 37 IsDeleteJournalEnabled(
40 GetModelTypeFromSpecifics(entry.ref(SPECIFICS))))) { 38 GetModelTypeFromSpecifics(entry.ref(SPECIFICS))))) {
41 return; 39 return;
42 } 40 }
43 41
44 JournalIndex::iterator it = delete_journals_.find(&entry); 42 JournalIndex::iterator it = delete_journals_.find(&entry);
45 43
46 if (entry.ref(SERVER_IS_DEL)) { 44 if (entry.ref(SERVER_IS_DEL)) {
47 if (it == delete_journals_.end()) { 45 if (it == delete_journals_.end()) {
48 // New delete. 46 // New delete.
49 EntryKernel* t = new EntryKernel(entry); 47 std::unique_ptr<EntryKernel> t_ptr = base::MakeUnique<EntryKernel>(entry);
50 delete_journals_.insert(t); 48 EntryKernel* t = t_ptr.get();
51 delete_journals_to_purge_.erase(t->ref(META_HANDLE)); 49 delete_journals_to_purge_.erase(t->ref(META_HANDLE));
50 delete_journals_[t] = std::move(t_ptr);
52 } 51 }
53 } else { 52 } else {
54 // Undelete. This could happen in two cases: 53 // Undelete. This could happen in two cases:
55 // * An entry was deleted then undeleted, i.e. server delete was 54 // * An entry was deleted then undeleted, i.e. server delete was
56 // overwritten because of entry has unsynced data locally. 55 // overwritten because of entry has unsynced data locally.
57 // * A data type was broken, i.e. encountered unrecoverable error, in last 56 // * A data type was broken, i.e. encountered unrecoverable error, in last
58 // sync session and all its entries were duplicated in delete journals. 57 // sync session and all its entries were duplicated in delete journals.
59 // On restart, entries are recreated from downloads and recreation calls 58 // On restart, entries are recreated from downloads and recreation calls
60 // UpdateDeleteJournals() to remove live entries from delete journals, 59 // UpdateDeleteJournals() to remove live entries from delete journals,
61 // thus only deleted entries remain in journals. 60 // thus only deleted entries remain in journals.
62 if (it != delete_journals_.end()) { 61 if (it != delete_journals_.end()) {
63 delete_journals_to_purge_.insert((*it)->ref(META_HANDLE)); 62 delete_journals_to_purge_.insert((*it).first->ref(META_HANDLE));
64 delete *it;
65 delete_journals_.erase(it); 63 delete_journals_.erase(it);
66 } else if (was_deleted) { 64 } else if (was_deleted) {
67 delete_journals_to_purge_.insert(entry.ref(META_HANDLE)); 65 delete_journals_to_purge_.insert(entry.ref(META_HANDLE));
68 } 66 }
69 } 67 }
70 } 68 }
71 69
72 void DeleteJournal::GetDeleteJournals(BaseTransaction* trans, 70 void DeleteJournal::GetDeleteJournals(BaseTransaction* trans,
73 ModelType type, 71 ModelType type,
74 EntryKernelSet* deleted_entries) { 72 EntryKernelSet* deleted_entries) {
75 DCHECK(trans); 73 DCHECK(trans);
76 for (JournalIndex::const_iterator it = delete_journals_.begin(); 74 for (auto it = delete_journals_.begin(); it != delete_journals_.end(); ++it) {
77 it != delete_journals_.end(); ++it) { 75 if ((*it).first->GetServerModelType() == type ||
78 if ((*it)->GetServerModelType() == type || 76 GetModelTypeFromSpecifics((*it).first->ref(SPECIFICS)) == type) {
79 GetModelTypeFromSpecifics((*it)->ref(SPECIFICS)) == type) { 77 deleted_entries->insert((*it).first);
80 deleted_entries->insert(*it);
81 } 78 }
82 } 79 }
83 passive_delete_journal_types_.Put(type); 80 passive_delete_journal_types_.Put(type);
84 } 81 }
85 82
86 void DeleteJournal::PurgeDeleteJournals(BaseTransaction* trans, 83 void DeleteJournal::PurgeDeleteJournals(BaseTransaction* trans,
87 const MetahandleSet& to_purge) { 84 const MetahandleSet& to_purge) {
88 DCHECK(trans); 85 DCHECK(trans);
89 JournalIndex::iterator it = delete_journals_.begin(); 86 auto it = delete_journals_.begin();
90 while (it != delete_journals_.end()) { 87 while (it != delete_journals_.end()) {
91 int64_t handle = (*it)->ref(META_HANDLE); 88 int64_t handle = (*it).first->ref(META_HANDLE);
92 if (to_purge.count(handle)) { 89 if (to_purge.count(handle)) {
93 delete *it;
94 delete_journals_.erase(it++); 90 delete_journals_.erase(it++);
95 } else { 91 } else {
96 ++it; 92 ++it;
97 } 93 }
98 } 94 }
99 delete_journals_to_purge_.insert(to_purge.begin(), to_purge.end()); 95 delete_journals_to_purge_.insert(to_purge.begin(), to_purge.end());
100 } 96 }
101 97
102 void DeleteJournal::TakeSnapshotAndClear(BaseTransaction* trans, 98 void DeleteJournal::TakeSnapshotAndClear(BaseTransaction* trans,
103 EntryKernelSet* journal_entries, 99 OwnedEntryKernelSet* journal_entries,
104 MetahandleSet* journals_to_purge) { 100 MetahandleSet* journals_to_purge) {
105 DCHECK(trans); 101 DCHECK(trans);
106 // Move passive delete journals to snapshot. Will copy back if snapshot fails 102 // Move passive delete journals to snapshot. Will copy back if snapshot fails
107 // to save. 103 // to save.
108 JournalIndex::iterator it = delete_journals_.begin(); 104 auto it = delete_journals_.begin();
109 while (it != delete_journals_.end()) { 105 while (it != delete_journals_.end()) {
110 if (passive_delete_journal_types_.Has((*it)->GetServerModelType()) || 106 if (passive_delete_journal_types_.Has((*it).first->GetServerModelType()) ||
111 passive_delete_journal_types_.Has( 107 passive_delete_journal_types_.Has(
112 GetModelTypeFromSpecifics((*it)->ref(SPECIFICS)))) { 108 GetModelTypeFromSpecifics((*it).first->ref(SPECIFICS)))) {
113 journal_entries->insert(*it); 109 journal_entries->insert(std::move((*it).second));
114 delete_journals_.erase(it++); 110 delete_journals_.erase(it++);
115 } else { 111 } else {
116 ++it; 112 ++it;
117 } 113 }
118 } 114 }
119 *journals_to_purge = delete_journals_to_purge_; 115 *journals_to_purge = delete_journals_to_purge_;
120 delete_journals_to_purge_.clear(); 116 delete_journals_to_purge_.clear();
121 } 117 }
122 118
123 void DeleteJournal::AddJournalBatch(BaseTransaction* trans, 119 void DeleteJournal::AddJournalBatch(BaseTransaction* trans,
124 const EntryKernelSet& entries) { 120 const OwnedEntryKernelSet& entries) {
125 DCHECK(trans); 121 DCHECK(trans);
126 EntryKernel needle; 122 EntryKernel needle;
127 for (EntryKernelSet::const_iterator i = entries.begin(); i != entries.end(); 123 for (auto& entry : entries) {
128 ++i) { 124 needle.put(ID, entry->ref(ID));
129 needle.put(ID, (*i)->ref(ID));
130 if (delete_journals_.find(&needle) == delete_journals_.end()) { 125 if (delete_journals_.find(&needle) == delete_journals_.end()) {
131 delete_journals_.insert(new EntryKernel(**i)); 126 std::unique_ptr<EntryKernel> t_ptr =
127 base::MakeUnique<EntryKernel>(*entry);
128 EntryKernel* t = t_ptr.get();
129 delete_journals_[t] = std::move(t_ptr);
132 } 130 }
133 delete_journals_to_purge_.erase((*i)->ref(META_HANDLE)); 131 delete_journals_to_purge_.erase(entry->ref(META_HANDLE));
134 } 132 }
135 } 133 }
136 134
137 /* static */ 135 /* static */
138 bool DeleteJournal::IsDeleteJournalEnabled(ModelType type) { 136 bool DeleteJournal::IsDeleteJournalEnabled(ModelType type) {
139 switch (type) { 137 switch (type) {
140 case BOOKMARKS: 138 case BOOKMARKS:
141 return true; 139 return true;
142 default: 140 default:
143 return false; 141 return false;
144 } 142 }
145 } 143 }
146 144
147 } // namespace syncable 145 } // namespace syncable
148 } // namespace syncer 146 } // namespace syncer
OLDNEW
« components/sync/syncable/directory.cc ('K') | « components/sync/syncable/syncable_delete_journal.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698