Django

Code

Ticket #11270 (closed: fixed)

Opened 10 months ago

Last modified 9 months ago

Cache templatetag with memcached can't handle long tags

Reported by: 235 Assigned to: nobody
Milestone: 1.1 Component: Cache system
Version: SVN Keywords:
Cc: Triage Stage: Accepted
Has patch: 1 Needs documentation: 0
Needs tests: 1 Patch needs improvement: 0

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

cache_templatetag.patch (1.1 kB) - added by 235 on 06/06/09 03:31:27.
django/templatetags/cache.py patch

Change History

06/06/09 03:31:27 changed by 235

  • attachment cache_templatetag.patch added.

django/templatetags/cache.py patch

06/17/09 17:08:57 changed by SmileyChris

  • needs_better_patch changed.
  • needs_docs changed.
  • stage changed from Unreviewed to Accepted.
  • needs_tests set to 1.
  • milestone set to 1.1.

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

06/18/09 10:03:19 changed by russellm

  • status changed from new to closed.
  • resolution set to fixed.

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

06/18/09 10:04:00 changed by russellm

(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.

06/18/09 10:10:43 changed by russellm

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

06/18/09 10:15:02 changed by russellm

(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.


Add/Change #11270 (Cache templatetag with memcached can't handle long tags)




Change Properties
Action