@@ -397,7 +397,7 @@ def get_jobs(
397
397
)
398
398
statement = utils .apply_limit (statement , limit )
399
399
compute_sessionmaker = db_utils .get_compute_sessionmaker (
400
- mode = db_utils .ConnectionMode .read
400
+ mode = db_utils .ConnectionMode .write
401
401
)
402
402
with compute_sessionmaker () as compute_session :
403
403
jobs_count = cads_broker .database .count_requests (
@@ -493,9 +493,14 @@ def get_job(
493
493
if auth_info .portal_header
494
494
else None
495
495
)
496
+ compute_connection_mode = (
497
+ db_utils .ConnectionMode .write
498
+ if auth_info .request_origin == "ui"
499
+ else db_utils .ConnectionMode .read
500
+ )
496
501
try :
497
502
compute_sessionmaker = db_utils .get_compute_sessionmaker (
498
- mode = db_utils . ConnectionMode . read
503
+ mode = compute_connection_mode
499
504
)
500
505
with compute_sessionmaker () as compute_session :
501
506
job = utils .get_job_from_broker_db (
@@ -516,27 +521,32 @@ def get_job(
516
521
log_start_time ,
517
522
)
518
523
except ogc_api_processes_fastapi .exceptions .NoSuchJob :
519
- compute_sessionmaker = db_utils .get_compute_sessionmaker (
520
- mode = db_utils .ConnectionMode .write
521
- )
522
- with compute_sessionmaker () as compute_session :
523
- job = utils .get_job_from_broker_db (
524
- job_id = job_id , session = compute_session
524
+ if compute_connection_mode == db_utils .ConnectionMode .write :
525
+ raise
526
+ else :
527
+ compute_sessionmaker = db_utils .get_compute_sessionmaker (
528
+ mode = db_utils .ConnectionMode .write
525
529
)
526
- if qos :
527
- job_qos_info = {
528
- ** utils .get_job_qos_info (job , compute_session ),
529
- "status" : cads_broker .database .get_qos_status_from_request (job ),
530
- }
531
- # These lines are inside the session context because the related fields
532
- # are lazy loaded
533
- if log :
534
- job_log = utils .get_job_events (
535
- job ,
536
- compute_session ,
537
- "user_visible_log" ,
538
- log_start_time ,
530
+ with compute_sessionmaker () as compute_session :
531
+ job = utils .get_job_from_broker_db (
532
+ job_id = job_id , session = compute_session
539
533
)
534
+ if qos :
535
+ job_qos_info = {
536
+ ** utils .get_job_qos_info (job , compute_session ),
537
+ "status" : cads_broker .database .get_qos_status_from_request (
538
+ job
539
+ ),
540
+ }
541
+ # These lines are inside the session context because the related fields
542
+ # are lazy loaded
543
+ if log :
544
+ job_log = utils .get_job_events (
545
+ job ,
546
+ compute_session ,
547
+ "user_visible_log" ,
548
+ log_start_time ,
549
+ )
540
550
if job .portal not in portals :
541
551
raise ogc_api_processes_fastapi .exceptions .NoSuchJob (
542
552
detail = f"job { job_id } not found"
@@ -600,9 +610,14 @@ def get_job_results(
600
610
structlog .contextvars .bind_contextvars (
601
611
job_id = job_id , user_uid = auth_info .user_uid
602
612
)
613
+ compute_connection_mode = (
614
+ db_utils .ConnectionMode .write
615
+ if auth_info .request_origin == "ui"
616
+ else db_utils .ConnectionMode .read
617
+ )
603
618
try :
604
619
compute_sessionmaker = db_utils .get_compute_sessionmaker (
605
- mode = db_utils . ConnectionMode . read
620
+ mode = compute_connection_mode
606
621
)
607
622
with compute_sessionmaker () as compute_session :
608
623
job = utils .get_job_from_broker_db (
@@ -614,15 +629,20 @@ def get_job_results(
614
629
ogc_api_processes_fastapi .exceptions .NoSuchJob ,
615
630
ogc_api_processes_fastapi .exceptions .ResultsNotReady ,
616
631
):
617
- compute_sessionmaker = db_utils .get_compute_sessionmaker (
618
- mode = db_utils .ConnectionMode .write
619
- )
620
- with compute_sessionmaker () as compute_session :
621
- job = utils .get_job_from_broker_db (
622
- job_id = job_id , session = compute_session
632
+ if compute_connection_mode == db_utils .ConnectionMode .write :
633
+ raise
634
+ else :
635
+ compute_sessionmaker = db_utils .get_compute_sessionmaker (
636
+ mode = db_utils .ConnectionMode .write
623
637
)
624
- results = utils .get_results_from_job (job = job , session = compute_session )
625
- auth .verify_permission (auth_info .user_uid , job )
638
+ with compute_sessionmaker () as compute_session :
639
+ job = utils .get_job_from_broker_db (
640
+ job_id = job_id , session = compute_session
641
+ )
642
+ results = utils .get_results_from_job (
643
+ job = job , session = compute_session
644
+ )
645
+ auth .verify_permission (auth_info .user_uid , job )
626
646
handle_download_metrics (job .process_id , results )
627
647
return results
628
648
0 commit comments