git.delta.rocks / unique-network / refs/commits / f1b93a303bb5

difftreelog

fix clear lookup when needed -- fix canceling

Daniel Shiposha2022-10-20parent: #c4fa1ae.patch.diff
in: master

1 file changed

modifiedpallets/scheduler-v2/src/lib.rsdiffbeforeafterboth
863 is_first: bool,863 is_first: bool,
864 mut task: ScheduledOf<T>,864 mut task: ScheduledOf<T>,
865 ) -> Result<(), (ServiceTaskError, Option<ScheduledOf<T>>)> {865 ) -> Result<(), (ServiceTaskError, Option<ScheduledOf<T>>)> {
866 if let Some(ref id) = task.maybe_id {
867 Lookup::<T>::remove(id);
868 }
869
870 let (call, lookup_len) = match T::Preimages::peek(&task.call) {866 let (call, lookup_len) = match T::Preimages::peek(&task.call) {
871 Ok(c) => c,867 Ok(c) => c,
872 Err(_) => return Err((Unavailable, Some(task))),868 Err(_) => {
869 if let Some(ref id) = task.maybe_id {
870 Lookup::<T>::remove(id);
871 }
872
873 return Err((Unavailable, Some(task)));
874 },
873 };875 };
874876
875 weight.check_accrue(T::WeightInfo::service_task(877 weight.check_accrue(T::WeightInfo::service_task(
882 Err(Unavailable) => {884 Err(Unavailable) => {
883 debug_assert!(false, "Checked to exist with `peek`");885 debug_assert!(false, "Checked to exist with `peek`");
886
887 if let Some(ref id) = task.maybe_id {
888 Lookup::<T>::remove(id);
889 }
890
884 Self::deposit_event(Event::CallUnavailable {891 Self::deposit_event(Event::CallUnavailable {
885 task: (when, agenda_index),892 task: (when, agenda_index),
890 Err(Overweight) if is_first => {897 Err(Overweight) if is_first => {
891 T::Preimages::drop(&task.call);898 T::Preimages::drop(&task.call);
899
900 if let Some(ref id) = task.maybe_id {
901 Lookup::<T>::remove(id);
902 }
903
892 Self::deposit_event(Event::PermanentlyOverweight {904 Self::deposit_event(Event::PermanentlyOverweight {
893 task: (when, agenda_index),905 task: (when, agenda_index),
894 id: task.maybe_id,906 id: task.maybe_id,
895 });907 });
896 Err((Unavailable, Some(task)))908 Err((Unavailable, Some(task)))
897 }909 }
898 Err(Overweight) => Err((Overweight, Some(task))),910 Err(Overweight) => {
911 // Preserve Lookup -- the task will be postponed.
912 Err((Overweight, Some(task)))
913 },
899 Ok(result) => {914 Ok(result) => {
900 Self::deposit_event(Event::Dispatched {915 Self::deposit_event(Event::Dispatched {
901 task: (when, agenda_index),916 task: (when, agenda_index),
902 id: task.maybe_id,917 id: task.maybe_id,
903 result,918 result,
904 });919 });
920
921 let is_canceled = task.maybe_id.as_ref()
922 .map(|id| !Lookup::<T>::contains_key(id))
923 .unwrap_or(false);
924
925 match &task.maybe_periodic {
905 if let &Some((period, count)) = &task.maybe_periodic {926 &Some((period, count)) if !is_canceled => {
906 if count > 1 {927 if count > 1 {
907 task.maybe_periodic = Some((period, count - 1));928 task.maybe_periodic = Some((period, count - 1));
908 } else {929 } else {
921 });942 });
922 }943 }
923 }944 }
924 } else {945 },
946 _ => {
947 if let Some(ref id) = task.maybe_id {
948 Lookup::<T>::remove(id);
949 }
950
925 T::Preimages::drop(&task.call);951 T::Preimages::drop(&task.call)
926 }952 },
953 }
927 Ok(())954 Ok(())
928 }955 }
929 }956 }