Remove JobRunners back reference from Job - #30376

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job
Apr 11, 2023
Merged

Remove JobRunners back reference from Job#30376
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job

Conversation

@potiuk

@potiukpotiuk commented Mar 30, 2023

Copy link
Copy Markdown
Member

This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:

  • SchedulerJobRunner, BackfillJobRunner can only use BaseJob
  • DagProcessorJobRunner, TriggererJobRunner and especially the
    LocalTaskJobRunner can keep both BaseJob and it's Pydantic
    BaseJobPydantic representation - for AIP-44 usage.

The highlights of this change:

  • Job does not have job_runner reference any more
  • Job is a mandatory parameter when creating each JobRunner
  • run_job method takes as parameter the job (i.e. where the state
    of the job is called) and executor_callable - i.e. the method
    to run when the job gets executed
  • heartbeat callback is also passed a generic callable in order
    to execute the post-heartbeat operation of each of the job
    type
  • there is no more need to specify job_type when you create
    BaseJob, the job gets its type by a simply creating a runner
    with the job
  • DagFileProcessorManager is now merged into DagProcessorJobRunner.
    The JobRuner was essentially calling the processormanager that
    created processors. In order to make it consistent with other
    Runners - all of it has been moved into runner, so that it
    starts doing "something" - similar as other runners - rather than
    creating processor manager and running it.

This is the final stage of refactoring that was split into
reviewable stages: #30255 -> #30302 -> #30308 -> this PR.

Please check only the last commit.

Closes: #30325


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:CLI area:Scheduler including HA (high availability) scheduler area:webserver Webserver related Issues kind:documentation labels Mar 30, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 4bc3d55 to b10344cCompareMarch 30, 2023 18:33
@potiuk

Copy link
Copy Markdown
MemberAuthor

