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

do not cache resources with policy of 0 seconds #93

Merged
merged 1 commit into from
Jun 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
40 changes: 25 additions & 15 deletions rc_django/cache_implementation/memcache.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ def deleteCache(self, service, url):
log_err(logger, "MemCache Delete(key: {}) => {}".format(key, ex))

def getCache(self, service, url, headers):
expire_seconds = self.get_cache_expiration_time(service, url)
if not expire_seconds:
return

key = self._get_key(service, url)
try:
data = self.client.get(key)
Expand All @@ -38,7 +42,7 @@ def getCache(self, service, url, headers):
return

if not data:
return None
return

values = pickle.loads(data, encoding="utf8")
response = MockHTTP()
Expand All @@ -49,16 +53,20 @@ def getCache(self, service, url, headers):
return {"response": response}

def processResponse(self, service, url, response):
expire_seconds = self.get_cache_expiration_time(service, url)
if not expire_seconds:
return

header_data = {}
for header in response.headers:
header_data[header] = response.getheader(header)

key = self._get_key(service, url)
cdata, time_to_store = self._make_cache_data(
service, url, response.data, header_data,
response.status, timezone.now())
cdata = self._make_cache_data(
service, url, response.data, header_data, response.status,
timezone.now())
try:
self.client.set(key, cdata, time=time_to_store)
self.client.set(key, cdata, time=expire_seconds)
log_info(logger, "MemCache Set(key: {})".format(key))
except MemcachedException as ex:
log_err(logger, "MemCache Set(key: {}) => {}".format(key, ex))
Expand All @@ -70,8 +78,11 @@ def updateCache(self, service, url, new_data, new_data_dt):
the timestamp of the new_data
:raise MemcachedException: if update failed
"""
expire_seconds = self.get_cache_expiration_time(service, url)
if not expire_seconds:
return
key = self._get_key(service, url)
cdata, time_to_store = self._make_cache_data(
cdata = self._make_cache_data(
service, url, new_data, {}, 200, new_data_dt)
try:
value = self.client.get(key)
Expand All @@ -83,7 +94,7 @@ def updateCache(self, service, url, new_data, new_data_dt):
log_info(logger, "IN cache (key: {})".format(key))
return
# replace existing value in cache
self.client.replace(key, cdata, time=time_to_store)
self.client.replace(key, cdata, time=expire_seconds)
log_info(logger, "MemCache replace(key: {})".format(key))
return
except MemcachedException as ex:
Expand All @@ -92,21 +103,20 @@ def updateCache(self, service, url, new_data, new_data_dt):

# not in cache
try:
self.client.set(key, cdata, time=time_to_store)
self.client.set(key, cdata, time=expire_seconds)
log_info(logger, "MemCache Set(key {})".format(key))
except MemcachedException as ex:
log_err(logger, "MemCache Set(key: {}) => {}".format(key, ex))
raise

def _make_cache_data(self, service, url, data_to_cache,
header_data, status, time_stamp):
data = {"status": status,
"headers": header_data,
"data": data_to_cache,
"time_stamp": time_stamp.isoformat()
}
time_to_store = self.get_cache_expiration_time(service, url)
return pickle.dumps(data), time_to_store
return pickle.dumps({
"status": status,
"headers": header_data,
"data": data_to_cache,
"time_stamp": time_stamp.isoformat(),
})

def get_cache_expiration_time(self, service, url):
# Over-ride this to define your own.
Expand Down
5 changes: 3 additions & 2 deletions rc_django/tests/cache_implementation/test_memcached.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@ def test_cacheGet(self):
data = cache.getCache('mem', '/same', {})
self.assertIsNone(data)

cdata, time_to_store = cache._make_cache_data(
expires = cache.get_cache_expiration_time('mem', '/same')
cdata = cache._make_cache_data(
'mem', '/same', json.dumps({"data": "Body Content"}),
{}, 200, timezone.now())
cache.client.set(key, cdata, time_to_store)
cache.client.set(key, cdata, time=expires)

hit = cache.getCache('mem', '/same', {})
response = hit["response"]
Expand Down