3434import databricks .labs .ucx .installer .mixins
3535import databricks .labs .ucx .uninstall # noqa
3636from databricks .labs .ucx .config import WorkspaceConfig
37+ from databricks .labs .ucx .framework .tasks import Task
3738from databricks .labs .ucx .install import AccountInstaller , WorkspaceInstallation , WorkspaceInstaller , extract_major_minor
3839from databricks .labs .ucx .installer .workflows import DeployedWorkflows , WorkflowsDeployment
3940from databricks .labs .ucx .runtime import Workflows
@@ -86,7 +87,7 @@ def mock_installation_extra_jobs():
8687 {
8788 'state.json' : {
8889 'resources' : {
89- 'jobs' : {"assessment" : "123" , "extra_job" : "123 " },
90+ 'jobs' : {"assessment" : "123" , "extra_job" : "124" , "other_job" : "125 " },
9091 'dashboards' : {'assessment_main' : 'abc' , 'assessment_estimates' : 'def' },
9192 }
9293 }
@@ -615,9 +616,10 @@ def test_remove_jobs_with_state_missing_job(ws, caplog, mock_installation_with_j
615616 config , mock_installation_with_jobs , install_state , sql_backend , ws , workflows_installer , prompts , PRODUCT_INFO
616617 )
617618
618- with caplog .at_level ('ERROR ' ):
619+ with caplog .at_level ('WARNING ' ):
619620 workspace_installation .uninstall ()
620- assert 'Already deleted: assessment job_id=123.' in caplog .messages
621+ failure = 'Corrupt installation state. Skipping job_id=123 as it is not managed by UCX'
622+ assert failure in caplog .messages
621623
622624 mock_installation_with_jobs .assert_removed ()
623625 wheels .upload_to_wsfs .assert_not_called ()
@@ -1282,14 +1284,18 @@ def test_remove_jobs(ws, caplog, mock_installation_extra_jobs, any_prompt):
12821284 sql_backend = MockBackend ()
12831285 install_state = InstallState .from_installation (mock_installation_extra_jobs )
12841286 wheels = create_autospec (WheelsV2 )
1287+
1288+ def dummy_task (* _ ):
1289+ pass
1290+
12851291 workflows_installation = WorkflowsDeployment (
12861292 WorkspaceConfig (inventory_database = "..." , policy_id = '123' ),
12871293 mock_installation_extra_jobs ,
12881294 install_state ,
12891295 ws ,
12901296 wheels ,
12911297 PRODUCT_INFO ,
1292- [],
1298+ [Task ( 'assessment' , 'some' , '...' , dummy_task ) ],
12931299 )
12941300
12951301 workspace_installation = WorkspaceInstallation (
@@ -1303,9 +1309,28 @@ def test_remove_jobs(ws, caplog, mock_installation_extra_jobs, any_prompt):
13031309 PRODUCT_INFO ,
13041310 )
13051311
1306- workspace_installation .run ()
1307- ws .jobs .delete .assert_called_with ("123" )
1312+ def job_side_effect (job_id ):
1313+ tasks = {
1314+ 123 : [jobs .Task ('x' , notebook_task = jobs .NotebookTask (notebook_path = '~/mock/assessment' ))],
1315+ 124 : [jobs .Task ('y' , python_wheel_task = jobs .PythonWheelTask ('databricks_labs_ucx' , 'runtime' ))],
1316+ 125 : [jobs .Task ('z' , notebook_task = jobs .NotebookTask (notebook_path = 'outside-of-ucx' ))],
1317+ }
1318+ return jobs .Job (
1319+ settings = jobs .JobSettings (
1320+ tasks = tasks [job_id ],
1321+ ),
1322+ )
1323+
1324+ ws .jobs .get .side_effect = job_side_effect
1325+
1326+ with caplog .at_level ('WARNING' ):
1327+ workspace_installation .run ()
1328+
1329+ job_deletes = {_ .args [0 ] for _ in ws .jobs .delete .mock_calls }
1330+ assert len (job_deletes ) == 1
1331+ assert '124' in job_deletes
13081332 wheels .upload_to_wsfs .assert_called ()
1333+ assert 'Corrupt installation state. Skipping job_id=125 as it is not managed by UCX' in caplog .messages
13091334
13101335
13111336def test_remove_jobs_already_deleted (ws , caplog , mock_installation_extra_jobs , any_prompt ):
0 commit comments