I think there are two errors in tests that I will need to fix (let's see for the CI) - but other than that i think this one should be pretty complete and implements what we've been discussing with @mhenc and @vincbeck and @uranusjr before.

Comment threadairflow/dag_processing/manager.py Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merged this one into DagProcessorJobRunner - this way it is consistent with other Jobs - which "do something" rather than create another object and "run" it.

Comment threadairflow/jobs/scheduler_job_runner.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 2bf14da to 71920bfCompareApril 4, 2023 10:19
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 71920bf to a858a1eCompareApril 6, 2023 06:59
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from a858a1e to 2514572CompareApril 7, 2023 10:34
@potiuk
potiuk requested a review from eladkal as a code ownerApril 7, 2023 10:34
@potiukpotiuk added the AIP-44 Airflow Internal API label Apr 8, 2023
@potiuk

Copy link
Copy Markdown
MemberAuthor

OK. I got it green finally @uranusjr -> this is the target of the refactor, I would love to merge - if possible - the 4 dependent PRs before we cut-off 2.6.0 branch to make cherry-picking easier for 2.6 branch (cc: @jedcunningham, @ephraimbuddy )

@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 88b4146 to 79b62f2CompareApril 10, 2023 09:25
@potiukpotiuk changed the title Finally decouple job_runner from jobRemove JobRunners back reference from JobApr 10, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 68815f8 to 8e2bb8bCompareApril 10, 2023 12:47
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 8e2bb8b to bdca1efCompareApril 10, 2023 12:58
Comment threadairflow/models/__init__.py Outdated
Comment threadairflow/models/__init__.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 8889b44 to 727f3afCompareApril 10, 2023 22:18
@ephraimbuddyephraimbuddy added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Apr 11, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 727f3af to 7ee67a6CompareApril 11, 2023 10:48
Comment threadairflow/jobs/job.py Outdated
Comment threadtests/cli/commands/test_jobs_command.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 1a251d8 to 1ce3d6aCompareApril 11, 2023 19:15
This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:
* SchedulerJobRunner, BackfillJobRunner can only use BaseJob
* DagProcessorJobRunner, TriggererJobRunner and especially the
LocalTaskJobRunner can keep both BaseJob and it's Pydantic
BaseJobPydantic representation - for AIP-44 usage.
The highlights of this change:
* Job does not have job_runner reference any more
* Job is a mandatory parameter when creating each JobRunner
* run_job method takes as parameter the job (i.e. where the state
of the job is called) and executor_callable - i.e. the method
to run when the job gets executed
* heartbeat callback is also passed a generic callable in order
to execute the post-heartbeat operation of each of the job
type
* there is no more need to specify job_type when you create
BaseJob, the job gets its type by a simply creating a runner
with the job
This is the final stage of refactoring that was split into
reviewable stages: apache#30255 -> apache#30302 -> apache#30308 -> this PR.
Closes: apache#30325
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 1ce3d6a to 18b6b5bCompareApril 11, 2023 21:50
@potiuk
potiuk merged commit 4403419 into apache:mainApr 11, 2023
@potiuk
potiuk deleted the remove-runner-back-reference-from-job branch April 11, 2023 22:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-44Airflow Internal APIarea:APIAirflow's REST/HTTP APIarea:CLIarea:Schedulerincluding HA (high availability) schedulerarea:webserverWebserver related Issueschangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)kind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-44 Remove job_runner from BaseJob as a final step of decoupling

3 participants

@potiuk@ephraimbuddy@mhenc
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Remove JobRunners back reference from Job - #30376

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job
Apr 11, 2023
Merged

Remove JobRunners back reference from Job#30376
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job

Conversation

@potiuk

@potiukpotiuk commented Mar 30, 2023

Copy link
Copy Markdown
Member

This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:

  • SchedulerJobRunner, BackfillJobRunner can only use BaseJob
  • DagProcessorJobRunner, TriggererJobRunner and especially the
    LocalTaskJobRunner can keep both BaseJob and it's Pydantic
    BaseJobPydantic representation - for AIP-44 usage.

The highlights of this change:

  • Job does not have job_runner reference any more
  • Job is a mandatory parameter when creating each JobRunner
  • run_job method takes as parameter the job (i.e. where the state
    of the job is called) and executor_callable - i.e. the method
    to run when the job gets executed
  • heartbeat callback is also passed a generic callable in order
    to execute the post-heartbeat operation of each of the job
    type
  • there is no more need to specify job_type when you create
    BaseJob, the job gets its type by a simply creating a runner
    with the job
  • DagFileProcessorManager is now merged into DagProcessorJobRunner.
    The JobRuner was essentially calling the processormanager that
    created processors. In order to make it consistent with other
    Runners - all of it has been moved into runner, so that it
    starts doing "something" - similar as other runners - rather than
    creating processor manager and running it.

This is the final stage of refactoring that was split into
reviewable stages: #30255 -> #30302 -> #30308 -> this PR.

Please check only the last commit.

Closes: #30325


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:CLI area:Scheduler including HA (high availability) scheduler area:webserver Webserver related Issues kind:documentation labels Mar 30, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 4bc3d55 to b10344cCompareMarch 30, 2023 18:33
@potiuk

Copy link
Copy Markdown
MemberAuthor

I think there are two errors in tests that I will need to fix (let's see for the CI) - but other than that i think this one should be pretty complete and implements what we've been discussing with @mhenc and @vincbeck and @uranusjr before.

Comment threadairflow/dag_processing/manager.py Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merged this one into DagProcessorJobRunner - this way it is consistent with other Jobs - which "do something" rather than create another object and "run" it.

Comment threadairflow/jobs/scheduler_job_runner.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 2bf14da to 71920bfCompareApril 4, 2023 10:19
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 71920bf to a858a1eCompareApril 6, 2023 06:59
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from a858a1e to 2514572CompareApril 7, 2023 10:34
@potiuk
potiuk requested a review from eladkal as a code ownerApril 7, 2023 10:34
@potiukpotiuk added the AIP-44 Airflow Internal API label Apr 8, 2023
@potiuk

Copy link
Copy Markdown
MemberAuthor

OK. I got it green finally @uranusjr -> this is the target of the refactor, I would love to merge - if possible - the 4 dependent PRs before we cut-off 2.6.0 branch to make cherry-picking easier for 2.6 branch (cc: @jedcunningham, @ephraimbuddy )

@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 88b4146 to 79b62f2CompareApril 10, 2023 09:25
@potiukpotiuk changed the title Finally decouple job_runner from jobRemove JobRunners back reference from JobApr 10, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 68815f8 to 8e2bb8bCompareApril 10, 2023 12:47
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 8e2bb8b to bdca1efCompareApril 10, 2023 12:58
Comment threadairflow/models/__init__.py Outdated
Comment threadairflow/models/__init__.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 8889b44 to 727f3afCompareApril 10, 2023 22:18
@ephraimbuddyephraimbuddy added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Apr 11, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 727f3af to 7ee67a6CompareApril 11, 2023 10:48
Comment threadairflow/jobs/job.py Outdated
Comment threadtests/cli/commands/test_jobs_command.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 1a251d8 to 1ce3d6aCompareApril 11, 2023 19:15
This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:
* SchedulerJobRunner, BackfillJobRunner can only use BaseJob
* DagProcessorJobRunner, TriggererJobRunner and especially the
LocalTaskJobRunner can keep both BaseJob and it's Pydantic
BaseJobPydantic representation - for AIP-44 usage.
The highlights of this change:
* Job does not have job_runner reference any more
* Job is a mandatory parameter when creating each JobRunner
* run_job method takes as parameter the job (i.e. where the state
of the job is called) and executor_callable - i.e. the method
to run when the job gets executed
* heartbeat callback is also passed a generic callable in order
to execute the post-heartbeat operation of each of the job
type
* there is no more need to specify job_type when you create
BaseJob, the job gets its type by a simply creating a runner
with the job
This is the final stage of refactoring that was split into
reviewable stages: apache#30255 -> apache#30302 -> apache#30308 -> this PR.
Closes: apache#30325
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 1ce3d6a to 18b6b5bCompareApril 11, 2023 21:50
@potiuk
potiuk merged commit 4403419 into apache:mainApr 11, 2023
@potiuk
potiuk deleted the remove-runner-back-reference-from-job branch April 11, 2023 22:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-44Airflow Internal APIarea:APIAirflow's REST/HTTP APIarea:CLIarea:Schedulerincluding HA (high availability) schedulerarea:webserverWebserver related Issueschangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)kind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-44 Remove job_runner from BaseJob as a final step of decoupling

3 participants

@potiuk@ephraimbuddy@mhenc
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove JobRunners back reference from Job - #30376

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job
Apr 11, 2023
Merged

Remove JobRunners back reference from Job#30376
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job

Conversation

@potiuk

@potiukpotiuk commented Mar 30, 2023

Copy link
Copy Markdown
Member

This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:

  • SchedulerJobRunner, BackfillJobRunner can only use BaseJob
  • DagProcessorJobRunner, TriggererJobRunner and especially the
    LocalTaskJobRunner can keep both BaseJob and it's Pydantic
    BaseJobPydantic representation - for AIP-44 usage.

The highlights of this change:

  • Job does not have job_runner reference any more
  • Job is a mandatory parameter when creating each JobRunner
  • run_job method takes as parameter the job (i.e. where the state
    of the job is called) and executor_callable - i.e. the method
    to run when the job gets executed
  • heartbeat callback is also passed a generic callable in order
    to execute the post-heartbeat operation of each of the job
    type
  • there is no more need to specify job_type when you create
    BaseJob, the job gets its type by a simply creating a runner
    with the job
  • DagFileProcessorManager is now merged into DagProcessorJobRunner.
    The JobRuner was essentially calling the processormanager that
    created processors. In order to make it consistent with other
    Runners - all of it has been moved into runner, so that it
    starts doing "something" - similar as other runners - rather than
    creating processor manager and running it.

This is the final stage of refactoring that was split into
reviewable stages: #30255 -> #30302 -> #30308 -> this PR.

Please check only the last commit.

Closes: #30325


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:CLI area:Scheduler including HA (high availability) scheduler area:webserver Webserver related Issues kind:documentation labels Mar 30, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 4bc3d55 to b10344cCompareMarch 30, 2023 18:33
@potiuk

Copy link
Copy Markdown
MemberAuthor

I think there are two errors in tests that I will need to fix (let's see for the CI) - but other than that i think this one should be pretty complete and implements what we've been discussing with @mhenc and @vincbeck and @uranusjr before.

Comment threadairflow/dag_processing/manager.py Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merged this one into DagProcessorJobRunner - this way it is consistent with other Jobs - which "do something" rather than create another object and "run" it.

Comment threadairflow/jobs/scheduler_job_runner.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 2bf14da to 71920bfCompareApril 4, 2023 10:19
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 71920bf to a858a1eCompareApril 6, 2023 06:59
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from a858a1e to 2514572CompareApril 7, 2023 10:34
@potiuk
potiuk requested a review from eladkal as a code ownerApril 7, 2023 10:34
@potiukpotiuk added the AIP-44 Airflow Internal API label Apr 8, 2023
@potiuk

Copy link
Copy Markdown
MemberAuthor

OK. I got it green finally @uranusjr -> this is the target of the refactor, I would love to merge - if possible - the 4 dependent PRs before we cut-off 2.6.0 branch to make cherry-picking easier for 2.6 branch (cc: @jedcunningham, @ephraimbuddy )

@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 88b4146 to 79b62f2CompareApril 10, 2023 09:25
@potiukpotiuk changed the title Finally decouple job_runner from jobRemove JobRunners back reference from JobApr 10, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 68815f8 to 8e2bb8bCompareApril 10, 2023 12:47
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 8e2bb8b to bdca1efCompareApril 10, 2023 12:58
Comment threadairflow/models/__init__.py Outdated
Comment threadairflow/models/__init__.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 8889b44 to 727f3afCompareApril 10, 2023 22:18
@ephraimbuddyephraimbuddy added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Apr 11, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 727f3af to 7ee67a6CompareApril 11, 2023 10:48
Comment threadairflow/jobs/job.py Outdated
Comment threadtests/cli/commands/test_jobs_command.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 1a251d8 to 1ce3d6aCompareApril 11, 2023 19:15
This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:
* SchedulerJobRunner, BackfillJobRunner can only use BaseJob
* DagProcessorJobRunner, TriggererJobRunner and especially the
LocalTaskJobRunner can keep both BaseJob and it's Pydantic
BaseJobPydantic representation - for AIP-44 usage.
The highlights of this change:
* Job does not have job_runner reference any more
* Job is a mandatory parameter when creating each JobRunner
* run_job method takes as parameter the job (i.e. where the state
of the job is called) and executor_callable - i.e. the method
to run when the job gets executed
* heartbeat callback is also passed a generic callable in order
to execute the post-heartbeat operation of each of the job
type
* there is no more need to specify job_type when you create
BaseJob, the job gets its type by a simply creating a runner
with the job
This is the final stage of refactoring that was split into
reviewable stages: apache#30255 -> apache#30302 -> apache#30308 -> this PR.
Closes: apache#30325
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 1ce3d6a to 18b6b5bCompareApril 11, 2023 21:50
@potiuk
potiuk merged commit 4403419 into apache:mainApr 11, 2023
@potiuk
potiuk deleted the remove-runner-back-reference-from-job branch April 11, 2023 22:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-44Airflow Internal APIarea:APIAirflow's REST/HTTP APIarea:CLIarea:Schedulerincluding HA (high availability) schedulerarea:webserverWebserver related Issueschangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)kind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-44 Remove job_runner from BaseJob as a final step of decoupling

3 participants

@potiuk@ephraimbuddy@mhenc
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove JobRunners back reference from Job - #30376

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job
Apr 11, 2023
Merged

Remove JobRunners back reference from Job#30376
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job

Conversation

@potiuk

@potiukpotiuk commented Mar 30, 2023

Copy link
Copy Markdown
Member

This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:

  • SchedulerJobRunner, BackfillJobRunner can only use BaseJob
  • DagProcessorJobRunner, TriggererJobRunner and especially the
    LocalTaskJobRunner can keep both BaseJob and it's Pydantic
    BaseJobPydantic representation - for AIP-44 usage.

The highlights of this change:

  • Job does not have job_runner reference any more
  • Job is a mandatory parameter when creating each JobRunner
  • run_job method takes as parameter the job (i.e. where the state
    of the job is called) and executor_callable - i.e. the method
    to run when the job gets executed
  • heartbeat callback is also passed a generic callable in order
    to execute the post-heartbeat operation of each of the job
    type
  • there is no more need to specify job_type when you create
    BaseJob, the job gets its type by a simply creating a runner
    with the job
  • DagFileProcessorManager is now merged into DagProcessorJobRunner.
    The JobRuner was essentially calling the processormanager that
    created processors. In order to make it consistent with other
    Runners - all of it has been moved into runner, so that it
    starts doing "something" - similar as other runners - rather than
    creating processor manager and running it.

This is the final stage of refactoring that was split into
reviewable stages: #30255 -> #30302 -> #30308 -> this PR.

Please check only the last commit.

Closes: #30325


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:CLI area:Scheduler including HA (high availability) scheduler area:webserver Webserver related Issues kind:documentation labels Mar 30, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 4bc3d55 to b10344cCompareMarch 30, 2023 18:33
@potiuk

Copy link
Copy Markdown
MemberAuthor

I think there are two errors in tests that I will need to fix (let's see for the CI) - but other than that i think this one should be pretty complete and implements what we've been discussing with @mhenc and @vincbeck and @uranusjr before.

Comment threadairflow/dag_processing/manager.py Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merged this one into DagProcessorJobRunner - this way it is consistent with other Jobs - which "do something" rather than create another object and "run" it.

Comment threadairflow/jobs/scheduler_job_runner.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 2bf14da to 71920bfCompareApril 4, 2023 10:19
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 71920bf to a858a1eCompareApril 6, 2023 06:59
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from a858a1e to 2514572CompareApril 7, 2023 10:34
@potiuk
potiuk requested a review from eladkal as a code ownerApril 7, 2023 10:34
@potiukpotiuk added the AIP-44 Airflow Internal API label Apr 8, 2023
@potiuk

Copy link
Copy Markdown
MemberAuthor

OK. I got it green finally @uranusjr -> this is the target of the refactor, I would love to merge - if possible - the 4 dependent PRs before we cut-off 2.6.0 branch to make cherry-picking easier for 2.6 branch (cc: @jedcunningham, @ephraimbuddy )

@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 88b4146 to 79b62f2CompareApril 10, 2023 09:25
@potiukpotiuk changed the title Finally decouple job_runner from jobRemove JobRunners back reference from JobApr 10, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 68815f8 to 8e2bb8bCompareApril 10, 2023 12:47
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 8e2bb8b to bdca1efCompareApril 10, 2023 12:58
Comment threadairflow/models/__init__.py Outdated
Comment threadairflow/models/__init__.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 8889b44 to 727f3afCompareApril 10, 2023 22:18
@ephraimbuddyephraimbuddy added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Apr 11, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 727f3af to 7ee67a6CompareApril 11, 2023 10:48
Comment threadairflow/jobs/job.py Outdated
Comment threadtests/cli/commands/test_jobs_command.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 1a251d8 to 1ce3d6aCompareApril 11, 2023 19:15
This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:
* SchedulerJobRunner, BackfillJobRunner can only use BaseJob
* DagProcessorJobRunner, TriggererJobRunner and especially the
LocalTaskJobRunner can keep both BaseJob and it's Pydantic
BaseJobPydantic representation - for AIP-44 usage.
The highlights of this change:
* Job does not have job_runner reference any more
* Job is a mandatory parameter when creating each JobRunner
* run_job method takes as parameter the job (i.e. where the state
of the job is called) and executor_callable - i.e. the method
to run when the job gets executed
* heartbeat callback is also passed a generic callable in order
to execute the post-heartbeat operation of each of the job
type
* there is no more need to specify job_type when you create
BaseJob, the job gets its type by a simply creating a runner
with the job
This is the final stage of refactoring that was split into
reviewable stages: apache#30255 -> apache#30302 -> apache#30308 -> this PR.
Closes: apache#30325
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 1ce3d6a to 18b6b5bCompareApril 11, 2023 21:50
@potiuk
potiuk merged commit 4403419 into apache:mainApr 11, 2023
@potiuk
potiuk deleted the remove-runner-back-reference-from-job branch April 11, 2023 22:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-44Airflow Internal APIarea:APIAirflow's REST/HTTP APIarea:CLIarea:Schedulerincluding HA (high availability) schedulerarea:webserverWebserver related Issueschangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)kind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-44 Remove job_runner from BaseJob as a final step of decoupling

3 participants

@potiuk@ephraimbuddy@mhenc
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Remove JobRunners back reference from Job - #30376

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job
Apr 11, 2023
Merged

Remove JobRunners back reference from Job#30376
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job

Conversation

@potiuk

@potiukpotiuk commented Mar 30, 2023

Copy link
Copy Markdown
Member

This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:

  • SchedulerJobRunner, BackfillJobRunner can only use BaseJob
  • DagProcessorJobRunner, TriggererJobRunner and especially the
    LocalTaskJobRunner can keep both BaseJob and it's Pydantic
    BaseJobPydantic representation - for AIP-44 usage.

The highlights of this change:

  • Job does not have job_runner reference any more
  • Job is a mandatory parameter when creating each JobRunner
  • run_job method takes as parameter the job (i.e. where the state
    of the job is called) and executor_callable - i.e. the method
    to run when the job gets executed
  • heartbeat callback is also passed a generic callable in order
    to execute the post-heartbeat operation of each of the job
    type
  • there is no more need to specify job_type when you create
    BaseJob, the job gets its type by a simply creating a runner
    with the job
  • DagFileProcessorManager is now merged into DagProcessorJobRunner.
    The JobRuner was essentially calling the processormanager that
    created processors. In order to make it consistent with other
    Runners - all of it has been moved into runner, so that it
    starts doing "something" - similar as other runners - rather than
    creating processor manager and running it.

This is the final stage of refactoring that was split into
reviewable stages: #30255 -> #30302 -> #30308 -> this PR.

Please check only the last commit.

Closes: #30325


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:CLI area:Scheduler including HA (high availability) scheduler area:webserver Webserver related Issues kind:documentation labels Mar 30, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 4bc3d55 to b10344cCompareMarch 30, 2023 18:33
@potiuk

Copy link
Copy Markdown
MemberAuthor

I think there are two errors in tests that I will need to fix (let's see for the CI) - but other than that i think this one should be pretty complete and implements what we've been discussing with @mhenc and @vincbeck and @uranusjr before.

Comment threadairflow/dag_processing/manager.py Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merged this one into DagProcessorJobRunner - this way it is consistent with other Jobs - which "do something" rather than create another object and "run" it.

Comment threadairflow/jobs/scheduler_job_runner.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 2bf14da to 71920bfCompareApril 4, 2023 10:19
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 71920bf to a858a1eCompareApril 6, 2023 06:59
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from a858a1e to 2514572CompareApril 7, 2023 10:34
@potiuk
potiuk requested a review from eladkal as a code ownerApril 7, 2023 10:34
@potiukpotiuk added the AIP-44 Airflow Internal API label Apr 8, 2023
@potiuk

Copy link
Copy Markdown
MemberAuthor

OK. I got it green finally @uranusjr -> this is the target of the refactor, I would love to merge - if possible - the 4 dependent PRs before we cut-off 2.6.0 branch to make cherry-picking easier for 2.6 branch (cc: @jedcunningham, @ephraimbuddy )

@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 88b4146 to 79b62f2CompareApril 10, 2023 09:25
@potiukpotiuk changed the title Finally decouple job_runner from jobRemove JobRunners back reference from JobApr 10, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 68815f8 to 8e2bb8bCompareApril 10, 2023 12:47
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 8e2bb8b to bdca1efCompareApril 10, 2023 12:58
Comment threadairflow/models/__init__.py Outdated
Comment threadairflow/models/__init__.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 8889b44 to 727f3afCompareApril 10, 2023 22:18
@ephraimbuddyephraimbuddy added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Apr 11, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 727f3af to 7ee67a6CompareApril 11, 2023 10:48
Comment threadairflow/jobs/job.py Outdated
Comment threadtests/cli/commands/test_jobs_command.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 1a251d8 to 1ce3d6aCompareApril 11, 2023 19:15
This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:
* SchedulerJobRunner, BackfillJobRunner can only use BaseJob
* DagProcessorJobRunner, TriggererJobRunner and especially the
LocalTaskJobRunner can keep both BaseJob and it's Pydantic
BaseJobPydantic representation - for AIP-44 usage.
The highlights of this change:
* Job does not have job_runner reference any more
* Job is a mandatory parameter when creating each JobRunner
* run_job method takes as parameter the job (i.e. where the state
of the job is called) and executor_callable - i.e. the method
to run when the job gets executed
* heartbeat callback is also passed a generic callable in order
to execute the post-heartbeat operation of each of the job
type
* there is no more need to specify job_type when you create
BaseJob, the job gets its type by a simply creating a runner
with the job
This is the final stage of refactoring that was split into
reviewable stages: apache#30255 -> apache#30302 -> apache#30308 -> this PR.
Closes: apache#30325
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 1ce3d6a to 18b6b5bCompareApril 11, 2023 21:50
@potiuk
potiuk merged commit 4403419 into apache:mainApr 11, 2023
@potiuk
potiuk deleted the remove-runner-back-reference-from-job branch April 11, 2023 22:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-44Airflow Internal APIarea:APIAirflow's REST/HTTP APIarea:CLIarea:Schedulerincluding HA (high availability) schedulerarea:webserverWebserver related Issueschangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)kind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-44 Remove job_runner from BaseJob as a final step of decoupling

3 participants

@potiuk@ephraimbuddy@mhenc
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove JobRunners back reference from Job - #30376

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job
Apr 11, 2023
Merged

Remove JobRunners back reference from Job#30376
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job

Conversation

@potiuk

@potiukpotiuk commented Mar 30, 2023

Copy link
Copy Markdown
Member

This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:

  • SchedulerJobRunner, BackfillJobRunner can only use BaseJob
  • DagProcessorJobRunner, TriggererJobRunner and especially the
    LocalTaskJobRunner can keep both BaseJob and it's Pydantic
    BaseJobPydantic representation - for AIP-44 usage.

The highlights of this change:

  • Job does not have job_runner reference any more
  • Job is a mandatory parameter when creating each JobRunner
  • run_job method takes as parameter the job (i.e. where the state
    of the job is called) and executor_callable - i.e. the method
    to run when the job gets executed
  • heartbeat callback is also passed a generic callable in order
    to execute the post-heartbeat operation of each of the job
    type
  • there is no more need to specify job_type when you create
    BaseJob, the job gets its type by a simply creating a runner
    with the job
  • DagFileProcessorManager is now merged into DagProcessorJobRunner.
    The JobRuner was essentially calling the processormanager that
    created processors. In order to make it consistent with other
    Runners - all of it has been moved into runner, so that it
    starts doing "something" - similar as other runners - rather than
    creating processor manager and running it.

This is the final stage of refactoring that was split into
reviewable stages: #30255 -> #30302 -> #30308 -> this PR.

Please check only the last commit.

Closes: #30325


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:CLI area:Scheduler including HA (high availability) scheduler area:webserver Webserver related Issues kind:documentation labels Mar 30, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 4bc3d55 to b10344cCompareMarch 30, 2023 18:33
@potiuk

Copy link
Copy Markdown
MemberAuthor

I think there are two errors in tests that I will need to fix (let's see for the CI) - but other than that i think this one should be pretty complete and implements what we've been discussing with @mhenc and @vincbeck and @uranusjr before.

Comment threadairflow/dag_processing/manager.py Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merged this one into DagProcessorJobRunner - this way it is consistent with other Jobs - which "do something" rather than create another object and "run" it.

Comment threadairflow/jobs/scheduler_job_runner.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 2bf14da to 71920bfCompareApril 4, 2023 10:19
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 71920bf to a858a1eCompareApril 6, 2023 06:59
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from a858a1e to 2514572CompareApril 7, 2023 10:34
@potiuk
potiuk requested a review from eladkal as a code ownerApril 7, 2023 10:34
@potiukpotiuk added the AIP-44 Airflow Internal API label Apr 8, 2023
@potiuk

Copy link
Copy Markdown
MemberAuthor

OK. I got it green finally @uranusjr -> this is the target of the refactor, I would love to merge - if possible - the 4 dependent PRs before we cut-off 2.6.0 branch to make cherry-picking easier for 2.6 branch (cc: @jedcunningham, @ephraimbuddy )

@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 88b4146 to 79b62f2CompareApril 10, 2023 09:25
@potiukpotiuk changed the title Finally decouple job_runner from jobRemove JobRunners back reference from JobApr 10, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 68815f8 to 8e2bb8bCompareApril 10, 2023 12:47
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 8e2bb8b to bdca1efCompareApril 10, 2023 12:58
Comment threadairflow/models/__init__.py Outdated
Comment threadairflow/models/__init__.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 8889b44 to 727f3afCompareApril 10, 2023 22:18
@ephraimbuddyephraimbuddy added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Apr 11, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 727f3af to 7ee67a6CompareApril 11, 2023 10:48
Comment threadairflow/jobs/job.py Outdated
Comment threadtests/cli/commands/test_jobs_command.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 1a251d8 to 1ce3d6aCompareApril 11, 2023 19:15
This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:
* SchedulerJobRunner, BackfillJobRunner can only use BaseJob
* DagProcessorJobRunner, TriggererJobRunner and especially the
LocalTaskJobRunner can keep both BaseJob and it's Pydantic
BaseJobPydantic representation - for AIP-44 usage.
The highlights of this change:
* Job does not have job_runner reference any more
* Job is a mandatory parameter when creating each JobRunner
* run_job method takes as parameter the job (i.e. where the state
of the job is called) and executor_callable - i.e. the method
to run when the job gets executed
* heartbeat callback is also passed a generic callable in order
to execute the post-heartbeat operation of each of the job
type
* there is no more need to specify job_type when you create
BaseJob, the job gets its type by a simply creating a runner
with the job
This is the final stage of refactoring that was split into
reviewable stages: apache#30255 -> apache#30302 -> apache#30308 -> this PR.
Closes: apache#30325
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 1ce3d6a to 18b6b5bCompareApril 11, 2023 21:50
@potiuk
potiuk merged commit 4403419 into apache:mainApr 11, 2023
@potiuk
potiuk deleted the remove-runner-back-reference-from-job branch April 11, 2023 22:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-44Airflow Internal APIarea:APIAirflow's REST/HTTP APIarea:CLIarea:Schedulerincluding HA (high availability) schedulerarea:webserverWebserver related Issueschangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)kind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-44 Remove job_runner from BaseJob as a final step of decoupling

3 participants

@potiuk@ephraimbuddy@mhenc
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Remove JobRunners back reference from Job - #30376

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job
Apr 11, 2023
Merged

Remove JobRunners back reference from Job#30376
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job

Conversation

@potiuk

@potiukpotiuk commented Mar 30, 2023

Copy link
Copy Markdown
Member

This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:

  • SchedulerJobRunner, BackfillJobRunner can only use BaseJob
  • DagProcessorJobRunner, TriggererJobRunner and especially the
    LocalTaskJobRunner can keep both BaseJob and it's Pydantic
    BaseJobPydantic representation - for AIP-44 usage.

The highlights of this change:

  • Job does not have job_runner reference any more
  • Job is a mandatory parameter when creating each JobRunner
  • run_job method takes as parameter the job (i.e. where the state
    of the job is called) and executor_callable - i.e. the method
    to run when the job gets executed
  • heartbeat callback is also passed a generic callable in order
    to execute the post-heartbeat operation of each of the job
    type
  • there is no more need to specify job_type when you create
    BaseJob, the job gets its type by a simply creating a runner
    with the job
  • DagFileProcessorManager is now merged into DagProcessorJobRunner.
    The JobRuner was essentially calling the processormanager that
    created processors. In order to make it consistent with other
    Runners - all of it has been moved into runner, so that it
    starts doing "something" - similar as other runners - rather than
    creating processor manager and running it.

This is the final stage of refactoring that was split into
reviewable stages: #30255 -> #30302 -> #30308 -> this PR.

Please check only the last commit.

Closes: #30325


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:CLI area:Scheduler including HA (high availability) scheduler area:webserver Webserver related Issues kind:documentation labels Mar 30, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 4bc3d55 to b10344cCompareMarch 30, 2023 18:33
@potiuk

Copy link
Copy Markdown
MemberAuthor

I think there are two errors in tests that I will need to fix (let's see for the CI) - but other than that i think this one should be pretty complete and implements what we've been discussing with @mhenc and @vincbeck and @uranusjr before.

Comment threadairflow/dag_processing/manager.py Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merged this one into DagProcessorJobRunner - this way it is consistent with other Jobs - which "do something" rather than create another object and "run" it.

Comment threadairflow/jobs/scheduler_job_runner.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 2bf14da to 71920bfCompareApril 4, 2023 10:19
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 71920bf to a858a1eCompareApril 6, 2023 06:59
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from a858a1e to 2514572CompareApril 7, 2023 10:34
@potiuk
potiuk requested a review from eladkal as a code ownerApril 7, 2023 10:34
@potiukpotiuk added the AIP-44 Airflow Internal API label Apr 8, 2023
@potiuk

Copy link
Copy Markdown
MemberAuthor

OK. I got it green finally @uranusjr -> this is the target of the refactor, I would love to merge - if possible - the 4 dependent PRs before we cut-off 2.6.0 branch to make cherry-picking easier for 2.6 branch (cc: @jedcunningham, @ephraimbuddy )

@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 88b4146 to 79b62f2CompareApril 10, 2023 09:25
@potiukpotiuk changed the title Finally decouple job_runner from jobRemove JobRunners back reference from JobApr 10, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 68815f8 to 8e2bb8bCompareApril 10, 2023 12:47
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 8e2bb8b to bdca1efCompareApril 10, 2023 12:58
Comment threadairflow/models/__init__.py Outdated
Comment threadairflow/models/__init__.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 8889b44 to 727f3afCompareApril 10, 2023 22:18
@ephraimbuddyephraimbuddy added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Apr 11, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 727f3af to 7ee67a6CompareApril 11, 2023 10:48
Comment threadairflow/jobs/job.py Outdated
Comment threadtests/cli/commands/test_jobs_command.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 1a251d8 to 1ce3d6aCompareApril 11, 2023 19:15
This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:
* SchedulerJobRunner, BackfillJobRunner can only use BaseJob
* DagProcessorJobRunner, TriggererJobRunner and especially the
LocalTaskJobRunner can keep both BaseJob and it's Pydantic
BaseJobPydantic representation - for AIP-44 usage.
The highlights of this change:
* Job does not have job_runner reference any more
* Job is a mandatory parameter when creating each JobRunner
* run_job method takes as parameter the job (i.e. where the state
of the job is called) and executor_callable - i.e. the method
to run when the job gets executed
* heartbeat callback is also passed a generic callable in order
to execute the post-heartbeat operation of each of the job
type
* there is no more need to specify job_type when you create
BaseJob, the job gets its type by a simply creating a runner
with the job
This is the final stage of refactoring that was split into
reviewable stages: apache#30255 -> apache#30302 -> apache#30308 -> this PR.
Closes: apache#30325
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 1ce3d6a to 18b6b5bCompareApril 11, 2023 21:50
@potiuk
potiuk merged commit 4403419 into apache:mainApr 11, 2023
@potiuk
potiuk deleted the remove-runner-back-reference-from-job branch April 11, 2023 22:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-44Airflow Internal APIarea:APIAirflow's REST/HTTP APIarea:CLIarea:Schedulerincluding HA (high availability) schedulerarea:webserverWebserver related Issueschangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)kind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-44 Remove job_runner from BaseJob as a final step of decoupling

3 participants

@potiuk@ephraimbuddy@mhenc
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Remove JobRunners back reference from Job - #30376

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job
Apr 11, 2023
Merged

Remove JobRunners back reference from Job#30376
potiuk merged 1 commit into
apache:mainfrom
potiuk:remove-runner-back-reference-from-job

Conversation

@potiuk

@potiukpotiuk commented Mar 30, 2023

Copy link
Copy Markdown
Member

This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:

  • SchedulerJobRunner, BackfillJobRunner can only use BaseJob
  • DagProcessorJobRunner, TriggererJobRunner and especially the
    LocalTaskJobRunner can keep both BaseJob and it's Pydantic
    BaseJobPydantic representation - for AIP-44 usage.

The highlights of this change:

  • Job does not have job_runner reference any more
  • Job is a mandatory parameter when creating each JobRunner
  • run_job method takes as parameter the job (i.e. where the state
    of the job is called) and executor_callable - i.e. the method
    to run when the job gets executed
  • heartbeat callback is also passed a generic callable in order
    to execute the post-heartbeat operation of each of the job
    type
  • there is no more need to specify job_type when you create
    BaseJob, the job gets its type by a simply creating a runner
    with the job
  • DagFileProcessorManager is now merged into DagProcessorJobRunner.
    The JobRuner was essentially calling the processormanager that
    created processors. In order to make it consistent with other
    Runners - all of it has been moved into runner, so that it
    starts doing "something" - similar as other runners - rather than
    creating processor manager and running it.

This is the final stage of refactoring that was split into
reviewable stages: #30255 -> #30302 -> #30308 -> this PR.

Please check only the last commit.

Closes: #30325


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:CLI area:Scheduler including HA (high availability) scheduler area:webserver Webserver related Issues kind:documentation labels Mar 30, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 4bc3d55 to b10344cCompareMarch 30, 2023 18:33
@potiuk

Copy link
Copy Markdown
MemberAuthor

I think there are two errors in tests that I will need to fix (let's see for the CI) - but other than that i think this one should be pretty complete and implements what we've been discussing with @mhenc and @vincbeck and @uranusjr before.

Comment threadairflow/dag_processing/manager.py Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merged this one into DagProcessorJobRunner - this way it is consistent with other Jobs - which "do something" rather than create another object and "run" it.

Comment threadairflow/jobs/scheduler_job_runner.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 2bf14da to 71920bfCompareApril 4, 2023 10:19
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 71920bf to a858a1eCompareApril 6, 2023 06:59
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from a858a1e to 2514572CompareApril 7, 2023 10:34
@potiuk
potiuk requested a review from eladkal as a code ownerApril 7, 2023 10:34
@potiukpotiuk added the AIP-44 Airflow Internal API label Apr 8, 2023
@potiuk

Copy link
Copy Markdown
MemberAuthor

OK. I got it green finally @uranusjr -> this is the target of the refactor, I would love to merge - if possible - the 4 dependent PRs before we cut-off 2.6.0 branch to make cherry-picking easier for 2.6 branch (cc: @jedcunningham, @ephraimbuddy )

@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 88b4146 to 79b62f2CompareApril 10, 2023 09:25
@potiukpotiuk changed the title Finally decouple job_runner from jobRemove JobRunners back reference from JobApr 10, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 2 times, most recently from 68815f8 to 8e2bb8bCompareApril 10, 2023 12:47
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 8e2bb8b to bdca1efCompareApril 10, 2023 12:58
Comment threadairflow/models/__init__.py Outdated
Comment threadairflow/models/__init__.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 8889b44 to 727f3afCompareApril 10, 2023 22:18
@ephraimbuddyephraimbuddy added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Apr 11, 2023
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 727f3af to 7ee67a6CompareApril 11, 2023 10:48
Comment threadairflow/jobs/job.py Outdated
Comment threadtests/cli/commands/test_jobs_command.py Outdated
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch 4 times, most recently from 1a251d8 to 1ce3d6aCompareApril 11, 2023 19:15
This is the final step of decoupling of the job runner from ORM
based BaseJob. After this change, finally we rich the state that
the BaseJob is just a state of the Job being run, but all
the logic is kept in separate "JobRunner" entity which just
keeps the reference to the job. Also it makes sure that
job in each runner is defined as appropriate for each job type:
* SchedulerJobRunner, BackfillJobRunner can only use BaseJob
* DagProcessorJobRunner, TriggererJobRunner and especially the
LocalTaskJobRunner can keep both BaseJob and it's Pydantic
BaseJobPydantic representation - for AIP-44 usage.
The highlights of this change:
* Job does not have job_runner reference any more
* Job is a mandatory parameter when creating each JobRunner
* run_job method takes as parameter the job (i.e. where the state
of the job is called) and executor_callable - i.e. the method
to run when the job gets executed
* heartbeat callback is also passed a generic callable in order
to execute the post-heartbeat operation of each of the job
type
* there is no more need to specify job_type when you create
BaseJob, the job gets its type by a simply creating a runner
with the job
This is the final stage of refactoring that was split into
reviewable stages: apache#30255 -> apache#30302 -> apache#30308 -> this PR.
Closes: apache#30325
@potiuk
potiukforce-pushed the remove-runner-back-reference-from-job branch from 1ce3d6a to 18b6b5bCompareApril 11, 2023 21:50
@potiuk
potiuk merged commit 4403419 into apache:mainApr 11, 2023
@potiuk
potiuk deleted the remove-runner-back-reference-from-job branch April 11, 2023 22:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-44Airflow Internal APIarea:APIAirflow's REST/HTTP APIarea:CLIarea:Schedulerincluding HA (high availability) schedulerarea:webserverWebserver related Issueschangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)kind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-44 Remove job_runner from BaseJob as a final step of decoupling

3 participants

@potiuk@ephraimbuddy@mhenc