Skip to content

New Problem with redis-py 8.0 and unix socket connections: #22369

Description

@MatthiasKuehneEllerhold

NetBox Edition

NetBox Community

NetBox Version

4.6.2

Python Version

3.13

Steps to Reproduce

After each upgrade we run the upgrade.sh, this will update the venv of netbox.

This installed redis-py 8.0 and afterwards the upgrade.sh failed with:

Removing expired user sessions (python3 netbox/manage.py clearsessions)...
Traceback (most recent call last):
  File "/opt/netbox/netbox/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
    ~~~~~~~~~~~~~~~^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/core/management/__init__.py", line 437, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/core/management/base.py", line 420, in run_from_argv
    self.execute(*args, **cmd_options)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/core/management/base.py", line 464, in execute
    output = self.handle(*args, **options)
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/contrib/sessions/management/commands/clearsessions.py", line 16, in handle
    engine.SessionStore.clear_expired()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/contrib/sessions/backends/db.py", line 192, in clear_expired
    cls.get_model_class().objects.filter(expire_date__lt=timezone.now()).delete()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/db/models/query.py", line 1238, in delete
    num_deleted, num_deleted_per_model = collector.delete()
                                         ~~~~~~~~~~~~~~~~^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/db/models/deletion.py", line 462, in delete
    signals.pre_delete.send(
    ~~~~~~~~~~~~~~~~~~~~~~~^
        sender=model,
        ^^^^^^^^^^^^^
    ...<2 lines>...
        origin=self.origin,
        ^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py", line 209, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/opt/netbox/netbox/core/signals.py", line 173, in handle_deleted_object
    validators = get_config_value_ci(get_config().PROTECTION_RULES, model_name, default=[])
                                     ~~~~~~~~~~^^
  File "/opt/netbox/netbox/netbox/config/__init__.py", line 33, in get_config
    _thread_locals.config = Config()
  1 # Managed by salt-master.radebeul.lan
                            ~~~~~~^^
  File "/opt/netbox/netbox/netbox/config/__init__.py", line 53, in __init__
    self._populate_from_cache()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/opt/netbox/netbox/netbox/config/__init__.py", line 78, in _populate_from_cache
    cached_config = cache.get('config', _MISSING)
  File "/opt/netbox/venv/lib/python3.13/site-packages/django_redis/cache.py", line 92, in get
    value = self._get(key, default, version, client)
  File "/opt/netbox/venv/lib/python3.13/site-packages/django_redis/cache.py", line 29, in _decorator
    return method(self, *args, **kwargs)
  File "/opt/netbox/venv/lib/python3.13/site-packages/django_redis/cache.py", line 99, in _get
    return self.client.get(key, default=default, version=version, client=client)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/django_redis/client/default.py", line 298, in get
    value = client.get(key)
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/commands/core.py", line 3194, in get
    return self.execute_command("GET", name, keys=[name])
           ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/client.py", line 787, in execute_command
    return self._execute_command(*args, **options)
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/client.py", line 793, in _execute_command
    conn = self.connection or pool.get_connection()
                              ~~~~~~~~~~~~~~~~~~~^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/utils.py", line 258, in wrapper
    return func(*args, **kwargs)
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/connection.py", line 3139, in get_connection
    connection.connect()
    ~~~~~~~~~~~~~~~~~~^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/connection.py", line 1006, in connect
    self.retry.call_with_retry(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^
        lambda: self.connect_check_health(
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
        lambda error: self.disconnect(error),
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/retry.py", line 120, in call_with_retry
    return do()
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/connection.py", line 1007, in <lambda>
    lambda: self.connect_check_health(
            ~~~~~~~~~~~~~~~~~~~~~~~~~^
        check_health=True, retry_socket_connect=False
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ),
    ^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/connection.py", line 1061, in connect_check_health
    self.on_connect_check_health(check_health=check_health)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/connection.py", line 1163, in on_connect_check_health
    self.activate_maint_notifications_handling_if_enabled(check_health=check_health)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/connection.py", line 609, in activate_maint_notifications_handling_if_enabled
    self._enable_maintenance_notifications(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        maint_notifications_config=self.maint_notifications_config,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        check_health=check_health,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/opt/netbox/venv/lib/python3.13/site-packages/redis/connection.py", line 620, in _enable_maintenance_notifications
    raise ValueError(
    ...<2 lines>...
    )
ValueError: Cannot enable maintenance notifications for connection object that doesn't have a host attribute.

Were using a unix-socket for the redis connection - there is no "host" there!

Workaround: add redis<8.0 to your /opt/netbox/local_requirements.txt and re-run the upgrade.sh

Expected Behavior

No error should be reported

Observed Behavior

See ValueError above

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions