nixos/firefox-syncserver: add PostgreSQL backend support#501943
nixos/firefox-syncserver: add PostgreSQL backend support#501943Titaniumtown wants to merge 4 commits intoNixOS:masterfrom
Conversation
e4d6d84 to
8af1c5f
Compare
ntninja
left a comment
There was a problem hiding this comment.
Since my independently developed version #507460 of this change was deemed a duplicate of this, I gave your version a review with things that are better in my version (some is better in yours).
should we just compile for both mysql and PostgreSQL?
That is not possible, the source code is written in such a way that if you compile for both you’ll get a symbol clash.
For keeping having the PostgreSQL feature on SyncServer not enable MySQL on TokenServer, I have a small patch:
https://github.com/ntninja/nixpkgs/blob/8f8c170c8628ca864d41eb80078147f828cc37db/pkgs/by-name/sy/syncstorage-rs/01-syncserver-tokenserver-postgres-db.patch
Upstream is mostly happy with it, other than it breaking their CI script assumptions, will update soon hopefully:
mozilla-services/syncstorage-rs#2194
| systemd.services.firefox-syncserver-setup = lib.mkIf cfg.singleNode.enable { | ||
| wantedBy = [ "firefox-syncserver.service" ]; | ||
| requires = [ "firefox-syncserver.service" ] ++ lib.optional dbIsLocal "mysql.service"; | ||
| after = [ "firefox-syncserver.service" ] ++ lib.optional dbIsLocal "mysql.service"; | ||
| path = [ config.services.mysql.package ]; | ||
| serviceConfig.ExecStart = [ "${setupScript}" ]; | ||
| requires = [ "firefox-syncserver.service" ] ++ lib.optional dbIsLocal dbService; | ||
| after = [ "firefox-syncserver.service" ] ++ lib.optional dbIsLocal dbService; | ||
| path = | ||
| if dbIsMySQL then [ config.services.mysql.package ] else [ config.services.postgresql.package ]; | ||
| serviceConfig = { | ||
| ExecStart = [ "${setupScript}" ]; | ||
| } | ||
| // lib.optionalAttrs dbIsPostgreSQL { | ||
| # PostgreSQL peer authentication requires the system user to match the | ||
| # database user. Run as the superuser so we can access all databases. | ||
| User = "postgres"; | ||
| Group = "postgres"; | ||
| }; | ||
| }; |
There was a problem hiding this comment.
I didn’t fix it either but there is no reason why this cannot just run in ExecStartPost= of the main service unit, is there?
There was a problem hiding this comment.
I don't know. Presumably this could be done. But I don't think it really matters one way or another.
b2cc6cd to
9f03b92
Compare
|
Thank you for your further review @mweinelt, I'm on it! |
ddab975 to
668e308
Compare
668e308 to
19bcaba
Compare
Expose both database backends as top-level packages so Hydra builds and caches each variant. The firefox-syncserver module now picks the appropriate package based on `services.firefox-syncserver.database.type` when the user does not supply one explicitly. The `package` option becomes `nullOr package` with a `null` default; this avoids requiring a user-supplied custom package to implement the `dbBackend` override attribute.
19bcaba to
05aa52d
Compare
Added support to the firefox-syncserver module for PostgreSQL databases. The upstream project has support for it, but the module did not. I also modified the actual firefox-syncserver package to allow the PostgreSQL feature flag to be set by changing the target database backend.
I needed to bump the version of the underlying package as the version currently shipping doesn't contain PostgreSQL support.
One concern I have is about the feature flag handling, should we just compile for both mysql and PostgreSQL? Right now I have it so it's either-or and it's determined by a feature flag.
LLMs used: Claude Opus 4.6 via opencode
Things done
passthru.tests.nixpkgs-reviewon this PR. See nixpkgs-review usage../result/bin/.