Browse Source

v1.18: patches bug in chained Merkle root update (backport of #1689) (#1692)

patches bug in chained Merkle root update (#1689)

Option::ok_or_else always maps None to Err which is not what was intended in
this code.

(cherry picked from commit e804bcce291e517442515f12e2b47298e8b6f4c1)

Co-authored-by: behzad nouri <behzadnouri@gmail.com>
mergify[bot] 1 year ago
parent
commit
cb502b45a9
1 changed files with 11 additions and 11 deletions
  1. 11 11
      turbine/src/broadcast_stage/standard_broadcast_run.rs

+ 11 - 11
turbine/src/broadcast_stage/standard_broadcast_run.rs

@@ -243,20 +243,20 @@ impl StandardBroadcastRun {
                 return Err(Error::DuplicateSlotBroadcast(bank.slot()));
             }
             // Reinitialize state for this slot.
-            let chained_merkle_root = (self.slot == bank.parent_slot())
-                .then_some(self.chained_merkle_root)
-                .ok_or_else(|| {
-                    broadcast_utils::get_chained_merkle_root_from_parent(
-                        bank.slot(),
-                        bank.parent_slot(),
-                        blockstore,
-                    )
-                })
-                .unwrap_or_else(|err| {
+            let chained_merkle_root = if self.slot == bank.parent_slot() {
+                self.chained_merkle_root
+            } else {
+                broadcast_utils::get_chained_merkle_root_from_parent(
+                    bank.slot(),
+                    bank.parent_slot(),
+                    blockstore,
+                )
+                .unwrap_or_else(|err: Error| {
                     error!("Unknown chained Merkle root: {err:?}");
                     process_stats.err_unknown_chained_merkle_root += 1;
                     Hash::default()
-                });
+                })
+            };
             self.slot = bank.slot();
             self.parent = bank.parent_slot();
             self.chained_merkle_root = chained_merkle_root;