openSUSE / openSUSE-release-tools

Tools to aid in staging and release work for openSUSE/SUSE
GNU General Public License v2.0
61 stars 97 forks source link

pkglistgen: update_repo_handler does not cope with new zstd compressed metadata (primary) #3032

Closed DimStar77 closed 10 months ago

DimStar77 commented 10 months ago

This has been noticed on botmaster, where update_repo_handler is failing since recently:

Traceback (most recent call last):
  File "/godata/pipelines/Update.Repos.Factory/./pkglistgen.py", line 8, in <module>
    sys.exit(app.main())
             ^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/cmdln.py", line 261, in main
    return self.cmd(args)
           ^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/cmdln.py", line 284, in cmd
    retval = self.onecmd(argv)
             ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/cmdln.py", line 422, in onecmd
    return self._dispatch_cmd(handler, argv)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/cmdln.py", line 1123, in _dispatch_cmd
    return handler(argv[0], opts, *args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/godata/pipelines/Update.Repos.Factory/pkglistgen/cli.py", line 43, in do_handle_update_repos
    return update_project(conf.config['apiurl'], project, opts.fixate)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/godata/pipelines/Update.Repos.Factory/pkglistgen/update_repo_handler.py", line 308, in update_project
    dump_solv(solv_file, opts['url'])
  File "/godata/pipelines/Update.Repos.Factory/pkglistgen/update_repo_handler.py", line 154, in dump_solv
    if not parse_repomd(repo, baseurl) and not parse_susetags(repo, baseurl):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/godata/pipelines/Update.Repos.Factory/pkglistgen/update_repo_handler.py", line 104, in parse_repomd
    f.write(content.read())
            ^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/gzip.py", line 301, in read
    return self._buffer.read(size)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/_compression.py", line 118, in readall
    while data := self.read(sys.maxsize):
                  ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/gzip.py", line 499, in read
    if not self._read_gzip_header():
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/gzip.py", line 468, in _read_gzip_header
    last_mtime = _read_gzip_header(self._fp)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/gzip.py", line 428, in _read_gzip_header
    raise BadGzipFile('Not a gzipped file (%r)' % magic)
gzip.BadGzipFile: Not a gzipped file (b'(\xb5')
[script-executor] Script completed with exit code: 1.

It tries to read the .zst files, but decompress them as .gzip

DimStar77 commented 10 months ago

cc @dirkmueller FYI - a fallout from the createrepo_c change to use zstd for primary.xml

Vogtinator commented 10 months ago

I have a WIP fix already

Vogtinator commented 10 months ago

I have a WIP fix already

https://github.com/openSUSE/openSUSE-release-tools/pull/3033