@@ -419,6 +419,16 @@ def _workflow_sessions_root(cluster_share: Path, user: Any, workflow_name: Any)
419419 return _workflow_user_root (cluster_share , user ) / safe_workflow
420420
421421
422+ def _workflow_cluster_share_root (cluster_share : Path , * , user : Any , workflow_name : Any ) -> Path :
423+ safe_user = _safe_workflow_component (user , "local-user" )
424+ safe_workflow = _safe_workflow_component (workflow_name , "default" )
425+ parts = cluster_share .parts
426+ for index in range (len (parts ) - 3 , - 1 , - 1 ):
427+ if parts [index ] == safe_user and parts [index + 1 ] == safe_workflow :
428+ return Path (* parts [: index + 1 ])
429+ return cluster_share
430+
431+
422432def _list_workflow_sessions (sessions_root : Path ) -> list [Path ]:
423433 try :
424434 entries = [path for path in sessions_root .iterdir () if path .is_dir ()]
@@ -471,6 +481,11 @@ def _resolve_workflow_session_path(
471481def _workflow_data_path_text (cluster_share : Path , session_path : Path , env : Any ) -> str :
472482 cluster_share_setting = _env_cluster_share_setting (env )
473483 if cluster_share_setting :
484+ setting_path = _resolve_env_relative_path (cluster_share_setting , env )
485+ if setting_path is not None and (
486+ setting_path == session_path or _path_is_within (setting_path , session_path )
487+ ):
488+ return _home_relative_share_text (session_path , env ) or str (session_path )
474489 try :
475490 suffix = session_path .relative_to (cluster_share )
476491 except ValueError :
@@ -1465,14 +1480,23 @@ def render_cluster_settings_ui(env: Any, deps: OrchestrateClusterDeps, *, show_r
14651480 and cluster_share_candidate .is_dir ()
14661481 and os .access (cluster_share_candidate , os .W_OK )
14671482 )
1483+ workflow_cluster_share_candidate = (
1484+ _workflow_cluster_share_root (
1485+ cluster_share_candidate ,
1486+ user = sanitized_user ,
1487+ workflow_name = workflow_id ,
1488+ )
1489+ if cluster_share_candidate is not None
1490+ else None
1491+ )
14681492 workflow_session_options : list [str ] = []
1469- if cluster_share_ready and cluster_share_candidate is not None :
1493+ if cluster_share_ready and workflow_cluster_share_candidate is not None :
14701494 workflow_session_options = _workflow_session_names (
1471- _workflow_sessions_root (cluster_share_candidate , sanitized_user , workflow_id )
1495+ _workflow_sessions_root (workflow_cluster_share_candidate , sanitized_user , workflow_id )
14721496 )
14731497 try :
14741498 workflow_session_path , workflow_session , workflow_policy = _resolve_workflow_session_path (
1475- cluster_share_candidate ,
1499+ workflow_cluster_share_candidate ,
14761500 user = sanitized_user ,
14771501 workflow_name = workflow_id ,
14781502 policy = workflow_policy ,
@@ -1484,7 +1508,7 @@ def render_cluster_settings_ui(env: Any, deps: OrchestrateClusterDeps, *, show_r
14841508 st .error (f"Could not prepare workflow session under `{ cluster_share_candidate } `: { exc } " )
14851509 else :
14861510 workflow_workers_data_path = _workflow_data_path_text (
1487- cluster_share_candidate ,
1511+ workflow_cluster_share_candidate ,
14881512 workflow_session_path ,
14891513 env ,
14901514 )
@@ -1530,7 +1554,7 @@ def render_cluster_settings_ui(env: Any, deps: OrchestrateClusterDeps, *, show_r
15301554 st .session_state .pop (workflow_existing_session_key , None )
15311555 st .info (
15321556 "No existing workflow session directories found under "
1533- f"`{ _workflow_sessions_root (cluster_share_candidate , sanitized_user , workflow_id )} `."
1557+ f"`{ _workflow_sessions_root (workflow_cluster_share_candidate , sanitized_user , workflow_id )} `."
15341558 )
15351559 else :
15361560 st .session_state .pop (workflow_existing_session_key , None )
@@ -1547,10 +1571,10 @@ def render_cluster_settings_ui(env: Any, deps: OrchestrateClusterDeps, *, show_r
15471571 ),
15481572 )
15491573 workflow_session = _safe_workflow_component (workflow_session_input , "" )
1550- if cluster_share_ready and cluster_share_candidate is not None and not workflow_session_error_shown :
1574+ if cluster_share_ready and workflow_cluster_share_candidate is not None and not workflow_session_error_shown :
15511575 try :
15521576 workflow_session_path , workflow_session , workflow_policy = _resolve_workflow_session_path (
1553- cluster_share_candidate ,
1577+ workflow_cluster_share_candidate ,
15541578 user = sanitized_user ,
15551579 workflow_name = workflow_id ,
15561580 policy = workflow_policy ,
@@ -1560,7 +1584,7 @@ def render_cluster_settings_ui(env: Any, deps: OrchestrateClusterDeps, *, show_r
15601584 st .error (f"Could not prepare workflow session under `{ cluster_share_candidate } `: { exc } " )
15611585 else :
15621586 workflow_workers_data_path = _workflow_data_path_text (
1563- cluster_share_candidate ,
1587+ workflow_cluster_share_candidate ,
15641588 workflow_session_path ,
15651589 env ,
15661590 )
0 commit comments