Database serialisation error

Created on 19 January 2025, 3 months ago

Problem/Motivation

After upgrading site to D10.4.1, my webform suddenly throws a database serialisation error.

When logged in as admin user all works fine, but when logged out /anonymous, the submission settings are no longer applied: form is sent to site and copy to visitor, but (inline) thank you message is not shown, and submission limits are not applied. As a result visitors keep pressing β€˜submit’ because they think form hasn’t been submitted

Error message

LogicException: The database connection is not serializable. This probably means you are serializing an object that has an indirect reference to the database connection. Adjust your code so that is not necessary. Alternatively, look at DependencySerializationTrait as a temporary solution. in Drupal\Core\Database\Connection->__sleep() (line 1920 of /home/xxxx/public_html/core/lib/Drupal/Core/Database/Connection.php).

Backtrace #0 [internal function]: Drupal\Core\Database\Connection->__sleep()
#1 /home/xxxx/public_html/core/lib/Drupal/Component/Serialization/PhpSerialize.php(14): serialize()
#2 /home/xxxx/public_html/core/lib/Drupal/Core/KeyValueStore/DatabaseStorageExpirable.php(129): Drupal\Component\Serialization\PhpSerialize::encode()
#3 /home/xxxx/public_html/core/lib/Drupal/Core/KeyValueStore/DatabaseStorageExpirable.php(145): Drupal\Core\KeyValueStore\DatabaseStorageExpirable->doSetWithExpire()
#4 /home/xxxx/public_html/core/lib/Drupal/Core/Form/FormCache.php(193): Drupal\Core\KeyValueStore\DatabaseStorageExpirable->setWithExpire()
#5 /home/xxxx/public_html/core/lib/Drupal/Core/Form/FormBuilder.php(463): Drupal\Core\Form\FormCache->setCache()
#6 /home/xxxx/public_html/core/lib/Drupal/Core/Form/FormBuilder.php(441): Drupal\Core\Form\FormBuilder->setCache()
#7 /home/xxxx/public_html/core/lib/Drupal/Core/Form/FormBuilder.php(633): Drupal\Core\Form\FormBuilder->rebuildForm()
#8 /home/xxxx/public_html/core/lib/Drupal/Core/Form/FormBuilder.php(326): Drupal\Core\Form\FormBuilder->processForm()
#9 /home/xxxx/public_html/core/lib/Drupal/Core/Entity/EntityFormBuilder.php(48): Drupal\Core\Form\FormBuilder->buildForm()
#10 /home/xxxx/public_html/modules/contrib/webform/src/Entity/Webform.php(1250): Drupal\Core\Entity\EntityFormBuilder->getForm()
#11 /home/xxxx/public_html/modules/contrib/webform/src/Element/Webform.php(112): Drupal\webform\Entity\Webform->getSubmissionForm()
#12 [internal function]: Drupal\webform\Element\Webform::preRenderWebformElement()
#13 /home/xxxx/public_html/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(113): call_user_func_array()
#14 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(870): Drupal\Core\Render\Renderer->doTrustedCallback()
#15 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(432): Drupal\Core\Render\Renderer->doCallback()
#16 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#17 /home/xxxx/public_html/core/lib/Drupal/Core/Template/TwigExtension.php(484): Drupal\Core\Render\Renderer->render()
#18 /home/xxxx/public_html/sites/default/files/php/twig/678cd4c10d7eb_block.html.twig_uTNhFlmH1kMMrTwvYuY4EYMB7/OG3wBPtayq9sU3sn5OkIUgB0hIPEcbBen_ae71VOumY.php(93): Drupal\Core\Template\TwigExtension->escapeFilter()
#19 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(431): __TwigTemplate_81df65d1e0590aa8d4e9e62db81c5c5d->block_content()
#20 /home/xxxx/public_html/sites/default/files/php/twig/678cd4c10d7eb_block.html.twig_uTNhFlmH1kMMrTwvYuY4EYMB7/OG3wBPtayq9sU3sn5OkIUgB0hIPEcbBen_ae71VOumY.php(74): Twig\Template->yieldBlock()
#21 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(387): __TwigTemplate_81df65d1e0590aa8d4e9e62db81c5c5d->doDisplay()
#22 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(343): Twig\Template->yield()
#23 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(358): Twig\Template->display()
#24 /home/xxxx/public_html/vendor/twig/twig/src/TemplateWrapper.php(35): Twig\Template->render()
#25 /home/xxxx/public_html/core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#26 /home/xxxx/public_html/core/lib/Drupal/Core/Theme/ThemeManager.php(348): twig_render_template()
#27 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#28 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#29 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#30 /home/xxxx/public_html/core/lib/Drupal/Core/Template/TwigExtension.php(484): Drupal\Core\Render\Renderer->render()
#31 /home/xxxx/public_html/sites/default/files/php/twig/678cd4c10d7eb_themag-layout--twocol-sec_-M57Zry08vF9dvesNrfVZ5F1j/1wZhAdqpqM41Uu5u_jexh79i3G_1wAd5t1s0-9OshQ8.php(84): Drupal\Core\Template\TwigExtension->escapeFilter()
#32 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(387): __TwigTemplate_9f58df5b88145f27635af809765c0cff->doDisplay()
#33 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(343): Twig\Template->yield()
#34 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(358): Twig\Template->display()
#35 /home/xxxx/public_html/vendor/twig/twig/src/TemplateWrapper.php(35): Twig\Template->render()
#36 /home/xxxx/public_html/core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#37 /home/xxxx/public_html/core/lib/Drupal/Core/Theme/ThemeManager.php(348): twig_render_template()
#38 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#39 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#40 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#41 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#42 /home/xxxx/public_html/core/lib/Drupal/Core/Template/TwigExtension.php(484): Drupal\Core\Render\Renderer->render()
#43 /home/xxxx/public_html/sites/default/files/php/twig/678cd4c10d7eb_node.html.twig_l2aaFNqMt0vgzEp2aaA1Z0Gf8/wMvrJHx41inc-GVm99kVsSyNSS9CU58TiHWCzGXlo9U.php(115): Drupal\Core\Template\TwigExtension->escapeFilter()
#44 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(387): __TwigTemplate_54514cb9ec19b5014e0b0847a876d572->doDisplay()
#45 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(343): Twig\Template->yield()
#46 /home/xxxx/public_html/vendor/twig/twig/src/Template.php(358): Twig\Template->display()
#47 /home/xxxx/public_html/vendor/twig/twig/src/TemplateWrapper.php(35): Twig\Template->render()
#48 /home/xxxx/public_html/core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#49 /home/xxxx/public_html/core/lib/Drupal/Core/Theme/ThemeManager.php(348): twig_render_template()
#50 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#51 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#52 /home/xxxx/public_html/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(238): Drupal\Core\Render\Renderer->render()
#53 /home/xxxx/public_html/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}()
#54 /home/xxxx/public_html/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(231): Drupal\Core\Render\Renderer->executeInRenderContext()
#55 /home/xxxx/public_html/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(128): Drupal\Core\Render\MainContent\HtmlRenderer->prepare()
#56 /home/xxxx/public_html/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse()
#57 [internal function]: Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray()
#58 /home/xxxx/public_html/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func()
#59 /home/xxxx/public_html/vendor/symfony/http-kernel/HttpKernel.php(186): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch()
#60 /home/xxxx/public_html/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
#61 /home/xxxx/public_html/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
#62 /home/xxxx/public_html/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
#63 /home/xxxx/public_html/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
#64 /home/xxxx/public_html/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
#65 /home/xxxx/public_html/core/modules/page_cache/src/StackMiddleware/PageCache.php(116): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
#66 /home/xxxx/public_html/core/modules/page_cache/src/StackMiddleware/PageCache.php(90): Drupal\page_cache\StackMiddleware\PageCache->pass()
#67 /home/xxxx/public_html/core/modules/ban/src/BanMiddleware.php(50): Drupal\page_cache\StackMiddleware\PageCache->handle()
#68 /home/xxxx/public_html/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\ban\BanMiddleware->handle()
#69 /home/xxxx/public_html/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
#70 /home/xxxx/public_html/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
#71 /home/xxxx/public_html/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle()
#72 /home/xxxx/public_html/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
#73 /home/xxxx/public_html/index.php(21): Drupal\Core\DrupalKernel->handle()
#74 {main}

