Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[Messenger] Fix stopwach usage if it has been reset #39598

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 28, 2020

Conversation

lyrixx
Copy link
Member

@lyrixx lyrixx commented Dec 21, 2020

Q A
Branch? 4.4
Bug fix? yes
New feature? no
Deprecations? no
Tickets
License MIT
Doc PR

I'm slowly migrating an application to messenger (from swarrot) and I
hit a strange bug. My message was well processeed BUT retry!

It comes from two things

  • I manually reset the application (via the service resetter, to keep a
    low memory usage)
  • symfony/messenger try to collect some information, but since the
    stopwatch has been reset, an exception occurs and the message has been
    retried

So this patch avoid throwing an exception when everything works well

the trace:

18:45:41 INFO      [messenger] Message AppBundle\Crawler\Messenger\Message\CrawlSitemapMessage handled by AppBundle\Crawler\Messenger\MessageHandler\CrawlSitemapMessageHa
ndler::__invoke                                                                                                                                                           
[                                                                                                                                                                         
  "message" => AppBundle\Crawler\Messenger\Message\CrawlSitemapMessage^ {                                                                                                 
    -crawlId: "885d23a7-8ad5-4935-a2b3-1c114ac76ded"                                                                                                                      
  },                                                                                                                                                                      
  "class" => "AppBundle\Crawler\Messenger\Message\CrawlSitemapMessage",                                                                                                   
  "handler" => "AppBundle\Crawler\Messenger\MessageHandler\CrawlSitemapMessageHandler::__invoke"                                                                          
]                                                                                                                                                                         
18:45:41 ERROR     [messenger] Error thrown while handling message AppBundle\Crawler\Messenger\Message\CrawlSitemapMessage. Sending for retry #1 using 1000 ms delay. Erro
r: "Event ""Symfony\Component\Messenger\Middleware\HandleMessageMiddleware" on "messenger.bus.default"" is not started."                                                  
[                                                                                                                                                                         
  "message" => AppBundle\Crawler\Messenger\Message\CrawlSitemapMessage^ {                                                                                                 
    -crawlId: "885d23a7-8ad5-4935-a2b3-1c114ac76ded"                                                                                                                      
  },                                                                                                                                                                      
  "class" => "AppBundle\Crawler\Messenger\Message\CrawlSitemapMessage",                                                                                                   
  "retryCount" => 1,                                                                                                                                                      
  "delay" => 1000,                                                                                                                                                        
  "error" => "Event ""Symfony\Component\Messenger\Middleware\HandleMessageMiddleware" on "messenger.bus.default"" is not started.",                                       
  "exception" => LogicException {                                                                                                                                         
    #message: "Event ""Symfony\Component\Messenger\Middleware\HandleMessageMiddleware" on "messenger.bus.default"" is not started."                                       
    #code: 0                                                                                                                                                              
    #file: "./vendor/symfony/symfony/src/Symfony/Component/Stopwatch/Section.php"                                                                                         
    #line: 142                                                                                                                                                            
    trace: {                                                                                                                                                              
      ./vendor/symfony/symfony/src/Symfony/Component/Stopwatch/Section.php:142 { …}                                                                                       
      ./vendor/symfony/symfony/src/Symfony/Component/Stopwatch/Stopwatch.php:126 { …}                                                                                     
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Middleware/TraceableMiddleware.php:75 { …}                                                                 
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php:83 { …}                                                             
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php:74 { …}                                                               
      ./src/Middleware/ResetApplicationMiddlerwareMiddleware.php:14 {                                                                                                     
        AppBundle\Middleware\ResetApplicationMiddlerwareMiddleware->handle(Envelope $envelope, StackInterface $stack): Envelope^                                          
        ›     echo "couocu";                                                                                                                                              
        ›     return $stack->next()->handle($envelope, $stack);                                                                                                           
        › }                                                                                                                                                               
      }                                                                                                                                                                   
      ./vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Messenger/DoctrinePingConnectionMiddleware.php:34 { …}                                                         
      ./vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Messenger/AbstractDoctrineMiddleware.php:45 { …}                                                               
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Middleware/FailedMessageProcessingMiddleware.php:34 { …}                                                   
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Middleware/DispatchAfterCurrentBusMiddleware.php:68 { …}                                                   
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Middleware/RejectRedeliveredMessageMiddleware.php:48 { …}                                                  
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Middleware/AddBusNameStampMiddleware.php:37 { …}                                                           
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Middleware/TraceableMiddleware.php:43 { …}                                                                 
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/MessageBus.php:80 { …}                                                                                     
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/TraceableMessageBus.php:41 { …}                                                                            
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/RoutableMessageBus.php:54 { …}                                                                             
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Worker.php:114 { …}                                                                                        
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Worker.php:77 { …}                                                                                         
      ./vendor/symfony/symfony/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php:198 { …}                                                                
      ./vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:255 { …}                                                                                 
      ./vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:989 { …}                                                                                     
      ./vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:96 { …}                                                                         
      ./vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:290 { …}                                                                                     
      ./vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:82 { …}                                                                         
      ./vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:166 { …}                                                                                     
      ./bin/console:29 { …}
    }
  }
]

@nicolas-grekas
Copy link
Member

Can you please add a test case?
I suppose there is no way to know if the stopwatch has been reset without catching the exception?

@noniagriconomie
Copy link
Contributor

@lyrixx i plan to do the same thing on a personal project very soon,
but i have a question: why the "traceable" logic is used here? are you runing on prod?
for exemple for the event dispatcher, the "traceable" logic is ony for dev insnt it?

thx

@lyrixx
Copy link
Member Author

lyrixx commented Dec 23, 2020

@nicolas-grekas Sure, i'll do :)

@noniagriconomie It occurs in dev as I said

I'm slowly migrating an application to messenger (from swarrot) and I

So I notice that in dev. I do not replace things in prod directly (yet) :) (huhu, this is a joke, no offence)

@lyrixx lyrixx force-pushed the messenger-stop-watch branch 2 times, most recently from 27bda76 to d0e1de8 Compare December 23, 2020 17:12
@lyrixx lyrixx force-pushed the messenger-stop-watch branch 2 times, most recently from 6b8456d to 3e05325 Compare December 23, 2020 17:18
@noniagriconomie
Copy link
Contributor

@lyrixx sorry I found no trace of this in the PR desc :s, thus my question :)

@lyrixx lyrixx force-pushed the messenger-stop-watch branch from 3e05325 to bf4b0cc Compare December 28, 2020 09:52
@fabpot
Copy link
Member

fabpot commented Dec 28, 2020

Thank you @lyrixx.

@fabpot fabpot merged commit bbe1bb7 into symfony:4.4 Dec 28, 2020
@lyrixx lyrixx deleted the messenger-stop-watch branch December 28, 2020 10:10
@fabpot fabpot mentioned this pull request Jan 27, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants