From 663fff71e0d7a97b74ef5d82588f039a71ce7b4b Mon Sep 17 00:00:00 2001 From: Steven Czabaniuk Date: Wed, 13 Dec 2023 10:05:02 -0600 Subject: [PATCH] blockstore: Allow fallback for AddressSignature index A change landed somewhat recently in master that changed the key format of the transaction metadata columns. A compatibility backport was introduced to allow a blockstore that had been populated with this newer version to still be readable by v1.17 (backwards software compat). However, there was an oversight in the backport. Namely, the index() function for AddressSignatures column did a regular unwrap() on the try_current_index() result. try_current_index() can fail if a key with an unknown size is encountered. This would be exactly the case for encountering a key that was populated by the newer software version with the different key format. So, use .unwrap_or_else() in the index() implementation for AddressSignatures; this will now be consistent with the implementation of index() for TransactionStatus column. --- ledger/src/blockstore_db.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ledger/src/blockstore_db.rs b/ledger/src/blockstore_db.rs index 6dd7f4dbe4c4f2..30cb4b2e9779a4 100644 --- a/ledger/src/blockstore_db.rs +++ b/ledger/src/blockstore_db.rs @@ -875,7 +875,8 @@ impl Column for columns::AddressSignatures { } fn index(key: &[u8]) -> (u64, Pubkey, Slot, Signature) { - ::try_current_index(key).unwrap() + ::try_current_index(key) + .unwrap_or_else(|_| Self::as_index(0)) } fn primary_index(index: Self::Index) -> u64 {