Skip to content

Commit

Permalink
Merge pull request #23785 from totten/5.51-hook-log
Browse files Browse the repository at this point in the history
dev/core#3502 - CiviEventDispatcher - Softer errors for not-ready. More comments.
  • Loading branch information
totten authored Jun 14, 2022
2 parents 8ada309 + f3ec3f9 commit 99f0a8f
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion Civi/Core/CiviEventDispatcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,18 @@ public function dispatch($eventName, Event $event = NULL) {
throw new \RuntimeException("The dispatch policy prohibits event \"$eventName\".");

case 'not-ready':
throw new \RuntimeException("CiviCRM has not bootstrapped sufficiently to fire event \"$eventName\".");
// The system is not ready to run hooks -- eg it has not finished loading the extension main-files.
// If you fire a hook at this point, it will not be received by the intended listeners.
// In practice, many hooks involve cached data-structures, so a premature hook is liable to have spooky side-effects.
// This condition indicates a structural problem and merits a consistent failure-mode.
// If you believe some special case merits an exemption, then you could add it to `$bootDispatchPolicy`.

// An `Exception` would be ideal for preventing new bugs, but it can be too noisy for systems with pre-existing bugs.
// throw new \RuntimeException("The event \"$eventName\" attempted to fire before CiviCRM was fully loaded. Skipping.");
// Complain to web-user and sysadmin. Log a backtrace. We're pre-boot, so don't use high-level services.
error_log("The event \"$eventName\" attempted to fire before CiviCRM was fully loaded. Skipping.\n" . \CRM_Core_Error::formatBacktrace(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), FALSE));
trigger_error("The event \"$eventName\" attempted to fire before CiviCRM was fully loaded. Skipping.", E_USER_WARNING);
return $event;

default:
throw new \RuntimeException("The dispatch policy for \"$eventName\" is unrecognized ($mode).");
Expand Down

0 comments on commit 99f0a8f

Please sign in to comment.