Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Speed up tool shed cache. #8421

Merged
merged 5 commits into from
Aug 7, 2019
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 37 additions & 10 deletions lib/galaxy/tools/cache.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import logging
import os
from collections import defaultdict
from threading import (
local,
Lock,
Expand Down Expand Up @@ -141,6 +142,7 @@ def __init__(self, app):

def add_local_repository(self, repository):
self.cache.repositories.append(repository)
self.cache.repos_by_tuple[(repository.tool_shed, repository.owner, repository.name)].append(repository)

@property
def tool_shed_repositories(self):
Expand All @@ -155,8 +157,21 @@ def tool_shed_repositories(self):
repositories = self.cache.repositories
return repositories

@property
def tool_shed_repos_by_tuple(self):
try:
return self.cache.repos_by_tuple
except AttributeError:
self.rebuild()
return self.cache.repos_by_tuple

def rebuild(self):
self.cache.repositories = self.app.install_model.context.current.query(self.app.install_model.ToolShedRepository).all()
repositories = self.app.install_model.context.current.query(self.app.install_model.ToolShedRepository).all()
self.cache.repositories = repositories
repos_by_tuple = defaultdict(list)
for repository in repositories:
repos_by_tuple[(repository.tool_shed, repository.owner, repository.name)].append(repository)
self.cache.repos_by_tuple = repos_by_tuple

def get_installed_repository(self, tool_shed=None, name=None, owner=None, installed_changeset_revision=None, changeset_revision=None, repository_id=None):
try:
Expand All @@ -182,12 +197,24 @@ def _get_installed_repository(self, tool_shed=None, name=None, owner=None, insta
return repos[0]
else:
return None
repos = [repo for repo in self.tool_shed_repositories if repo.tool_shed == tool_shed and repo.owner == owner and repo.name == name]
if installed_changeset_revision:
repos = [repo for repo in repos if repo.installed_changeset_revision == installed_changeset_revision]
if changeset_revision:
repos = [repo for repo in repos if repo.changeset_revision == changeset_revision]
if repos:
return repos[0]
else:
return None
repos = self.tool_shed_repos_by_tuple[(tool_shed, owner, name)]
for repo in repos:
if installed_changeset_revision and changeset_revision:
if repo.installed_changeset_revision == installed_changeset_revision and repo.changeset_revision == changeset_revision:
return repo
else:
continue
elif installed_changeset_revision:
if repo.installed_changeset_revision == installed_changeset_revision:
return repo
else:
continue
elif changeset_revision:
if repo.changeset_revision == changeset_revision:
return repo
else:
continue
else:
return repo
nsoranzo marked this conversation as resolved.
Show resolved Hide resolved

return None