Skip to content

musicbrainz: unhandled ProtocolError #6282

@henry-oberholtzer

Description

@henry-oberholtzer

Importing some albums this morning and encountered a urllib crash, I think this might be resolved generally by #5965, but there might be a spot where the exception can be handled within the plugin itself. Working with the current master commit.

Problem

Running this command in verbose (-vv) mode:

  Match (49.9%):
  Delerium - Poem
  ≠ missing tracks, tracks, mediums, data source, album, catalognum
  Discogs, 2xCD, 2000, USA & Canada, Nettwerk, 0 6700 30166 2 9, None
  https://www.discogs.com/release/47035-Delerium-Poem
  * Artist: Delerium
  ≠ Album: Poem (Disc 2) (Bonus Disc) -> Poem
  * CD 2: Bonus Disc
     ≠ (#1) Silence (feat. Sarah McLachlan) (8:40) -> (#2-1) Silence (Airscape Remix) (8:40)
     ≠ (#2) Flowers Become Screens (feat. Kristy Thirsk) (7:59) -> (#2-2) Flowers Become Screens (Deepsky Remix) (7:59)
     ≠ (#3) Inner Sanctum (feat. Kristy Hawkshaw (7:23) -> (#2-3) Inner Sanctum (7:23)
     ≠ (#4) Nature's Kingdom II (feat. Jenifer McLaren) (5:18) -> (#2-4) Nature's Kingdom II (5:18)
Missing tracks (11/15 - 73.3%):
 ! Terra Firma (#1-1) (5:39)
 ! Innocente (#1-2) (6:29)
 ! Aria (#1-3) (6:50)
 ! Fallen Icons (#1-4) (6:30)
 ! Underwater (#1-5) (5:21)
 ! Myth (#1-6) (6:10)
 ! Nature's Kingdom (#1-7) (5:15)
 ! Daylight (#1-8) (5:32)
 ! Temptation (#1-9) (8:06)
 ! A Poem for Byzantium (#1-10) (5:53)
 ! Amongst the Ruins (#1-11) (10:27)
➜ Apply, More candidates, Skip, Use as-is, as Tracks, Group albums,
Enter search, enter Id, aBort, Print tracks, Open files with Picard? A
This album is already in the library!
Old: 11 items, FLAC, 918kbps, 44.1kHz/16 bit, 72:17, 498.8 MiB
New: 4 items, FLAC, 960kbps, 44.1kHz/16 bit, 29:21, 201.9 MiB
➜ [S]kip new, Keep all, Remove old, Merge all? M
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None))

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Henry\AppData\Roaming\Python\Python312\site-packages\requests\adapters.py", line 486, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\urllib3\connectionpool.py", line 877, in urlopen
    return self.urlopen(
           ^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\urllib3\connectionpool.py", line 877, in urlopen
    return self.urlopen(
           ^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\urllib3\connectionpool.py", line 847, in urlopen
    retries = retries.increment(
              ^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\urllib3\util\retry.py", line 515, in increment
    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='musicbrainz.org', port=443): Max retries exceeded with url: /ws/2/release/b0a48d0e-5947-4c2d-84f3-dcf2f06371ec?inc=artists%2Bmedia%2Brecordings%2Brelease-groups%2Blabels%2Bartist-credits%2Baliases%2Brecording-level-rels%2Bwork-rels%2Bwork-level-rels%2Bartist-rels%2Bisrcs%2Burl-rels%2Brelease-rels%2Bgenres%2Btags&fmt=json (Caused by ProtocolError('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Python312\Scripts\beet.exe\__main__.py", line 7, in <module>
  File "C:\Python312\Lib\site-packages\beets\ui\__init__.py", line 1629, in main
    _raw_main(args)
  File "C:\Python312\Lib\site-packages\beets\ui\__init__.py", line 1608, in _raw_main
    subcommand.func(lib, suboptions, subargs)
  File "C:\Python312\Lib\site-packages\beets\ui\commands\import_\__init__.py", line 131, in import_func
    import_files(lib, byte_paths, query)
  File "C:\Python312\Lib\site-packages\beets\ui\commands\import_\__init__.py", line 75, in import_files
    session.run()
  File "C:\Python312\Lib\site-packages\beets\importer\session.py", line 236, in run
    pl.run_parallel(QUEUE_SIZE)
  File "C:\Python312\Lib\site-packages\beets\util\pipeline.py", line 471, in run_parallel
    raise exc_info[1].with_traceback(exc_info[2])
  File "C:\Python312\Lib\site-packages\beets\util\pipeline.py", line 339, in run
    for msg in _allmsgs(out):
  File "C:\Python312\Lib\site-packages\beets\util\pipeline.py", line 492, in pull
    out = coro.send(msg)
          ^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beets\util\pipeline.py", line 219, in coro
    func(*(args + (task,)))
  File "C:\Python312\Lib\site-packages\beets\importer\stages.py", line 146, in lookup_candidates
    task.lookup_candidates(session.config["search_ids"].as_str_seq())
  File "C:\Python312\Lib\site-packages\beets\importer\tasks.py", line 367, in lookup_candidates
    autotag.tag_album(self.items, search_ids=search_ids)
  File "C:\Python312\Lib\site-packages\beets\autotag\match.py", line 285, in tag_album
    if info := match_by_id(items):
               ^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beets\autotag\match.py", line 122, in match_by_id
    return metadata_plugins.album_for_id(first)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beets\metadata_plugins.py", line 57, in album_for_id
    if info := plugin.album_for_id(album_id=_id):
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\musicbrainz.py", line 794, in album_for_id
    res = self.mb_api.get_release(albumid, includes=RELEASE_INCLUDES)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\_utils\musicbrainz.py", line 209, in get_release
    return self._lookup("release", id_, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\_utils\musicbrainz.py", line 179, in _lookup
    return self._get_resource(f"{entity}/{id_}", **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\_utils\musicbrainz.py", line 173, in _get_resource
    self.get_json(f"{self.api_root}/{resource}", params=kwargs)
  File "C:\Python312\Lib\site-packages\beetsplug\_utils\requests.py", line 196, in get_json
    return self.get(*args, **kwargs).json()
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\_utils\requests.py", line 184, in get
    return self.request("get", *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\_utils\musicbrainz.py", line 158, in request
    return super().request(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\_utils\requests.py", line 180, in request
    return self.session.request(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\beetsplug\_utils\requests.py", line 101, in request
    r = super().request(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Henry\AppData\Roaming\Python\Python312\site-packages\requests\sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python312\Lib\site-packages\requests_ratelimiter\requests_ratelimiter.py", line 95, in send
    response = super().send(request, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Henry\AppData\Roaming\Python\Python312\site-packages\requests\sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Henry\AppData\Roaming\Python\Python312\site-packages\requests\adapters.py", line 519, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='musicbrainz.org', port=443): Max retries exceeded with url: /ws/2/release/b0a48d0e-5947-4c2d-84f3-dcf2f06371ec?inc=artists%2Bmedia%2Brecordings%2Brelease-groups%2Blabels%2Bartist-credits%2Baliases%2Brecording-level-rels%2Bwork-rels%2Bwork-level-rels%2Bartist-rels%2Bisrcs%2Burl-rels%2Brelease-rels%2Bgenres%2Btags&fmt=json (Caused by ProtocolError('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)))

Metadata

Metadata

Assignees

No one assigned

    Labels

    metadata_pluginsAn issue that is generally related to metadata plugin logic.musicbrainz

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions