Problem/Motivation

When upgrading from 8.8.0 to 8.9.0 and running drush updb I receive the following error. TypeError: Argument 1 passed to Drupal\views\ViewsConfigUpdater::processMultivalueBaseFieldHandler() must be of the type array, null given,

Any suggestions?

Steps to reproduce

Proposed resolution

In ConfigEntityUpdated, add the ability to report and log errors and to continue the update.

Add a new post update function to views to check for errors and report them.

Remaining tasks

Review
Commit

User interface changes

N/A

API changes

N/A

Data model changes

N/A

Release notes snippet

N/A

CommentFileSizeAuthor
#74 3145501-74-9.5.x.patch1.84 KBquietone
#74 3145501-74-9.4.x.patch17.14 KBquietone
#74 diff-71-74-9.4.txt1018 bytesquietone
#71 3145501-71-9.5.x.patch724 byteslongwave
#71 interdiff.3145501.60-71.9.4.x.txt877 byteslongwave
#71 3145501-71-9.4.x.patch16.81 KBlongwave
#66 3145501-66-10.x.patch765 bytesquietone
#60 3145501-60-9.4.x.patch17.1 KBquietone
#60 interdiff-59-60-9.4.x.txt3.99 KBquietone
#59 3145501-59-9.5.x.patch499 bytesquietone
#59 3145501-59-9.4.x.patch17.1 KBquietone
#59 interdiff-48-59-9.4.x.txt16.34 KBquietone
#51 3145501-48-9x.patch23.85 KBSpokje
#51 interdiff_9x_40-48.txt19.99 KBSpokje
#47 3145501-47-10x.patch5.38 KBSpokje
#47 interdiff_10x_40-47.txt1.33 KBSpokje
#44 3145501-40-10x.patch5.41 KBcatch
#40 3145501-2-40.patch17.02 KBalexpott
#40 34-40-interdiff.txt3.49 KBalexpott
#34 3145501-34.patch17.03 KBquietone
#34 interdiff-27-34.txt18.26 KBquietone
#34 watchdog.png32.96 KBquietone
#34 Updatepage.png14.34 KBquietone
#27 3145501-27.patch14.94 KBalexpott
#21 3145501-21.patch8.79 KBalexpott
#27 25-27-interdiff.txt609 bytesalexpott
#9 3145501-9.patch1.16 KBplach
#25 3145501-25.patch14.88 KBalexpott
#3 3145501-2.patch864 bytesplach
#25 21-25-interdiff.txt6.82 KBalexpott
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

smustgrave created an issue. See original summary.

xjm’s picture

  1. Do you have a full backtrace or any messages in your error logs?
  2. What happens if you try to update to 8.8.7 instead?
plach’s picture

Priority: Normal » Critical
Status: Active » Needs review
Issue tags: -8.9.0 update, -Drupal 8 upgrade path
FileSize
864 bytes

Does this help?

plach’s picture

smustgrave’s picture

Applied the patch locally and drush updb is able to complete! Thanks for the quick response @plach

larowlan’s picture

@smustgrave any chance you have a DB backup from before the update?

If so could you test a scenario for us?

If you have the 8.8 codebase + db backup and resave all your views from the UI and then attempt the update without this patch, does it pass?

Because the error is symptomatic of one of your views being broken.

Yes, we can add the extra guard in, but something is not right in your view and this patch won't solve that, so it may rear it's head again at a later point.

plach’s picture

@smustgrave:

Ok, before the patch is committed, we need to find the root cause: can you post the full stack trace and the yml export of the offending view?

smustgrave’s picture

I have an old DB from 8.8.0 but drush updb ran fine. We have several views not sure which could be the culprit.

