Skip to content
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

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

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

@nicolas-grekas nicolas-grekas commented Dec 23, 2020

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

@noniagriconomie noniagriconomie commented Dec 23, 2020

@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 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 Dec 23, 2020
@lyrixx lyrixx force-pushed the messenger-stop-watch branch 2 times, most recently from 6b8456d to 3e05325 Compare Dec 23, 2020
@noniagriconomie
Copy link
Contributor

@noniagriconomie noniagriconomie commented Dec 23, 2020

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

fabpot
fabpot approved these changes Dec 28, 2020
@fabpot
Copy link
Member

@fabpot fabpot commented Dec 28, 2020

Thank you @lyrixx.

@fabpot fabpot merged commit bbe1bb7 into symfony:4.4 Dec 28, 2020
5 checks passed
@lyrixx lyrixx deleted the messenger-stop-watch branch Dec 28, 2020
@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.

None yet

5 participants