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

Snitch causes infinite loop in combination with other plugins (Relevanssi and WeGlot) #35

Open
msaari opened this issue Aug 21, 2020 · 3 comments

Comments

@msaari
Copy link

msaari commented Aug 21, 2020

When Relevanssi 4.8 and Snitch are active at the same time, the site crashes in an infinite loop. Reproducing this is simple: on an empty WP site, install Relevanssi 4.8 and Snitch and then activate both at the same time.

Here's what happens:

  1. When Snitch is activated, it does some logging with log_response().
  2. In order to do the logging, it creates a post using wp_insert_post().
  3. This fires up Relevanssi indexing.
  4. This triggers an asynchronous doc count updating request, even though the post wasn’t actually indexed.
  5. This action fires up another thread of WP, where Snitch wants to do logging…
  6. …which gets us back to 2 for an infinite loop.

The fix on Relevanssi end is fairly simple. There's no reason for the async doc count request to run if the post wasn't indexed, so from next version onwards, Relevanssi will check for that and that will break us from the infinite loop right away. Thus, there's no immediate need to change anything in Snitch. However, I wanted to inform you about this, as similar issues may crop up with other plugins, and perhaps there's something in your end to stop such infinite loops from forming in the future.

@msaari
Copy link
Author

msaari commented Aug 22, 2020

I also got an infinite loop trying to activate WeGlot. There the loop goes like this:

WP_Http::request()
wp-includes/class-http.php:626
WP_Http::get()
wp-includes/http.php:162
wp_remote_get()
wp-content/plugins/weglot/src/services/class-option-service-weglot.php:166
WeglotWP\S\Option_Service_Weglot::get_options_from_api_with_api_key()
wp-content/plugins/weglot/src/services/class-option-service-weglot.php:271
WeglotWP\S\Option_Service_Weglot::get_options()
wp-content/plugins/weglot/src/services/class-option-service-weglot.php:356
WeglotWP\S\Option_Service_Weglot::get_option()
wp-content/plugins/weglot/weglot-functions.php:35
weglot_get_option()
wp-content/plugins/weglot/weglot-functions.php:190
weglot_get_api_key()
wp-content/plugins/weglot/src/services/class-user-api-service-weglot.php:47
WeglotWP\S\User_Api_Service_Weglot::get_user_info()
wp-content/plugins/weglot/src/actions/admin/class-admin-enqueue-weglot.php:75
WeglotWP\A\A\Admin_Enqueue_Weglot::weglot_admin_enqueue_scripts()
wp-includes/class-wp-hook.php:287
WP_Hook::apply_filters()
wp-includes/class-wp-hook.php:311
WP_Hook::do_action()
wp-includes/plugin.php:478
do_action()
wp-admin/admin-header.php:102
require_once()
wp-admin/admin.php:239

@patrickrobrecht patrickrobrecht changed the title Relevanssi 4.8 + Snitch = infinite loop Snitch causes infinite loop in combination with other plugins (Relevanssi and WeGlot) Dec 31, 2020
@patrickrobrecht
Copy link
Member

I'm not sure whether this issue is the fault of Snitch or of Relevanssi/WeGlot.

@msaari
Copy link
Author

msaari commented Jan 13, 2021

Well, Relevanssi has been changed so that Snitch and Relevanssi don't cause an infinite loop again, but Snitch will cause an infinite loop with any other plugin that reacts to post creation with an asynchronous action that starts a new instance of WP, causing Snitch to log and create a post that will cause the other plugin to react and so on...

I guess it's pretty hard to stop Snitch from having this problem, because it's hard to tell when you're coming from a loop, but this tendency for infinite loops is something to think about. Perhaps Snitch could flag that it's currently doing a logging action and avoid starting a new logging action while one is in progress?

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

No branches or pull requests

2 participants