gpodder / mygpo

The gpodder.net webservice
http://gpodder.net/
GNU Affero General Public License v3.0
269 stars 85 forks source link

ValueError: Database is int between 0 and limit - 1 #813

Open nagyv opened 1 year ago

nagyv commented 1 year ago

I regularly receive the following error:

Environment:

Request Method: POST
Request URL: https://gpodder.example.com/podcast/117cf6ca-175f-11ed-b415-6e19c3d40fe7/unsubscribe/+all

Django Version: 3.2.14
Python Version: 3.9.13
Installed Applications:
['django.contrib.contenttypes',
 'django.contrib.messages',
 'django.contrib.admin',
 'django.contrib.humanize',
 'django.contrib.auth',
 'django.contrib.sessions',
 'django.contrib.staticfiles',
 'django.contrib.sites',
 'django.contrib.postgres',
 'django_celery_results',
 'django_celery_beat',
 'mygpo.core',
 'mygpo.podcasts',
 'mygpo.chapters',
 'mygpo.search',
 'mygpo.users',
 'mygpo.api',
 'mygpo.web',
 'mygpo.publisher',
 'mygpo.subscriptions',
 'mygpo.history',
 'mygpo.favorites',
 'mygpo.usersettings',
 'mygpo.data',
 'mygpo.userfeeds',
 'mygpo.suggestions',
 'mygpo.directory',
 'mygpo.categories',
 'mygpo.episodestates',
 'mygpo.maintenance',
 'mygpo.share',
 'mygpo.administration',
 'mygpo.pubsub',
 'mygpo.podcastlists',
 'mygpo.votes',
 'health_check',
 'health_check.db',
 'health_check.cache',
 'health_check.storage',
 'health_check.contrib.migrations']
Installed Middleware:
['django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware']

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/kombu/utils/functional.py", line 30, in __call__
    return self.__value__

During handling of the above exception ('ChannelPromise' object has no attribute '__value__'), another exception occurred:
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/virtual/base.py", line 925, in create_channel
    return self._avail_channels.pop()

During handling of the above exception (pop from empty list), another exception occurred:
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/redis.py", line 1109, in _prepare_virtual_host
    vhost = int(vhost)

During handling of the above exception (invalid literal for int() with base 10: 'gpodder'), another exception occurred:
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/app/mygpo/podcasts/views/podcast.py", line 405, in _decorator
    return f(request, podcast, *args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/app/mygpo/decorators.py", line 77, in tmp
    return fn(request, *args, **kwargs)
  File "/app/mygpo/podcasts/views/podcast.py", line 329, in unsubscribe_all
    unsubscribe_podcast_all.delay(podcast.pk, user.pk)
  File "/usr/local/lib/python3.9/site-packages/celery/app/task.py", line 425, in delay
    return self.apply_async(args, kwargs)
  File "/usr/local/lib/python3.9/site-packages/celery/app/task.py", line 575, in apply_async
    return app.send_task(
  File "/usr/local/lib/python3.9/site-packages/celery/app/base.py", line 788, in send_task
    amqp.send_task_message(P, name, message, **options)
  File "/usr/local/lib/python3.9/site-packages/celery/app/amqp.py", line 510, in send_task_message
    ret = producer.publish(
  File "/usr/local/lib/python3.9/site-packages/kombu/messaging.py", line 177, in publish
    return _publish(
  File "/usr/local/lib/python3.9/site-packages/kombu/connection.py", line 523, in _ensured
    return fun(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/kombu/messaging.py", line 186, in _publish
    channel = self.channel
  File "/usr/local/lib/python3.9/site-packages/kombu/messaging.py", line 209, in _get_channel
    channel = self._channel = channel()
  File "/usr/local/lib/python3.9/site-packages/kombu/utils/functional.py", line 32, in __call__
    value = self.__value__ = self.__contract__()
  File "/usr/local/lib/python3.9/site-packages/kombu/messaging.py", line 225, in <lambda>
    channel = ChannelPromise(lambda: connection.default_channel)
  File "/usr/local/lib/python3.9/site-packages/kombu/connection.py", line 895, in default_channel
    self._ensure_connection(**conn_opts)
  File "/usr/local/lib/python3.9/site-packages/kombu/connection.py", line 433, in _ensure_connection
    return retry_over_time(
  File "/usr/local/lib/python3.9/site-packages/kombu/utils/functional.py", line 312, in retry_over_time
    return fun(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/kombu/connection.py", line 877, in _connection_factory
    self._connection = self._establish_connection()
  File "/usr/local/lib/python3.9/site-packages/kombu/connection.py", line 812, in _establish_connection
    conn = self.transport.establish_connection()
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/virtual/base.py", line 949, in establish_connection
    self._avail_channels.append(self.create_channel(self))
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/virtual/base.py", line 927, in create_channel
    channel = self.Channel(connection)
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/redis.py", line 737, in __init__
    self.client.ping()
  File "/usr/local/lib/python3.9/site-packages/kombu/utils/objects.py", line 30, in __get__
    return super().__get__(instance, owner)
  File "/usr/local/lib/python3.9/functools.py", line 993, in __get__
    val = self.func(instance)
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/redis.py", line 1239, in client
    return self._create_client(asynchronous=True)
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/redis.py", line 1195, in _create_client
    return self.Client(connection_pool=self.async_pool)
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/redis.py", line 1233, in async_pool
    self._async_pool = self._get_pool(asynchronous=True)
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/redis.py", line 1199, in _get_pool
    params = self._connparams(asynchronous=asynchronous)
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/redis.py", line 1173, in _connparams
    connparams['db'] = self._prepare_virtual_host(
  File "/usr/local/lib/python3.9/site-packages/kombu/transport/redis.py", line 1111, in _prepare_virtual_host
    raise ValueError(

Exception Type: ValueError at /podcast/117cf6ca-175f-11ed-b415-6e19c3d40fe7/unsubscribe/+all
Exception Value: Database is int between 0 and limit - 1, not gpodder

I think my redis connection setup is correct.