Skip to content

"'str' does not support the buffer interface" in serverHashFunction() #84

Open
@by-cx

Description

@by-cx

We found a problem in versions 1.56 and 1.57. The code below (memcache.py:399) sometimes (maybe always) store str into serverhash variable and cmemcache_hash/serverHashFunction function is failing because of that. The version 1.54 is ok.

def _get_server(self, key):
    if isinstance(key, tuple):
        serverhash, key = key
    else:
        serverhash = serverHashFunction(key)
...
Traceback (most recent call last):
  File "/srv/venv/lib/python3.4/site-packages/django/core/handlers/base.py", line 132, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/srv/venv/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/srv/venv/lib/python3.4/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/srv/venv/lib/python3.4/site-packages/newrelic-2.54.0.41/newrelic/hooks/component_djangorestframework.py", line 8, in _nr_wrapper_APIView_dispatch_
    return wrapped(*args, **kwargs)
  File "/srv/venv/lib/python3.4/site-packages/rest_framework/views.py", line 456, in dispatch
    response = self.handle_exception(exc)
  File "/srv/venv/lib/python3.4/site-packages/rest_framework/views.py", line 453, in dispatch
    response = handler(request, *args, **kwargs)
  File "/srv/app/api/views/base.py", line 163, in post
    return self.data_valid(serializer.validated_data)
  File "/srv/app/api/views/get_suppliers_list.py", line 50, in data_valid
    suppliers = cache.get(key)
  File "/srv/venv/lib/python3.4/site-packages/django/core/cache/backends/memcached.py", line 85, in get
    val = self._cache.get(key)
  File "/srv/venv/lib/python3.4/site-packages/newrelic-2.54.0.41/newrelic/api/datastore_trace.py", line 43, in _nr_datastore_trace_wrapper_
    return wrapped(*args, **kwargs)
  File "/srv/venv/lib/python3.4/site-packages/memcache.py", line 1092, in get
    return self._get('get', key)
  File "/srv/venv/lib/python3.4/site-packages/memcache.py", line 1037, in _get
    server, key = self._get_server(key)
  File "/srv/venv/lib/python3.4/site-packages/memcache.py", line 416, in _get_server
    serverhash = serverHashFunction(str(serverhash) + str(i))
  File "/srv/venv/lib/python3.4/site-packages/memcache.py", line 66, in cmemcache_hash
    (((binascii.crc32(key) & 0xffffffff)
TypeError: 'str' does not support the buffer interface

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions