Opened 7 years ago

Closed 7 years ago

Last modified 5 years ago

#11270 closed (fixed)

Cache templatetag with memcached can't handle long tags

Reported by: 235 Owned by: nobody
Component: Core (Cache system) Version: master
Severity: Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: yes Patch needs improvement: no
Easy pickings: UI/UX:

Description

similar to #10016
Memcached has a hard limit of 250 characters for cache keys.

So we have to use md5 hash instead of the whole cached tag name with all vary variables.

Traceback (most recent call last):

  File "/var/www/virtual/sumno.com/modules/django/core/handlers/base.py", line 86, in get_response
    response = callback(request, *callback_args, **callback_kwargs)

  File "/var/www/virtual/sumno.com/htdocs/sumnocom/apps/lib/decorators.py", line 56, in wrapper
    return func(request, *args, **kwargs)

  File "/var/www/virtual/sumno.com/htdocs/sumnocom/../sumnocom/apps/generic_content/views.py", line 370, in detail_view_content_entry
    context_instance=RequestContext(request))

  File "/var/www/virtual/sumno.com/modules/django/shortcuts/__init__.py", line 18, in render_to_response
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

  File "/var/www/virtual/sumno.com/modules/django/template/loader.py", line 107, in render_to_string
    return t.render(context_instance)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 176, in render
    return self.nodelist.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 768, in render
    bits.append(self.render_node(node, context))

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 781, in render_node
    return node.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/loader_tags.py", line 97, in render
    return compiled_parent.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 176, in render
    return self.nodelist.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 768, in render
    bits.append(self.render_node(node, context))

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 781, in render_node
    return node.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/loader_tags.py", line 97, in render
    return compiled_parent.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 176, in render
    return self.nodelist.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 768, in render
    bits.append(self.render_node(node, context))

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 781, in render_node
    return node.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/loader_tags.py", line 24, in render
    result = self.nodelist.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 768, in render
    bits.append(self.render_node(node, context))

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 781, in render_node
    return node.render(context)

  File "/var/www/virtual/sumno.com/htdocs/sumnocom/apps/lib/templatetags/smartspaceless.py", line 17, in render
    s = self.nodelist.render(context).strip()

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 768, in render
    bits.append(self.render_node(node, context))

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 781, in render_node
    return node.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/loader_tags.py", line 24, in render
    result = self.nodelist.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 768, in render
    bits.append(self.render_node(node, context))

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 781, in render_node
    return node.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/loader_tags.py", line 24, in render
    result = self.nodelist.render(context)

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 768, in render
    bits.append(self.render_node(node, context))

  File "/var/www/virtual/sumno.com/modules/django/template/__init__.py", line 781, in render_node
    return node.render(context)

  File "/var/www/virtual/sumno.com/modules/django/templatetags/cache.py", line 27, in render
    value = cache.get(cache_key)

  File "/var/www/virtual/sumno.com/modules/django/core/cache/backends/memcached.py", line 25, in get
    val = self._cache.get(smart_str(key))

  File "/var/lib/python-support/python2.5/memcache.py", line 619, in get
    check_key(key)

  File "/var/lib/python-support/python2.5/memcache.py", line 885, in check_key
    % SERVER_MAX_KEY_LENGTH)

MemcachedKeyLengthError: Key length is > 250

Attachments (1)

cache_templatetag.patch (1.1 KB) - added by 235 7 years ago.
django/templatetags/cache.py patch

Download all attachments as: .zip

Change History (7)

Changed 7 years ago by 235

Attachment: cache_templatetag.patch added

django/templatetags/cache.py patch

comment:1 Changed 7 years ago by Chris Beaven

milestone: 1.1
Needs documentation: unset
Needs tests: set
Patch needs improvement: unset
Triage Stage: UnreviewedAccepted

If Jacob thought #10016 was 1.1 worthy, this should be too.

comment:2 Changed 7 years ago by Russell Keith-Magee

Resolution: fixed
Status: newclosed

(In [11067]) Fixed #11270 -- Corrected naming conflict in templatetag test. Thanks to steveire for the report.

comment:3 Changed 7 years ago by Russell Keith-Magee

(In [11068]) Fixed #11270 -- Modified cache template tag to prevent the creation of very long cache keys. Thanks to 235 for the report and patch.

comment:4 Changed 7 years ago by Russell Keith-Magee

Please ignore the commit message for [11067] - that commit should have referenced #11289.

comment:5 Changed 7 years ago by Russell Keith-Magee

(In [11070]) [1.0.X] Fixed #11270 -- Modified cache template tag to prevent the creation of very long cache keys. Thanks to 235 for the report and patch.

Merge of r11068 from trunk.

comment:6 Changed 5 years ago by Jacob

milestone: 1.1

Milestone 1.1 deleted

Note: See TracTickets for help on using tickets.
Back to Top