difftreelog
fix clear lookup when needed -- fix canceling
in: master
1 file changed
pallets/scheduler-v2/src/lib.rsdiffbeforeafterboth863 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 }869870 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 }872873 return Err((Unavailable, Some(task)));874 },873 };875 };874876875 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`");886887 if let Some(ref id) = task.maybe_id {888 Lookup::<T>::remove(id);889 }890884 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);899900 if let Some(ref id) = task.maybe_id {901 Lookup::<T>::remove(id);902 }903892 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 });920921 let is_canceled = task.maybe_id.as_ref()922 .map(|id| !Lookup::<T>::contains_key(id))923 .unwrap_or(false);924925 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 }950925 T::Preimages::drop(&task.call);951 T::Preimages::drop(&task.call)926 }952 },953 }927 Ok(())954 Ok(())928 }955 }929 }956 }