]> git.ipfire.org Git - pbs.git/commitdiff
builds: Break some dependency cycle somewhere
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 5 Feb 2025 17:27:59 +0000 (17:27 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 5 Feb 2025 17:37:50 +0000 (17:37 +0000)
SQLAlchemy failed to load alljobs in Builds and I could not quite figure
out why. It seems that when both properties that form the relationship
should be fetched in a single join, nothing happens and SQLAlchemy does
not even seem to complain about it. Oh well.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py

index 9f044a010cb6b17a21f866dd5a11fd689b057e6e..803456702566bf57d33dd0354455ef92727bc93f 100644 (file)
@@ -484,7 +484,7 @@ class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin):
        # Commit
 
        commit = sqlalchemy.orm.relationship(
-               "SourceCommit", foreign_keys=[commit_id], lazy="joined",
+               "SourceCommit", foreign_keys=[commit_id], lazy="selectin",
        )
 
        def has_perm(self, user):
@@ -530,7 +530,7 @@ class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin):
 
        # Jobs - This fetches all jobs that have ever existed for this build
 
-       alljobs = sqlalchemy.orm.relationship("Job", back_populates="build", lazy="selectin")
+       alljobs = sqlalchemy.orm.relationship("Job", back_populates="build", lazy="joined")
 
        @property
        def jobs(self):
@@ -594,7 +594,7 @@ class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin):
        # Deleted By
 
        deleted_by = sqlalchemy.orm.relationship(
-               "User", foreign_keys=[deleted_by_id], lazy="joined",
+               "User", foreign_keys=[deleted_by_id], lazy="selectin",
        )
 
        # Add Points
@@ -1032,7 +1032,7 @@ class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin):
        # Deprecated By
 
        deprecated_by = sqlalchemy.orm.relationship(
-               "User", foreign_keys=[deprecated_by_id], lazy="joined",
+               "User", foreign_keys=[deprecated_by_id], lazy="selectin",
        )
 
        # Deprecating Build ID
@@ -1415,7 +1415,7 @@ class BuildBug(database.Base):
        # Added By
 
        added_by = sqlalchemy.orm.relationship(
-               "User", foreign_keys=[added_by_id], lazy="joined",
+               "User", foreign_keys=[added_by_id], lazy="joined", innerjoin=True,
        )
 
        # Removed At
@@ -1429,7 +1429,7 @@ class BuildBug(database.Base):
        # Removed ID
 
        removed_by = sqlalchemy.orm.relationship(
-               "User", foreign_keys=[removed_by_id], lazy="joined",
+               "User", foreign_keys=[removed_by_id], lazy="selectin",
        )
 
        # Remove!
@@ -1496,7 +1496,7 @@ class BuildPoint(database.Base, database.BackendMixin):
 
        # Build
 
-       build = sqlalchemy.orm.relationship("Build", foreign_keys=[build_id], lazy="joined")
+       build = sqlalchemy.orm.relationship("Build", foreign_keys=[build_id], lazy="selectin")
 
        # Created At
 
@@ -1513,7 +1513,7 @@ class BuildPoint(database.Base, database.BackendMixin):
 
        # User
 
-       user = sqlalchemy.orm.relationship("User", foreign_keys=[user_id], lazy="joined")
+       user = sqlalchemy.orm.relationship("User", foreign_keys=[user_id], lazy="selectin")
 
 
 class BuildWatcher(database.Base, database.BackendMixin, database.SoftDeleteMixin):
@@ -1539,7 +1539,7 @@ class BuildWatcher(database.Base, database.BackendMixin, database.SoftDeleteMixi
 
        # User
 
-       user = sqlalchemy.orm.relationship("User", lazy="selectin")
+       user = sqlalchemy.orm.relationship("User", lazy="joined", innerjoin=True)
 
        # Added At