This is the full error
> [notice] Update started: views_post_update_field_names_for_multivalue_fields
> [error] TypeError: Argument 1 passed to Drupal\views\ViewsConfigUpdater::processMultivalueBaseFieldHandler() must be of the type array, null given, called in C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docr
oot\core\modules\views\src\ViewsConfigUpdater.php on line 269 in Drupal\views\ViewsConfigUpdater->processMultivalueBaseFieldHandler() (line 337 of C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\module
s\views\src\ViewsConfigUpdater.php) #0 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\src\ViewsConfigUpdater.php(269): Drupal\views\ViewsConfigUpdater->processMultivalueBaseFieldHandler(
NULL, 'field', 'rendered_entity', 'page', Object(Drupal\views\Entity\View))
> #1 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\src\ViewsConfigUpdater.php(143): Drupal\views\ViewsConfigUpdater->Drupal\views\{closure}(NULL, 'field', 'rendered_entity', 'page')
> #2 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\src\ViewsConfigUpdater.php(270): Drupal\views\ViewsConfigUpdater->processDisplayHandlers(Object(Drupal\views\Entity\View), true, Objec
t(Closure))
> #3 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\views.post_update.php(396): Drupal\views\ViewsConfigUpdater->needsMultivalueBaseFieldUpdate(Object(Drupal\views\Entity\View))
> #4 [internal function]: {closure}(Object(Drupal\views\Entity\View))
> #5 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\lib\Drupal\Core\Config\Entity\ConfigEntityUpdater.php(128): call_user_func(Object(Closure), Object(Drupal\views\Entity\View))
> #6 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\views.post_update.php(397): Drupal\Core\Config\Entity\ConfigEntityUpdater->update(Array, 'view', Object(Closure))
> #7 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\src\Commands\core\UpdateDBCommands.php(308): views_post_update_field_names_for_multivalue_fields(Array)
> #8 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\includes\batch.inc(251): Drush\Commands\core\UpdateDBCommands::updateDoOnePostUpdate('views_post_upda...', Object(DrushBatchContext))
> #9 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\includes\batch.inc(196): _drush_batch_worker()
> #10 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\includes\batch.inc(99): _drush_batch_command('35360')
> #11 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\src\Commands\core\UpdateDBCommands.php(166): drush_batch_command('35360')
> #12 [internal function]: Drush\Commands\core\UpdateDBCommands->process('35360', Array)
> #13 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\consolidation\annotated-command\src\CommandProcessor.php(257): call_user_func_array(Array, Array)
> #14 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\consolidation\annotated-command\src\CommandProcessor.php(212): Consolidation\AnnotatedCommand\CommandProcessor->runCommandCallback(Array, Object(Consolid
ation\AnnotatedCommand\CommandData))
> #15 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\consolidation\annotated-command\src\CommandProcessor.php(176): Consolidation\AnnotatedCommand\CommandProcessor->validateRunAndAlter(Array, Array, Object(
Consolidation\AnnotatedCommand\CommandData))
> #16 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\consolidation\annotated-command\src\AnnotatedCommand.php(302): Consolidation\AnnotatedCommand\CommandProcessor->process(Object(Symfony\Component\Console\
Output\ConsoleOutput), Array, Array, Object(Consolidation\AnnotatedCommand\CommandData))
> #17 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\symfony\console\Command\Command.php(255): Consolidation\AnnotatedCommand\AnnotatedCommand->execute(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\C
omponent\Console\Output\ConsoleOutput))
> #18 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\symfony\console\Application.php(1005): Symfony\Component\Console\Command\Command->run(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Cons
ole\Output\ConsoleOutput))
> #19 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\symfony\console\Application.php(255): Symfony\Component\Console\Application->doRunCommand(Object(Consolidation\AnnotatedCommand\AnnotatedCommand), Object
(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
> #20 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\symfony\console\Application.php(148): Symfony\Component\Console\Application->doRun(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console
\Output\ConsoleOutput))
> #21 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\src\Runtime\Runtime.php(118): Symfony\Component\Console\Application->run(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Conso
le\Output\ConsoleOutput))
> #22 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\src\Runtime\Runtime.php(49): Drush\Runtime\Runtime->doRun(Array, Object(Symfony\Component\Console\Output\ConsoleOutput))
> #23 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\drush.php(72): Drush\Runtime\Runtime->run(Array)
> #24 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\drush(4): require('C:\\Users\\SMUSTG...')
> #25 {main}.
> TypeError: Argument 1 passed to Drupal\views\ViewsConfigUpdater::processMultivalueBaseFieldHandler() must be of the type array, null given, called in C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\m
odules\views\src\ViewsConfigUpdater.php on line 269 in C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\src\ViewsConfigUpdater.php on line 337 #0 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev
1\docroot\core\modules\views\src\ViewsConfigUpdater.php(269): Drupal\views\ViewsConfigUpdater->processMultivalueBaseFieldHandler(NULL, 'field', 'rendered_entity', 'page', Object(Drupal\views\Entity\View))
> #1 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\src\ViewsConfigUpdater.php(143): Drupal\views\ViewsConfigUpdater->Drupal\views\{closure}(NULL, 'field', 'rendered_entity', 'page')
> #2 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\src\ViewsConfigUpdater.php(270): Drupal\views\ViewsConfigUpdater->processDisplayHandlers(Object(Drupal\views\Entity\View), true, Objec
t(Closure))
> #3 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\views.post_update.php(396): Drupal\views\ViewsConfigUpdater->needsMultivalueBaseFieldUpdate(Object(Drupal\views\Entity\View))
> #4 [internal function]: {closure}(Object(Drupal\views\Entity\View))
> #5 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\lib\Drupal\Core\Config\Entity\ConfigEntityUpdater.php(128): call_user_func(Object(Closure), Object(Drupal\views\Entity\View))
> #6 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\views\views.post_update.php(397): Drupal\Core\Config\Entity\ConfigEntityUpdater->update(Array, 'view', Object(Closure))
> #7 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\src\Commands\core\UpdateDBCommands.php(308): views_post_update_field_names_for_multivalue_fields(Array)
> #8 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\includes\batch.inc(251): Drush\Commands\core\UpdateDBCommands::updateDoOnePostUpdate('views_post_upda...', Object(DrushBatchContext))
> #9 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\includes\batch.inc(196): _drush_batch_worker()
> #10 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\includes\batch.inc(99): _drush_batch_command('35360')
> #11 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\src\Commands\core\UpdateDBCommands.php(166): drush_batch_command('35360')
> #12 [internal function]: Drush\Commands\core\UpdateDBCommands->process('35360', Array)
> #13 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\consolidation\annotated-command\src\CommandProcessor.php(257): call_user_func_array(Array, Array)
> #14 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\consolidation\annotated-command\src\CommandProcessor.php(212): Consolidation\AnnotatedCommand\CommandProcessor->runCommandCallback(Array, Object(Consolid
ation\AnnotatedCommand\CommandData))
> #15 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\consolidation\annotated-command\src\CommandProcessor.php(176): Consolidation\AnnotatedCommand\CommandProcessor->validateRunAndAlter(Array, Array, Object(
Consolidation\AnnotatedCommand\CommandData))
> #16 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\consolidation\annotated-command\src\AnnotatedCommand.php(302): Consolidation\AnnotatedCommand\CommandProcessor->process(Object(Symfony\Component\Console\
Output\ConsoleOutput), Array, Array, Object(Consolidation\AnnotatedCommand\CommandData))
> #17 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\symfony\console\Command\Command.php(255): Consolidation\AnnotatedCommand\AnnotatedCommand->execute(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\C
omponent\Console\Output\ConsoleOutput))
> #18 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\symfony\console\Application.php(1005): Symfony\Component\Console\Command\Command->run(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Cons
ole\Output\ConsoleOutput))
> #19 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\symfony\console\Application.php(255): Symfony\Component\Console\Application->doRunCommand(Object(Consolidation\AnnotatedCommand\AnnotatedCommand), Object
(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
> #20 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\symfony\console\Application.php(148): Symfony\Component\Console\Application->doRun(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console
\Output\ConsoleOutput))
> #21 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\src\Runtime\Runtime.php(118): Symfony\Component\Console\Application->run(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Conso
le\Output\ConsoleOutput))
> #22 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\src\Runtime\Runtime.php(49): Drush\Runtime\Runtime->doRun(Array, Object(Symfony\Component\Console\Output\ConsoleOutput))
> #23 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\drush.php(72): Drush\Runtime\Runtime->run(Array)
> #24 C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\vendor\drush\drush\drush(4): require('C:\\Users\\SMUSTG...')
> #25 {main}
> [warning] Drush command terminated abnormally.

In ProcessBase.php line 188:

Unable to decode output into JSON: Syntax error

TypeError: Argument 1 passed to Drupal\views\ViewsConfigUpdater::processMultivalueBaseFieldHandler() must be of the type array, null given, called in C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\cor
e\modules\views\src\ViewsConfigUpdater.php on line 269 in Drupal\views\ViewsConfigUpdater->processMultivalueBaseFieldHandler() (line 337 of C:\Users\SMUSTGRA\Sites\devdesktop\cms-dev1\docroot\core\modules\
views\src\ViewsConfigUpdater.php).

plach’s picture

Can you try this patch? It will output the offending view name.

smustgrave’s picture

uuid: a381d52a-97e9-421a-8f40-9d241ae7885b
langcode: en
status: true
dependencies:
  config:
    - core.entity_view_mode.media.media_library
    - image.style.media_library
    - taxonomy.vocabulary.topic
  enforced:
    module:
      - media_library
  module:
    - image
    - media
    - media_library
    - taxonomy
    - user
    - views_bulk_operations
_core:
  default_config_hash: 1F1cSZ5MlvxdwjdyrwnH2I8CWngOp8Pu2SXDzix2QUc
