Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Experimental] Add support for permission migration API #1080

Merged
merged 23 commits into from
Mar 27, 2024

Conversation

nkvuong
Copy link
Contributor

@nkvuong nkvuong commented Mar 21, 2024

Changes

  • Add experimental support for group permission migrations using new API. The new workflow is called migrate-groups-experimental which uses the new API for all permissions migration, except for Legacy Table ACL which still leverage the current approach.
  • This API does not require specifying resources to migrate, which simplify the codebase
  • Extend integration tests for both existing & new code path.
  • Add initial performance testing code. Initial results suggests that the new API has much better scaling behaviour

Linked issues

Resolves #380

Functionality

  • added new workflow: migrate-groups-experimental

Tests

  • manually tested
  • added unit tests
  • added integration tests
  • verified on staging environment (screenshot attached)

Copy link

codecov bot commented Mar 21, 2024

Codecov Report

Attention: Patch coverage is 74.54545% with 14 lines in your changes are missing coverage. Please review.

Project coverage is 89.72%. Comparing base (32e3bda) to head (43312d8).

Files Patch % Lines
src/databricks/labs/ucx/runtime.py 54.83% 13 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1080      +/-   ##
==========================================
+ Coverage   89.67%   89.72%   +0.05%     
==========================================
  Files          61       61              
  Lines        7166     7221      +55     
  Branches     1290     1296       +6     
==========================================
+ Hits         6426     6479      +53     
- Misses        477      478       +1     
- Partials      263      264       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@nfx nfx added the migrate/groups Corresponds to Migrate Groups Step of go/uc/upgrade label Mar 21, 2024
@nfx
Copy link
Collaborator

nfx commented Mar 25, 2024

Context: we have some workspaces 3M permission tasks and it takes 70-75hours with the current RPS. 24-32hrs downtime phase is tolerable.

def migrate_permission(workspace_id, workspace_group_name, account_group_name):
self._ws.permission_migration.migrate_permissions(workspace_id, workspace_group_name, account_group_name)

applier_tasks: list[Callable[..., None]] = []
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be sequential, based on the design doc and we just need to check the amount of migrated/remaining records.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@nkvuong nkvuong force-pushed the feature/permission_migration_api branch from bffac2b to a1630cc Compare March 25, 2024 19:39
@nkvuong nkvuong marked this pull request as ready for review March 25, 2024 20:13
@nkvuong nkvuong requested review from a team and zpappa March 25, 2024 20:13
@nkvuong nkvuong changed the title Initial commit for permission migration API support [Experimental] Add support for permission migration API Mar 25, 2024
Copy link

github-actions bot commented Mar 25, 2024

❌ 128/132 passed, 2 flaky, 4 failed, 20 skipped, 1h30m8s total

❌ test_migrate_external_table: databricks.labs.blueprint.parallel.ManyError: Detected 1 failures: BadRequest: PERMISSION_DENIED: Failed to get credentials: Storage Credential TEST_STORAGE_CREDENTIAL is not configured correctly. Please contact the owner or your account admin to update the configuration. (12.838s)
databricks.labs.blueprint.parallel.ManyError: Detected 1 failures: BadRequest: PERMISSION_DENIED: Failed to get credentials: Storage Credential TEST_STORAGE_CREDENTIAL is not configured correctly. Please contact the owner or your account admin to update the configuration.
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_si8xd: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_si8xd
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_si8xd', metastore_id=None, name='ucx_si8xd', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
[gw7] linux -- Python 3.10.13 /home/runner/work/ucx/ucx/.venv/bin/python
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_si8xd: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_si8xd
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_si8xd', metastore_id=None, name='ucx_si8xd', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_sreji: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_sreji
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_sreji', metastore_id=None, name='ucx_sreji', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added make_dbfs_data_copy fixture: dbfs:/mnt/TEST_MOUNT_NAME/a/b/25VZ
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Table hive_metastore.ucx_sreji.ucx_toeew: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_sreji/ucx_toeew
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.CSV: 'CSV'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_sreji.ucx_toeew', metastore_id=None, name='ucx_toeew', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_sreji', sql_path=None, storage_credential_name=None, storage_location='dbfs:/mnt/TEST_MOUNT_NAME/a/b/25VZ', table_constraints=None, table_id=None, table_type=<TableType.EXTERNAL: 'EXTERNAL'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added catalog fixture: CatalogInfo(browse_only=False, catalog_type=<CatalogType.MANAGED_CATALOG: 'MANAGED_CATALOG'>, comment='', connection_name=None, created_at=1711541215333, created_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cfvmc', isolation_mode=<IsolationMode.OPEN: 'OPEN'>, metastore_id='8952c1e3-b265-4adf-98c3-6f755e2e1453', name='ucx_cfvmc', options=None, owner='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', properties=None, provider_name=None, provisioning_info=None, securable_kind=<CatalogInfoSecurableKind.CATALOG_STANDARD: 'CATALOG_STANDARD'>, securable_type='CATALOG', share_name=None, storage_location=None, storage_root=None, updated_at=1711541215333, updated_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d')
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Schema ucx_cfvmc.ucx_sreji: https://DATABRICKS_HOST/explore/data/ucx_cfvmc/ucx_sreji
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='ucx_cfvmc', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cfvmc.ucx_sreji', metastore_id=None, name='ucx_sreji', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:06 INFO [tests.integration.hive_metastore.test_migrate] dst_catalog=ucx_cfvmc, external_table=hive_metastore.ucx_sreji.ucx_toeew
12:06 DEBUG [databricks.labs.ucx.hive_metastore.table_migrate] Migrating external table hive_metastore.ucx_sreji.ucx_toeew to using SQL query: SYNC TABLE ucx_cfvmc.ucx_sreji.ucx_toeew FROM hive_metastore.ucx_sreji.ucx_toeew;
12:07 ERROR [databricks.labs.blueprint.parallel] migrate tables task failed: PERMISSION_DENIED: Failed to get credentials: Storage Credential TEST_STORAGE_CREDENTIAL is not configured correctly. Please contact the owner or your account admin to update the configuration.
Traceback (most recent call last):
  File "/home/runner/work/ucx/ucx/.venv/lib/python3.10/site-packages/databricks/labs/blueprint/parallel.py", line 135, in inner
    return func(*args, **kwargs), None
  File "/home/runner/work/ucx/ucx/src/databricks/labs/ucx/hive_metastore/table_migrate.py", line 111, in _migrate_table
    return self._migrate_external_table(src_table, rule, grants)
  File "/home/runner/work/ucx/ucx/src/databricks/labs/ucx/hive_metastore/table_migrate.py", line 128, in _migrate_external_table
    self._backend.execute(src_table.sql_alter_from(rule.as_uc_table_key, self._ws.get_workspace_id()))
  File "/home/runner/work/ucx/ucx/.venv/lib/python3.10/site-packages/databricks/labs/lsql/backends.py", line 142, in execute
    self._sql.execute(sql)
  File "/home/runner/work/ucx/ucx/.venv/lib/python3.10/site-packages/databricks/labs/lsql/core.py", line 238, in execute
    self._raise_if_needed(status)
  File "/home/runner/work/ucx/ucx/.venv/lib/python3.10/site-packages/databricks/labs/lsql/core.py", line 473, in _raise_if_needed
    raise error_class(error_message)
