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

Ensure all handlers are explicitly closed on kernel shutdown #377

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

andy-educake
Copy link

No description provided.

@andy-educake andy-educake force-pushed the 376-add-handler-manager-to-close-handlers branch from 6e7a558 to 5c10161 Compare November 24, 2020 10:38
Copy link
Member

@lyrixx lyrixx left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this PR, but I'm not sure about it. If we do that, we should do the same thing for all others bundle that does IO.

@nicolas-grekas WDYT?

MonologBundle.php Outdated Show resolved Hide resolved
Services/HandlerManager.php Outdated Show resolved Hide resolved
Services/HandlerManager.php Outdated Show resolved Hide resolved
Services/HandlerManager.php Outdated Show resolved Hide resolved
Resources/config/monolog.xml Outdated Show resolved Hide resolved
Services/HandlerManager.php Outdated Show resolved Hide resolved
@andy-educake
Copy link
Author

Thanks for the comments @lyrixx Have dealt with all of them I think. I notice that Travis has failed for PHP 5.6 and PHP 7.0. Possibly because I used the iterable type hint on the constructor param. Should I use the Iterator interface instead for bc?

*/
private $handlers;

public function __construct(\IteratorAggregate $handlers)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
public function __construct(\IteratorAggregate $handlers)
public function __construct(iterable $handlers)

The type IteratorAggregate is a bit more specific that it needs to be, isn‘t it?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the bundle supports PHP 5.6+ currently

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but Traversable should be used instead of IteratorAggregate

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should drop support for SF 3.X, and bump PHP to 7.1
IMHO, we must do that before this PR

@@ -40,5 +40,9 @@
<service id="monolog.http_client" class="Symfony\Contracts\HttpClient\HttpClientInterface" public="false">
<factory class="Symfony\Component\HttpClient\HttpClient" method="create" />
</service>

<service id="monolog.handler_manager" class="Symfony\Bundle\MonologBundle\HandlerLifecycleManager" public="true">
<argument type="tagged_iterator" tag="monolog.handler" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rather than using type="tagged_iterator", you should use a compiler pass to create the IteratorArgument (or drop the tag entirely and manage everything in the DI extension as I don't think we need to support handlers added elsewhere). This way, you can use weak references in the IteratorArgument, which will skip services which haven't been instantiated yet

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I'm familiar enough with the Container to change this right now but given #377 (comment) I should probably pause on this PR now anyway?

@stof
Copy link
Member

stof commented Nov 27, 2020

Regarding a generic solution in symfony, I think we need something similar to the ServiceResetter, but which is always called by the kernel on shutdown, for services which need to close some resources for their shutdown. This way, MonologBundle could hook the close method of handlers in there, DoctrineBundle could hook connections, etc...


use Monolog\Handler\HandlerInterface;

class HandlerLifecycleManager
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be tagged as @internal. We really don't want to expose it in the BC promise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants