Train Series Release Notes

1.37.1-5

New Features

  • Add new options (hashclient_retry_attempts, hashclient_retry_delay, dead_timeout) to allow to configure pymemcache’s HashClient use through dogpile.cache’s pymemcache backend. Those options expose pymemcache params that allow to configure the failover for memcached cluster.

  • Add new options (enable_retry_client, retry_attempts, retry_delay) to add retry mechanisms to the pymemcache backend.

  • New options (enable_socket_keepalive, socket_keepalive_idle, socket_keepalive_interval, socket_keepalive_count) allow to use and configure pymemcache’s socket keepalive capabilities.

1.37.1

New Features

  • Added a new memcached driver that uses pymemcache through dogpile.cache.

    If willing to use this driver, make sure you have both dogpile.cache>=1.1.2 and pymemcache>=3.4.0 installed.

1.37.0

Upgrade Notes

  • The default value for memcache_socket_timeout has been lowered from 3 seconds to 1 second. The positive side-effect of this can be found in downstream changes. If you deployment relies explicitly on a timeout of 3 seconds, please set that override in your configuration.

1.34.0

Bug Fixes

  • [bug 1819957] If a memcache server disappears and then reconnects when multiple memcache servers are used (specific to the python-memcached based backends) it is possible that the server will contain stale data. The default is now to supply the flush_on_reconnect optional argument to the backend. This means that when the service connects to a memcache server, it will flush all cached data in the server. This change only impacts the pooled backend as it is the most likely (with heavy use of greenlet) to be impacted by the problem and is the recommended production configuration.

    See the help from python-memcached:

    @param flush_on_reconnect: optional flag which prevents a

    scenario that can cause stale data to be read: If there’s more than one memcached server and the connection to one is interrupted, keys that mapped to that server will get reassigned to another. If the first server comes back, those keys will map to it again. If it still has its data, get()s can read stale data that was overwritten on another server. This flag is off by default for backwards compatibility.