databricks.sdk.errors.platform.BadRequest: PERMISSION_DENIED: Failed to get credentials: Storage Credential TEST_STORAGE_CREDENTIAL is not configured correctly. Please contact the owner or your account admin to update the configuration.
12:07 CRITICAL [databricks.labs.blueprint.parallel] All 'migrate tables' tasks failed!!!
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_si8xd: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_si8xd
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_si8xd', metastore_id=None, name='ucx_si8xd', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_sreji: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_sreji
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_sreji', metastore_id=None, name='ucx_sreji', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added make_dbfs_data_copy fixture: dbfs:/mnt/TEST_MOUNT_NAME/a/b/25VZ
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Table hive_metastore.ucx_sreji.ucx_toeew: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_sreji/ucx_toeew
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.CSV: 'CSV'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_sreji.ucx_toeew', metastore_id=None, name='ucx_toeew', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_sreji', sql_path=None, storage_credential_name=None, storage_location='dbfs:/mnt/TEST_MOUNT_NAME/a/b/25VZ', table_constraints=None, table_id=None, table_type=<TableType.EXTERNAL: 'EXTERNAL'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added catalog fixture: CatalogInfo(browse_only=False, catalog_type=<CatalogType.MANAGED_CATALOG: 'MANAGED_CATALOG'>, comment='', connection_name=None, created_at=1711541215333, created_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cfvmc', isolation_mode=<IsolationMode.OPEN: 'OPEN'>, metastore_id='8952c1e3-b265-4adf-98c3-6f755e2e1453', name='ucx_cfvmc', options=None, owner='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', properties=None, provider_name=None, provisioning_info=None, securable_kind=<CatalogInfoSecurableKind.CATALOG_STANDARD: 'CATALOG_STANDARD'>, securable_type='CATALOG', share_name=None, storage_location=None, storage_root=None, updated_at=1711541215333, updated_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d')
12:06 INFO [databricks.labs.ucx.mixins.fixtures] Schema ucx_cfvmc.ucx_sreji: https://DATABRICKS_HOST/explore/data/ucx_cfvmc/ucx_sreji
12:06 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='ucx_cfvmc', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cfvmc.ucx_sreji', metastore_id=None, name='ucx_sreji', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:06 INFO [tests.integration.hive_metastore.test_migrate] dst_catalog=ucx_cfvmc, external_table=hive_metastore.ucx_sreji.ucx_toeew
12:06 DEBUG [databricks.labs.ucx.hive_metastore.table_migrate] Migrating external table hive_metastore.ucx_sreji.ucx_toeew to using SQL query: SYNC TABLE ucx_cfvmc.ucx_sreji.ucx_toeew FROM hive_metastore.ucx_sreji.ucx_toeew;
12:07 ERROR [databricks.labs.blueprint.parallel] migrate tables task failed: PERMISSION_DENIED: Failed to get credentials: Storage Credential TEST_STORAGE_CREDENTIAL is not configured correctly. Please contact the owner or your account admin to update the configuration.
Traceback (most recent call last):
  File "/home/runner/work/ucx/ucx/.venv/lib/python3.10/site-packages/databricks/labs/blueprint/parallel.py", line 135, in inner
    return func(*args, **kwargs), None
  File "/home/runner/work/ucx/ucx/src/databricks/labs/ucx/hive_metastore/table_migrate.py", line 111, in _migrate_table
    return self._migrate_external_table(src_table, rule, grants)
  File "/home/runner/work/ucx/ucx/src/databricks/labs/ucx/hive_metastore/table_migrate.py", line 128, in _migrate_external_table
    self._backend.execute(src_table.sql_alter_from(rule.as_uc_table_key, self._ws.get_workspace_id()))
  File "/home/runner/work/ucx/ucx/.venv/lib/python3.10/site-packages/databricks/labs/lsql/backends.py", line 142, in execute
    self._sql.execute(sql)
  File "/home/runner/work/ucx/ucx/.venv/lib/python3.10/site-packages/databricks/labs/lsql/core.py", line 238, in execute
    self._raise_if_needed(status)
  File "/home/runner/work/ucx/ucx/.venv/lib/python3.10/site-packages/databricks/labs/lsql/core.py", line 473, in _raise_if_needed
    raise error_class(error_message)
