Skip to content

[ENG-8048] Remove caching to avoid incorrect results for ascendants #11169

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

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion osf/models/archive.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def _set_target(self, addon_short_name):

def set_targets(self):
addons = []
for addon in [self.src_node.get_addon(name)
for addon in [self.src_node.get_addon(name, cached=False)
for name in settings.ADDONS_ARCHIVABLE
if settings.ADDONS_ARCHIVABLE[name] != 'none']:
if not addon or not isinstance(addon, BaseStorageAddon) or not addon.complete:
Expand Down
4 changes: 2 additions & 2 deletions osf/models/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -554,12 +554,12 @@ def get_or_add_addon(self, name, *args, **kwargs):
return addon
return self.add_addon(name, *args, **kwargs)

def get_addon(self, name, is_deleted=False, auth=None):
def get_addon(self, name, is_deleted=False, auth=None, cached=True):
# Avoid test-breakages by avoiding early access to the request context
if name not in self.OSF_HOSTED_ADDONS:
request, user_id = get_request_and_user_id()
if flag_is_active(request, features.ENABLE_GV):
return self._get_addon_from_gv(gv_pk=name, requesting_user_id=user_id, auth=auth)
return self._get_addon_from_gv(gv_pk=name, requesting_user_id=user_id, auth=auth, cached=cached)

try:
settings_model = self._settings_model(name)
Expand Down
31 changes: 19 additions & 12 deletions osf/models/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -2466,21 +2466,28 @@ def _remove_from_associated_collections(self, auth=None, force=False):
force=True
)

def _get_addon_from_gv(self, gv_pk, requesting_user_id, auth=None):
def _get_addons_from_gv_without_caching(self, gv_pk, requesting_user_id, auth=None):
requesting_user = OSFUser.load(requesting_user_id)
services = gv_translations.get_external_services(requesting_user)
for service in services:
if service.short_name == gv_pk:
break
else:
return None

return self._get_addons_from_gv(requesting_user_id, service.type, auth=auth)

def _get_addon_from_gv(self, gv_pk, requesting_user_id, auth=None, cached=True):
request = get_current_request()
# This is to avoid making multiple requests to GV
# within the lifespan of one request on the OSF side
try:
gv_addons = request.gv_addons
except AttributeError:
requesting_user = OSFUser.load(requesting_user_id)
services = gv_translations.get_external_services(requesting_user)
for service in services:
if service.short_name == gv_pk:
break
else:
return None
gv_addons = request.gv_addons = self._get_addons_from_gv(requesting_user_id, service.type, auth=auth)
if cached:
try:
gv_addons = request.gv_addons
except AttributeError:
gv_addons = request.gv_addons = self._get_addons_from_gv_without_caching(gv_pk, requesting_user_id, auth=auth)
else:
gv_addons = self._get_addons_from_gv_without_caching(gv_pk, requesting_user_id, auth=auth)

for item in gv_addons:
if item.short_name == gv_pk:
Expand Down
Loading