Skip to content

Commit 6278422

Browse files
committed
use compute write instance for requests coming from ui
1 parent c76f6e6 commit 6278422

File tree

1 file changed

+50
-30
lines changed

1 file changed

+50
-30
lines changed

cads_processing_api_service/clients.py

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ def get_jobs(
397397
)
398398
statement = utils.apply_limit(statement, limit)
399399
compute_sessionmaker = db_utils.get_compute_sessionmaker(
400-
mode=db_utils.ConnectionMode.read
400+
mode=db_utils.ConnectionMode.write
401401
)
402402
with compute_sessionmaker() as compute_session:
403403
jobs_count = cads_broker.database.count_requests(
@@ -493,9 +493,14 @@ def get_job(
493493
if auth_info.portal_header
494494
else None
495495
)
496+
compute_connection_mode = (
497+
db_utils.ConnectionMode.write
498+
if auth_info.request_origin == "ui"
499+
else db_utils.ConnectionMode.read
500+
)
496501
try:
497502
compute_sessionmaker = db_utils.get_compute_sessionmaker(
498-
mode=db_utils.ConnectionMode.read
503+
mode=compute_connection_mode
499504
)
500505
with compute_sessionmaker() as compute_session:
501506
job = utils.get_job_from_broker_db(
@@ -516,27 +521,32 @@ def get_job(
516521
log_start_time,
517522
)
518523
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
525529
)
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
539533
)
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+
)
540550
if job.portal not in portals:
541551
raise ogc_api_processes_fastapi.exceptions.NoSuchJob(
542552
detail=f"job {job_id} not found"
@@ -600,9 +610,14 @@ def get_job_results(
600610
structlog.contextvars.bind_contextvars(
601611
job_id=job_id, user_uid=auth_info.user_uid
602612
)
613+
compute_connection_mode = (
614+
db_utils.ConnectionMode.write
615+
if auth_info.request_origin == "ui"
616+
else db_utils.ConnectionMode.read
617+
)
603618
try:
604619
compute_sessionmaker = db_utils.get_compute_sessionmaker(
605-
mode=db_utils.ConnectionMode.read
620+
mode=compute_connection_mode
606621
)
607622
with compute_sessionmaker() as compute_session:
608623
job = utils.get_job_from_broker_db(
@@ -614,15 +629,20 @@ def get_job_results(
614629
ogc_api_processes_fastapi.exceptions.NoSuchJob,
615630
ogc_api_processes_fastapi.exceptions.ResultsNotReady,
616631
):
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
623637
)
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)
626646
handle_download_metrics(job.process_id, results)
627647
return results
628648

0 commit comments

Comments
 (0)