databricks.sdk.errors.platform.BadRequest: PERMISSION_DENIED: Failed to get credentials: Storage Credential TEST_STORAGE_CREDENTIAL is not configured correctly. Please contact the owner or your account admin to update the configuration.
12:07 CRITICAL [databricks.labs.blueprint.parallel] All 'migrate tables' tasks failed!!!
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 make_dbfs_data_copy fixtures
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] removing make_dbfs_data_copy fixture: dbfs:/mnt/TEST_MOUNT_NAME/a/b/25VZ
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 table fixtures
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] removing table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.CSV: 'CSV'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_sreji.ucx_toeew', metastore_id=None, name='ucx_toeew', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_sreji', sql_path=None, storage_credential_name=None, storage_location='dbfs:/mnt/TEST_MOUNT_NAME/a/b/25VZ', table_constraints=None, table_id=None, table_type=<TableType.EXTERNAL: 'EXTERNAL'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 catalog fixtures
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] removing catalog fixture: CatalogInfo(browse_only=False, catalog_type=<CatalogType.MANAGED_CATALOG: 'MANAGED_CATALOG'>, comment='', connection_name=None, created_at=1711541215333, created_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cfvmc', isolation_mode=<IsolationMode.OPEN: 'OPEN'>, metastore_id='8952c1e3-b265-4adf-98c3-6f755e2e1453', name='ucx_cfvmc', options=None, owner='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', properties=None, provider_name=None, provisioning_info=None, securable_kind=<CatalogInfoSecurableKind.CATALOG_STANDARD: 'CATALOG_STANDARD'>, securable_type='CATALOG', share_name=None, storage_location=None, storage_root=None, updated_at=1711541215333, updated_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d')
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 3 schema fixtures
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_si8xd', metastore_id=None, name='ucx_si8xd', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_sreji', metastore_id=None, name='ucx_sreji', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:07 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='ucx_cfvmc', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cfvmc.ucx_sreji', metastore_id=None, name='ucx_sreji', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
[gw7] linux -- Python 3.10.13 /home/runner/work/ucx/ucx/.venv/bin/python
❌ test_table_migration_job_cluster_override: databricks.sdk.errors.platform.Unknown: (java.lang.SecurityException) PERMISSION_DENIED: Failed to get credentials: Storage Credential TEST_STORAGE_CREDENTIAL is not configured correctly. Please contact the owner or your account admin to update the configuration. (3m2.657s)
databricks.sdk.errors.platform.Unknown: (java.lang.SecurityException) PERMISSION_DENIED: Failed to get credentials: Storage Credential TEST_STORAGE_CREDENTIAL is not configured correctly. Please contact the owner or your account admin to update the configuration.
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_swa1p: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_swa1p
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_swa1p', metastore_id=None, name='ucx_swa1p', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
[gw0] linux -- Python 3.10.13 /home/runner/work/ucx/ucx/.venv/bin/python
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_swa1p: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_swa1p
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_swa1p', metastore_id=None, name='ucx_swa1p', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_skap0: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_skap0
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_skap0', metastore_id=None, name='ucx_skap0', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Table hive_metastore.ucx_skap0.ucx_tcmfj: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_skap0/ucx_tcmfj
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.DELTA: 'DELTA'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_skap0.ucx_tcmfj', metastore_id=None, name='ucx_tcmfj', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_skap0', sql_path=None, storage_credential_name=None, storage_location='dbfs:/user/hive/warehouse/ucx_skap0/ucx_tcmfj', table_constraints=None, table_id=None, table_type=<TableType.MANAGED: 'MANAGED'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added make_dbfs_data_copy fixture: dbfs:/mnt/TEST_MOUNT_NAME/a/b/fK5h
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Table hive_metastore.ucx_skap0.ucx_tr63k: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_skap0/ucx_tr63k
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.CSV: 'CSV'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_skap0.ucx_tr63k', metastore_id=None, name='ucx_tr63k', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_skap0', sql_path=None, storage_credential_name=None, storage_location='dbfs:/mnt/TEST_MOUNT_NAME/a/b/fK5h', table_constraints=None, table_id=None, table_type=<TableType.EXTERNAL: 'EXTERNAL'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added catalog fixture: CatalogInfo(browse_only=False, catalog_type=<CatalogType.MANAGED_CATALOG: 'MANAGED_CATALOG'>, comment='', connection_name=None, created_at=1711541592841, created_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cyqxa', isolation_mode=<IsolationMode.OPEN: 'OPEN'>, metastore_id='8952c1e3-b265-4adf-98c3-6f755e2e1453', name='ucx_cyqxa', options=None, owner='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', properties=None, provider_name=None, provisioning_info=None, securable_kind=<CatalogInfoSecurableKind.CATALOG_STANDARD: 'CATALOG_STANDARD'>, securable_type='CATALOG', share_name=None, storage_location=None, storage_root=None, updated_at=1711541592841, updated_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d')
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Schema ucx_cyqxa.ucx_skap0: https://DATABRICKS_HOST/explore/data/ucx_cyqxa/ucx_skap0
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='ucx_cyqxa', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cyqxa.ucx_skap0', metastore_id=None, name='ucx_skap0', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:13 DEBUG [databricks.labs.ucx.install] Cannot find previous installation: Path (/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.ucx/config.yml) doesn't exist.
12:13 INFO [databricks.labs.ucx.install] Please answer a couple of questions to configure Unity Catalog migration
12:13 INFO [databricks.labs.ucx.installer.hms_lineage] HMS Lineage feature creates one system table named system.hms_to_uc_migration.table_access and helps in your migration process from HMS to UC by allowing you to programmatically query HMS lineage data.
12:13 INFO [databricks.labs.ucx.install] Fetching installations...
12:13 INFO [databricks.labs.ucx.installer.policy] Creating UCX cluster policy.
12:13 INFO [databricks.labs.ucx.install] Installing UCX v0.19.1+3120240327121318
12:13 INFO [databricks.labs.ucx.install] Creating dashboards...
12:13 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/views...
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment...
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/estimates...
12:13 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [UCX] UCX  Assessment (Estimates)...
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 01_0_group_migration.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 01_0_group_migration.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_metastore_assignment.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_metastore_assignment.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_data_modeling.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_data_modeling.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 03_0_data_migration.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 03_0_data_migration.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/main...
12:13 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [UCX] UCX  Assessment (Main)...
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/CLOUD_ENV...
12:14 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [UCX] UCX  Assessment (Azure)...
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/interactive...
12:14 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [UCX] UCX  Assessment (Interactive)...
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_interactive.md because it's a text widget
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_interactive.md because it's a text widget
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_cluster_summary.md because it's a text widget
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_cluster_summary.md because it's a text widget
12:14 DEBUG [databricks.labs.ucx.installer.workflows] Creating jobs from tasks in main
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=099-destroy-schema
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=remove-workspace-local-backup-groups
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups-experimental
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=validate-groups-permissions
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-tables
12:14 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:14 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=assessment
12:14 INFO [databricks.labs.ucx.install] Installation completed successfully! Please refer to the https://DATABRICKS_HOST/#workspace/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.ucx/README for the next steps.
12:14 DEBUG [databricks.labs.ucx.installer.workflows] starting migrate-tables job: https://DATABRICKS_HOST#job/17993990790931
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_swa1p: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_swa1p
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_swa1p', metastore_id=None, name='ucx_swa1p', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_skap0: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_skap0
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_skap0', metastore_id=None, name='ucx_skap0', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Table hive_metastore.ucx_skap0.ucx_tcmfj: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_skap0/ucx_tcmfj
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.DELTA: 'DELTA'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_skap0.ucx_tcmfj', metastore_id=None, name='ucx_tcmfj', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_skap0', sql_path=None, storage_credential_name=None, storage_location='dbfs:/user/hive/warehouse/ucx_skap0/ucx_tcmfj', table_constraints=None, table_id=None, table_type=<TableType.MANAGED: 'MANAGED'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added make_dbfs_data_copy fixture: dbfs:/mnt/TEST_MOUNT_NAME/a/b/fK5h
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Table hive_metastore.ucx_skap0.ucx_tr63k: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_skap0/ucx_tr63k
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.CSV: 'CSV'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_skap0.ucx_tr63k', metastore_id=None, name='ucx_tr63k', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_skap0', sql_path=None, storage_credential_name=None, storage_location='dbfs:/mnt/TEST_MOUNT_NAME/a/b/fK5h', table_constraints=None, table_id=None, table_type=<TableType.EXTERNAL: 'EXTERNAL'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added catalog fixture: CatalogInfo(browse_only=False, catalog_type=<CatalogType.MANAGED_CATALOG: 'MANAGED_CATALOG'>, comment='', connection_name=None, created_at=1711541592841, created_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cyqxa', isolation_mode=<IsolationMode.OPEN: 'OPEN'>, metastore_id='8952c1e3-b265-4adf-98c3-6f755e2e1453', name='ucx_cyqxa', options=None, owner='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', properties=None, provider_name=None, provisioning_info=None, securable_kind=<CatalogInfoSecurableKind.CATALOG_STANDARD: 'CATALOG_STANDARD'>, securable_type='CATALOG', share_name=None, storage_location=None, storage_root=None, updated_at=1711541592841, updated_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d')
12:13 INFO [databricks.labs.ucx.mixins.fixtures] Schema ucx_cyqxa.ucx_skap0: https://DATABRICKS_HOST/explore/data/ucx_cyqxa/ucx_skap0
12:13 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='ucx_cyqxa', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cyqxa.ucx_skap0', metastore_id=None, name='ucx_skap0', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:13 DEBUG [databricks.labs.ucx.install] Cannot find previous installation: Path (/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.ucx/config.yml) doesn't exist.
12:13 INFO [databricks.labs.ucx.install] Please answer a couple of questions to configure Unity Catalog migration
12:13 INFO [databricks.labs.ucx.installer.hms_lineage] HMS Lineage feature creates one system table named system.hms_to_uc_migration.table_access and helps in your migration process from HMS to UC by allowing you to programmatically query HMS lineage data.
12:13 INFO [databricks.labs.ucx.install] Fetching installations...
12:13 INFO [databricks.labs.ucx.installer.policy] Creating UCX cluster policy.
12:13 INFO [databricks.labs.ucx.install] Installing UCX v0.19.1+3120240327121318
12:13 INFO [databricks.labs.ucx.install] Creating dashboards...
12:13 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/views...
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment...
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/estimates...
12:13 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [UCX] UCX  Assessment (Estimates)...
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 01_0_group_migration.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 01_0_group_migration.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_metastore_assignment.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_metastore_assignment.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_data_modeling.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_data_modeling.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 03_0_data_migration.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 03_0_data_migration.md because it's a text widget
12:13 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/main...
12:13 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [UCX] UCX  Assessment (Main)...
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/CLOUD_ENV...
12:14 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [UCX] UCX  Assessment (Azure)...
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/interactive...
12:14 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [UCX] UCX  Assessment (Interactive)...
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_interactive.md because it's a text widget
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_interactive.md because it's a text widget
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_cluster_summary.md because it's a text widget
12:14 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_cluster_summary.md because it's a text widget
12:14 DEBUG [databricks.labs.ucx.installer.workflows] Creating jobs from tasks in main
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=099-destroy-schema
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=remove-workspace-local-backup-groups
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups-experimental
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=validate-groups-permissions
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-tables
12:14 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:14 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:14 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=assessment
12:14 INFO [databricks.labs.ucx.install] Installation completed successfully! Please refer to the https://DATABRICKS_HOST/#workspace/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.ucx/README for the next steps.
12:14 DEBUG [databricks.labs.ucx.installer.workflows] starting migrate-tables job: https://DATABRICKS_HOST#job/17993990790931
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 make_dbfs_data_copy fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing make_dbfs_data_copy fixture: dbfs:/mnt/TEST_MOUNT_NAME/a/b/fK5h
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 2 table fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.DELTA: 'DELTA'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_skap0.ucx_tcmfj', metastore_id=None, name='ucx_tcmfj', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_skap0', sql_path=None, storage_credential_name=None, storage_location='dbfs:/user/hive/warehouse/ucx_skap0/ucx_tcmfj', table_constraints=None, table_id=None, table_type=<TableType.MANAGED: 'MANAGED'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing table fixture: TableInfo(access_point=None, browse_only=None, catalog_name='hive_metastore', columns=None, comment=None, created_at=None, created_by=None, data_access_configuration_id=None, data_source_format=<DataSourceFormat.CSV: 'CSV'>, deleted_at=None, delta_runtime_properties_kvpairs=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, encryption_details=None, full_name='hive_metastore.ucx_skap0.ucx_tr63k', metastore_id=None, name='ucx_tr63k', owner=None, pipeline_id=None, properties=None, row_filter=None, schema_name='ucx_skap0', sql_path=None, storage_credential_name=None, storage_location='dbfs:/mnt/TEST_MOUNT_NAME/a/b/fK5h', table_constraints=None, table_id=None, table_type=<TableType.EXTERNAL: 'EXTERNAL'>, updated_at=None, updated_by=None, view_definition=None, view_dependencies=None)
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 catalog fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing catalog fixture: CatalogInfo(browse_only=False, catalog_type=<CatalogType.MANAGED_CATALOG: 'MANAGED_CATALOG'>, comment='', connection_name=None, created_at=1711541592841, created_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cyqxa', isolation_mode=<IsolationMode.OPEN: 'OPEN'>, metastore_id='8952c1e3-b265-4adf-98c3-6f755e2e1453', name='ucx_cyqxa', options=None, owner='0a330eb5-dd51-4d97-b6e4-c474356b1d5d', properties=None, provider_name=None, provisioning_info=None, securable_kind=<CatalogInfoSecurableKind.CATALOG_STANDARD: 'CATALOG_STANDARD'>, securable_type='CATALOG', share_name=None, storage_location=None, storage_root=None, updated_at=1711541592841, updated_by='0a330eb5-dd51-4d97-b6e4-c474356b1d5d')
12:16 INFO [databricks.labs.ucx.install] Deleting UCX v0.19.1+3120240327121602 from https://DATABRICKS_HOST
12:16 INFO [databricks.labs.ucx.install] Deleting inventory database ucx_swa1p
12:16 INFO [databricks.labs.ucx.install] Deleting jobs
12:16 INFO [databricks.labs.ucx.install] Deleting 099-destroy-schema job_id=933758154149882.
12:16 INFO [databricks.labs.ucx.install] Deleting remove-workspace-local-backup-groups job_id=763569756759999.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-groups-experimental job_id=445288543404979.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-groups job_id=1037912259675272.
12:16 INFO [databricks.labs.ucx.install] Deleting validate-groups-permissions job_id=1014806104411678.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-tables job_id=17993990790931.
12:16 INFO [databricks.labs.ucx.install] Deleting assessment job_id=286347692156375.
12:16 INFO [databricks.labs.ucx.install] Deleting cluster policy
12:16 INFO [databricks.labs.ucx.install] Deleting secret scope
12:16 INFO [databricks.labs.ucx.install] UnInstalling UCX complete
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 3 schema fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_swa1p', metastore_id=None, name='ucx_swa1p', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_skap0', metastore_id=None, name='ucx_skap0', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='ucx_cyqxa', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='ucx_cyqxa.ucx_skap0', metastore_id=None, name='ucx_skap0', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
[gw0] linux -- Python 3.10.13 /home/runner/work/ucx/ucx/.venv/bin/python
❌ test_running_real_assessment_job: databricks.labs.blueprint.parallel.ManyError: Detected 10 failures: Unknown: assess_CLOUD_ENV_service_principals: run failed with error message (7m43.343s)
databricks.labs.blueprint.parallel.ManyError: Detected 10 failures: Unknown: assess_CLOUD_ENV_service_principals: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_clusters: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_global_init_scripts: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_incompatible_submit_runs: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_jobs: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_pipelines: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: crawl_cluster_policies: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: crawl_groups: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: crawl_mounts: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: workspace_listing: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID.
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_sn7fo: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_sn7fo
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_sn7fo', metastore_id=None, name='ucx_sn7fo', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
[gw1] linux -- Python 3.10.13 /home/runner/work/ucx/ucx/.venv/bin/python
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_sn7fo: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_sn7fo
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_sn7fo', metastore_id=None, name='ucx_sn7fo', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added workspace user fixture: User(active=True, display_name='sdk-noqf@example.com', emails=[ComplexValue(display=None, primary=True, ref=None, type='work', value='sdk-noqf@example.com')], entitlements=[], external_id=None, groups=[], id='8830747287458957', name=Name(family_name=None, given_name='sdk-noqf@example.com'), roles=[], schemas=[<UserSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_USER: 'urn:ietf:params:scim:schemas:core:2.0:User'>, <UserSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_EXTENSION_WORKSPACE_2_0_USER: 'urn:ietf:params:scim:schemas:extension:workspace:2.0:User'>], user_name='sdk-noqf@example.com')
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Workspace group ucx_R2il: https://DATABRICKS_HOST#setting/accounts/groups/768037644964437
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added workspace group fixture: Group(display_name='ucx_R2il', entitlements=[ComplexValue(display=None, primary=None, ref=None, type=None, value='allow-cluster-create')], external_id=None, groups=[], id='768037644964437', members=[ComplexValue(display='sdk-noqf@example.com', primary=None, ref='Users/8830747287458957', type=None, value='8830747287458957')], meta=ResourceMeta(resource_type='WorkspaceGroup'), roles=[], schemas=[<GroupSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_GROUP: 'urn:ietf:params:scim:schemas:core:2.0:Group'>])
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Account group ucx_R2il: https://accounts.CLOUD_ENVdatabricks.net/users/groups/636257530629496/members
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added account group fixture: Group(display_name='ucx_R2il', entitlements=[], external_id=None, groups=[], id='636257530629496', members=[ComplexValue(display='sdk-noqf@example.com', primary=None, ref='Users/8830747287458957', type=None, value='8830747287458957')], meta=None, roles=[], schemas=[<GroupSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_GROUP: 'urn:ietf:params:scim:schemas:core:2.0:Group'>])
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Cluster policy: https://DATABRICKS_HOST#setting/clusters/cluster-policies/view/0010EF77B21487FE
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added cluster policy fixture: CreatePolicyResponse(policy_id='0010EF77B21487FE')
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added cluster_policy permissions fixture: 0010EF77B21487FE [group_name admins CAN_USE] -> [group_name ucx_R2il CAN_USE]
12:08 DEBUG [databricks.labs.ucx.install] Cannot find previous installation: Path (/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.51iF/config.yml) doesn't exist.
12:08 INFO [databricks.labs.ucx.install] Please answer a couple of questions to configure Unity Catalog migration
12:08 INFO [databricks.labs.ucx.installer.hms_lineage] HMS Lineage feature creates one system table named system.hms_to_uc_migration.table_access and helps in your migration process from HMS to UC by allowing you to programmatically query HMS lineage data.
12:08 INFO [databricks.labs.ucx.install] Fetching installations...
12:08 INFO [databricks.labs.ucx.installer.policy] Creating UCX cluster policy.
12:08 INFO [databricks.labs.ucx.install] Installing UCX v0.19.1+3120240327120835
12:08 INFO [databricks.labs.ucx.install] Creating dashboards...
12:08 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/views...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/estimates...
12:08 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [51IF] UCX  Assessment (Estimates)...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 01_0_group_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 01_0_group_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_metastore_assignment.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_metastore_assignment.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_data_modeling.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_data_modeling.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 03_0_data_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 03_0_data_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/main...
12:08 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [51IF] UCX  Assessment (Main)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/CLOUD_ENV...
12:09 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [51IF] UCX  Assessment (Azure)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/interactive...
12:09 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [51IF] UCX  Assessment (Interactive)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_interactive.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_interactive.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_cluster_summary.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_cluster_summary.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.installer.workflows] Creating jobs from tasks in main
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=099-destroy-schema
12:09 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:09 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=assessment
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-tables
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups-experimental
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=remove-workspace-local-backup-groups
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=validate-groups-permissions
12:09 INFO [databricks.labs.ucx.install] Installation completed successfully! Please refer to the https://DATABRICKS_HOST/#workspace/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.51iF/README for the next steps.
12:09 DEBUG [databricks.labs.ucx.installer.workflows] starting assessment job: https://DATABRICKS_HOST#job/384613952685922
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_sn7fo: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_sn7fo
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_sn7fo', metastore_id=None, name='ucx_sn7fo', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added workspace user fixture: User(active=True, display_name='sdk-noqf@example.com', emails=[ComplexValue(display=None, primary=True, ref=None, type='work', value='sdk-noqf@example.com')], entitlements=[], external_id=None, groups=[], id='8830747287458957', name=Name(family_name=None, given_name='sdk-noqf@example.com'), roles=[], schemas=[<UserSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_USER: 'urn:ietf:params:scim:schemas:core:2.0:User'>, <UserSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_EXTENSION_WORKSPACE_2_0_USER: 'urn:ietf:params:scim:schemas:extension:workspace:2.0:User'>], user_name='sdk-noqf@example.com')
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Workspace group ucx_R2il: https://DATABRICKS_HOST#setting/accounts/groups/768037644964437
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added workspace group fixture: Group(display_name='ucx_R2il', entitlements=[ComplexValue(display=None, primary=None, ref=None, type=None, value='allow-cluster-create')], external_id=None, groups=[], id='768037644964437', members=[ComplexValue(display='sdk-noqf@example.com', primary=None, ref='Users/8830747287458957', type=None, value='8830747287458957')], meta=ResourceMeta(resource_type='WorkspaceGroup'), roles=[], schemas=[<GroupSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_GROUP: 'urn:ietf:params:scim:schemas:core:2.0:Group'>])
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Account group ucx_R2il: https://accounts.CLOUD_ENVdatabricks.net/users/groups/636257530629496/members
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added account group fixture: Group(display_name='ucx_R2il', entitlements=[], external_id=None, groups=[], id='636257530629496', members=[ComplexValue(display='sdk-noqf@example.com', primary=None, ref='Users/8830747287458957', type=None, value='8830747287458957')], meta=None, roles=[], schemas=[<GroupSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_GROUP: 'urn:ietf:params:scim:schemas:core:2.0:Group'>])
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Cluster policy: https://DATABRICKS_HOST#setting/clusters/cluster-policies/view/0010EF77B21487FE
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added cluster policy fixture: CreatePolicyResponse(policy_id='0010EF77B21487FE')
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added cluster_policy permissions fixture: 0010EF77B21487FE [group_name admins CAN_USE] -> [group_name ucx_R2il CAN_USE]
12:08 DEBUG [databricks.labs.ucx.install] Cannot find previous installation: Path (/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.51iF/config.yml) doesn't exist.
12:08 INFO [databricks.labs.ucx.install] Please answer a couple of questions to configure Unity Catalog migration
12:08 INFO [databricks.labs.ucx.installer.hms_lineage] HMS Lineage feature creates one system table named system.hms_to_uc_migration.table_access and helps in your migration process from HMS to UC by allowing you to programmatically query HMS lineage data.
12:08 INFO [databricks.labs.ucx.install] Fetching installations...
12:08 INFO [databricks.labs.ucx.installer.policy] Creating UCX cluster policy.
12:08 INFO [databricks.labs.ucx.install] Installing UCX v0.19.1+3120240327120835
12:08 INFO [databricks.labs.ucx.install] Creating dashboards...
12:08 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/views...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/estimates...
12:08 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [51IF] UCX  Assessment (Estimates)...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 01_0_group_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 01_0_group_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_metastore_assignment.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_metastore_assignment.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_data_modeling.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_data_modeling.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 03_0_data_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 03_0_data_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/main...
12:08 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [51IF] UCX  Assessment (Main)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/CLOUD_ENV...
12:09 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [51IF] UCX  Assessment (Azure)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/interactive...
12:09 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [51IF] UCX  Assessment (Interactive)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_interactive.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_interactive.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_cluster_summary.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_cluster_summary.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.installer.workflows] Creating jobs from tasks in main
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=099-destroy-schema
12:09 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:09 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=assessment
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-tables
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups-experimental
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=remove-workspace-local-backup-groups
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=validate-groups-permissions
12:09 INFO [databricks.labs.ucx.install] Installation completed successfully! Please refer to the https://DATABRICKS_HOST/#workspace/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.51iF/README for the next steps.
12:09 DEBUG [databricks.labs.ucx.installer.workflows] starting assessment job: https://DATABRICKS_HOST#job/384613952685922
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 cluster_policy permissions fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing cluster_policy permissions fixture: 0010EF77B21487FE [group_name admins CAN_USE] -> [group_name ucx_R2il CAN_USE]
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 cluster policy fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing cluster policy fixture: CreatePolicyResponse(policy_id='0010EF77B21487FE')
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 workspace user fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing workspace user fixture: User(active=True, display_name='sdk-noqf@example.com', emails=[ComplexValue(display=None, primary=True, ref=None, type='work', value='sdk-noqf@example.com')], entitlements=[], external_id=None, groups=[], id='8830747287458957', name=Name(family_name=None, given_name='sdk-noqf@example.com'), roles=[], schemas=[<UserSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_USER: 'urn:ietf:params:scim:schemas:core:2.0:User'>, <UserSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_EXTENSION_WORKSPACE_2_0_USER: 'urn:ietf:params:scim:schemas:extension:workspace:2.0:User'>], user_name='sdk-noqf@example.com')
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 account group fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing account group fixture: Group(display_name='ucx_R2il', entitlements=[], external_id=None, groups=[], id='636257530629496', members=[ComplexValue(display='sdk-noqf@example.com', primary=None, ref='Users/8830747287458957', type=None, value='8830747287458957')], meta=None, roles=[], schemas=[<GroupSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_GROUP: 'urn:ietf:params:scim:schemas:core:2.0:Group'>])
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 workspace group fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing workspace group fixture: Group(display_name='ucx_R2il', entitlements=[ComplexValue(display=None, primary=None, ref=None, type=None, value='allow-cluster-create')], external_id=None, groups=[], id='768037644964437', members=[ComplexValue(display='sdk-noqf@example.com', primary=None, ref='Users/8830747287458957', type=None, value='8830747287458957')], meta=ResourceMeta(resource_type='WorkspaceGroup'), roles=[], schemas=[<GroupSchema.URN_IETF_PARAMS_SCIM_SCHEMAS_CORE_2_0_GROUP: 'urn:ietf:params:scim:schemas:core:2.0:Group'>])
12:16 INFO [databricks.labs.ucx.install] Deleting UCX v0.19.1+3120240327121604 from https://DATABRICKS_HOST
12:16 INFO [databricks.labs.ucx.install] Deleting inventory database ucx_sn7fo
12:16 INFO [databricks.labs.ucx.install] Deleting jobs
12:16 INFO [databricks.labs.ucx.install] Deleting 099-destroy-schema job_id=652632770779335.
12:16 INFO [databricks.labs.ucx.install] Deleting assessment job_id=384613952685922.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-tables job_id=4894879066531.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-groups job_id=379447992794643.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-groups-experimental job_id=176952983305119.
12:16 INFO [databricks.labs.ucx.install] Deleting remove-workspace-local-backup-groups job_id=590110003795557.
12:16 INFO [databricks.labs.ucx.install] Deleting validate-groups-permissions job_id=133786593002014.
12:16 INFO [databricks.labs.ucx.install] Deleting cluster policy
12:16 INFO [databricks.labs.ucx.install] Deleting secret scope
12:16 INFO [databricks.labs.ucx.install] UnInstalling UCX complete
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 1 schema fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_sn7fo', metastore_id=None, name='ucx_sn7fo', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
[gw1] linux -- Python 3.10.13 /home/runner/work/ucx/ucx/.venv/bin/python
❌ test_partitioned_tables: databricks.labs.blueprint.parallel.ManyError: Detected 9 failures: Unknown: assess_CLOUD_ENV_service_principals: run failed with error message (8m2.431s)
databricks.labs.blueprint.parallel.ManyError: Detected 9 failures: Unknown: assess_CLOUD_ENV_service_principals: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_clusters: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_global_init_scripts: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_incompatible_submit_runs: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_jobs: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: assess_pipelines: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: crawl_cluster_policies: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: crawl_mounts: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID., Unknown: workspace_listing: run failed with error message
 Could not reach driver of cluster DATABRICKS_CLUSTER_ID.
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_schts: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_schts
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_schts', metastore_id=None, name='ucx_schts', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
[gw8] linux -- Python 3.10.13 /home/runner/work/ucx/ucx/.venv/bin/python
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_schts: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_schts
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_schts', metastore_id=None, name='ucx_schts', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:08 DEBUG [databricks.labs.ucx.install] Cannot find previous installation: Path (/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.InU8/config.yml) doesn't exist.
12:08 INFO [databricks.labs.ucx.install] Please answer a couple of questions to configure Unity Catalog migration
12:08 INFO [databricks.labs.ucx.installer.hms_lineage] HMS Lineage feature creates one system table named system.hms_to_uc_migration.table_access and helps in your migration process from HMS to UC by allowing you to programmatically query HMS lineage data.
12:08 INFO [databricks.labs.ucx.install] Fetching installations...
12:08 INFO [databricks.labs.ucx.installer.policy] Creating UCX cluster policy.
12:08 INFO [databricks.labs.ucx.install] Installing UCX v0.19.1+3120240327120822
12:08 INFO [databricks.labs.ucx.install] Creating dashboards...
12:08 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/views...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/estimates...
12:08 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [INU8] UCX  Assessment (Estimates)...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 01_0_group_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 01_0_group_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_metastore_assignment.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_metastore_assignment.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_data_modeling.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_data_modeling.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 03_0_data_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 03_0_data_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/main...
12:08 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [INU8] UCX  Assessment (Main)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/CLOUD_ENV...
12:09 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [INU8] UCX  Assessment (Azure)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/interactive...
12:09 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [INU8] UCX  Assessment (Interactive)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_interactive.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_interactive.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_cluster_summary.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_cluster_summary.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.installer.workflows] Creating jobs from tasks in main
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=remove-workspace-local-backup-groups
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-tables
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups
12:09 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:09 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=assessment
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups-experimental
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=099-destroy-schema
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=validate-groups-permissions
12:09 INFO [databricks.labs.ucx.install] Installation completed successfully! Please refer to the https://DATABRICKS_HOST/#workspace/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.InU8/README for the next steps.
12:09 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_s8unx: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_s8unx
12:09 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_s8unx', metastore_id=None, name='ucx_s8unx', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:09 DEBUG [databricks.labs.ucx.installer.workflows] starting assessment job: https://DATABRICKS_HOST#job/826916683764430
12:08 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_schts: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_schts
12:08 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_schts', metastore_id=None, name='ucx_schts', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:08 DEBUG [databricks.labs.ucx.install] Cannot find previous installation: Path (/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.InU8/config.yml) doesn't exist.
12:08 INFO [databricks.labs.ucx.install] Please answer a couple of questions to configure Unity Catalog migration
12:08 INFO [databricks.labs.ucx.installer.hms_lineage] HMS Lineage feature creates one system table named system.hms_to_uc_migration.table_access and helps in your migration process from HMS to UC by allowing you to programmatically query HMS lineage data.
12:08 INFO [databricks.labs.ucx.install] Fetching installations...
12:08 INFO [databricks.labs.ucx.installer.policy] Creating UCX cluster policy.
12:08 INFO [databricks.labs.ucx.install] Installing UCX v0.19.1+3120240327120822
12:08 INFO [databricks.labs.ucx.install] Creating dashboards...
12:08 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/views...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading step folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/estimates...
12:08 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [INU8] UCX  Assessment (Estimates)...
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 01_0_group_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 01_0_group_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_metastore_assignment.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_metastore_assignment.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_data_modeling.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_data_modeling.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 03_0_data_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 03_0_data_migration.md because it's a text widget
12:08 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/main...
12:08 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [INU8] UCX  Assessment (Main)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/CLOUD_ENV...
12:09 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [INU8] UCX  Assessment (Azure)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Reading dashboard folder /home/runner/work/ucx/ucx/src/databricks/labs/ucx/queries/assessment/interactive...
12:09 INFO [databricks.labs.ucx.framework.dashboards] Creating dashboard [INU8] UCX  Assessment (Interactive)...
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 00_0_interactive.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 00_0_interactive.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping query 02_0_cluster_summary.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.framework.dashboards] Skipping viz 02_0_cluster_summary.md because it's a text widget
12:09 DEBUG [databricks.labs.ucx.installer.workflows] Creating jobs from tasks in main
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=remove-workspace-local-backup-groups
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-tables
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups
12:09 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:09 INFO [databricks.labs.ucx.installer.mixins] Fetching warehouse_id from a config
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=assessment
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=migrate-groups-experimental
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=099-destroy-schema
12:09 INFO [databricks.labs.ucx.installer.workflows] Creating new job configuration for step=validate-groups-permissions
12:09 INFO [databricks.labs.ucx.install] Installation completed successfully! Please refer to the https://DATABRICKS_HOST/#workspace/Users/0a330eb5-dd51-4d97-b6e4-c474356b1d5d/.InU8/README for the next steps.
12:09 INFO [databricks.labs.ucx.mixins.fixtures] Schema hive_metastore.ucx_s8unx: https://DATABRICKS_HOST/explore/data/hive_metastore/ucx_s8unx
12:09 DEBUG [databricks.labs.ucx.mixins.fixtures] added schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_s8unx', metastore_id=None, name='ucx_s8unx', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:09 DEBUG [databricks.labs.ucx.installer.workflows] starting assessment job: https://DATABRICKS_HOST#job/826916683764430
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 0 table fixtures
12:16 INFO [databricks.labs.ucx.install] Deleting UCX v0.19.1+3120240327121613 from https://DATABRICKS_HOST
12:16 INFO [databricks.labs.ucx.install] Deleting inventory database ucx_schts
12:16 INFO [databricks.labs.ucx.install] Deleting jobs
12:16 INFO [databricks.labs.ucx.install] Deleting remove-workspace-local-backup-groups job_id=38593242329440.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-tables job_id=6514788258714.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-groups job_id=998611797564503.
12:16 INFO [databricks.labs.ucx.install] Deleting assessment job_id=826916683764430.
12:16 INFO [databricks.labs.ucx.install] Deleting migrate-groups-experimental job_id=429285899295093.
12:16 INFO [databricks.labs.ucx.install] Deleting 099-destroy-schema job_id=8747695710609.
12:16 INFO [databricks.labs.ucx.install] Deleting validate-groups-permissions job_id=925924029440876.
12:16 INFO [databricks.labs.ucx.install] Deleting cluster policy
12:16 INFO [databricks.labs.ucx.install] Deleting secret scope
12:16 INFO [databricks.labs.ucx.install] UnInstalling UCX complete
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] clearing 2 schema fixtures
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_schts', metastore_id=None, name='ucx_schts', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
12:16 DEBUG [databricks.labs.ucx.mixins.fixtures] removing schema fixture: SchemaInfo(browse_only=None, catalog_name='hive_metastore', catalog_type=None, comment=None, created_at=None, created_by=None, effective_predictive_optimization_flag=None, enable_predictive_optimization=None, full_name='hive_metastore.ucx_s8unx', metastore_id=None, name='ucx_s8unx', owner=None, properties=None, storage_location=None, storage_root=None, updated_at=None, updated_by=None)
[gw8] linux -- Python 3.10.13 /home/runner/work/ucx/ucx/.venv/bin/python

