Skip to content
Snippets Groups Projects

Issue #3262359: Don't catalog event subscribers as a way of determining the validity of stored results

Merged Issue #3262359: Don't catalog event subscribers as a way of determining the validity of stored results
2 files
+ 7
76
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -120,47 +120,19 @@ class ReadinessValidationManager implements EventSubscriberInterface {
$results = $event->getResults();
$this->keyValueExpirable->setWithExpire(
'readiness_validation_last_run',
[
'results' => $results,
'listeners' => $this->getListenersAsString(ReadinessCheckEvent::class),
],
$results,
$this->resultsTimeToLive * 60 * 60
);
$this->keyValueExpirable->set('readiness_check_timestamp', $this->time->getRequestTime());
return $this;
}
/**
* Gets all the listeners for a specific event as single string.
*
* @return string
* The listeners as a string.
*/
protected function getListenersAsString(string $event_name): string {
$listeners = $this->eventDispatcher->getListeners($event_name);
$string = '';
foreach ($listeners as $listener) {
if (is_array($listener)) {
$string .= is_object($listener[0]) ? get_class($listener[0]) : $listener[0];
$string .= $listener[1];
}
elseif (is_object($listener)) {
$string .= "-" . get_class($listener);
}
elseif (is_string($listener)) {
$string .= "-$listener";
}
}
return $string;
}
/**
* Dispatches the readiness check event if there no stored valid results.
*
* @return $this
*
* @see self::getResults()
* @see self::getStoredValidResults()
*/
public function runIfNoStoredResults(): self {
if ($this->getResults() === NULL) {
@@ -179,11 +151,9 @@ class ReadinessValidationManager implements EventSubscriberInterface {
* @return \Drupal\package_manager\ValidationResult[]|
* The validation result objects or NULL if no results are
* available or if the stored results are no longer valid.
*
* @see self::getStoredValidResults()
*/
public function getResults(?int $severity = NULL): ?array {
$results = $this->getStoredValidResults();
$results = $this->keyValueExpirable->get('readiness_validation_last_run');
if ($results !== NULL) {
if ($severity !== NULL) {
$results = array_filter($results, function ($result) use ($severity) {
@@ -195,26 +165,6 @@ class ReadinessValidationManager implements EventSubscriberInterface {
return NULL;
}
/**
* Gets stored valid results, if any.
*
* The stored results are considered valid if the current listeners for the
* readiness check event are the same as the last time the event was
* dispatched.
*
* @return \Drupal\package_manager\ValidationResult[]|null
* The stored results if available and still valid, otherwise null.
*/
protected function getStoredValidResults(): ?array {
$last_run = $this->keyValueExpirable->get('readiness_validation_last_run');
// If the listeners have not changed return the results.
if ($last_run && $last_run['listeners'] === $this->getListenersAsString(ReadinessCheckEvent::class)) {
return $last_run['results'];
}
return NULL;
}
/**
* Deletes any stored readiness validation results.
*/
Loading