Race condition: new profile gets saved twice in ShippingInformation::validatePaneForm(), resulting in duplicate UUID exception

Created on 13 September 2022, over 2 years ago
Updated 19 December 2023, 12 months ago

Problem/Motivation

\Drupal\commerce_shipping\Plugin\Commerce\CheckoutPane\ShippingInformation::validatePaneForm() saves a shipping profile if it is still new.

I haven't been able to reproduce manually, but with a javascript behat test that basically does this, it happens basically every time on 2.3+:

 When I am at "/en/cart"
    And I press "Checkout"
    Then I fill in "..." for "First name"
    And I fill in "..." for "Last name
    # ... Fill out all other required fields until shipping ajax triggers
    [...] 
    And I select the radio button with partial label "Shipment"

This is then happening fast enough that the validation starts before the order saving from the initial ajax request is completed (which is when the form state is actually persisted).

I'm actually not 100% sure why it doesn't always happen, so maybe I don't understand this 100% yet.

A workaround in the test is to just wait a second before selecting a different shipment method.

Proposed resolution

Not fully thought through, but one possible solution could be to attempt the load the profile by UUID before trying to save it if it's new, to double-check that.

Remaining tasks

User interface changes

API changes

Data model changes

🐛 Bug report
Status

Active

Version

2.0

Component

Code

Created by

🇨🇭Switzerland berdir Switzerland

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