Flaky tests:

  • 🤪 test_repair_run_workflow_job (6m15.541s)
  • 🤪 test_running_real_remove_backup_groups_job (5m50.453s)

Running from acceptance #1806

)
if response.permissions_migrated is None:
break
if response.permissions_migrated < batch_size:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if response.permissions_migrated < batch_size:
if response.permissions_migrated == 0:

perhaps this is better? also do some logging.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@@ -376,7 +376,10 @@ def apply_permissions_to_account_groups(
num_threads=cfg.num_threads,
workspace_start_path=cfg.workspace_start_path,
)
permission_manager.apply_group_permissions(migration_state)
if cfg.use_permission_migration_api:
permission_manager.apply_group_permissions_private_preview_api(migration_state)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how sure are you that API supports all permission backends we need?

grants_crawler = GrantsCrawler(tables_crawler, udfs_crawler)
tacl_support = TableAclSupport(grants_crawler, sql_backend)
permission_manager = PermissionManager(ws, sql_backend, cfg.inventory_database, [tacl_support])
permission_manager.apply_group_permissions_experimental(migration_state)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we do apply_group_permissions_experimental in a separate task, so that it's in parallel to TACL apply?

Fourth phase of the workspace-local group migration process. It does the following:
- Assigns the full set of permissions of the original group to the account-level one

