Hello everyone,
We are using latest reviewboard and we've recently migrated to Docker 
setup. Problem is, reviewboard randomly spits error 500 while browsing the 
site. Looking into `docker compose logs -f`, we can see that sometimes (not 
always) it tries to connect to memcached server on localhost:11211:
 
reviewboard-1  | 2024-03-14 10:36:23,523 - ERROR - None - AnonymousUser - 
/health/ - djblets.util.views - Health check: unable to connect to cache 
"default": All servers seem to be down right now
reviewboard-1  | 2024-03-14 10:36:23,524 - ERROR - None - AnonymousUser - 
/health/ - django.request - Service Unavailable: /health/
reviewboard-1  | 2024-03-14 10:36:23,525 - DEBUG -  - 
pymemcache.client.hash - retrying failed server: ('127.0.0.1', 11211)
reviewboard-1  | [2024-03-14 10:36:23 +0000] [17] [DEBUG] Ignoring 
connection reset
reviewboard-1  | [2024-03-14 10:36:27 +0000] [20] [DEBUG] GET /
reviewboard-1  | 2024-03-14 10:36:27,126 - DEBUG -  - 
pymemcache.client.hash - retrying failed server: ('127.0.0.1', 11211)
reviewboard-1  | 2024-03-14 10:36:27,127 - ERROR -  - 
djblets.cache.synchronizer - Unexpected error checking for expiration in 
cached synchronization state key 
"{OUR_DOMAIN}:/:{OUR_DOMAIN}:siteconfig:1:generation". Is the cache server 
down? Error = [Errno 111] Connection refused
reviewboard-1  | Traceback (most recent call last):
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/djblets/cache/synchronizer.py", line 
82, in is_expired
reviewboard-1  |     sync_gen = self._get_latest_sync_gen()
reviewboard-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/djblets/cache/synchronizer.py", line 
162, in _get_latest_sync_gen
reviewboard-1  |     return cache.get(self.cache_key)
reviewboard-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/django/core/cache/backends/memcached.py", 
line 77, in get
reviewboard-1  |     return self._cache.get(key, default)
reviewboard-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 347, 
in get
reviewboard-1  |     return self._run_cmd("get", key, default, 
default=default, **kwargs)
reviewboard-1  |           
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 322, 
in _run_cmd
reviewboard-1  |     return self._safely_run_func(client, func, 
default_val, *args, **kwargs)
reviewboard-1  |           
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 199, 
in _safely_run_func
reviewboard-1  |     result = func(*args, **kwargs)
reviewboard-1  |              ^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/base.py", line 687, 
in get
reviewboard-1  |     return self._fetch_cmd(b"get", [key], False, 
key_prefix=self.key_prefix).get(
reviewboard-1  |           
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/base.py", line 1133, 
in _fetch_cmd
reviewboard-1  |     self._connect()
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/base.py", line 424, 
in _connect
reviewboard-1  |     sock.connect(sockaddr)
reviewboard-1  | ConnectionRefusedError: [Errno 111] Connection refused
reviewboard-1  | 2024-03-14 10:36:27,128 - DEBUG -  - 
pymemcache.client.hash - marking server as dead: ('127.0.0.1', 11211)
reviewboard-1  | 2024-03-14 10:36:27,129 - ERROR -  - 
djblets.cache.synchronizer - Unexpected error checking for expiration in 
cached synchronization state key 
"{OUR_DOMAIN}:/:extensionmgr:reviewboard.extensions:gen". Is the cache 
server down? Error = [Errno 111] Connection refused
reviewboard-1  | Traceback (most recent call last):
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/djblets/cache/synchronizer.py", line 
82, in is_expired
reviewboard-1  |     sync_gen = self._get_latest_sync_gen()
reviewboard-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/djblets/cache/synchronizer.py", line 
162, in _get_latest_sync_gen
reviewboard-1  |     return cache.get(self.cache_key)
reviewboard-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/django/core/cache/backends/memcached.py", 
line 77, in get
reviewboard-1  |     return self._cache.get(key, default)
reviewboard-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 347, 
in get
reviewboard-1  |     return self._run_cmd("get", key, default, 
default=default, **kwargs)
reviewboard-1  |           
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 322, 
in _run_cmd
reviewboard-1  |     return self._safely_run_func(client, func, 
default_val, *args, **kwargs)
reviewboard-1  |           
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 211, 
in _safely_run_func
reviewboard-1  |     result = func(*args, **kwargs)
reviewboard-1  |              ^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/base.py", line 687, 
in get
reviewboard-1  |     return self._fetch_cmd(b"get", [key], False, 
key_prefix=self.key_prefix).get(
reviewboard-1  |           
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/base.py", line 1133, 
in _fetch_cmd
reviewboard-1  |     self._connect()
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/base.py", line 424, 
in _connect
reviewboard-1  |     sock.connect(sockaddr)
reviewboard-1  | ConnectionRefusedError: [Errno 111] Connection refused
reviewboard-1  | 2024-03-14 10:36:27,131 - ERROR -  - 
djblets.cache.synchronizer - Unexpected error checking for expiration in 
cached synchronization state key 
"{OUR_DOMAIN}:/:integrationmgr:djblets.integrations.manager.IntegrationManager:gen".
 
Is the cache server down? Error = All servers seem to be down right now
reviewboard-1  | Traceback (most recent call last):
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/djblets/cache/synchronizer.py", line 
82, in is_expired
reviewboard-1  |     sync_gen = self._get_latest_sync_gen()
reviewboard-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/djblets/cache/synchronizer.py", line 
162, in _get_latest_sync_gen
reviewboard-1  |     return cache.get(self.cache_key)
reviewboard-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/django/core/cache/backends/memcached.py", 
line 77, in get
reviewboard-1  |     return self._cache.get(key, default)
reviewboard-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 347, 
in get
reviewboard-1  |     return self._run_cmd("get", key, default, 
default=default, **kwargs)
reviewboard-1  |           
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 314, 
in _run_cmd
reviewboard-1  |     client = self._get_client(key)
reviewboard-1  |              ^^^^^^^^^^^^^^^^^^^^^
reviewboard-1  |   File 
"/venv/lib/python3.11/site-packages/pymemcache/client/hash.py", line 182, 
in _get_client
reviewboard-1  |     raise MemcacheError("All servers seem to be down right 
now")'



This won't work, because memcached is running in separate container in 
compose setup. But in settings-local.py the address is correct:

# cat sitedir/conf/settings_local.py 
...

# Cache backend settings.
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": "memcached:11211"
    }
}
...

And there is no 127.0.0.1:11211 anywhere in settings, so I assume this is 
default value that somehow ended up in the cache server pool.

How to fix this?
The problem is frequent, basically 50% page loads fail due to this.

Thanks in advance,
Best regards,
Szymon

-- 
Supercharge your Review Board with Power Pack: 
https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: 
https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
--- 
You received this message because you are subscribed to the Google Groups 
"Review Board Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to reviewboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/reviewboard/f083ab4c-cea6-4eda-aa17-0aa9e28b6239n%40googlegroups.com.

Reply via email to