id: media_library
label: 'Media library'
module: views
description: ''
tag: ''
base_table: media_field_data
base_field: mid
display:
  default:
    display_plugin: default
    id: default
    display_title: Master
    position: 0
    display_options:
      access:
        type: perm
        options:
          perm: 'access media overview'
      cache:
        type: tag
        options: {  }
      query:
        type: views_query
        options:
          disable_sql_rewrite: false
          distinct: false
          replica: false
          query_comment: ''
          query_tags: {  }
      exposed_form:
        type: basic
        options:
          submit_button: 'Apply Filters'
          reset_button: false
          reset_button_label: Reset
          exposed_sorts_label: 'Sort by'
          expose_sort_order: false
          sort_asc_label: Asc
          sort_desc_label: Desc
      pager:
        type: mini
        options:
          items_per_page: 25
          offset: 0
          id: 0
          total_pages: null
          expose:
            items_per_page: false
            items_per_page_label: 'Items per page'
            items_per_page_options: '5, 10, 25, 50'
            items_per_page_options_all: false
            items_per_page_options_all_label: '- All -'
            offset: false
            offset_label: Offset
          tags:
            previous: ‹‹
            next: ››
      style:
        type: table
        options:
          grouping: {  }
          row_class: ''
          default_row_class: true
          override: true
          sticky: true
          caption: ''
          summary: ''
          description: ''
          columns:
            views_bulk_operations_bulk_form: views_bulk_operations_bulk_form
            name: name
            bundle: bundle
          info:
            views_bulk_operations_bulk_form:
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            name:
              sortable: true
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
            bundle:
              sortable: true
              default_sort_order: asc
              align: ''
              separator: ''
              empty_column: false
              responsive: ''
          default: '-1'
          empty_table: true
      row:
        type: fields
        options:
          default_field_elements: true
          inline: {  }
          separator: ''
          hide_empty: false
      fields:
        media_bulk_form:
          id: media_bulk_form
          table: media
          field: media_bulk_form
          relationship: none
          group_type: group
          admin_label: ''
          label: ''
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: 'js-click-to-select-checkbox media-library-item__click-to-select-checkbox'
          element_label_type: ''
          element_label_class: ''
          element_label_colon: false
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          action_title: Action
          include_exclude: exclude
          selected_actions: {  }
          entity_type: media
          plugin_id: bulk_form
        rendered_entity:
          id: rendered_entity
          table: media
          field: rendered_entity
          relationship: none
          group_type: group
          admin_label: ''
          label: ''
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: media-library-item__content
          element_label_type: ''
          element_label_class: ''
          element_label_colon: false
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          view_mode: media_library
          entity_type: media
          plugin_id: rendered_entity
      filters:
        status:
          id: status
          table: media_field_data
          field: status
          relationship: none
          group_type: group
          admin_label: ''
          operator: '='
          value: '1'
          group: 1
          exposed: true
          expose:
            operator_id: ''
            label: 'Publishing status'
            description: null
            use_operator: false
            operator: status_op
            identifier: status
            required: true
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: true
          group_info:
            label: Published
            description: ''
            identifier: status
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items:
              1:
                title: Published
                operator: '='
                value: '1'
              2:
                title: Unpublished
                operator: '='
                value: '0'
          plugin_id: boolean
          entity_type: media
          entity_field: status
        name:
          id: name
          table: media_field_data
          field: name
          relationship: none
          group_type: group
          admin_label: ''
          operator: allwords
          value: ''
          group: 1
          exposed: true
          expose:
            operator_id: name_op
            label: Name
            description: ''
            use_operator: false
            operator: name_op
            operator_limit_selection: false
            operator_list: {  }
            identifier: name
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
              content_editor: '0'
              approver: '0'
              senior_approver: '0'
            placeholder: ''
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
          entity_type: media
          entity_field: name
          plugin_id: string
        bundle:
          id: bundle
          table: media_field_data
          field: bundle
          relationship: none
          group_type: group
          admin_label: ''
          operator: in
          value: {  }
          group: 1
          exposed: true
          expose:
            operator_id: bundle_op
            label: 'Media type'
            description: ''
            use_operator: false
            operator: bundle_op
            identifier: type
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
            reduce: false
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: false
          group_info:
            label: 'Media type'
            description: null
            identifier: bundle
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items:
              1: {  }
              2: {  }
              3: {  }
          entity_type: media
          entity_field: bundle
          plugin_id: bundle
        field_topics_target_id:
          id: field_topics_target_id
          table: media__field_topics
          field: field_topics_target_id
          relationship: none
          group_type: group
          admin_label: ''
          operator: or
          value: {  }
          group: 1
          exposed: true
          expose:
            operator_id: field_topics_target_id_op
            label: 'Topics (field_topics)'
            description: ''
            use_operator: false
            operator: field_topics_target_id_op
            identifier: field_topics_target_id
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
              content_editor: '0'
              approver: '0'
              senior_approver: '0'
            reduce: false
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
          reduce_duplicates: false
          type: select
          limit: true
          vid: topic
          hierarchy: false
          error_message: true
          plugin_id: taxonomy_index_tid
        uid:
          id: uid
          table: users_field_data
          field: uid
          relationship: uid
          group_type: group
          admin_label: ''
          operator: in
          value: {  }
          group: 1
          exposed: true
          expose:
            operator_id: uid_op
            label: 'Name (autocomplete)'
            description: ''
            use_operator: false
            operator: uid_op
            identifier: uid
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
              content_editor: '0'
              approver: '0'
              senior_approver: '0'
            reduce: false
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
          entity_type: user
          entity_field: uid
          plugin_id: user_name
        field_contentid_value:
          id: field_contentid_value
          table: media__field_contentid
          field: field_contentid_value
          relationship: none
          group_type: group
          admin_label: ''
          operator: contains
          value: ''
          group: 1
          exposed: true
          expose:
            operator_id: field_contentid_value_op
            label: ContentID
            description: ''
            use_operator: false
            operator: field_contentid_value_op
            identifier: field_contentid_value
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
              content_editor: '0'
              approver: '0'
              senior_approver: '0'
            placeholder: ''
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
          plugin_id: string
        langcode:
          id: langcode
          table: media_field_data
          field: langcode
          relationship: none
          group_type: group
          admin_label: ''
          operator: in
          value: {  }
          group: 1
          exposed: true
          expose:
            use_operator: false
            remember: false
            operator_id: langcode_op
            multiple: false
            description: ''
            required: false
            reduce: false
            label: Language
            operator_limit_selection: false
            operator: langcode_op
            identifier: langcode
            operator_list: {  }
            remember_roles:
              administrator: '0'
              authenticated: authenticated
              anonymous: '0'
          is_grouped: false
          group_info:
            widget: select
            group_items: {  }
            multiple: false
            description: ''
            default_group_multiple: {  }
            default_group: All
            label: ''
            identifier: ''
            optional: true
            remember: false
          entity_type: media
          entity_field: langcode
          plugin_id: language
        status_extra:
          group_info:
            widget: select
            group_items: {  }
            multiple: false
            description: ''
            default_group_multiple: {  }
            default_group: All
            label: ''
            identifier: ''
            optional: true
            remember: false
          group: 1
          relationship: none
          exposed: false
          expose:
            use_operator: false
            remember: false
            operator_id: ''
            multiple: false
            description: ''
            required: false
            label: ''
            operator_limit_selection: false
            operator: ''
            identifier: ''
            operator_list: {  }
            remember_roles:
              authenticated: authenticated
          entity_type: media
          value: ''
          field: status_extra
          is_grouped: false
          admin_label: ''
          operator: '='
          table: media_field_data
          plugin_id: media_status
          id: status_extra
          group_type: group
      sorts:
        created:
          id: created
          table: media_field_data
          field: created
          relationship: none
          group_type: group
          admin_label: ''
          order: DESC
          exposed: true
          expose:
            label: 'Newest first'
          granularity: second
          entity_type: media
          entity_field: created
          plugin_id: date
        name:
          id: name
          table: media_field_data
          field: name
          relationship: none
          group_type: group
          admin_label: ''
          order: ASC
          exposed: true
          expose:
            label: 'Name (A-Z)'
          entity_type: media
          entity_field: name
          plugin_id: standard
        name_1:
          id: name_1
          table: media_field_data
          field: name
          relationship: none
          group_type: group
          admin_label: ''
          order: DESC
          exposed: true
          expose:
            label: 'Name (Z-A)'
          entity_type: media
          entity_field: name
          plugin_id: standard
      title: Media
      header: {  }
      footer: {  }
      empty:
        area_text_custom:
          id: area_text_custom
          table: views
          field: area_text_custom
          relationship: none
          group_type: group
          admin_label: ''
          empty: true
          tokenize: false
          content: 'No media available.'
          plugin_id: text_custom
      relationships:
        uid:
          id: uid
          table: media_field_data
          field: uid
          relationship: none
          group_type: group
          admin_label: User
          required: true
          entity_type: media
          entity_field: uid
          plugin_id: standard
      display_extenders: {  }
      use_ajax: true
      css_class: 'media-library-view js-media-library-view'
    cache_metadata:
      max-age: 0
      contexts:
        - 'languages:language_content'
        - 'languages:language_interface'
        - url
        - url.query_args
        - 'url.query_args:sort_by'
        - user
        - user.permissions
      tags:
        - 'config:core.entity_view_display.media.audio.default'
        - 'config:core.entity_view_display.media.audio.media_library'
        - 'config:core.entity_view_display.media.document.default'
        - 'config:core.entity_view_display.media.document.embedded'
        - 'config:core.entity_view_display.media.document.file_list'
        - 'config:core.entity_view_display.media.document.media_library'
        - 'config:core.entity_view_display.media.document.thumbnail'
        - 'config:core.entity_view_display.media.ebook.default'
        - 'config:core.entity_view_display.media.ebook.media_library'
        - 'config:core.entity_view_display.media.flash_file.default'
        - 'config:core.entity_view_display.media.flash_file.media_library'
        - 'config:core.entity_view_display.media.html_page.default'
        - 'config:core.entity_view_display.media.html_page.media_library'
        - 'config:core.entity_view_display.media.image.default'
        - 'config:core.entity_view_display.media.image.embedded'
        - 'config:core.entity_view_display.media.image.file_list'
        - 'config:core.entity_view_display.media.image.media_library'
        - 'config:core.entity_view_display.media.image.thumbnail'
        - 'config:core.entity_view_display.media.video.default'
        - 'config:core.entity_view_display.media.video.embedded'
        - 'config:core.entity_view_display.media.video.media_library'
        - 'config:core.entity_view_display.media.video.thumbnail'
        - 'config:core.entity_view_display.media.video_types.default'
        - 'config:core.entity_view_display.media.video_types.media_library'
        - 'config:core.entity_view_display.media.xml.default'
        - 'config:core.entity_view_display.media.xml.media_library'
        - 'config:core.entity_view_display.media.zip.default'
        - 'config:core.entity_view_display.media.zip.media_library'
  page:
    display_plugin: page
    id: page
    display_title: Page
    position: 1
    display_options:
      display_extenders: {  }
      path: admin/content/media-grid
      menu:
        type: none
        title: 'Media Library'
        description: 'Allows users to browse and administer media items'
        expanded: false
        parent: system.admin_content
        weight: 5
        context: '0'
        menu_name: admin
      defaults:
        relationships: true
        fields: false
      fields:
        views_bulk_operations_bulk_form:
          id: views_bulk_operations_bulk_form
          table: views
          field: views_bulk_operations_bulk_form
          relationship: none
          group_type: group
          admin_label: ''
          label: ''
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: js-click-to-select-checkbox
          element_label_type: ''
          element_label_class: ''
          element_label_colon: false
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          batch: true
          batch_size: 10
          form_step: true
          buttons: false
          clear_on_exposed: false
          action_title: Action
          selected_actions:
            -
              action_id: views_bulk_operations_delete_entity
              preconfiguration:
                label_override: 'Delete Media Item'
            -
              action_id: vbo_force_file_delete_action
              preconfiguration:
                label_override: ''
            -
              action_id: 'entity:publish_action:media'
              preconfiguration:
                label_override: ''
            -
              action_id: 'entity:save_action:media'
              preconfiguration:
                label_override: ''
            -
              action_id: 'entity:unpublish_action:media'
              preconfiguration:
                label_override: ''
          plugin_id: views_bulk_operations_bulk_form
        bundle:
          id: bundle
          table: media_field_data
          field: bundle
          relationship: none
          group_type: group
          admin_label: ''
          label: 'Media type'
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: true
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          click_sort_column: target_id
          type: entity_reference_label
          settings:
            link: false
          group_column: target_id
          group_columns: {  }
          group_rows: true
          delta_limit: 0
          delta_offset: 0
          delta_reversed: false
          delta_first_last: false
          multi_type: separator
          separator: ', '
          field_api_classes: false
          entity_type: media
          entity_field: bundle
          plugin_id: field
        name:
          id: name
          table: media_field_data
          field: name
          relationship: none
          group_type: group
          admin_label: ''
          label: Name
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: true
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          click_sort_column: value
          type: string
          settings:
            link_to_entity: true
          group_column: value
          group_columns: {  }
          group_rows: true
          delta_limit: 0
          delta_offset: 0
          delta_reversed: false
          delta_first_last: false
          multi_type: separator
          separator: ', '
          field_api_classes: false
          entity_type: media
          entity_field: name
          plugin_id: field
        operations:
          id: operations
          table: media
          field: operations
          relationship: none
          group_type: group
          admin_label: ''
          label: 'Operations links'
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: true
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          destination: false
          entity_type: media
          plugin_id: entity_operations
        name_1:
          id: name_1
          table: users_field_data
          field: name
          relationship: uid
          group_type: group
          admin_label: ''
          label: Author
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: true
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          click_sort_column: value
          type: user_name
          settings:
            link_to_entity: false
          group_column: value
          group_columns: {  }
          group_rows: true
          delta_limit: 0
          delta_offset: 0
          delta_reversed: false
          delta_first_last: false
          multi_type: separator
          separator: ', '
          field_api_classes: false
          entity_type: user
          entity_field: name
          plugin_id: field
        edit_media:
          id: edit_media
          table: media
          field: edit_media
          relationship: none
          group_type: group
          admin_label: ''
          label: ''
          exclude: false
          alter:
            alter_text: true
            text: 'Edit {{ name }}'
            make_link: true
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: 'Edit {{ name }}'
            rel: ''
            link_class: media-library-item__edit
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: false
          element_wrapper_type: '0'
          element_wrapper_class: ''
          element_default_classes: false
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          text: Edit
          output_url_as_text: false
          absolute: false
          entity_type: media
          plugin_id: entity_link_edit
        delete_media:
          id: delete_media
          table: media
          field: delete_media
          relationship: none
          group_type: group
          admin_label: ''
          label: ''
          exclude: false
          alter:
            alter_text: true
            text: 'Delete {{ name }}'
            make_link: true
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: 'Delete {{ name }}'
            rel: ''
            link_class: media-library-item__remove
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: false
          element_wrapper_type: '0'
          element_wrapper_class: ''
          element_default_classes: false
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          text: Delete
          output_url_as_text: false
          absolute: false
          entity_type: media
          plugin_id: entity_link_delete
        rendered_entity: null
    cache_metadata:
      max-age: 0
      contexts:
        - 'languages:language_content'
        - 'languages:language_interface'
        - url
        - url.query_args
        - 'url.query_args:sort_by'
        - user
        - user.permissions
      tags: {  }
  widget:
    display_plugin: page
    id: widget
    display_title: 'Widget (table)'
    position: 4
    display_options:
      display_extenders: {  }
      path: admin/content/media-widget-table
      css_class: 'media-library-view js-media-library-view media-library-view--widget'
      defaults:
        css_class: false
        style: false
        row: false
        fields: false
        access: false
        filters: false
        filter_groups: false
        arguments: false
        header: false
      style:
        type: table
        options:
          row_class: 'media-library-item media-library-item--table js-media-library-item js-click-to-select'
          default_row_class: true
      row:
        type: fields
      fields:
        media_library_select_form:
          id: media_library_select_form
          label: ''
          table: media
          field: media_library_select_form
          relationship: none
          entity_type: media
          plugin_id: media_library_select_form
          element_wrapper_class: 'js-click-to-select-checkbox media-library-item__click-to-select-checkbox'
          element_class: ''
        thumbnail__target_id:
          id: thumbnail__target_id
          label: Thumbnail
          table: media_field_data
          field: thumbnail__target_id
          relationship: none
          type: image
          entity_type: media
          entity_field: thumbnail
          plugin_id: field
          settings:
            image_style: media_library
            image_link: ''
        name:
          id: name
          label: Name
          table: media_field_data
          field: name
          relationship: none
          type: string
          entity_type: media
          entity_field: name
          plugin_id: field
          settings:
            link_to_entity: false
        uid:
          id: uid
          label: Author
          table: media_field_revision
          field: uid
          relationship: none
          type: entity_reference_label
          entity_type: media
          entity_field: uid
          plugin_id: field
          settings:
            link: true
        changed:
          id: changed
          label: Updated
          table: media_field_data
          field: changed
          relationship: none
          type: timestamp
          entity_type: media
          entity_field: changed
          plugin_id: field
          settings:
            date_format: short
            custom_date_format: ''
            timezone: ''
      access:
        type: perm
        options:
          perm: 'view media'
      filters:
        status:
          id: status
          table: media_field_data
          field: status
          relationship: none
          group_type: group
          admin_label: ''
          operator: '='
          value: '1'
          group: 1
          exposed: false
          expose:
            operator_id: ''
            label: ''
            description: ''
            use_operator: false
            operator: ''
            identifier: ''
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
          entity_type: media
          entity_field: status
          plugin_id: boolean
        name:
          id: name
          table: media_field_data
          field: name
          relationship: none
          group_type: group
          admin_label: ''
          operator: contains
          value: ''
          group: 1
          exposed: true
          expose:
            operator_id: name_op
            label: Name
            description: ''
            use_operator: false
            operator: name_op
            identifier: name
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
          entity_type: media
          entity_field: name
          plugin_id: string
        default_langcode:
          id: default_langcode
          table: media_field_data
          field: default_langcode
          relationship: none
          group_type: group
          admin_label: ''
          operator: '='
          value: '1'
          group: 1
          exposed: false
          expose:
            use_operator: false
            remember: false
            operator_id: ''
            multiple: false
            description: ''
            required: false
            label: ''
            operator_limit_selection: false
            operator: ''
            identifier: ''
            operator_list: {  }
            remember_roles:
              authenticated: authenticated
          is_grouped: false
          group_info:
            widget: select
            group_items: {  }
            multiple: false
            description: ''
            default_group_multiple: {  }
            default_group: All
            label: ''
            identifier: ''
            optional: true
            remember: false
          entity_type: media
          entity_field: default_langcode
          plugin_id: boolean
      filter_groups:
        operator: AND
        groups:
          1: AND
      arguments:
        bundle:
          id: bundle
          table: media_field_data
          field: bundle
          relationship: none
          group_type: group
          admin_label: ''
          default_action: ignore
          exception:
            value: all
            title_enable: false
            title: All
          title_enable: false
          title: ''
          default_argument_type: fixed
          default_argument_options:
            argument: ''
          default_argument_skip_url: false
          summary_options:
            base_path: ''
            count: true
            items_per_page: 25
            override: false
          summary:
            sort_order: asc
            number_of_records: 0
            format: default_summary
          specify_validation: false
          validate:
            type: none
            fail: 'not found'
          validate_options: {  }
          glossary: false
          limit: 0
          case: none
          path_case: none
          transform_dash: false
          break_phrase: false
          entity_type: media
          entity_field: bundle
          plugin_id: string
      header:
        display_link_table:
          id: display_link_table
          table: views
          field: display_link
          relationship: none
          group_type: group
          admin_label: Table
          empty: true
          display_id: widget
          label: Table
          plugin_id: display_link
      rendering_language: '***LANGUAGE_language_interface***'
    cache_metadata:
      max-age: -1
      contexts:
        - 'languages:language_interface'
        - url
        - url.query_args
        - 'url.query_args:sort_by'
        - user.permissions
      tags: {  }
  widget_grid:
    display_plugin: page
    id: widget_grid
    display_title: Widget
    position: 2
    display_options:
      display_extenders: {  }
      path: admin/content/media-widget
      fields:
        rendered_entity:
          id: rendered_entity
          table: media
          field: rendered_entity
          relationship: none
          group_type: group
          admin_label: ''
          label: ''
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: media-library-item__content
          element_label_type: ''
          element_label_class: ''
          element_label_colon: false
          element_wrapper_type: ''
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          view_mode: media_library
          entity_type: media
          plugin_id: rendered_entity
        media_library_select_form:
          id: media_library_select_form
          table: media
          field: media_library_select_form
          relationship: none
          group_type: group
          admin_label: ''
          label: ''
          exclude: false
          alter:
            alter_text: false
            text: ''
            make_link: false
            path: ''
            absolute: false
            external: false
            replace_spaces: false
            path_case: none
            trim_whitespace: false
            alt: ''
            rel: ''
            link_class: ''
            prefix: ''
            suffix: ''
            target: ''
            nl2br: false
            max_length: 0
            word_boundary: true
            ellipsis: true
            more_link: false
            more_link_text: ''
            more_link_path: ''
            strip_tags: false
            trim: false
            preserve_tags: ''
            html: false
          element_type: ''
          element_class: ''
          element_label_type: ''
          element_label_class: ''
          element_label_colon: false
          element_wrapper_type: ''
          element_wrapper_class: js-click-to-select-checkbox
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          entity_type: media
          plugin_id: media_library_select_form
      defaults:
        fields: false
        access: false
        filters: false
        filter_groups: false
        arguments: false
        css_class: false
        header: false
      display_description: ''
      access:
        type: perm
        options:
          perm: 'view media'
      filters:
        status:
          id: status
          table: media_field_data
          field: status
          relationship: none
          group_type: group
          admin_label: ''
          operator: '='
          value: '1'
          group: 1
          exposed: false
          expose:
            operator_id: ''
            label: ''
            description: ''
            use_operator: false
            operator: ''
            identifier: ''
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
          entity_type: media
          entity_field: status
          plugin_id: boolean
        name:
          id: name
          table: media_field_data
          field: name
          relationship: none
          group_type: group
          admin_label: ''
          operator: contains
          value: ''
          group: 1
          exposed: true
          expose:
            operator_id: name_op
            label: Name
            description: ''
            use_operator: false
            operator: name_op
            identifier: name
            required: false
            remember: false
            multiple: false
            remember_roles:
              authenticated: authenticated
              anonymous: '0'
              administrator: '0'
            operator_limit_selection: false
            operator_list: {  }
          is_grouped: false
          group_info:
            label: ''
            description: ''
            identifier: ''
            optional: true
            widget: select
            multiple: false
            remember: false
            default_group: All
            default_group_multiple: {  }
            group_items: {  }
          entity_type: media
          entity_field: name
          plugin_id: string
      filter_groups:
        operator: AND
        groups:
          1: AND
      arguments:
        bundle:
          id: bundle
          table: media_field_data
          field: bundle
          relationship: none
          group_type: group
          admin_label: ''
          default_action: ignore
          exception:
            value: all
            title_enable: false
            title: All
          title_enable: false
          title: ''
          default_argument_type: fixed
          default_argument_options:
            argument: ''
          default_argument_skip_url: false
          summary_options:
            base_path: ''
            count: true
            items_per_page: 25
            override: false
          summary:
            sort_order: asc
            number_of_records: 0
            format: default_summary
          specify_validation: false
          validate:
            type: none
            fail: 'not found'
          validate_options: {  }
          glossary: false
          limit: 0
          case: none
          path_case: none
          transform_dash: false
          break_phrase: false
          entity_type: media
          entity_field: bundle
          plugin_id: string
      css_class: 'media-library-view js-media-library-view media-library-view--widget'
      header:
        display_link_grid:
          id: display_link_grid
          table: views
          field: display_link
          relationship: none
          group_type: group
          admin_label: Grid
          empty: true
          display_id: widget_grid
          label: Grid
          plugin_id: display_link
        display_link_table:
          id: display_link_table
          table: views
          field: display_link
          relationship: none
          group_type: group
          admin_label: Table
          empty: true
          display_id: widget
          label: Table
          plugin_id: display_link
      enabled: false
    cache_metadata:
      max-age: -1
      contexts:
        - 'languages:language_interface'
        - url
        - url.query_args
        - 'url.query_args:sort_by'
        - user.permissions
      tags:
        - 'config:core.entity_view_display.media.audio.default'
        - 'config:core.entity_view_display.media.audio.media_library'
        - 'config:core.entity_view_display.media.document.default'
        - 'config:core.entity_view_display.media.document.embedded'
        - 'config:core.entity_view_display.media.document.file_list'
        - 'config:core.entity_view_display.media.document.media_library'
        - 'config:core.entity_view_display.media.document.thumbnail'
        - 'config:core.entity_view_display.media.ebook.default'
        - 'config:core.entity_view_display.media.ebook.media_library'
        - 'config:core.entity_view_display.media.flash_file.default'
        - 'config:core.entity_view_display.media.flash_file.media_library'
        - 'config:core.entity_view_display.media.html_page.default'
        - 'config:core.entity_view_display.media.html_page.media_library'
        - 'config:core.entity_view_display.media.image.default'
        - 'config:core.entity_view_display.media.image.embedded'
        - 'config:core.entity_view_display.media.image.file_list'
        - 'config:core.entity_view_display.media.image.media_library'
        - 'config:core.entity_view_display.media.image.thumbnail'
        - 'config:core.entity_view_display.media.video.default'
        - 'config:core.entity_view_display.media.video.embedded'
        - 'config:core.entity_view_display.media.video.media_library'
        - 'config:core.entity_view_display.media.video.thumbnail'
        - 'config:core.entity_view_display.media.video_types.default'
        - 'config:core.entity_view_display.media.video_types.media_library'
        - 'config:core.entity_view_display.media.xml.default'
        - 'config:core.entity_view_display.media.xml.media_library'
        - 'config:core.entity_view_display.media.zip.default'
        - 'config:core.entity_view_display.media.zip.media_library'