It covers local workspace-local permissions for all entities: Legacy Table ACLs, Entitlements,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
It covers local workspace-local permissions for all entities: Legacy Table ACLs, Entitlements,
It covers local workspace-local permissions for all entities: Entitlements,

Comment on lines 191 to 194
except RuntimeError as e:
errors.append(e)
break
return errors
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
except RuntimeError as e:
errors.append(e)
break
return errors
  1. why do we need to return a list of errors, if it has at most one item?
  2. won't it be simple to bubble-up the platform error instead?

Comment on lines 159 to 164
errors: list[Exception] = []
for migrated_group in migration_state.groups:
errors.extend(self._migrate_group_permissions_paginated(migrated_group))
if len(errors) > 0:
logger.error(f"Detected {len(errors)} errors while applying permissions")
raise ManyError(errors)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
errors: list[Exception] = []
for migrated_group in migration_state.groups:
errors.extend(self._migrate_group_permissions_paginated(migrated_group))
if len(errors) > 0:
logger.error(f"Detected {len(errors)} errors while applying permissions")
raise ManyError(errors)
items = 0
for migrated_group in migration_state.groups:
items += self._migrate_group_permissions_paginated(migrated_group)
logger.info(f"Migrated {items} items")

immediate failure in a resumable job is always better. we can add @retried on the call if needed.