Merge Requests

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

  • I am currently experiencing this issue as well.

    I have no way to reproduce this issue but is seeing the same errors in the log.

    Any suggestions on how to resolve this?

    Thanks

  • This issue has been occuring more often on my site.
    Is there any way to help diagnose in order to find a solution?

  • Attached stack trace for reference.

    #0 /public_html/core/lib/Drupal/Core/Entity/EntityBase.php(354): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save()
    #1 /public_html/modules/contrib/commerce_shipping/src/LateOrderProcessor.php(55): Drupal\Core\Entity\EntityBase->save()
    #2 /public_html/modules/contrib/commerce/modules/order/src/OrderRefresh.php(198): Drupal\commerce_shipping\LateOrderProcessor->process()
    #3 /public_html/modules/contrib/commerce/modules/order/src/OrderStorage.php(123): Drupal\commerce_order\OrderRefresh->refresh()
    #4 /public_html/modules/contrib/commerce/modules/order/src/OrderStorage.php(86): Drupal\commerce_order\OrderStorage->doOrderPreSave()
    #5 /public_html/core/lib/Drupal/Core/Entity/EntityStorageBase.php(529): Drupal\commerce_order\OrderStorage->invokeHook()
    #6 /public_html/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(753): Drupal\Core\Entity\EntityStorageBase->doPreSave()
    #7 /public_html/core/lib/Drupal/Core/Entity/EntityStorageBase.php(483): Drupal\Core\Entity\ContentEntityStorageBase->doPreSave()
    #8 /public_html/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php(806): Drupal\Core\Entity\EntityStorageBase->save()
    #9 /public_html/modules/contrib/commerce/modules/order/src/OrderStorage.php(169): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save()
    #10 /public_html/core/lib/Drupal/Core/Entity/EntityBase.php(354): Drupal\commerce_order\OrderStorage->save()
    #11 /public_html/modules/contrib/commerce_shipping/src/Plugin/Commerce/CheckoutPane/ShippingInformation.php(349): Drupal\Core\Entity\EntityBase->save()
    #12 /public_html/modules/contrib/commerce/modules/checkout/src/Plugin/Commerce/CheckoutFlow/CheckoutFlowWithPanesBase.php(546): Drupal\commerce_shipping\Plugin\Commerce\CheckoutPane\ShippingInformation->buildPaneForm()
    #13 [internal function]: Drupal\commerce_checkout\Plugin\Commerce\CheckoutFlow\CheckoutFlowWithPanesBase->buildForm()
    #14 /public_html/core/lib/Drupal/Core/Form/FormBuilder.php(536): call_user_func_array()
    #15 /public_html/core/lib/Drupal/Core/Form/FormBuilder.php(375): Drupal\Core\Form\FormBuilder->retrieveForm()
    #16 /public_html/core/lib/Drupal/Core/Form/FormBuilder.php(633): Drupal\Core\Form\FormBuilder->rebuildForm()
    #17 /public_html/core/lib/Drupal/Core/Form/FormBuilder.php(326): Drupal\Core\Form\FormBuilder->processForm()
    #18 /public_html/core/lib/Drupal/Core/Form/FormBuilder.php(224): Drupal\Core\Form\FormBuilder->buildForm()
    #19 /public_html/modules/contrib/commerce/modules/checkout/src/Controller/CheckoutController.php(143): Drupal\Core\Form\FormBuilder->getForm()
    #20 [internal function]: Drupal\commerce_checkout\Controller\CheckoutController->formPage()
    #21 /public_html/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array()
    #22 /public_html/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
    #23 /public_html/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext()
    #24 /public_html/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext()
    #25 /public_html/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
    #26 /public_html/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
    #27 /public_html/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
    #28 /public_html/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
    #29 /public_html/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
    #30 /public_html/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\ContentLength->handle()
    #31 /public_html/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
    #32 /public_html/modules/contrib/advban/src/AdvbanMiddleware.php(57): Drupal\page_cache\StackMiddleware\PageCache->handle()
    #33 /public_html/core/modules/ban/src/BanMiddleware.php(50): Drupal\advban\AdvbanMiddleware->handle()
    #34 /public_html/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\ban\BanMiddleware->handle()
    #35 /public_html/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
    #36 /public_html/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
    #37 /public_html/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle()
    #38 /public_html/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
    #39 /public_html/index.php(19): Drupal\Core\DrupalKernel->handle()
    #40 {main}

  • 🇮🇱Israel jsacksick

    @99gs3: Are you sure this is the same issue? You seem to report errors about the order being saved, not the profile being saved twice?

  • 🇮🇱Israel jsacksick

    Also, the late order processor saves the shipment, so I'm guessing this is a different issue? What's the actual exception you're seeing in logs?

  • @jsacksick

    Drupal\Core\Entity\EntityStorageException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '60428026-b355-433f-aa4a-0044787afcd9' for key 'profile_field__uuid__value': INSERT INTO "profile" ("revision_id", "type", "uuid", "uid", "status", "is_default", "created", "changed", "data") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8); Array ( [:db_insert_placeholder_0] => [:db_insert_placeholder_1] => customer [:db_insert_placeholder_2] => 60428026-b355-433f-aa4a-0044787afcd9 [:db_insert_placeholder_3] => 0 [:db_insert_placeholder_4] => 1 [:db_insert_placeholder_5] => 0 [:db_insert_placeholder_6] => 1723575050 [:db_insert_placeholder_7] => 1723575050 [:db_insert_placeholder_8] => a:0:{} ) in Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (line 817 of /public_html/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).

    The issue was originally reported here. https://www.drupal.org/node/3409693

    It's intermitten. Does not occur with every order.

  • 🇵🇱Poland adpo

    same here, it happens to guest checkout.

    Drupal\Core\Entity\EntityStorageException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '21561e61-86a1-4286-a9d2-04c01e14167a' for key 'profile_field__uuid__value': INSERT INTO "profile" ("revision_id", "type", "uuid", "status", "uid", "is_default", "data", "created", "changed") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8); Array ( [:db_insert_placeholder_0] => [:db_insert_placeholder_1] => customer [:db_insert_placeholder_2] => 21561e61-86a1-4286-a9d2-04c01e14167a [:db_insert_placeholder_3] => 1 [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => 0 [:db_insert_placeholder_6] => a:0:{} [:db_insert_placeholder_7] => 1727018890 [:db_insert_placeholder_8] => 1727018890 ) in Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (line 815 of 
    
  • 🇩🇪Germany Anybody Porta Westfalica

    Setting this to major based on the reports and results for checkout success. Harming conversions is a big thing.

    This was originally reported by @berdir, so I think we can be quite sure the issue exists :)
    Looks like it's the AJAX calls that cause different kind of issues in this area, also see other issues.

  • 🇩🇪Germany Anybody Porta Westfalica

    Okay, I can now confirm we're also running into this issue! It appears several times per day for real checkouts.

    @jsacksick what do you think about the idea @Berdir suggested:

    Not fully thought through, but one possible solution could be to attempt the load the profile by UUID before trying to save it if it's new, to double-check that.

    I think this might be clever and shouldn't break things?

    If you agree, I'd ask @Grevil to implement the MR, we need this fixed asap!

  • 🇮🇱Israel jsacksick

    @jsacksick what do you think about the idea @Berdir suggested:

    I'm open to any solution that could fix this. The challenge would be reproducing this in a test, to ensure the fix works...

  • 🇩🇪Germany Anybody Porta Westfalica

    Thanks @jsacksick, I'll talk to @Grevil.

    Testing a race condition will be hard or even impossible, but we should test the called method to never create a duplicate, but return the existing entry (if existing). I think that's also what you were talking about.

  • First commit to issue fork.
  • 🇩🇪Germany Grevil

    I feel like the issue summary is a bit misleading. "validatePaneForm()" saves a "Shipment" entity, on which shipping profiles are being set on, if the "Shipment" Entity is NOT new!

    So I guess a better approach would be, to check if the shipment entity already has the shipping profile set, before adding it? Maybe that's what @berdir originally meant anyway.

  • 🇩🇪Germany Grevil

    Ok this could be the potential fix, I'll see if I can create a text soon!

  • Pipeline finished with Failed
    16 days ago
    Total: 280s
    #357580
  • 🇮🇱Israel jsacksick

    I don't believe this is the right fix... Also reading at the previous comments containing the stack trace, the problematic code seems to be in the LateOrderProcessor.
    Also, if this the place that needs to be fixed (from your MR), you shouldn't override the profile as you're essentially disregarding the date from the profile returned by the inline form. Instead you should make sure the profile isn't marked as new...

  • 🇩🇪Germany Anybody Porta Westfalica

    I don't believe this is the right fix... Also reading at the previous comments containing the stack trace, the problematic code seems to be in the LateOrderProcessor.

    I'm also not totally sure but I don't really believe yet, that #5 is the same issue... we'll try to collect further information once we're able to reproduce this.

    Instead you should make sure the profile isn't marked as new...

    That's already done below and doesn't work. I think the reason is that we'd need a transaction here then to ensure the PHP object status is not different from the database status. The race conditions seems to run this function twice concurrently and the save has been called already while the second save has an outdated object...

  • 🇮🇱Israel jsacksick

    That's already done below and doesn't work. I think the reason is that we'd need a transaction here then to ensure the PHP object status is not different from the database status. The race conditions seems to run this function twice concurrently and the save has been called already while the second save has an outdated object...

    Do you have a stacktrace to share for the exception? I'd really want to make sure we're fixing this at the right place.

  • 🇩🇪Germany Anybody Porta Westfalica

    Not yet, but it's on our radar. I'm quite sure it will happen again soon. BRB! And yes, of course I agree with that!

  • 🇩🇪Germany Anybody Porta Westfalica

    @jsacksick here we go! :)
    The interesting thing is, we have the exactly same Exception as Core and Commerce Shipping errors in log! (At the same time)
    With two different backtraces:

    Drupal\Core\Entity\EntityStorageException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '6b0f4fc0-14d9-4410-bb66-fc4f9e6b7f13' for key 'profile_field__uuid__value': INSERT INTO "wd_profile" ("revision_id", "type", "uuid", "status", "uid", "is_default", "data", "created", "changed") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8); Array ( [:db_insert_placeholder_0] => [:db_insert_placeholder_1] => customer [:db_insert_placeholder_2] => 6b0f4fc0-14d9-4410-bb66-fc4f9e6b7f13 [:db_insert_placeholder_3] => 1 [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => 0 [:db_insert_placeholder_6] => a:0:{} [:db_insert_placeholder_7] => 1733836124 [:db_insert_placeholder_8] => 1733836124 ) in Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (Zeile 817 in /web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php)

    php:

    #0 /web/core/lib/Drupal/Core/Entity/EntityBase.php(354): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save()
    #1 /web/modules/contrib/commerce_shipping/src/Plugin/Commerce/CheckoutPane/ShippingInformation.php(306): Drupal\Core\Entity\EntityBase->save()
    #2 [internal function]: Drupal\commerce_shipping\Plugin\Commerce\CheckoutPane\ShippingInformation->Drupal\commerce_shipping\Plugin\Commerce\CheckoutPane\{closure}()
    #3 /web/modules/contrib/commerce_shipping/src/Plugin/Commerce/CheckoutPane/ShippingInformation.php(304): array_map()
    #4 /web/modules/contrib/commerce/modules/checkout/src/Plugin/Commerce/CheckoutFlow/CheckoutFlowWithPanesBase.php(546): Drupal\commerce_shipping\Plugin\Commerce\CheckoutPane\ShippingInformation->buildPaneForm()
    #5 [internal function]: Drupal\commerce_checkout\Plugin\Commerce\CheckoutFlow\CheckoutFlowWithPanesBase->buildForm()
    #6 /web/core/lib/Drupal/Core/Form/FormBuilder.php(536): call_user_func_array()
    #7 /web/core/lib/Drupal/Core/Form/FormBuilder.php(375): Drupal\Core\Form\FormBuilder->retrieveForm()
    #8 /web/core/lib/Drupal/Core/Form/FormBuilder.php(633): Drupal\Core\Form\FormBuilder->rebuildForm()
    #9 /web/core/lib/Drupal/Core/Form/FormBuilder.php(326): Drupal\Core\Form\FormBuilder->processForm()
    #10 /web/core/lib/Drupal/Core/Form/FormBuilder.php(224): Drupal\Core\Form\FormBuilder->buildForm()
    #11 /web/modules/contrib/commerce/modules/checkout/src/Controller/CheckoutController.php(143): Drupal\Core\Form\FormBuilder->getForm()
    #12 [internal function]: Drupal\commerce_checkout\Controller\CheckoutController->formPage()
    #13 /web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array()
    #14 /web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
    #15 /web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext()
    #16 /web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext()
    #17 /vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
    #18 /vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
    #19 /web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
    #20 /web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
    #21 /web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
    #22 /web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
    #23 /web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
    #24 /web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
    #25 /web/core/modules/ban/src/BanMiddleware.php(50): Drupal\page_cache\StackMiddleware\PageCache->handle()
    #26 /web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\ban\BanMiddleware->handle()
    #27 /web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
    #28 /web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
    #29 /web/modules/contrib/remove_http_headers/src/StackMiddleware/RemoveHttpHeadersMiddleware.php(49): Drupal\Core\StackMiddleware\AjaxPageState->handle()
    #30 /web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\remove_http_headers\StackMiddleware\RemoveHttpHeadersMiddleware->handle()
    #31 /web/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
    #32 /web/index.php(19): Drupal\Core\DrupalKernel->handle()
    #33 {main}
    

    commerce_shipment:

    #0 /web/core/lib/Drupal/Core/Entity/EntityBase.php(354): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save()
    #1 /web/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php(320): Drupal\Core\Entity\EntityBase->save()
    #2 /web/modules/contrib/entity_reference_revisions/src/Plugin/Field/FieldType/EntityReferenceRevisionsItem.php(263): Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem->preSave()
    #3 /web/core/lib/Drupal/Core/Field/FieldItemList.php(233): Drupal\entity_reference_revisions\Plugin\Field\FieldType\EntityReferenceRevisionsItem->preSave()
    #4 /web/core/lib/Drupal/Core/Field/FieldItemList.php(191): Drupal\Core\Field\FieldItemList->delegateMethod()
    #5 /web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(938): Drupal\Core\Field\FieldItemList->preSave()
    #6 /web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(888): Drupal\Core\Entity\ContentEntityStorageBase->invokeFieldMethod()
    #7 /web/modules/contrib/commerce/src/CommerceContentEntityStorage.php(56): Drupal\Core\Entity\ContentEntityStorageBase->invokeHook()
    #8 /web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(529): Drupal\commerce\CommerceContentEntityStorage->invokeHook()
    #9 /web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(753): Drupal\Core\Entity\EntityStorageBase->doPreSave()
    #10 /web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(483): Drupal\Core\Entity\ContentEntityStorageBase->doPreSave()
    #11 /web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php(806): Drupal\Core\Entity\EntityStorageBase->save()
    #12 /web/core/lib/Drupal/Core/Entity/EntityBase.php(354): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save()
    #13 /web/modules/contrib/commerce_shipping/src/Plugin/Commerce/CheckoutPane/ShippingInformation.php(306): Drupal\Core\Entity\EntityBase->save()
    #14 [internal function]: Drupal\commerce_shipping\Plugin\Commerce\CheckoutPane\ShippingInformation->Drupal\commerce_shipping\Plugin\Commerce\CheckoutPane\{closure}()
    #15 /web/modules/contrib/commerce_shipping/src/Plugin/Commerce/CheckoutPane/ShippingInformation.php(304): array_map()
    #16 /web/modules/contrib/commerce/modules/checkout/src/Plugin/Commerce/CheckoutFlow/CheckoutFlowWithPanesBase.php(546): Drupal\commerce_shipping\Plugin\Commerce\CheckoutPane\ShippingInformation->buildPaneForm()
    #17 [internal function]: Drupal\commerce_checkout\Plugin\Commerce\CheckoutFlow\CheckoutFlowWithPanesBase->buildForm()
    #18 /web/core/lib/Drupal/Core/Form/FormBuilder.php(536): call_user_func_array()
    #19 /web/core/lib/Drupal/Core/Form/FormBuilder.php(375): Drupal\Core\Form\FormBuilder->retrieveForm()
    #20 /web/core/lib/Drupal/Core/Form/FormBuilder.php(633): Drupal\Core\Form\FormBuilder->rebuildForm()
    #21 /web/core/lib/Drupal/Core/Form/FormBuilder.php(326): Drupal\Core\Form\FormBuilder->processForm()
    #22 /web/core/lib/Drupal/Core/Form/FormBuilder.php(224): Drupal\Core\Form\FormBuilder->buildForm()
    #23 /web/modules/contrib/commerce/modules/checkout/src/Controller/CheckoutController.php(143): Drupal\Core\Form\FormBuilder->getForm()
    #24 [internal function]: Drupal\commerce_checkout\Controller\CheckoutController->formPage()
    #25 /web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array()
    #26 /web/core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
    #27 /web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(121): Drupal\Core\Render\Renderer->executeInRenderContext()
    #28 /web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext()
    #29 /vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
    #30 /vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
    #31 /web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
    #32 /web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
    #33 /web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
    #34 /web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
    #35 /web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
    #36 /web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
    #37 /web/core/modules/ban/src/BanMiddleware.php(50): Drupal\page_cache\StackMiddleware\PageCache->handle()
    #38 /web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\ban\BanMiddleware->handle()
    #39 /web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
    #40 /web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
    #41 /web/modules/contrib/remove_http_headers/src/StackMiddleware/RemoveHttpHeadersMiddleware.php(49): Drupal\Core\StackMiddleware\AjaxPageState->handle()
    #42 /web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\remove_http_headers\StackMiddleware\RemoveHttpHeadersMiddleware->handle()
    #43 /web/core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
    #44 /web/index.php(19): Drupal\Core\DrupalKernel->handle()
    #45 {main}
Production build 0.71.5 2024