This is a followup to the topic “The Future of MDAPI”[1] I opened about a week back - mostly about how the tests in MDAPI unexpectedly broke due to an uninformed change[2] that broke how MDAPI works.
I wrote a workaround that deferred to using the SQLite3-based metadata sourced from Kojipkgs[3] for the current Fedora Linux Rawhide branch - an approach which I was not happy with and had problems[4].
On Thursday, I pushed the workaround to PyPI[5] and GitHub[6] while making a deployment on the staging environment[7] and I planned on pushing those to the production environment a week after[8].
Thankfully, my proposal of reverting back the creation of SQLite3-based metadata was accepted[9] but this again is a compromise and I would like for it to be back to normal after two releases[10].
I do not like SQLite3, but I hate XML as much. Moving away from SQLite3-based metadata to having only XML-based metadata felt like a step back[11]. Now that the change was done, the support was left[12].
For lookup purposes in services, SQLite3 is significantly faster than XML due to the inherent indexing support, faster query performance, lesser memory usage and concurrent parsing scalability.
Over the weekend, I worked on Metasource[13] (or call it Metasaurus - I do not give a damn) to introduce XML support to the REST API from ground-up instead of bending MDAPI to fit the XML needs[14].
I have deployed it here[15] for the testing purposes. You have been warned - while it is written in Go and has most of the modern optimizations, performance compromises might be observed against MDAPI[16].
Only one Fedora Linux Rawhide buildroot snapshot is made available as a source in my virtual machine, so you can take the codebase for a spin locally and test out the following resources to see for yourself.
https://metasource.gridhead.net/rawhide/pkg/<packname>
https://metasource.gridhead.net/rawhide/files/<packname>
https://metasource.gridhead.net/rawhide/changelog/<packname>
https://metasource.gridhead.net/rawhide/suggests/<packname>
https://metasource.gridhead.net/rawhide/enhances/<packname>
https://metasource.gridhead.net/rawhide/requires/<packname>
https://metasource.gridhead.net/rawhide/provides/<packname>
https://metasource.gridhead.net/rawhide/obsoletes/<packname>
https://metasource.gridhead.net/rawhide/conflicts/<packname>
https://metasource.gridhead.net/rawhide/recommends/<packname>
https://metasource.gridhead.net/rawhide/supplements/<packname>
Please feel free to let me know your feedback. I plan on polishing the codebase a bit further with the automation to import the XML-based metadata and compliance quality checks before staging this up.