batch_size = 1000
errors: list[Exception] = []
logger.info(
f"Migrating permission from workspace group {migrated_group.name_in_workspace} "
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
f"Migrating permission from workspace group {migrated_group.name_in_workspace} "
f"Migrating permissions from workspace group {migrated_group.name_in_workspace} "

NB_OF_TEST_WS_OBJECTS = 1000


def test_apply_group_permissions_experimental_performance(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we make sure we launch it only from debugger or from local or something like that? what env variable only exists on our laptops?

import logging

# pylint: disable-next=unused-wildcard-import,wildcard-import
from tests.integration.conftest import * # noqa: F403
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why?

@@ -0,0 +1,9 @@
import logging

# pylint: disable-next=unused-wildcard-import,wildcard-import
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we need to import multiple fixtures from integration tests & mixins, explicitly listing them out is very verbose

ws = create_autospec(WorkspaceClient)
ws.get_workspace_id.return_value = "12345678"
ws.permission_migration.migrate_permissions.side_effect = RuntimeError("internal error")
with pytest.raises(RuntimeError):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

runtime error is too broad.

@@ -144,6 +148,51 @@ def apply_group_permissions(self, migration_state: MigrationState) -> bool:
logger.info("Permissions were applied")
return True

def apply_group_permissions_experimental(self, migration_state: MigrationState) -> bool:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def apply_group_permissions_experimental(self, migration_state: MigrationState) -> bool:
def apply_group_permissions_experimental(self, permission_migration: PermissionMigrationAPI, migration migration_state: MigrationState) -> bool:

this would reduce the diff size and remove the need to change so many tests. unlike the current change in constructor, which is not strictly necessary then.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we still need self._ws.get_workspace_id(), so would it make sense to change this to

def apply_group_permissions_experimental(self, ws: WorkspaceClient, 
                                         migration_state: MigrationState) -> bool:

@nkvuong nkvuong force-pushed the feature/permission_migration_api branch from 785affc to 1893b15 Compare March 27, 2024 10:41
Copy link
Collaborator

@nfx nfx left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please take a look if you can apply the nits

ws_group = make_group()
acc_group = make_acc_group()
acc.workspace_assignment.update(ws.get_workspace_id(), acc_group.id, [iam.WorkspacePermission.USER])
# need to return both, as acc_group.id is not in MigratedGroup dataclass
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# need to return both, as acc_group.id is not in MigratedGroup dataclass

leftover comment


@staticmethod
def _migrate_group_permissions_paginated(ws: WorkspaceClient, migrated_group: MigratedGroup):

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

Comment on lines +108 to +123
while True:
response = ws.permission_migration.migrate_permissions(
ws.get_workspace_id(),
migrated_group.name_in_workspace,
migrated_group.name_in_account,
size=batch_size,
)
# response shouldn't be empty
if response.permissions_migrated is None:
break
# no more permissions to migrate
if response.permissions_migrated == 0:
logger.info("No more permission to migrated.")
break
logger.info(f"Migrated {response.permissions_migrated} permissions.")
return 1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
while True:
response = ws.permission_migration.migrate_permissions(
ws.get_workspace_id(),
migrated_group.name_in_workspace,
migrated_group.name_in_account,
size=batch_size,
)
# response shouldn't be empty
if response.permissions_migrated is None:
break
# no more permissions to migrate
if response.permissions_migrated == 0:
logger.info("No more permission to migrated.")
break
logger.info(f"Migrated {response.permissions_migrated} permissions.")
return 1
permissions_migrated = 0
while True:
response = ws.permission_migration.migrate_permissions(
ws.get_workspace_id(),
migrated_group.name_in_workspace,
migrated_group.name_in_account,
size=batch_size,
)
if not response.permissions_migrated:
logger.info("No more permission to migrated.")
return permissions_migrated
permissions_migrated += response.permissions_migrated
logger.info(f"Migrated {response.permissions_migrated} permissions to {migrated_group.name_in_account} account group")
return permissions_migrated

nit: what about this?

Comment on lines +34 to +39
make_migrated_group,
make_instance_pool,
make_instance_pool_permissions,
is_experimental: bool,
):
migrated_group = make_migrated_group()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
make_migrated_group,
make_instance_pool,
make_instance_pool_permissions,
is_experimental: bool,
):
migrated_group = make_migrated_group()
migrated_group,
make_instance_pool,
make_instance_pool_permissions,
is_experimental: bool,
):

