No handling of revoked follows
Steps to reproduce
- From Actor A on instance 1, submit a follow request to Actor's B Library on instance 2
- Actor B confirms the follow
- Actor A can listen to the tracks, and the library appears in the remote libraries menu
- Actor B then revokes the follow: Actor A can no longer listen to the songs
What happens?
The library is still shown as followed on Actor's A remote libraries menu, it should not be there anymore. Moreover, trying to perform a scan on this library will stuck at 0%, and the following is to be found in the celery logs of instance 1:
Jun 13 22:11:55 raspberrypi celery[544]: [2019-06-13 20:11:55,249: INFO/MainProcess] Received task: music.start_library_scan[624f27de-04b6-44d6-b2de-c1b66bbbc5b7]
Jun 13 22:11:55 raspberrypi celery[544]: [2019-06-13 20:11:55,772: INFO/ForkPoolWorker-2] Task music.start_library_scan[624f27de-04b6-44d6-b2de-c1b66bbbc5b7] succeeded in 0.5172304478473961s: None
Jun 13 22:11:55 raspberrypi celery[544]: [2019-06-13 20:11:55,774: INFO/MainProcess] Received task: music.scan_library_page[40a858c6-66ab-4650-8a5b-c4610dbb84f9]
Jun 13 22:11:59 raspberrypi celery[544]: [2019-06-13 20:11:59,553: INFO/ForkPoolWorker-3] Task music.scan_library_page[40a858c6-66ab-4650-8a5b-c4610dbb84f9] succeeded in 3.7747180950827897s: None
Jun 13 22:19:55 raspberrypi celery[544]: [2019-06-13 20:19:55,147: INFO/MainProcess] Received task: music.start_library_scan[2993f8d2-a4da-499c-b240-544a32badab1]
Jun 13 22:19:55 raspberrypi celery[544]: [2019-06-13 20:19:55,642: INFO/ForkPoolWorker-2] Task music.start_library_scan[2993f8d2-a4da-499c-b240-544a32badab1] succeeded in 0.4912278139963746s: None
Jun 13 22:19:55 raspberrypi celery[544]: [2019-06-13 20:19:55,644: INFO/MainProcess] Received task: music.scan_library_page[df20a8b2-ed26-4c38-80ea-9606f5cf8f33]
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,081: WARNING/ForkPoolWorker-3] [celery] Error during task df20a8b2-ed26-4c38-80ea-9606f5cf8f33: too many values to unpack (expected 2)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,085: WARNING/ForkPoolWorker-3] Traceback (most recent call last):
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,089: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/celery/app/trace.py", line 385, in trace_task
Jun 13 22:19:56 raspberrypi celery[544]: R = retval = fun(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,093: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/celery/app/trace.py", line 648, in __protected_call__
Jun 13 22:19:56 raspberrypi celery[544]: return self.run(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,095: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/celery/app/base.py", line 472, in run
Jun 13 22:19:56 raspberrypi celery[544]: return task._orig_run(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,096: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/api/funkwhale_api/taskapp/celery.py", line 51, in inner
Jun 13 22:19:56 raspberrypi celery[544]: return function(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,097: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/api/funkwhale_api/music/tasks.py", line 101, in scan_library_page
Jun 13 22:19:56 raspberrypi celery[544]: data = lb.get_library_page(library_scan.library, page_url, library_scan.actor)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,098: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/api/funkwhale_api/federation/library.py", line 48, in get_library_page
Jun 13 22:19:56 raspberrypi celery[544]: serializer.is_valid(raise_exception=True)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,098: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/rest_framework/serializers.py", line 244, in is_valid
Jun 13 22:19:56 raspberrypi celery[544]: raise ValidationError(self.errors)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,099: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/rest_framework/serializers.py", line 574, in errors
Jun 13 22:19:56 raspberrypi celery[544]: return ReturnDict(ret, serializer=self)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,100: WARNING/ForkPoolWorker-3] File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/rest_framework/utils/serializer_helpers.py", line 20, in __init__
Jun 13 22:19:56 raspberrypi celery[544]: super(ReturnDict, self).__init__(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,101: WARNING/ForkPoolWorker-3] ValueError: too many values to unpack (expected 2)
Jun 13 22:19:56 raspberrypi celery[544]: [2019-06-13 20:19:56,102: ERROR/ForkPoolWorker-3] Task music.scan_library_page[df20a8b2-ed26-4c38-80ea-9606f5cf8f33] raised unexpected: ValueError('too many values to unpack (expected 2)',)
Jun 13 22:19:56 raspberrypi celery[544]: Traceback (most recent call last):
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/celery/app/trace.py", line 385, in trace_task
Jun 13 22:19:56 raspberrypi celery[544]: R = retval = fun(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/celery/app/trace.py", line 648, in __protected_call__
Jun 13 22:19:56 raspberrypi celery[544]: return self.run(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/celery/app/base.py", line 472, in run
Jun 13 22:19:56 raspberrypi celery[544]: return task._orig_run(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/api/funkwhale_api/taskapp/celery.py", line 51, in inner
Jun 13 22:19:56 raspberrypi celery[544]: return function(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/api/funkwhale_api/music/tasks.py", line 101, in scan_library_page
Jun 13 22:19:56 raspberrypi celery[544]: data = lb.get_library_page(library_scan.library, page_url, library_scan.actor)
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/api/funkwhale_api/federation/library.py", line 48, in get_library_page
Jun 13 22:19:56 raspberrypi celery[544]: serializer.is_valid(raise_exception=True)
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/rest_framework/serializers.py", line 244, in is_valid
Jun 13 22:19:56 raspberrypi celery[544]: raise ValidationError(self.errors)
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/rest_framework/serializers.py", line 574, in errors
Jun 13 22:19:56 raspberrypi celery[544]: return ReturnDict(ret, serializer=self)
Jun 13 22:19:56 raspberrypi celery[544]: File "/srv/funkwhale/virtualenv/lib/python3.5/site-packages/rest_framework/utils/serializer_helpers.py", line 20, in __init__
Jun 13 22:19:56 raspberrypi celery[544]: super(ReturnDict, self).__init__(*args, **kwargs)
Jun 13 22:19:56 raspberrypi celery[544]: ValueError: too many values to unpack (expected 2)
What is expected?
I guess revoking a follow should be propagated over federation. If it's technically not possible or not wanted, at least a fall back should handle a manually launched scan so it doesn't stuck at 0% and errors are thrown in the logs.
Context
Funkwhale version(s) affected: v0.19, both instance 1 and instance2