Commit d9c7c2f
committed
Merge bitcoin/bitcoin#24914: wallet: Load database records in a particular order
3c83b1d doc: Add release note for wallet loading changes (Andrew Chow)
2636844 walletdb: Remove loading code where the database is iterated (Andrew Chow)
cd211b3 walletdb: refactor decryption key loading (Andrew Chow)
31c033e walletdb: refactor defaultkey and wkey loading (Andrew Chow)
c978c6d walletdb: refactor active spkm loading (Andrew Chow)
6fabb7f walletdb: refactor tx loading (Andrew Chow)
abcc13d walletdb: refactor address book loading (Andrew Chow)
405b4d9 walletdb: Refactor descriptor wallet records loading (Andrew Chow)
30ab11c walletdb: Refactor legacy wallet record loading into its own function (Andrew Chow)
9e077d9 salvage: Remove use of ReadKeyValue in salvage (Andrew Chow)
ad779e9 walletdb: Refactor hd chain loading to its own function (Andrew Chow)
72c2a54 walletdb: Refactor encryption key loading to its own function (Andrew Chow)
3ccde45 walletdb: Refactor crypted key loading to its own function (Andrew Chow)
7be10ad walletdb: Refactor key reading and loading to its own function (Andrew Chow)
52932c5 walletdb: Refactor wallet flags loading (Andrew Chow)
01b35b5 walletdb: Refactor minversion loading (Andrew Chow)
Pull request description:
Currently when we load a wallet, we just iterate through all of the records in the database and add them completely statelessly. However we have some records which do rely on other records being loaded before they are. To deal with this, we use `CWalletScanState` to hold things temporarily until all of the records have been read and then we load the stateful things.
However this can be slow, and with some future improvements, can cause some pretty drastic slowdowns to retain this pattern. So this PR changes the way we load records by choosing to load the records in a particular order. This lets us do things such as loading a descriptor record, then finding and loading that descriptor's cache and key records. In the future, this will also let us use `IsMine` when loading transactions as then `IsMine` will actually be working as we now always load keys and descriptors before transactions.
In order to get records of a specific type, this PR includes some refactors to how we do database cursors. Functionality is also added to retrieve a cursor that will give us records beginning with a specified prefix.
Lastly, one thing that iterating the entire database let us do was to find unknown records. However even if unknown records were found, we would not do anything with this information except output a number in a log line. With this PR, we would no longer be aware of any unknown records. This does not change functionality as we don't do anything with unknown records, and having unknown records is not an error. Now we would just not be aware that unknown records even exist.
ACKs for top commit:
MarcoFalke:
re-ACK 3c83b1d 🍤
furszy:
reACK 3c83b1d
ryanofsky:
Code review ACK 3c83b1d. Just Marco's suggested error handling fixes since last review
Tree-SHA512: 15fa56332fb2ce4371db468a0c674ee7a3a8889c8cee9f428d06a7d1385d17a9bf54bcb0ba885c87736841fe6a5c934594bcf4476a473616510ee47862ef30b4File tree
5 files changed
+809
-568
lines changed- doc
- src/wallet
5 files changed
+809
-568
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | 21 | | |
27 | 22 | | |
28 | 23 | | |
| |||
186 | 181 | | |
187 | 182 | | |
188 | 183 | | |
189 | | - | |
| 184 | + | |
190 | 185 | | |
191 | | - | |
192 | | - | |
193 | | - | |
194 | | - | |
195 | | - | |
196 | | - | |
197 | | - | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
198 | 199 | | |
199 | 200 | | |
| 201 | + | |
200 | 202 | | |
201 | 203 | | |
202 | 204 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2929 | 2929 | | |
2930 | 2930 | | |
2931 | 2931 | | |
2932 | | - | |
| 2932 | + | |
2933 | 2933 | | |
2934 | 2934 | | |
2935 | 2935 | | |
| |||
0 commit comments