larowlan’s picture

the issue is this

rendered_entity: null

Under displays -> page -> fields

Does that persist if you resave from the UI?

Do you have your config under version control (e.g. git)

if so, can you do some git forensics on that line?

smustgrave’s picture

I checked the view and realized I had a broken handler. Once I removed refreshed an old DB and the update ran fine.

larowlan’s picture

Priority: Critical » Normal

Ok, let's bump this down then

Thanks @smustgrave

plach’s picture

Thanks for all the info @smustgrave!

catch’s picture

Status: Needs review » Needs work
+++ b/core/modules/views/src/ViewsConfigUpdater.php
@@ -140,6 +141,10 @@ protected function processDisplayHandlers(ViewEntityInterface $view, $return_on_
         if (!empty($display['display_options'][$handler_type_plural])) {
           foreach ($display['display_options'][$handler_type_plural] as $key => &$handler) {
+            if (!is_array($handler)) {
+              \Drupal::messenger()->addError('Corrupt view data for: ' . $view->id());
+              continue;
+            }

So skipping the bad views config, with a log message like "Unable to update views configuration for $view->id, please review the view in the Views UI and resave it, checking for issues such as broken handler" in a log message seems like all we can do here.

alexpott’s picture

Should we consider catching exceptions in all the public needs* methods in ViewsConfigUpdater and logging? Or maybe we should do this in the associated post update functions because then we could return the messages as well so the user will see them after the update.

So for example \views_post_update_field_names_for_multivalue_fields() becomes something like:

/**
 * Update field names for multi-value base fields.
 */
function views_post_update_field_names_for_multivalue_fields(&$sandbox = NULL) {
  $logger = \Drupal::logger('update');
  $messages = [];
  /** @var \Drupal\views\ViewsConfigUpdater $view_config_updater */
  $view_config_updater = \Drupal::classResolver(ViewsConfigUpdater::class);
  $view_config_updater->setDeprecationsEnabled(FALSE);
  \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'view', function ($view) use ($view_config_updater, $logger, $messages) {
    try {
      return $view_config_updater->needsMultivalueBaseFieldUpdate($view);
    }
    catch (\Throwable $e) {
      $context['view'] = $view->id();
      $context += \Drupal\Core\Utility\Error::decodeException($e);
      $logger->error('Unable to update view  @view due to error @message %function (line %line of %file). <pre>@backtrace_string</pre>', $context);
      $messages[] = t('Unable to update view  @view due to error @message %function (line %line of %file).', $context);
    }
  });
  return $messages;
}
xjm’s picture

Priority: Normal » Major

I still think this is at least major; no matter how we fix this upgrade path it still surfaces more issues.

mxwright’s picture

Priority: Major » Normal

I agree with @xjm, I just ran into this error on drush updatedb and had to find this issue and work through the patches before identifying my problematic view and (hopefully) fixing it. Not an ideal update scenario for 8.9.0.

And agree with @catch on skipping the bad view and identifying it in a log- that would be great.

mxwright’s picture

Priority: Normal » Major

Didn't mean to change the priority..

plach’s picture

I'm not sure why we should block the update on fixing the view: the same fix will be applied even if the view is saved after that the update has run. I think skipping the broken handler + logging should give us a more user/developer-friendly solution.

alexpott’s picture

Status: Needs work » Needs review
FileSize
8.79 KB

So #16 is not going to work because the error is triggered when $entity->save() is called by \Drupal\Core\Config\Entity\ConfigEntityUpdater::update() - so I think we need to add the ability to continue on a report errors to that. Which is no bad thing because then all config entity updates are going to get this ability.

Here's a failing test case.

alexpott’s picture

Note this issue should probably end up doing #3121008: Add test coverage for ViewsConfigUpdater as this issue affects 9.x too.

Status: Needs review » Needs work

The last submitted patch, 21: 3145501-21.patch, failed testing. View results

plach’s picture

Disregard #20, I misunderstood what #15 was suggesting :)

alexpott’s picture

Status: Needs work » Needs review
Related issues: +#3145667: Add a new system report that validates entities
FileSize
6.82 KB
14.88 KB

So here's an implementation for continuing on even when a view is broken.

While implementing this I became more and more unsure about whether this is a good idea. It feels like we're riding a broken bike and instead of getting off to repair it we're continuing to upgrade other parts while cycling towards a brick wall and the broken part is the brakes and at some point we're going to be close to the wall to stop. Isn't this a bit like disabled modules? An idea that, whilst it sounds great, in practice it turns out to be a data integrity nightmare. Maybe we're better off investing in #3145667: Add a new system report that validates entities?

Status: Needs review » Needs work

The last submitted patch, 25: 3145501-25.patch, failed testing. View results

alexpott’s picture

Status: Needs work » Needs review
FileSize
609 bytes
14.94 KB

Fixing the test namespaces so that it can run.

@catch and I discussed this issue...

catch:
I was kind of thinking we should catch the exception in the update and show a warning, but show the error on saves to force people to fix the configuration (whether it's config import

alexpott:
Catching the exception isn’t enough though we also have to @ the save :( because of php notices
But the problem of upgrading invalid entities is never going to go away. Hence the reporting issue

catch:
Can't we leave the PHP notices in?
We don't want to suppress the error we just don't want it to be fatal.

alexpott:
Tricky for tests :) we convert them to fails - I log the error and tell the user to check the logs.
Also if someone has turned off notices you’re not gonna see them. And depending where they occur in the batch the user might never see them even if they have them turned on.

catch:
No but we could log on top of that, and they'd get them if they save from the UI.

alexpott:
That’s pretty much what’s implemented except for the notices being silenced during the update cause tests
But I’m still a bit suspicious of just skipping something - even with logging - and saying the update is completed but there are errors - I think it also might make real errors that our updates cause harder to track.

catch:
So I would be for a hook_update_N() because it is user data, but for config entities it's a bit different IMO.

alexpott:
I guess it depends on the config entity. A view maybe it’s justified skipping and continuing but field storage maybe different.

So the patch attached pretty much implements what @catch wants - we log the view with the error, we continue to update, we inform the user the error has occurred. The one really icky bit is

+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
@@ -125,13 +134,51 @@ public function update(array &$sandbox, $entity_type_id, callable $callback = NU
+        if ($continue_on_error) {
+          // If we're continuing on error silence errors from notices that
+          // missing indexes.
+          // @todo consider change this to an error handler that converts such
+          //   notices to exceptions.
+          @$this->doOne($entity, $callback);
+        }
+        else {
+          $this->doOne($entity, $callback);
+        }

We need the silenced call to ::doOne because ignoring notices in update tests is really hard. Doing $this->config('system.logging')->set('error_level', ERROR_REPORTING_HIDE)->save(); doesn't work because we hard code errors to appear when in MAINTENANCE_MODE - see error_displayable() - and then we convert all notices to exceptions in \Drupal\Core\Test\HttpClientMiddleware\TestHttpClientMiddleware.

catch’s picture

If we don't use @suppression when saving views/importing configuration, I think it is probably OK to keep the suppression in the update, because site admins will run into it elsewhere.

+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
@@ -125,13 +134,51 @@ public function update(array &$sandbox, $entity_type_id, callable $callback = NU
+      $entity_type = $this->entityTypeManager->getDefinition($entity_type_id);
+      // @todo consider linking to the logger but what about syslog?
+      return new TranslatableMarkup("Updates failed for the entity type %entity_type. Check the logs.", ['%entity_type' => $entity_type->getLabel()]);
+    }

Looks like this could also include the entity ID too in the message? In other places where we want to link to logs, we've done ::moduleExists() for dblog and add the link conditionally - given this is a data integrity issue I think it's worth the effort.

alexpott’s picture

+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
@@ -125,13 +134,51 @@ public function update(array &$sandbox, $entity_type_id, callable $callback = NU
+    if ($sandbox[self::SANDBOX_KEY]['failed_updates']) {
+      $entity_type = $this->entityTypeManager->getDefinition($entity_type_id);
+      // @todo consider linking to the logger but what about syslog?
+      return new TranslatableMarkup("Updates failed for the entity type %entity_type. Check the logs.", ['%entity_type' => $entity_type->getLabel()]);
+    }

The reason I didn't put the entity ID in this message is that this is a 1 to n problem. Putting a message per failed config entity could possibly completely overwhelm the update results page.

+1 on the conditional link to dblog.

catch’s picture

Could we just do a list of entity IDs then: "The following %entity_type could not be updated: %entity_ids" or similar. Given it's an error message I don't think we need to bother with correct plural formatting on top of conditional linking, but good to list if we can.

Version: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

quietone’s picture

Updating the patch per the last few comments. Add checking for dblog and adding a list of the entity_ids that fail.

Update page from the test

And watchdog. Note there are now two sets of error message. There are two because views_post_update_image_lazy_load will also fail, unless it is run to allow errors.

catch’s picture

+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
@@ -125,13 +136,64 @@ public function update(array &$sandbox, $entity_type_id, callable $callback = NU
+        $context['%entity_type'] = $entity_type_id;
+        $context += Error::decodeException($throwable);
+        \Drupal::logger('update')->error('Unable to update %entity_type %view due to error @message %function (line %line of %file). <pre>@backtrace_string</pre>', $context);
+        $sandbox[self::SANDBOX_KEY]['entity_ids'][] = $entity->id();

Is there a reason to manually decode the exception instead of using watchdog_exception()?

Otherwise this looks great to me.

quietone’s picture

alexpott may want to answer that beca

I didn't dig too deep but the try/catch caches a \Throwable and watchdog_exception argument expects an \Exception not a \Throwable, so that causes errors. I then changed to catching an \Exception to see what happens, and now ConfigUpdater fails in the callback function.

catch’s picture

Status: Needs review » Reviewed & tested by the community

Throwable vs. Exception makes sense, let's leave it as is. Given all that, I think this is ready to go.

catch’s picture

Issue tags: +Drupal 10 beta blocker

Technically this should block a 9.5 beta, but we don't have a specific tag for that, so let's do this.

alexpott’s picture

Status: Reviewed & tested by the community » Needs work
  1. +++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
    @@ -111,6 +120,8 @@ public function update(array &$sandbox, $entity_type_id, callable $callback = NU
    +      $sandbox[self::SANDBOX_KEY]['failed_updates'] = FALSE;
    +      $sandbox[self::SANDBOX_KEY]['entity_ids'] = [];
    

    I think this would be better to have a single key of
    $sandbox[self::SANDBOX_KEY]['failed_entity_ids']

  2. +++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
    @@ -125,13 +136,64 @@ public function update(array &$sandbox, $entity_type_id, callable $callback = NU
    +    if ($sandbox[self::SANDBOX_KEY]['failed_updates']) {
    

    Then this would be if (!empty($sandbox[self::SANDBOX_KEY]['failed_entity_ids']) {

    I think this leads to cleaner and more consistent info in $sandbox.

  3. +++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
    @@ -125,13 +136,64 @@ public function update(array &$sandbox, $entity_type_id, callable $callback = NU
    +   * @param $entity
    +   *   The entity to potentially update.
    +   * @param callable $callback
    +   *   The callback to apply.
    +   */
    +  protected function doOne($entity, callable $callback) {
    

    I think $entity can have ConfigEntityInterface

alexpott’s picture

Status: Needs work » Needs review
FileSize
3.49 KB
17.02 KB

Oh I wrote some of this patch so I should just resolve #39....

Status: Needs review » Needs work

The last submitted patch, 40: 3145501-2-40.patch, failed testing. View results

quietone’s picture

Status: Needs work » Needs review

Failure in Drupal\Tests\ckeditor5\FunctionalJavascript\MediaLibraryTest::testButton, re-testing.

Spokje’s picture

Status: Needs review » Reviewed & tested by the community

- Was reviewed and RTBC-ed by @catch in #37
- Changes by @alexpott in #40 address his own nitpicks in #39.
- Interdiff provided in #40 changes only the addressed issues.
- TestBot returns green after those changes.

RTBC for me.

catch’s picture

Status: Reviewed & tested by the community » Needs review
FileSize
5.41 KB

We need the API addition in 10.x too, attaching a patch that is just those hunks without the 9.x test changes.

longwave’s picture

+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
@@ -125,13 +135,63 @@ public function update(array &$sandbox, $entity_type_id, callable $callback = NU
+      // @todo consider linking to the logger but what about syslog?
+      if (\Drupal::moduleHandler()->moduleExists('dblog')) {

The @todo can be removed now we have the conditional check on dblog?

Spokje’s picture

The @todo can be removed now we have the conditional check on dblog?

The @todo was introduced in patch #27 when there was no if branch for the dblog module.

Not sure what happens with the current code when you have syslog enabled, but it seems we don't worry too much about that elsewhere in core.

I'm happy for it to be removed. I'll do so, you can RTBC and a core committer can decide which version of the patches to use?

Spokje’s picture

10x version with the @todo mentioned by @longwave removed and a follow-up issue mentioned in the remaining todo.

longwave’s picture

9.5.x patch also has the @todo, but I guess it doesn't matter too much.

catch’s picture

+1 to removing the @todo, I can remove on commit for 9.5 (if I remember at the time).

Spokje’s picture

Working on the 9.5 patch between bites of (TV-)dinner :)

Spokje’s picture

Same for 9.x, interdiff is a bit wonky since my patch doesn't want to do the copy like the original one.

longwave’s picture

Status: Needs review » Reviewed & tested by the community

Looks good to me.

  • catch committed 66e81d7 on 10.0.x
    Issue #3145501 by alexpott, Spokje, plach, quietone, catch, smustgrave,...

  • catch committed 9865997 on 10.1.x
    Issue #3145501 by alexpott, Spokje, plach, quietone, catch, smustgrave,...
catch’s picture

Status: Reviewed & tested by the community » Patch (to be ported)
Issue tags: +Needs release manager review

Committed/pushed to 10.1.x, cherry-picked to 10.0.x and 9.5.x, thanks!

Since this can prevent updates from 8.9, I think we should consider backporting it to 9.4.x too, but since there's a (small) API addition, tagging for extra opinions.

  • catch committed 04d7a53 on 9.5.x
    Issue #3145501 by alexpott, Spokje, plach, quietone, catch, smustgrave,...
longwave’s picture

Status: Patch (to be ported) » Needs work

Discussed the possibility of backport to 9.4.x with @catch and @alexpott. We are in favour, especially given that sites can still go from 8.8 to 9.4, but then when re-reviewing the patch I spotted this:

+++ b/core/modules/views/views.post_update.php
@@ -37,13 +37,13 @@ function views_removed_post_updates() {
-function views_post_update_field_names_for_multivalue_fields(&$sandbox = NULL) {
+function views_post_update_field_names_for_multivalue_fields_followup(&$sandbox = NULL) {

I think this change was made in error. We should not remove or rename post update hooks once they have been set up; however we cannot revert this now from 9.5.x without breaking sites that upgraded to beta1 or beta2. Fortunately, there should be no harm done if this update is run twice. Therefore I propose keeping this as-is, but also re-adding the original views_post_update_field_names_for_multivalue_fields() back as a no-op to solve this in both 9.4.x and 9.5.x. This should be added to 9.4.x before it can be backported, and a separate small patch is needed for 9.5.x to add it there as well.

catch’s picture

Priority: Major » Critical
Issue tags: +Drupal 10 rc blocker

Bumping up to critical to add the new stub update.

quietone’s picture

Apologies for the extra work. Thanks to @longwave for the text for the doc block.

quietone’s picture

Silly me. Need to remove extra space from summary comment line.

Status: Needs review » Needs work

The last submitted patch, 60: 3145501-60-9.4.x.patch, failed testing. View results

quietone’s picture

Status: Needs work » Needs review

Test failure is from Drupal\Tests\ckeditor5\FunctionalJavascript\MediaLibraryTest::testButton, which is not listed at #2829040: [meta] Known intermittent, random, and environment-specific test failures, retesting.

catch’s picture

Status: Needs review » Reviewed & tested by the community

Both the 9.5 and 9.4 patches look right to me.

alexpott’s picture

Status: Reviewed & tested by the community » Needs work

We also need to decide what to do with 10.0.x I think the answer is to add views_post_update_field_names_for_multivalue_fields_followup to views_removed_post_updates)_.

catch’s picture

#64 is correct we should add it to removed post updates in 10.x

quietone’s picture

Yes, I just didn't get to this yesterday.

longwave’s picture

The problem with adding it to removed post updates now is that, as the tests show, you can no longer upgrade from 9.4.0 to 10.0.0; we either need to skip this change in 10.0.x or make a call that 9.4.9 will be the minimum version to upgrade from (and update the fixtures and do all the other associated work with this change).

For me I think skipping the change in 10.0.x is fine, as long as the user has run views_post_update_field_names_for_multivalue_fields we can assume that they either ran it before this commit or they have run it following this commit and also got views_post_update_field_names_for_multivalue_fields_followup at the same time.

alexpott’s picture

@longwave would another option be to not rename the update. We've not released this yet so if we don't rename it then everything is fine right? I guess we renamed it to have it run again - but if it failed the first time why do we need to rename it. It got renamed in #34 with no discussion as to why.

Edit: linked to wrong comment where update rename was introduced.

longwave’s picture

If by "not rename" you mean not rename in 9.4.x, and then revert the rename in 9.5.x? So:

  • for 9.4.x it is a single new update, and they get this bug fixed
  • for 9.5.0 beta users, they lose the _followup update, and gain the original version back, but it doesn't matter if they run this twice (and technically we don't need to support this, but also we shouldn't break their upgrade path unless we have to)
  • for 10.0.x users no patch is needed and there is no change

So this is probably the best course of action?

alexpott’s picture

Yep #69 is exactly what I mean

longwave’s picture

Implemented #68/69.

catch’s picture

Don't really want to muddy the waters further but there's one issue with #68/#69.

If we add an update to 9.4, but don't add it to 9.5/10.0, then users who update to that version of 9.4, but no other users, will have that update logged as having run permanently in their system. If we ever add back an update with the same name later, the later update won't run.

So a variation on #68/69 would be the following:

1. Add the new update as a no-op to 10.x, then it can be moved to removed post updates in 11.x

2. Add it to 9.5.x as well as 9.4.x.

We don't have a way to clear out old removed post updates from the entire system either, but if we eventually do one day, this would help for consistency there too.

quietone’s picture

Status: Needs review » Needs work

I forced (don't wait for branch to pass) the tests on 9.4 in #71 to run. Although, locally that fails because views_post_update_field_names_for_multivalue_fields is included in the post updates that have run.

quietone’s picture

Status: Needs work » Needs review
FileSize
1018 bytes
17.14 KB
1.84 KB

That's odd, I did not set this to NW.

This removes 'views_post_update_field_names_for_multivalue_fields' from the list of existing update functions which allows the update test to run successfully.

The last submitted patch, 71: 3145501-71-9.4.x.patch, failed testing. View results

Status: Needs review » Needs work

The last submitted patch, 74: 3145501-74-9.5.x.patch, failed testing. View results

quietone’s picture

Status: Needs work » Needs review

All the failure bar one are functionaljavascript test which are not having a good day today. The other one is from 9.4.x and is also checking an element, which seems to be a common problem in the random failures.

1) Drupal\Tests\system\Functional\SecurityAdvisories\SecurityAdvisoryTest::testPsa
Behat\Mink\Exception\ElementNotFoundException: Element matching css "h3#error ~ details.system-status-report__entry:contains("Critical security announcements")" not found.

Therefor, setting this to NR

longwave’s picture

@catch views_post_update_field_names_for_multivalue_fields already exists in 9.4.x and is marked as removed in 10.0.x. views_post_update_field_names_for_multivalue_fields_followup exists in 9.5.x.

If we commit #74 then this puts 9.5.x back in sync by renaming views_post_update_field_names_for_multivalue_fields_followup to views_post_update_field_names_for_multivalue_fields. However, the only users that will have run the removed _followup update is anyone who has upgraded to a beta or dev release of 9.5.0. Is this worth worrying about?

catch’s picture

OK I got confused by #69 but I think I get it now:

1. We remove the renamed update from 9.5 because it only ever landed in a beta.

2. We backport the fixes for the update to 9.4, but there is no 'new update' anywhere, just the existing one that was already there.

No changes necessary for 10.x

In which case the worst that can happen is 9.5 beta sites have some cruft in key/value, but it's by far the simplest option.

Status: Needs review » Needs work

The last submitted patch, 74: 3145501-74-9.5.x.patch, failed testing. View results

catch’s picture

Status: Needs work » Reviewed & tested by the community
Issue tags: -Needs release manager review

Have been hoping someone else would RTBC this so I could commit it, but it's been about a week, so maybe if I RTBC it someone else can either commit it or +1.

longwave’s picture

RTBC+1 though I posted #71.

  • catch committed 888dea0 on 9.4.x
    Issue #3145501 by quietone, alexpott, Spokje, longwave, plach, catch,...
  • catch committed 56990e5 on 9.5.x
    Issue #3145501 by quietone, alexpott, Spokje, longwave, plach, catch,...
catch’s picture

Status: Reviewed & tested by the community » Fixed

Committed/pushed to 9.5.x and 9.4.x respectively thanks!

effulgentsia’s picture

Since this is no longer blocking beta or RC, removing those tags.

I'm tagging this for release notes in case we think it's important to inform site owners about this there. Though I'm not totally up to speed on this issue, so if release notes aren't needed, we can remove those tags.

catch’s picture

I think the one thing we could mention in release notes is that if you're stuck on Drupal 8.8, you could try updating directly to Drupal 9.4, so you're running the fixed version of this update instead of the not-fixed version in 8.9.x.

Something like:

Drupal 9.4.x has fixed an issue that could prevent some sites, especially those on Drupal 8.8 or lower with invalid configuration entities, updating to newer versions. If your site is on Drupal 8.8.x, you should consider updating directly to Drupal 9.4.x so that you're able to run the fixed version of the update. Sites on versions lower than Drupal 8.8 must update to Drupal 8.8 first, and can then update directly to Drupal 9.4 from there. If you are on Drupal 8.9, you can continue to update directly to Drupal 9.4.

According to https://www.drupal.org/project/usage/drupal there are still over 40,000 sites on <= 8.8.

longwave’s picture

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.