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

GLOB-81027: 3s nack when resource is not found #292

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
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
25 changes: 16 additions & 9 deletions microcosm_pubsub/handlers/uri_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
Uri Handler base classes.

"""

from abc import ABCMeta
from re import search

Expand Down Expand Up @@ -29,10 +30,12 @@ def resource_cache_whitelist_callable(media_type, uri):
# Nb. likely to happen with mocks and tests.
return False

return all((
search(r"/[a-z]+_event/", uri),
search(fr".{LifecycleChange.Created}.", media_type),
))
return all(
(
search(r"/[a-z]+_event/", uri),
search(rf".{LifecycleChange.Created}.", media_type),
)
)


@logger
Expand All @@ -56,11 +59,12 @@ class URIHandler(metaclass=ABCMeta):
log per message processed (unless an error/nack is raised).

"""

def __init__(
self,
graph,
retry_nack_timeout=1,
resource_nack_timeout=1,
resource_nack_timeout=3,
resource_cache_enabled=True,
resource_cache_ttl=DEFAULT_RESOURCE_CACHE_TTL,
resource_cache_whitelist_callable=resource_cache_whitelist_callable,
Expand All @@ -69,7 +73,9 @@ def __init__(
self.retry_nack_timeout = retry_nack_timeout
self.resource_nack_timeout = resource_nack_timeout
self.resource_cache_ttl = resource_cache_ttl
self.resource_cache = self.get_resource_cache(graph) if resource_cache_enabled else None
self.resource_cache = (
self.get_resource_cache(graph) if resource_cache_enabled else None
)
self.resource_cache_whitelist_callable = resource_cache_whitelist_callable

@property
Expand Down Expand Up @@ -178,8 +184,7 @@ def get_resource(self, message, uri):

"""
if self.resource_cache and self.resource_cache_whitelist_callable(
media_type=message.get("mediaType"),
uri=uri
media_type=message.get("mediaType"), uri=uri
):
response = self.resource_cache.get(uri)
if response:
Expand Down Expand Up @@ -223,7 +228,9 @@ def get_headers(self, message):
return self.opaque.as_dict()

def convert_resource(self, resource):
if isinstance(self.resource_type, type) and isinstance(resource, self.resource_type):
if isinstance(self.resource_type, type) and isinstance(
resource, self.resource_type
):
return resource
return self.resource_type(**resource)

Expand Down