The form with exact same settings (smtp authentication, antibot, honeypot and stopforumspam applied) sending set up worked perfectly fine in Drupal 9, both in logged in and logged out status. Now in Drupal 10 all settings work fine when logged in, not when logged out..

As this form is on a site with high traffic and high numbers of forms being submitted this is a rather crucial issue..

All ideas and help will be immensely appreciated!

πŸ› Bug report
Status

Active

Version

6.3

Component

Code

Created by

πŸ‡¬πŸ‡§United Kingdom xax London, UK

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

  • Issue created by @xax
  • πŸ‡¨πŸ‡¦Canada Liam Morland Ontario, CA πŸ‡¨πŸ‡¦

    Does an older version of Webform work?

  • πŸ‡¬πŸ‡§United Kingdom xax London, UK

    @liam-morland thanks for the tip, I did go down a few releases, 6.3.x didn't work so went to newest pre-3 version, (so went from 6.3.0-beta1 down to) 6.2.9, and now the form and submission settings work again as before, logged in as well as logged out. So the bug/issue must be in the 6.3.x release(s).

  • πŸ‡¨πŸ‡¦Canada Liam Morland Ontario, CA πŸ‡¨πŸ‡¦

    Can you use git bisect to find the commit that broke it?

  • πŸ‡¬πŸ‡§United Kingdom xax London, UK

    Hi Liam, I'm afraid (he admitted red-faced) that I would have no clue how to do that?

    I know what a git bisect is in theory, but have never worked with git (all updates etc done with composer locally and upload to server with FileZilla)? Will gladly take your instructions on how to do this, but as this is a live site and now working again not a good idea to try different commits again?

  • πŸ‡¨πŸ‡¦Canada Liam Morland Ontario, CA πŸ‡¨πŸ‡¦

    You could make a clone of the Webform repo β†’ locally and upload the files to your site. With git bisect, you tell it a start and an end commit, and it will checkout a series of revisions. Upload and test, then tell Git if that one is good or bad. Eventually, Git will tell you which commit broke it.

  • Doing this is easier than you may think:

    1. Delete the copy of Webform module that Composer installed from the modules/contrib directory in your test site.
    2. In the modules/contrib directory: `git clone https://git.drupalcode.org/project/webform.git`.
    3. `cd webform`
    4. `git checkout 6.3.x`
    5. `git bisect start`
    6. `git bisect good 6.2.9`
    7. `git bisect bad 6.3.x`

    `git bisect` will proceed to check out candidate commits. Test each time, then type `git bisect good` (if no bug) or `git bisect bad` (if you see the bug). This will find the commit in a few steps.

Production build 0.71.5 2024