Merge pull request #13076 from mvdbeek/yield_per

[21.09] Use yield_per option to limit amount of ORM objects loaded into memory
This commit is contained in:
Björn Grüning
2021-12-17 17:57:39 +01:00
committed by GitHub
3 changed files with 5 additions and 4 deletions
+2 -2
View File
@@ -237,11 +237,11 @@ class JobHandlerQueue(Monitors):
.outerjoin(model.User) \
.filter(model.Job.state.in_(in_list)
& (model.Job.handler == self.app.config.server_name)
& or_((model.Job.user_id == null()), (model.User.active == true()))).all()
& or_((model.Job.user_id == null()), (model.User.active == true()))).yield_per(model.YIELD_PER_ROWS)
else:
jobs_at_startup = self.sa_session.query(model.Job).enable_eagerloads(False) \
.filter(model.Job.state.in_(in_list)
& (model.Job.handler == self.app.config.server_name)).all()
& (model.Job.handler == self.app.config.server_name)).yield_per(model.YIELD_PER_ROWS)
for job in jobs_at_startup:
if not self.app.toolbox.has_tool(job.tool_id, job.tool_version, exact=True):
+2 -1
View File
@@ -135,6 +135,7 @@ JOB_METRIC_PRECISION = 26
JOB_METRIC_SCALE = 7
# Tags that get automatically propagated from inputs to outputs when running jobs.
AUTO_PROPAGATED_TAGS = ["name"]
YIELD_PER_ROWS = 100
if TYPE_CHECKING:
@@ -915,7 +916,7 @@ class Job(Base, JobLike, UsesCreateAndUpdateTime, Dictifiable, RepresentById):
back_populates='job', lazy=True)
output_dataset_collections = relationship('JobToImplicitOutputDatasetCollectionAssociation',
back_populates='job', lazy=True)
post_job_actions = relationship('PostJobActionAssociation', back_populates='job', lazy=False)
post_job_actions = relationship('PostJobActionAssociation', back_populates='job', lazy=True)
input_library_datasets = relationship('JobToInputLibraryDatasetAssociation',
back_populates='job')
output_library_datasets = relationship('JobToOutputLibraryDatasetAssociation',
+1 -1
View File
@@ -204,7 +204,7 @@ class JobController(BaseGalaxyAPIController, UsesVisualizationMixin):
query = query.limit(limit)
out = []
for job in query.all():
for job in query.yield_per(model.YIELD_PER_ROWS):
job_dict = job.to_dict(view, system_details=is_admin)
j = self.encode_all_ids(trans, job_dict, True)
if view == 'admin_job_list':