From 3317a4bb4de2e77d5a7fff2154552a81ec081763 Mon Sep 17 00:00:00 2001 From: Peter Goodspeed-Niklaus Date: Wed, 9 Jun 2021 13:19:11 +0200 Subject: [PATCH] REVERT ME: demo that Drop impl doesn't work --- .../src/benchmarking.rs | 2 +- .../election-provider-multi-phase/src/lib.rs | 1 - .../src/signed.rs | 30 +++++++++---------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/frame/election-provider-multi-phase/src/benchmarking.rs b/frame/election-provider-multi-phase/src/benchmarking.rs index 7988163e98f65..b3d5c82f8d2bb 100644 --- a/frame/election-provider-multi-phase/src/benchmarking.rs +++ b/frame/election-provider-multi-phase/src/benchmarking.rs @@ -282,7 +282,7 @@ frame_benchmarking::benchmarks! { let signed_submission = SignedSubmission { solution, ..Default::default() }; signed_submissions.insert(signed_submission); } - signed_submissions.put(); + drop(signed_submissions); let caller = frame_benchmarking::whitelisted_caller(); T::Currency::make_free_balance_be(&caller, T::Currency::minimum_balance() * 10u32.into()); diff --git a/frame/election-provider-multi-phase/src/lib.rs b/frame/election-provider-multi-phase/src/lib.rs index f07f77f812550..d45132d11b7a5 100644 --- a/frame/election-provider-multi-phase/src/lib.rs +++ b/frame/election-provider-multi-phase/src/lib.rs @@ -900,7 +900,6 @@ pub mod pallet { .map_err(|_| Error::::SignedCannotPayDeposit)?; } - signed_submissions.put(); Self::deposit_event(Event::SolutionStored(ElectionCompute::Signed, ejected_a_solution)); Ok(()) } diff --git a/frame/election-provider-multi-phase/src/signed.rs b/frame/election-provider-multi-phase/src/signed.rs index 386d119fa7817..1ee9b4b0b0c76 100644 --- a/frame/election-provider-multi-phase/src/signed.rs +++ b/frame/election-provider-multi-phase/src/signed.rs @@ -123,18 +123,6 @@ impl SignedSubmissions { } } - /// Put the signed submissions back into storage. - pub fn put(self) { - SignedSubmissionIndices::::put(self.indices); - SignedSubmissionNextIndex::::put(self.next_idx); - for key in self.deletion_overlay { - SignedSubmissionsMap::::remove(key); - } - for (key, value) in self.insertion_overlay { - SignedSubmissionsMap::::insert(key, value); - } - } - /// Get the submission at a particular index. fn map_get(&self, idx: u32) -> Option> { self.insertion_overlay @@ -166,7 +154,7 @@ impl SignedSubmissions { /// arbitrary order pub fn drain(&mut self) -> impl '_ + Iterator> { self.indices.clear(); - SignedSubmissionNextIndex::::kill(); + self.next_idx = 0; let insertion_overlay = sp_std::mem::take(&mut self.insertion_overlay); SignedSubmissionsMap::::drain() .filter(move |(k, _v)| !self.deletion_overlay.contains(k)) @@ -255,6 +243,20 @@ impl Deref for SignedSubmissions { } } +impl Drop for SignedSubmissions { + fn drop(&mut self) { + SignedSubmissionIndices::::put(sp_std::mem::take(&mut self.indices)); + SignedSubmissionNextIndex::::put(self.next_idx); + + for key in self.deletion_overlay.iter().copied() { + SignedSubmissionsMap::::remove(key); + } + for (key, value) in sp_std::mem::take(&mut self.insertion_overlay) { + SignedSubmissionsMap::::insert(key, value); + } + } +} + impl Pallet { /// `Self` accessor for `SignedSubmission`. pub fn signed_submissions() -> SignedSubmissions { @@ -321,8 +323,6 @@ impl Pallet { debug_assert!(_remaining.is_zero()); } - all_submissions.put(); - log!(debug, "closed signed phase, found solution? {}, discarded {}", found_solution, discarded); (found_solution, weight) }