multiformats icon indicating copy to clipboard operation
multiformats copied to clipboard

MultibaseValueError: Raw encoding with name 'base32' already exists

Open snarfed opened this issue 1 year ago • 0 comments

Hi! About a week ago, I started seeing a trickle of these exceptions in my app that uses multiformats. I've been on multiformats==0.3.1.post4 multiformats-config==0.3.1 for months, and I can't think of any obvious recent change in my own code related to CID decoding. Any idea what's going on here?

My app is threaded; could it be a race condition registering encodings?

Thanks in advance!

Traceback (most recent call last):
  File ".../flask_sock/__init__.py", line 62, in websocket_route
    f(ws, *args, **kwargs)
  File ".../lexrpc/flask_server.py", line 147, in handler
    for result in iter:
...
  File ".../arroba/xrpc_sync.py", line 148, in subscribe_repos
    for commit_data in server.storage.read_commits_by_seq(start=cursor):
  File ".../arroba/storage.py", line 205, in read_commits_by_seq
    for block in self.read_blocks_by_seq(start=start):
  File ".../arroba/datastore_storage.py", line 439, in read_blocks_by_seq
    yield atp_block.to_block()
          ^^^^^^^^^^^^^^^^^^^^
  File ".../arroba/datastore_storage.py", line 187, in to_block
    return Block(cid=self.cid, encoded=self.encoded, seq=self.seq, ops=ops)
                     ^^^^^^^^
  File ".../arroba/datastore_storage.py", line 149, in cid
    return CID.decode(self.key.id())
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../multiformats/cid/__init__.py", line 562, in decode
    cid, mb = _binary_cid_from_str(cid)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../multiformats/cid/__init__.py", line 46, in _binary_cid_from_str
    mb, b = multibase.decode_raw(cid)
            ^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../multiformats/multibase/__init__.py", line 554, in decode_raw
    return base, base.decode(s)
                 ^^^^^^^^^^^^^^
  File ".../multiformats/multibase/__init__.py", line 262, in decode
    return self.raw_decoder(s[1:])
           ^^^^^^^^^^^^^^^^
  File ".../multiformats/multibase/__init__.py", line 217, in raw_decoder
    enc = raw.get(self.name)
          ^^^^^^^^^^^^^^^^^^
  File ".../multiformats/multibase/raw.py", line 118, in get
    if not _jit_register_encoding(name):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../multiformats/multibase/raw.py", line 385, in _jit_register_encoding
    f(*args)
  File ".../multiformats/multibase/raw.py", line 353, in _jit_register_base_encoding
    register(key, base)
  File ".../multiformats/multibase/raw.py", line 167, in register
    raise MultibaseValueError(f"Raw encoding with name {repr(name)} already exists: {_raw_encodings[name]}")
multiformats.multibase.err.MultibaseValueError: Raw encoding with name 'base32' already exists: FixcharBaseEncoding(StringAlphabet('abcdefghijklmnopqrstuvwxyz234567', case_sensitive=False), pad_char='=')

snarfed avatar May 10 '24 18:05 snarfed