OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 #ifndef CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_TRANSACTION_H_ | 5 #ifndef CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_TRANSACTION_H_ |
6 #define CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_TRANSACTION_H_ | 6 #define CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_TRANSACTION_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 #include <set> | 10 #include <set> |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 static std::unique_ptr<DataIterator> Create( | 86 static std::unique_ptr<DataIterator> Create( |
87 LevelDBTransaction* transaction); | 87 LevelDBTransaction* transaction); |
88 ~DataIterator() override; | 88 ~DataIterator() override; |
89 bool IsValid() const override; | 89 bool IsValid() const override; |
90 leveldb::Status SeekToLast() override; | 90 leveldb::Status SeekToLast() override; |
91 leveldb::Status Seek(const base::StringPiece& slice) override; | 91 leveldb::Status Seek(const base::StringPiece& slice) override; |
92 leveldb::Status Next() override; | 92 leveldb::Status Next() override; |
93 leveldb::Status Prev() override; | 93 leveldb::Status Prev() override; |
94 base::StringPiece Key() const override; | 94 base::StringPiece Key() const override; |
95 base::StringPiece Value() const override; | 95 base::StringPiece Value() const override; |
| 96 |
96 bool IsDeleted() const; | 97 bool IsDeleted() const; |
97 | 98 |
98 // Mark the current record as deleted. | 99 // Mark the current record as deleted. |
99 void Delete(); | 100 void Delete(); |
100 | 101 |
101 private: | 102 private: |
102 explicit DataIterator(LevelDBTransaction* transaction); | 103 explicit DataIterator(LevelDBTransaction* transaction); |
103 DataType* data_; | 104 DataType* data_; |
104 DataType::iterator iterator_; | 105 DataType::iterator iterator_; |
105 | 106 |
(...skipping 10 matching lines...) Expand all Loading... |
116 static std::unique_ptr<TransactionIterator> Create( | 117 static std::unique_ptr<TransactionIterator> Create( |
117 scoped_refptr<LevelDBTransaction> transaction); | 118 scoped_refptr<LevelDBTransaction> transaction); |
118 | 119 |
119 bool IsValid() const override; | 120 bool IsValid() const override; |
120 leveldb::Status SeekToLast() override; | 121 leveldb::Status SeekToLast() override; |
121 leveldb::Status Seek(const base::StringPiece& target) override; | 122 leveldb::Status Seek(const base::StringPiece& target) override; |
122 leveldb::Status Next() override; | 123 leveldb::Status Next() override; |
123 leveldb::Status Prev() override; | 124 leveldb::Status Prev() override; |
124 base::StringPiece Key() const override; | 125 base::StringPiece Key() const override; |
125 base::StringPiece Value() const override; | 126 base::StringPiece Value() const override; |
| 127 void EvictWorkingMemory() override; |
| 128 |
126 void DataChanged(); | 129 void DataChanged(); |
127 | 130 |
128 // Mark the current record as deleted. If an existing record | 131 // Mark the current record as deleted. If an existing record |
129 // is present in the uncommitted data this will convert it to | 132 // is present in the uncommitted data this will convert it to |
130 // a deletion record, otherwise it will insert a new one. | 133 // a deletion record, otherwise it will insert a new one. |
131 void Delete(); | 134 void Delete(); |
132 | 135 |
133 private: | 136 private: |
134 enum Direction { FORWARD, REVERSE }; | 137 enum Direction { FORWARD, REVERSE }; |
135 | 138 |
136 explicit TransactionIterator(scoped_refptr<LevelDBTransaction> transaction); | 139 explicit TransactionIterator(scoped_refptr<LevelDBTransaction> transaction); |
137 void HandleConflictsAndDeletes(); | 140 void HandleConflictsAndDeletes(); |
138 void SetCurrentIteratorToSmallestKey(); | 141 void SetCurrentIteratorToSmallestKey(); |
139 void SetCurrentIteratorToLargestKey(); | 142 void SetCurrentIteratorToLargestKey(); |
140 void RefreshDataIterator() const; | 143 void RefreshDataIterator() const; |
141 bool DataIteratorIsLower() const; | 144 bool DataIteratorIsLower() const; |
142 bool DataIteratorIsHigher() const; | 145 bool DataIteratorIsHigher() const; |
143 | 146 |
| 147 void LoadDBIteratorIfEvicted(); |
| 148 |
144 scoped_refptr<LevelDBTransaction> transaction_; | 149 scoped_refptr<LevelDBTransaction> transaction_; |
145 const LevelDBComparator* comparator_; | 150 const LevelDBComparator* comparator_; |
146 mutable std::unique_ptr<DataIterator> data_iterator_; | 151 mutable std::unique_ptr<DataIterator> data_iterator_; |
147 std::unique_ptr<LevelDBIterator> db_iterator_; | 152 std::unique_ptr<LevelDBIterator> db_iterator_; |
148 LevelDBIterator* current_ = nullptr; | 153 LevelDBIterator* current_ = nullptr; |
149 | 154 |
| 155 bool is_evicted_ = false; |
| 156 std::string key_after_eviction_; |
| 157 |
150 Direction direction_ = FORWARD; | 158 Direction direction_ = FORWARD; |
151 mutable bool data_changed_ = false; | 159 mutable bool data_changed_ = false; |
152 | 160 |
153 DISALLOW_COPY_AND_ASSIGN(TransactionIterator); | 161 DISALLOW_COPY_AND_ASSIGN(TransactionIterator); |
154 }; | 162 }; |
155 | 163 |
156 void Set(const base::StringPiece& key, std::string* value, bool deleted); | 164 void Set(const base::StringPiece& key, std::string* value, bool deleted); |
157 void RegisterIterator(TransactionIterator* iterator); | 165 void RegisterIterator(TransactionIterator* iterator); |
158 void UnregisterIterator(TransactionIterator* iterator); | 166 void UnregisterIterator(TransactionIterator* iterator); |
159 void NotifyIterators(); | 167 void NotifyIterators(); |
(...skipping 29 matching lines...) Expand all Loading... |
189 LevelDBDatabase* db_; | 197 LevelDBDatabase* db_; |
190 std::unique_ptr<LevelDBWriteBatch> write_batch_; | 198 std::unique_ptr<LevelDBWriteBatch> write_batch_; |
191 bool finished_ = false; | 199 bool finished_ = false; |
192 | 200 |
193 DISALLOW_COPY_AND_ASSIGN(LevelDBDirectTransaction); | 201 DISALLOW_COPY_AND_ASSIGN(LevelDBDirectTransaction); |
194 }; | 202 }; |
195 | 203 |
196 } // namespace content | 204 } // namespace content |
197 | 205 |
198 #endif // CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_TRANSACTION_H_ | 206 #endif // CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_TRANSACTION_H_ |
OLD | NEW |