potiuk commented on code in PR #30308:
URL: https://github.com/apache/airflow/pull/30308#discussion_r1162103988
##########
airflow/jobs/job.py:
##########
@@ -285,12 +273,59 @@ def most_recent_job(job_type: str, session: Session =
NEW_SESSION) -> BaseJob |
:param session: Database session
"""
return (
- session.query(BaseJob)
- .filter(BaseJob.job_type == job_type)
+ session.query(Job)
+ .filter(Job.job_type == job_type)
.order_by(
# Put "running" jobs at the front.
- case({State.RUNNING: 0}, value=BaseJob.state, else_=1),
- BaseJob.latest_heartbeat.desc(),
+ case({State.RUNNING: 0}, value=Job.state, else_=1),
+ Job.latest_heartbeat.desc(),
)
.first()
)
+
+
+@provide_session
+def prepare_for_execution(job: Job | JobPydantic, session=NEW_SESSION):
+ """
+ Prepare execution of a job.
+
+ :param job: Job to prepare execution for
+ :param session: Database session
+ """
+ if isinstance(job, Job):
+ job.prepare_for_execution()
+ else:
+ Job.get(job.id, session=session).prepare_for_execution()
+
+
+def execute_job(job: Job) -> int | None:
+ """Executes the job - does not matter if there is a session or not"""
+ ret = None
+ try:
+ ret = job.job_runner._execute()
+ # In case of max runs or max duration
+ job.state = State.SUCCESS
+ except SystemExit:
+ # In case of ^C or SIGTERM
+ job.state = State.SUCCESS
+ except Exception:
+ job.state = State.FAILED
+ raise
+ return ret
+
+
+@provide_session
+def complete_execution(job: Job | JobPydantic, session=NEW_SESSION):
+ if isinstance(job, Job):
+ job.complete_execution()
+ else:
+ Job.get(job.id, session=session).complete_execution()
+
+
+def run_job(job: Job) -> int | None:
+ """Runs the job."""
+ prepare_for_execution(job)
Review Comment:
The idea here is to make those three steps independent. I added a session
for now, but those will be split later for AIP-44 to ORM/non-ORM ones (esecute
will be no-orrm)
If I understand it correctly - you are proposing to keep the methods
together, but the point here is to separate them out so that prepare/complete
can be done with DB and execute without.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]