Problem/Motivation

On a migration I'm doing from D7 to D9, it seems like the media types are not migrating properly. Currently my migration is failing in upgrade_d7_field_formatter_settings because one of the field formatters refers to a view mode which doesn't exist, resulting in this error:

[error] Error: Call to a member function getConfigDependencyName() on null in Drupal\Core\Entity\EntityDisplayBase->calculateDependencies() (line 289 of /var/www/html/web/core/lib/Drupal/Core/Entity/EntityDisplayBase.php) #0 /var/www/html/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php(318): Drupal\Core\Entity\EntityDisplayBase->calculateDependencies()

Looking at the D7 site there are five media types and the image file type has three view modes configured in addition to the default. At the point the failure happens only one media type exists ("image") and none of the custom view modes for the media type exist on the D9 site (they don't just as view modes which can be enabled on the Image media type).

Right now I'm using the current dev snapshot of media_migration with #3181174 and #3181180 applied.

My suspicion is that the view modes are not being generated properly, and that maybe the media types should be migrated before it gets to the fields, field widgets and formatters.

For what it's worth, here's the list of migration plugins per the migrate:status command:

  • upgrade_book_settings
  • upgrade_commerce1_cart_settings
  • upgrade_commerce1_shipping_flat_rate
  • upgrade_commerce1_tax_type
  • upgrade_d6_book_settings
  • upgrade_d7_dblog_settings
  • upgrade_d7_filter_settings
  • upgrade_d7_global_theme_settings
  • upgrade_d7_image_settings
  • upgrade_d7_image_styles
  • upgrade_d7_language_content_menu_settings
  • upgrade_d7_language_types
  • upgrade_d7_node_settings
  • upgrade_d7_pathauto_settings
  • upgrade_d7_search_settings
  • upgrade_d7_system_authorize
  • upgrade_d7_system_cron
  • upgrade_d7_system_date
  • upgrade_d7_system_file
  • upgrade_d7_system_mail
  • upgrade_d7_system_performance
  • upgrade_d7_theme_settings
  • upgrade_d7_user_flood
  • upgrade_d7_user_mail
  • upgrade_d7_user_settings
  • upgrade_file_settings
  • upgrade_menu_settings
  • upgrade_system_image
  • upgrade_system_image_gd
  • upgrade_system_logging
  • upgrade_system_maintenance
  • upgrade_system_rss
  • upgrade_system_site
  • upgrade_taxonomy_settings
  • upgrade_text_settings
  • upgrade_update_settings
  • upgrade_block_content_type
  • upgrade_d7_field_collection_type
  • upgrade_block_content_body_field
  • upgrade_block_content_entity_display
  • upgrade_block_content_entity_form_display
  • upgrade_commerce1_currency
  • upgrade_d7_filter_format
  • upgrade_d7_user_role
  • upgrade_d7_metatag_field_user
  • upgrade_d7_metatag_field_instance_user
  • upgrade_d7_metatag_field_instance_widget_settings_user
  • upgrade_commerce1_product_type
  • upgrade_commerce1_product_variation_type
  • upgrade_d7_field
  • upgrade_d7_file_entity_type_image
  • upgrade_d7_node_type
  • upgrade_d7_taxonomy_vocabulary
  • upgrade_d7_field_instance
  • upgrade_d7_file
  • upgrade_language
  • upgrade_default_language
  • upgrade_user_picture_field
  • upgrade_user_picture_field_instance
  • upgrade_user_picture_entity_display
  • upgrade_user_picture_entity_form_display
  • upgrade_d7_user
  • upgrade_commerce1_store
  • upgrade_commerce1_product_variation_donation
  • upgrade_commerce1_product_variation_product
  • upgrade_commerce1_order_item_type
  • upgrade_commerce1_order_item_product
  • upgrade_commerce1_profile_type
  • upgrade_commerce1_profile_billing
  • upgrade_commerce1_profile_shipping
  • upgrade_commerce1_order
  • upgrade_commerce1_payment_gateway
  • upgrade_commerce1_payment
  • upgrade_d7_field_collection_related_links
  • upgrade_commerce1_product_article
  • upgrade_commerce1_product_attribute
  • upgrade_commerce1_product_product_display
  • upgrade_commerce1_profile_revision_billing
  • upgrade_commerce1_profile_revision_shipping
  • upgrade_d7_custom_block
  • upgrade_d7_block
  • upgrade_d7_metatag_field_node
  • upgrade_d7_metatag_field_instance_node_advice
  • upgrade_d7_metatag_field_instance_widget_settings_node_advice
  • upgrade_d7_node_complete_advice
  • upgrade_d7_field_collection_revisions_related_links
  • upgrade_d7_metatag_field_instance_node_advice_topic
  • upgrade_d7_metatag_field_instance_widget_settings_node_advice_topic
  • upgrade_d7_node_complete_advice_topic
  • upgrade_d7_metatag_field_instance_node_archive
  • upgrade_d7_metatag_field_instance_widget_settings_node_archive
  • upgrade_d7_node_complete_archive
  • upgrade_d7_metatag_field_instance_node_chapter
  • upgrade_d7_metatag_field_instance_widget_settings_node_chapter
  • upgrade_d7_node_complete_chapter
  • upgrade_d7_node_complete_e_letter
  • upgrade_d7_metatag_field_instance_node_gallery
  • upgrade_d7_metatag_field_instance_widget_settings_node_gallery
  • upgrade_d7_node_complete_gallery
  • upgrade_d7_metatag_field_instance_node_glossary_term
  • upgrade_d7_metatag_field_instance_widget_settings_node_glossary_term
  • upgrade_d7_node_complete_glossary_term
  • upgrade_d7_metatag_field_instance_node_page
  • upgrade_d7_metatag_field_instance_widget_settings_node_page
  • upgrade_d7_node_complete_page
  • upgrade_d7_node_complete_panel
  • upgrade_d7_metatag_field_instance_node_teacher
  • upgrade_d7_metatag_field_instance_widget_settings_node_teacher
  • upgrade_d7_node_complete_teacher
  • upgrade_d7_node_complete_webform
  • upgrade_d7_book
  • upgrade_d7_view_modes
  • upgrade_d7_field_formatter_settings
  • upgrade_d7_field_instance_widget_settings
  • upgrade_d7_file_entity_type_audio
  • upgrade_d7_file_entity_source_field_audio
  • upgrade_d7_file_entity_source_field_config_audio
  • upgrade_d7_file_entity_audio_public
  • upgrade_d7_file_entity_type_document_private
  • upgrade_d7_file_entity_source_field_document_private
  • upgrade_d7_file_entity_source_field_config_document_private
  • upgrade_d7_file_private
  • upgrade_d7_file_entity_document_private
  • upgrade_d7_file_entity_type_document
  • upgrade_d7_file_entity_source_field_document
  • upgrade_d7_file_entity_source_field_config_document
  • upgrade_d7_file_entity_document_public
  • upgrade_d7_file_entity_formatter_audio
  • upgrade_d7_file_entity_formatter_document
  • upgrade_d7_file_entity_formatter_document_private
  • upgrade_d7_file_entity_source_field_image
  • upgrade_d7_file_entity_source_field_config_image
  • upgrade_d7_file_entity_formatter_image
  • upgrade_d7_file_entity_type_remote_video
  • upgrade_d7_file_entity_source_field_remote_video
  • upgrade_d7_file_entity_source_field_config_remote_video
  • upgrade_d7_file_entity_formatter_remote_video
  • upgrade_d7_file_entity_image_public
  • upgrade_d7_file_entity_video_youtube
  • upgrade_d7_file_entity_widget_audio
  • upgrade_d7_file_entity_widget_document
  • upgrade_d7_file_entity_widget_document_private
  • upgrade_d7_file_entity_widget_image
  • upgrade_d7_file_entity_widget_remote_video
  • upgrade_d7_file_plain_type_document_private
  • upgrade_d7_file_plain_source_field_document_private
  • upgrade_d7_file_plain_source_field_config_document_private
  • upgrade_d7_file_plain_formatter_document_private
  • upgrade_d7_file_plain_private_text
  • upgrade_d7_file_plain_widget_document_private
  • upgrade_d7_language_content_settings
  • upgrade_d7_language_negotiation_settings
  • upgrade_d7_media_view_modes
  • upgrade_d7_menu
  • upgrade_d7_menu_links
  • upgrade_d7_metatag_field_instance_node_article
  • upgrade_d7_metatag_field_instance_node_product_display
  • upgrade_d7_metatag_field_taxonomy_term
  • upgrade_d7_metatag_field_instance_taxonomy_term_shop_categories
  • upgrade_d7_metatag_field_instance_taxonomy_term_topics
  • upgrade_d7_metatag_field_instance_widget_settings_node_article
  • upgrade_d7_metatag_field_instance_widget_settings_node_product_display
  • upgrade_d7_metatag_field_instance_widget_settings_taxonomy_term_shop_categories
  • upgrade_d7_metatag_field_instance_widget_settings_taxonomy_term_topics
  • upgrade_d7_node_title_label
  • upgrade_d7_pathauto_patterns
  • upgrade_d7_shortcut_set
  • upgrade_d7_shortcut
  • upgrade_d7_shortcut_set_users
  • upgrade_d7_taxonomy_term_shop_categories
  • upgrade_d7_taxonomy_term_topics
  • upgrade_d7_taxonomy_term_tags
  • upgrade_d7_taxonomy_term_gallery_metadata
  • upgrade_d7_url_alias
  • upgrade_language_prefixes_and_domains

Proposed resolution

?

Remaining tasks

?

User interface changes

?

API changes

?

Data model changes

?

Comments

DamienMcKenna created an issue. See original summary.

damienmckenna’s picture

That patch did not make any difference, it still failed when it tried to migrate field formatter settings for a view mode that didn't exist.

damienmckenna’s picture

I manually exported the config, changed upgrade_d7_field_formatter_settings to the following:

migration_dependencies:
  required:
    - upgrade_d7_field_instance
    - upgrade_d7_media_view_modes
    - upgrade_d7_view_modes

I ran upgrade_d7_media_view_modes first, then reset-status and rollback'd upgrade_d7_field_formatter_settings before running it again, but it didn't fix the problem, it still failed with the same error :-\

damienmckenna’s picture

Note: after upgrade_d7_media_view_modes ran it *did* at least have the view modes available. I wonder if the view mode needs to be enabled first, because none of them were?

damienmckenna’s picture

I managed to get phpstorm debugging the migrate:import process.. when it fails it is processing a "link" field named "field_link" on the "image" media type.

Is there anything I could provide that might help identify the source of this problem?

damienmckenna’s picture

Title: View modes not properly migrated? » Migrate custom view modes
Category: Bug report » Feature request

Per huzooka during the 2021-03-18 migrate meeting:

BTW media migration does not migrate the entity form and display modes

Changing this to a feature request.

damienmckenna’s picture

Here's what I'm using to work around this:

/**
 * Implements hook_migrate_prepare_row().
 */
function MYMODULE_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
  static $poop = FALSE;
  // Media Migration doesn't support custom view modes.
  // @see https://www.drupal.org/project/media_migration/issues/3199596
  if ($migration->id() == 'upgrade_d7_field_formatter_settings') {
    $entity_type = $row->getSourceProperty('entity_type');
    $bundle = $row->getSourceProperty('bundle');
    if ($entity_type == 'file' && $bundle == 'image') {
      throw new MigrateSkipRowException("Skipped image fields.");
    }
  }
}