nit: what if we switch from fixture factory (make_*) to just a fixture?

env_or_skip,
):
# Making sure this test can only be launched from local
env_or_skip("PWD")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
env_or_skip("PWD")
env_or_skip("IDE_PROJECT_ROOTS")

isn't $PWD too common?

@nfx
Copy link
Collaborator

nfx commented Mar 27, 2024

please address comments in the follow-up PRs

@nfx nfx merged commit f119189 into main Mar 27, 2024
5 of 8 checks passed
@nfx nfx deleted the feature/permission_migration_api branch March 27, 2024 13:31
nkvuong added a commit that referenced this pull request Mar 27, 2024
nfx pushed a commit that referenced this pull request Mar 27, 2024
## Changes
Applied remaining feedback for #1080

### Linked issues
<!-- DOC: Link issue with a keyword: close, closes, closed, fix, fixes,
fixed, resolve, resolves, resolved. See
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword
-->
Follow up for #1080

### Tests
<!-- How is this tested? Please see the checklist below and also
describe any other relevant tests -->

- [x] manually tested
- [ ] verified on staging environment (screenshot attached)
@nfx nfx mentioned this pull request Mar 28, 2024
nfx added a commit that referenced this pull request Mar 28, 2024
* Added ACL migration to `migrate-tables` workflow ([#1135](#1135)).
* Added AVRO to supported format to be upgraded by SYNC ([#1134](#1134)). In this release, the `hive_metastore` package's `tables.py` file has been updated to add AVRO as a supported format for the SYNC upgrade functionality. This change includes AVRO in the list of supported table formats in the `is_format_supported_for_sync` method, which checks if the table format is not `None` and if the format's uppercase value is one of the supported formats. The addition of AVRO enables it to be upgraded using the SYNC functionality. Moreover, a new format called BINARYFILE has been introduced, which is not supported for SYNC upgrade. This release is part of the implementation of issue [#1134](#1134), improving the compatibility of the SYNC upgrade functionality with various data formats.
* Added `is_partitioned` column ([#1130](#1130)). A new column, `is_partitioned`, has been added to the `ucx.tables` table in the assessment module, indicating whether the table is partitioned or not with values `Yes` or "No". This change addresses issue [#871](#871) and has been manually tested. The commit also includes updated documentation for the modified table. No new methods, CLI commands, workflows, or tests (unit, integration) have been introduced as part of this change.
* Added assessment of interactive cluster usage compared to UC compute limitations ([#1123](#1123)).
* Added external location validation when creating catalogs with `create-catalogs-schemas` command ([#1110](#1110)).
* Added flag to Job to identify Job submitted by jar ([#1088](#1088)). The open-source library has been updated with several new features aimed at enhancing user functionality and convenience. These updates include the addition of a new sorting algorithm, which provides users with an efficient and customizable method for organizing data. Additionally, a new caching mechanism has been implemented, improving the library's performance and reducing the amount of time required to access frequently used data. Furthermore, the library now supports multi-threading, enabling users to perform multiple operations simultaneously and increase overall productivity. Lastly, a new error handling system has been developed, providing users with more informative and actionable feedback when unexpected issues arise. These changes are a significant step forward in improving the library's performance, functionality, and usability for all users.
* Bump databricks-sdk from 0.22.0 to 0.23.0 ([#1121](#1121)). In this version update, `databricks-sdk` is upgraded from 0.22.0 to 0.23.0, introducing significant changes to the handling of AWS and Azure identities. The `AwsIamRole` class is replaced with `AwsIamRoleRequest` in the `databricks.sdk.service.catalog` module, affecting the creation of AWS storage credentials using IAM roles. The `create` function in `src/databricks/labs/ucx/aws/credentials.py` is updated to accommodate this modification. Additionally, the `AwsIamRole` argument in the `create` function of `fixtures.py` in the `databricks/labs/ucx/mixins` directory is replaced with `AwsIamRoleRequest`. The tests in `tests/integration/aws/test_access.py` are also updated to utilize `AwsIamRoleRequest`, and `StorageCredentialInfo` in `tests/unit/azure/test_credentials.py` now uses `AwsIamRoleResponse` instead of `AwsIamRole`. The new classes, `AwsIamRoleRequest` and `AwsIamRoleResponse`, likely include new features or bug fixes for AWS IAM roles. These changes require software engineers to thoroughly assess their codebase and adjust any relevant functions accordingly.
* Deploy static views needed by [#1123](#1123) interactive dashboard ([#1139](#1139)). In this update, we have added two new views, `misc_patterns_vw` and `code_patterns_vw`, to the `install.py` script in the `databricks/labs/ucx` directory. These views were originally intended to be deployed with a previous update ([#1123](#1123)) but were inadvertently overlooked. The addition of these views addresses issues with queries in the `interactive` dashboard. The `deploy_schema` function has been updated with two new lines, `deployer.deploy_view("misc_patterns", "queries/views/misc_patterns.sql")` and `deployer.deploy_view("code_patterns", "queries/views/code_patterns.sql")`, to deploy the new views using their respective SQL files from the `queries/views` directory. No other modifications have been made to the file.
* Fixed Table ACL migration logic ([#1149](#1149)). The open-source library has been updated with several new features, providing enhanced functionality for software engineers. A new utility class has been added to simplify the process of working with collections, offering methods to filter, map, and reduce elements in a performant manner. Additionally, a new configuration system has been implemented, allowing users to easily customize library behavior through a simple JSON format. Finally, we have added support for asynchronous processing, enabling efficient handling of I/O-bound tasks and improving overall application performance. These features have been thoroughly tested and are ready for use in your projects.
* Fixed `AssertionError: assert '14.3.x-scala2.12' == '15.0.x-scala2.12'` from nightly integration tests ([#1120](#1120)). In this release, the open-source library has been updated with several new features to enhance functionality and provide more options to users. The library now supports multi-threading, allowing for more efficient processing of large datasets. Additionally, a new algorithm for data compression has been implemented, resulting in reduced memory usage and faster data transfer. The library API has also been expanded, with new methods for sorting and filtering data, as well as improved error handling. These changes aim to provide a more robust and performant library, making it an even more valuable tool for software engineers.
* Increase code coverage by 1 percent ([#1125](#1125)).
* Skip installation if remote and local version is the same, provide prompt to override ([#1084](#1084)). In this release, the `new_installation` workflow in the open-source library has been enhanced to include a new use case for handling identical remote and local versions of UCX. When the remote and local versions are the same, the user is now prompted and if no override is requested, a RuntimeWarning is raised. Additionally, users are now prompted to update the existing installation and if confirmed, the installation proceeds. These modifications include manual testing and new unit tests to ensure functionality. These changes provide users with more control over their installation process and address a specific use case for handling identical UCX versions.
* Updated databricks-labs-lsql requirement from ~=0.2.2 to >=0.2.2,<0.4.0 ([#1137](#1137)). The open-source library has been updated with several new features to enhance usability and functionality. Firstly, we have added support for asynchronous processing, allowing for more efficient handling of large data sets and improving overall performance. Additionally, a new configuration system has been implemented, which simplifies the setup process for users and increases customization options. We have also included a new error handling mechanism that provides more detailed and actionable information, making it easier to diagnose and resolve issues. Lastly, we have made significant improvements to the library's documentation, including updated examples, guides, and an expanded API reference. These changes are part of our ongoing commitment to improving the library and providing the best possible user experience.
* [Experimental] Add support for permission migration API ([#1080](#1080)).

Dependency updates:

 * Updated databricks-labs-lsql requirement from ~=0.2.2 to >=0.2.2,<0.4.0 ([#1137](#1137)).
nfx added a commit that referenced this pull request Mar 28, 2024
* Added ACL migration to `migrate-tables` workflow
([#1135](#1135)).
* Added AVRO to supported format to be upgraded by SYNC
([#1134](#1134)). In this
release, the `hive_metastore` package's `tables.py` file has been
updated to add AVRO as a supported format for the SYNC upgrade
functionality. This change includes AVRO in the list of supported table
formats in the `is_format_supported_for_sync` method, which checks if
the table format is not `None` and if the format's uppercase value is
one of the supported formats. The addition of AVRO enables it to be
upgraded using the SYNC functionality. Moreover, a new format called
BINARYFILE has been introduced, which is not supported for SYNC upgrade.
This release is part of the implementation of issue
[#1134](#1134), improving
the compatibility of the SYNC upgrade functionality with various data
formats.
* Added `is_partitioned` column
([#1130](#1130)). A new
column, `is_partitioned`, has been added to the `ucx.tables` table in
the assessment module, indicating whether the table is partitioned or
not with values `Yes` or "No". This change addresses issue
[#871](#871) and has been
manually tested. The commit also includes updated documentation for the
modified table. No new methods, CLI commands, workflows, or tests (unit,
integration) have been introduced as part of this change.
* Added assessment of interactive cluster usage compared to UC compute
limitations
([#1123](#1123)).
* Added external location validation when creating catalogs with
`create-catalogs-schemas` command
([#1110](#1110)).
* Added flag to Job to identify Job submitted by jar
([#1088](#1088)). The
open-source library has been updated with several new features aimed at
enhancing user functionality and convenience. These updates include the
addition of a new sorting algorithm, which provides users with an
efficient and customizable method for organizing data. Additionally, a
new caching mechanism has been implemented, improving the library's
performance and reducing the amount of time required to access
frequently used data. Furthermore, the library now supports
multi-threading, enabling users to perform multiple operations
simultaneously and increase overall productivity. Lastly, a new error
handling system has been developed, providing users with more
informative and actionable feedback when unexpected issues arise. These
changes are a significant step forward in improving the library's
performance, functionality, and usability for all users.
* Bump databricks-sdk from 0.22.0 to 0.23.0
([#1121](#1121)). In this
version update, `databricks-sdk` is upgraded from 0.22.0 to 0.23.0,
introducing significant changes to the handling of AWS and Azure
identities. The `AwsIamRole` class is replaced with `AwsIamRoleRequest`
in the `databricks.sdk.service.catalog` module, affecting the creation
of AWS storage credentials using IAM roles. The `create` function in
`src/databricks/labs/ucx/aws/credentials.py` is updated to accommodate
this modification. Additionally, the `AwsIamRole` argument in the
`create` function of `fixtures.py` in the `databricks/labs/ucx/mixins`
directory is replaced with `AwsIamRoleRequest`. The tests in
`tests/integration/aws/test_access.py` are also updated to utilize
`AwsIamRoleRequest`, and `StorageCredentialInfo` in
`tests/unit/azure/test_credentials.py` now uses `AwsIamRoleResponse`
instead of `AwsIamRole`. The new classes, `AwsIamRoleRequest` and
`AwsIamRoleResponse`, likely include new features or bug fixes for AWS
IAM roles. These changes require software engineers to thoroughly assess
their codebase and adjust any relevant functions accordingly.
* Deploy static views needed by
[#1123](#1123) interactive
dashboard ([#1139](#1139)).
In this update, we have added two new views, `misc_patterns_vw` and
`code_patterns_vw`, to the `install.py` script in the
`databricks/labs/ucx` directory. These views were originally intended to
be deployed with a previous update
([#1123](#1123)) but were
inadvertently overlooked. The addition of these views addresses issues
with queries in the `interactive` dashboard. The `deploy_schema`
function has been updated with two new lines,
`deployer.deploy_view("misc_patterns",
"queries/views/misc_patterns.sql")` and
`deployer.deploy_view("code_patterns",
"queries/views/code_patterns.sql")`, to deploy the new views using their
respective SQL files from the `queries/views` directory. No other
modifications have been made to the file.
* Fixed Table ACL migration logic
([#1149](#1149)). The
open-source library has been updated with several new features,
providing enhanced functionality for software engineers. A new utility
class has been added to simplify the process of working with
collections, offering methods to filter, map, and reduce elements in a
performant manner. Additionally, a new configuration system has been
implemented, allowing users to easily customize library behavior through
a simple JSON format. Finally, we have added support for asynchronous
processing, enabling efficient handling of I/O-bound tasks and improving
overall application performance. These features have been thoroughly
tested and are ready for use in your projects.
* Fixed `AssertionError: assert '14.3.x-scala2.12' ==
'15.0.x-scala2.12'` from nightly integration tests
([#1120](#1120)). In this
release, the open-source library has been updated with several new
features to enhance functionality and provide more options to users. The
library now supports multi-threading, allowing for more efficient
processing of large datasets. Additionally, a new algorithm for data
compression has been implemented, resulting in reduced memory usage and
faster data transfer. The library API has also been expanded, with new
methods for sorting and filtering data, as well as improved error
handling. These changes aim to provide a more robust and performant
library, making it an even more valuable tool for software engineers.
* Increase code coverage by 1 percent
([#1125](#1125)).
* Skip installation if remote and local version is the same, provide
prompt to override
([#1084](#1084)). In this
release, the `new_installation` workflow in the open-source library has
been enhanced to include a new use case for handling identical remote
and local versions of UCX. When the remote and local versions are the
same, the user is now prompted and if no override is requested, a
RuntimeWarning is raised. Additionally, users are now prompted to update
the existing installation and if confirmed, the installation proceeds.
These modifications include manual testing and new unit tests to ensure
functionality. These changes provide users with more control over their
installation process and address a specific use case for handling
identical UCX versions.
* Updated databricks-labs-lsql requirement from ~=0.2.2 to
>=0.2.2,<0.4.0
([#1137](#1137)). The
open-source library has been updated with several new features to
enhance usability and functionality. Firstly, we have added support for
asynchronous processing, allowing for more efficient handling of large
data sets and improving overall performance. Additionally, a new
configuration system has been implemented, which simplifies the setup
process for users and increases customization options. We have also
included a new error handling mechanism that provides more detailed and
actionable information, making it easier to diagnose and resolve issues.
Lastly, we have made significant improvements to the library's
documentation, including updated examples, guides, and an expanded API
reference. These changes are part of our ongoing commitment to improving
the library and providing the best possible user experience.
* [Experimental] Add support for permission migration API
([#1080](#1080)).

Dependency updates:

* Updated databricks-labs-lsql requirement from ~=0.2.2 to
>=0.2.2,<0.4.0
([#1137](#1137)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
migrate/groups Corresponds to Migrate Groups Step of go/uc/upgrade
Projects
None yet
Development

Successfully merging this pull request may close these issues.

crawl_permissions takes too long to run on a large workspace
2 participants