@@ -640,13 +640,7 @@ impl<T: Config> Pallet<T> {
640640 fn enqueue_xcmp_message (
641641 sender : ParaId ,
642642 xcm : BoundedVec < u8 , MaxXcmpMessageLenOf < T > > ,
643- meter : & mut WeightMeter ,
644643 ) -> Result < ( ) , ( ) > {
645- if meter. try_consume ( T :: WeightInfo :: enqueue_xcmp_message ( ) ) . is_err ( ) {
646- defensive ! ( "Out of weight: cannot enqueue XCMP messages; dropping msg" ) ;
647- return Err ( ( ) )
648- }
649-
650644 let QueueConfigData { drop_threshold, .. } = <QueueConfig < T > >:: get ( ) ;
651645 let fp = T :: XcmpQueue :: footprint ( sender) ;
652646 // Assume that it will not fit into the current page:
@@ -794,22 +788,41 @@ impl<T: Config> XcmpMessageHandler for Pallet<T> {
794788 } ,
795789 }
796790 } ,
797- XcmpMessageFormat :: ConcatenatedVersionedXcm =>
791+ XcmpMessageFormat :: ConcatenatedVersionedXcm => {
792+ let mut new_page = true ;
798793 while !data. is_empty ( ) {
799794 let Ok ( xcm) = Self :: take_first_concatenated_xcm ( & mut data, & mut meter)
800795 else {
801796 defensive ! ( "HRMP inbound decode stream broke; page will be dropped." , ) ;
802797 break
803798 } ;
804799
805- if let Err ( ( ) ) = Self :: enqueue_xcmp_message ( sender, xcm, & mut meter) {
800+ // For simplicity, we consider that each new XCMP page results in a new
801+ // message queue page. This is not always true, but it's a good enough
802+ // estimation.
803+ if meter
804+ . try_consume ( T :: WeightInfo :: enqueue_xcmp_message ( xcm. len ( ) , new_page) )
805+ . is_err ( )
806+ {
807+ defensive ! (
808+ "Out of weight: cannot enqueue XCMP messages; dropping msg; \
809+ Used weight: ",
810+ meter. consumed_ratio( )
811+ ) ;
812+ break ;
813+ }
814+
815+ if let Err ( ( ) ) = Self :: enqueue_xcmp_message ( sender, xcm) {
806816 defensive ! (
807817 "Could not enqueue XCMP messages. Used weight: " ,
808818 meter. consumed_ratio( )
809819 ) ;
810820 break
811821 }
812- } ,
822+
823+ new_page = false ;
824+ }
825+ } ,
813826 XcmpMessageFormat :: ConcatenatedEncodedBlob => {
814827 defensive ! ( "Blob messages are unhandled - dropping" ) ;
815828 continue
0 commit comments