From 23ad24d2aa807c730da2663adb03970bc182f015 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Sun, 17 Mar 2019 11:16:38 +0000 Subject: [PATCH] Put a length limit to generated cache keys in stats/views.py, to avoid tickling memcached's limit of 250. - Legacy-Id: 16037 --- ietf/stats/views.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ietf/stats/views.py b/ietf/stats/views.py index 135d32473..f2848b36f 100644 --- a/ietf/stats/views.py +++ b/ietf/stats/views.py @@ -15,6 +15,7 @@ from django.http import HttpResponseRedirect, HttpResponseForbidden from django.shortcuts import get_object_or_404, render from django.urls import reverse as urlreverse from django.utils.safestring import mark_safe +from django.utils.text import slugify import debug # pyflakes:ignore @@ -134,7 +135,9 @@ def document_stats(request, stats_type=None): return urlreverse(document_stats, kwargs={ k: v for k, v in kwargs.iteritems() if v is not None }) + generate_query_string(request.GET, get_overrides) - cache_key = ("stats:document_stats:%s:%s" % (stats_type, request.META.get('QUERY_STRING',''))) + # the length limitation is to keep the key shorter than memcached's limit + # of 250 after django has added the key_prefix and key_version parameters + cache_key = ("stats:document_stats:%s:%s" % (stats_type, slugify(request.META.get('QUERY_STRING',''))))[:228] data = cache.get(cache_key) if not data: names_limit = settings.STATS_NAMES_LIMIT @@ -766,7 +769,7 @@ def meeting_stats(request, num=None, stats_type=None): return urlreverse(meeting_stats, kwargs={ k: v for k, v in kwargs.iteritems() if v is not None }) + generate_query_string(request.GET, get_overrides) - cache_key = "stats:meeting_stats:%s:%s:%s" % (num, stats_type, request.META.get('QUERY_STRING','')) + cache_key = ("stats:meeting_stats:%s:%s:%s" % (num, stats_type, slugify(request.META.get('QUERY_STRING',''))))[:228] data = cache.get(cache_key) if not data: names_limit = settings.STATS_NAMES_LIMIT