beetbox / beetbox/beets

Network Error SSL EOF occurred in violation of protocol

Open
#6,145 4 comments 4 reactions 0 assignees View on GitHub
musicbrainz
Dominant language
Python
Stars
15.7k
Forks
2.1k
Avg merge
4d 21h
Merged PRs (30d)
31

Description

### Problem

Running this command in verbose (`-vv`) mode:

```sh
beet -vv import Hypnophobia
```

Led to this problem:

```
user configuration: /Users/chimiseanga/.config/beets/config.yaml
data directory: /Users/chimiseanga/.config/beets
plugin paths: []
Loading plugins: convert, embedart, fetchart, mbsync, musicbrainz
fetchart: google: Disabling art source due to missing key
fetchart: lastfm: Disabling art source due to missing key
Sending event: pluginload
library database: /Volumes/Musiclib/data/musiclibrary.db
library directory: /Volumes/Musiclib/music
Sending event: library_opened
Sending event: import_begin
Sending event: import_task_created
Sending event: import_task_start
Looking up: /Users/chimiseanga/Documents/Nicotine Downloads/Hypnophobia
Tagging Jacco Gardner - Hypnophobia
No album ID found.
Search terms: Jacco Gardner - Hypnophobia
Album might be VA: False
musicbrainz: Searching for MusicBrainz releases with: {'release': 'hypnophobia', 'alias': 'hypnophobia', 'tracks': '10', 'artist': 'jacco gardner'}
musicbrainz: Requesting MusicBrainz release cd7a6809-4228-4a3a-89cf-a89ef9e2974b
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_album_extract
Sending event: albuminfo_received
Candidate: Jacco Gardner - Hypnophobia (cd7a6809-4228-4a3a-89cf-a89ef9e2974b)
Computing track assignment...
...done.
Success. Distance: 0.00
musicbrainz: Requesting MusicBrainz release fabadd5c-64de-4e94-b4f5-e4b0d0227074
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_track_extract
Sending event: mb_album_extract
Sending event: albuminfo_received
Candidate: Jacco Gardner - Hypnophobia (fabadd5c-64de-4e94-b4f5-e4b0d0227074)
Computing track assignment...
...done.
Success. Distance: 0.00
musicbrainz: Requesting MusicBrainz release fe2143fa-086b-4591-a0bc-1fd3a6ddce8d
Traceback (most recent call last):
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/urllib/request.py", line 1344, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/http/client.py", line 1338, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/http/client.py", line 1384, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/http/client.py", line 1333, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/http/client.py", line 1093, in _send_output
self.send(msg)
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/http/client.py", line 1037, in send
self.connect()
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/http/client.py", line 1479, in connect
self.sock = self._context.wrap_socket(self.sock,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/ssl.py", line 455, in wrap_socket
return self.sslsocket_class._create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/ssl.py", line 1041, in _create
self.do_handshake()
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/ssl.py", line 1319, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: [SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1010)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/site-packages/musicbrainzngs/musicbrainz.py", line 497, in _safe_read
f = opener.open(req)
^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/urllib/request.py", line 515, in open
response = self._open(req, data)
^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/urllib/request.py", line 532, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/urllib/request.py", line 492, in _call_chain
result = func(*args)
^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/urllib/request.py", line 1392, in https_open
return self.do_open(http.client.HTTPSConnection, req,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/urllib/request.py", line 1347, in do_open
raise URLError(err)
urllib.error.URLError:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/site-packages/beetsplug/musicbrainz.py", line 853, in album_for_id
res = musicbrainzngs.get_release_by_id(albumid, RELEASE_INCLUDES)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/site-packages/musicbrainzngs/musicbrainz.py", line 879, in get_release_by_id
return _do_mb_query("release", id, includes, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/site-packages/musicbrainzngs/musicbrainz.py", line 728, in _do_mb_query
return _mb_request(path, 'GET', auth_required, args=args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/site-packages/musicbrainzngs/musicbrainz.py", line 417, in __call__
return self.fun(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/site-packages/musicbrainzngs/musicbrainz.py", line 690, in _mb_request
resp = _safe_read(opener, req, body)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/chimiseanga/.pyenv/versions/3.12.9/lib/python3.12/site-packages/musicbrainzngs/musicbrainz.py", line 525, in _safe_read
raise NetworkError(cause=exc)
musicbrainzngs.musicbrainz.NetworkError: caused by:

Error: MusicBrainz not reachable in get release by ID with query 'fe2143fa-086b-4591-a0bc-1fd3a6ddce8d'
```

This is happening on almost every import call, no matter what I'm importing. Occasionally the import works as expected.

### Setup

* OS: macOS Sequoia 15.7.2
* Python version: 3.12.9
* beets version: 2.5.1
* Turning off plugins made problem go away (yes/no): no

My configuration (output of `beet config`) is:

```yaml
directory: /Volumes/Musiclib/music
library: /Volumes/Musiclib/data/musiclibrary.db
plugins: fetchart embedart convert mbsync musicbrainz
import:
move: no
copy: yes
write: yes
ignore_hidden: yes
paths:
default: $albumartist/$original_year - $album%aunique{}/$track $title
singleton: Non-Album/$artist/$title
comp: Compilations/$album%aunique{}/$track $title
aunique:
keys: albumartist album
disambiguators: albumtype original_year label catalognum albumdisambig releasegroupdisambig
bracket: '[]'
fetchart:
minwidth: 600
maxwidth: 600
sources: filesystem coverart itunes amazon albumart
enforce_ratio: yes
deinterlace: yes
cover_format: JPEG
convert:
auto: yes
formats:
mp3: ffmpeg -i $source -y -ab 320k $dest
```

Contributor guide

Open the contributing guide

Research direction

Start with the `beet import` path and `beetsplug/musicbrainz.py`, then inspect how the MusicBrainz release-by-ID request reaches `musicbrainzngs`. Reproduce the intermittent SSL EOF on the stated macOS and Python setup, and use the existing traceback to define verification. Done means imports no longer fail unexpectedly during MusicBrainz release lookup, with relevant tests or a reproducible check covering the behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api, cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.