Ah... restarting php-fpm sorted it. Thanks!
It looks like something is still looking for the old Query class. I'm getting warnings similar to the following whenever a page loads after installing the latest update. This is after clearing the cache... twice.
Warning: include(/var/www/drupal/web/modules/contrib/trash/src/EntityQuery/Sql/Query.php): Failed to open stream: No such file or directory in include() (line 576 of /var/www/drupal/vendor/composer/ClassLoader.php)
#0 /var/www/drupal/web/core/includes/bootstrap.inc(108): _drupal_error_handler_real()
#1 /var/www/drupal/vendor/composer/ClassLoader.php(576): _drupal_error_handler()
#2 /var/www/drupal/vendor/composer/ClassLoader.php(576): include('...')
#3 /var/www/drupal/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#4 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#5 /var/www/drupal/web/core/lib/Drupal/Core/Entity/Query/QueryBase.php(507): class_exists()
#6 /var/www/drupal/web/core/lib/Drupal/Core/Entity/Query/Sql/QueryFactory.php(50): Drupal\Core\Entity\Query\QueryBase::getClass()
#7 /var/www/drupal/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(625): Drupal\Core\Entity\Query\Sql\QueryFactory->get()
#8 /var/www/drupal/web/core/modules/block_content/src/BlockContentUuidLookup.php(49): Drupal\Core\Entity\EntityStorageBase->getQuery()
#9 /var/www/drupal/web/core/lib/Drupal/Core/Cache/CacheCollector.php(148): Drupal\block_content\BlockContentUuidLookup->resolveCacheMiss()
#10 /var/www/drupal/web/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php(211): Drupal\Core\Cache\CacheCollector->get()
#11 /var/www/drupal/web/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php(178): Drupal\block_content\Plugin\Block\BlockContentBlock->getEntity()
#12 /var/www/drupal/web/core/lib/Drupal/Core/Block/BlockPluginTrait.php(127): Drupal\block_content\Plugin\Block\BlockContentBlock->blockAccess()
#13 /var/www/drupal/web/core/modules/block/src/BlockAccessControlHandler.php(124): Drupal\Core\Block\BlockBase->access()
#14 /var/www/drupal/web/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php(109): Drupal\block\BlockAccessControlHandler->checkAccess()
#15 /var/www/drupal/web/core/lib/Drupal/Core/Entity/EntityBase.php(329): Drupal\Core\Entity\EntityAccessControlHandler->access()
#16 /var/www/drupal/web/core/modules/block/src/BlockRepository.php(63): Drupal\Core\Entity\EntityBase->access()
#17 /var/www/drupal/web/core/modules/block/src/Plugin/DisplayVariant/BlockPageVariant.php(138): Drupal\block\BlockRepository->getVisibleBlocksPerRegion()
#18 /var/www/drupal/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(270): Drupal\block\Plugin\DisplayVariant\BlockPageVariant->build()
#19 /var/www/drupal/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(128): Drupal\Core\Render\MainContent\HtmlRenderer->prepare()
#20 /var/www/drupal/web/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse()
#21 /var/www/drupal/vendor/symfony/event-dispatcher/EventDispatcher.php(246): Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray()
#22 /var/www/drupal/vendor/symfony/event-dispatcher/EventDispatcher.php(206): Symfony\Component\EventDispatcher\EventDispatcher::Symfony\Component\EventDispatcher\{closure}()
#23 /var/www/drupal/vendor/symfony/event-dispatcher/EventDispatcher.php(56): Symfony\Component\EventDispatcher\EventDispatcher->callListeners()
#24 /var/www/drupal/vendor/symfony/http-kernel/HttpKernel.php(188): Symfony\Component\EventDispatcher\EventDispatcher->dispatch()
#25 /var/www/drupal/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
#26 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
#27 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
#28 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
#29 /var/www/drupal/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
#30 /var/www/drupal/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
#31 /var/www/drupal/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
#32 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle()
#33 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
#34 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
#35 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle()
#36 /var/www/drupal/web/core/lib/Drupal/Core/DrupalKernel.php(709): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
#37 /var/www/drupal/web/index.php(19): Drupal\Core\DrupalKernel->handle()
#38 {main}
maeglin β created an issue.
Also confusing matters is the fact that, while the RSS spec specifies RFC822 (2-digit year) for the date format, the example given in the spec is based on RFC 2822 (4-digit year). It might not be that critical of a problem now, but it will be in around 33 years.
At this point, who knows which will happen first: Email Confirmer gaining security policy coverage, or Drupal core gaining email change confirmation?
π Use email verification when changing user email addresses Needs work
The patch in #8 fixes it for me.
Maeglin β created an issue.
I implemented something like this today as a custom code plugin for Metatag 2.0.x, which can support multiple RSS links, but without the (apparently optional, but possibly desirable) title attributes. I'm not entirely sure how to include fields for both attributes, much less have multiple values for both, if that's even practical or possible with the module's UI. I could roll what I have into a patch for 2.0.x, if there's interest, but would need to know what group and weight value I should assign it.
No podcast here, but I wanted to properly associate an RSS feed for the site without the icon at the bottom of the front page view. I also wanted to add the tag to article pages, for Google Discover purposes.
If I make the bucket public, and turn off S3 authentication on the CDN side, it works with the VersionId and no signing. Thankfully, it seems like the free egress agreement between the CDN and BackBlaze is still in effect with that configuration, so I'm not double-billed for bandwidth in the case of a cache miss.
In any case, I'm actively not using versioning with BackBlaze for this, even though I can't turn it off completely. The bucket is configured to only keep the latest version of any particular object.
Maeglin β created an issue.
The current time-based view caching implementation is useful, as long as it's understood what it does, which is setting the max age for query results and rendered output. Unfortunately, the labeling for those config options doesn't make that clear. Cached items might still be invalidated because underlying content has changed, but if you're not setting a minimum age then there's no harm done.
As for use cases for the way it currently works, I can think of two right away:
1) The "time ago" date/time field formatter that's built into the core. With only tag-based caching, you might see an update or creation time of "2 hours ago", which could actually be days ago if nothing has changed in that time.
2) A notification page that I recently built, with dynamic highlighting of messages posted in the last 24 hours. The highlighting is done in the Twig template so, if the rendered output is only refreshed when new notifications are posted, it could be stuck for days.
In both cases, tag-based invalidation is also desired, so that the views reflect changes to underlying content.
That's not to say that a min-age setting wouldn't be useful in some cases, but it should be in addition to (not instead of) a max-age setting.