Subject: omnidb-server: fix for bug 1053100

From: Bradford Boyle <[email-masked]>
Date: Wed, 19 Jun 2024 23:50:08 -0700

Hi All,

I have been looking at Debian bug 1053100 (omnidb-server crashes when
creating a new PostgreSQL connection) [1] and I have identified that
this is caused by a change in one of OmniDB's Python dependencies.

OmniDB configures Django's session serialization format to use Python's
`pickle` module instead of the default JSON-based serialization. The
class `Session` has a field `v_databases` that is a dictionary tha
contains references to objects holding information for the various
connections the user has configured. When a connection to a PostgreSQL
database is configured, the `Session` object ends up transitively
referencing an instance of `PGSpecial` from provided by the Python
package `pgspecial`. A recent change in `pgspecial` means that
`PGSpecial` objects are no longer serializable with Python's `pickle`
module.

Reviewing OmniDB's use of `PGSpecial` within its `PostgreSQL` class, it
appears to be a "stateless" in that it does not use the `PGSpecial`
object in any way that would cause its fields to be change value from
when it was constructed. Based on this observation, an approach to
fixing the reported bug is to patch OmniDB's `PostgreSQL` class to omit
`PGSpecial` during serialization and to recreate it during
deserialization. I have a attached a patch that will do this. In my
limited local testing, this fixes the bug. If there are no concerns with
the proposed patch, I can update the package on s.d.o.

It looks like Django 5.x has deprecated `PickleSerializer` [2] so its
unlikely that OmniDB will continue working going forward. At the moment,
Debian testing still provides Django 4.2 but I do not know if the Debian
Python team has plans to update to the newer major version. Independent
of the Django major version incompatibility, it looks like the upstream
repo for OmniDB has gone inactive and the project is unmaintained [3].
Does it make sense to continue publishing packages of OmniDB for newer
releases of Debian and Ubuntu?

-- Bradford

[1]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1053100
[2]: https://github.com/django/django/pull/15139
[3]: https://github.com/OmniDB/OmniDB

---

From: Christoph Berg <[email-masked]>
Date: Thu, 20 Jun 2024 11:26:08 +0200

Re: Bradford Boyle
> this is caused by a change in one of OmniDB's Python dependencies.

Hi Bradford,

thanks for the debugging! I have not had any time to spend on OmniDB,
so this is most welcome.

> releases of Debian and Ubuntu?

I spoke to some of the 2ndQuandrant, err, EDB people at pgconf.eu last
year and they confirmed OmniDB is practically dead. Which is a pity,
because I had picked that as a pgadmin4 replacement :(.

If your patch fixes the problem, we should apply it. Hopefully that
will make OmniDB work at least for now, perhaps even for trixie. But
after that, I have little hope, and we shouldn't put too much more
(non-trivial) effort into it since the horse seems to be dead :(.

Christoph

---

From: Bradford Boyle <[email-masked]>
Date: Sun, 23 Jun 2024 17:46:45 -0700

Hi Christoph,

I've pushed two fixes for omnidb to Salsa:

1. A fix for 1053100
2. Replacing a deprecated Django API to get the package working with
   Debian trixie

I've triggered a snapshot build on pgdgbuild and manually tested the
artifacts on both bookworm and trixie. I'd like to request a review and
upload, as cycles permit.

Let me know if anything needs changes.

-- Bradford

---

From: Christoph Berg <[email-masked]>
Date: Mon, 24 Jun 2024 10:59:27 +0200

Re: Bradford Boyle

Hi Bradford,

thanks!

I've been dabbling with django for some other hobby projects and had
seen some warnings around the url() functions, but not checked out any
details. That will be useful there too.

> upload, as cycles permit.

Perfect, as always! Uploading shortly.

Christoph