"""Queue Table in the Database."""
from sqlalchemy import Column, ForeignKey, Integer, String, UniqueConstraint, select
from sqlalchemy.orm import Mapped, Session, mapped_column, relationship
from jobmon.core.serializers import SerializeQueue
from jobmon.server.web.models import Base
from jobmon.server.web.models.cluster import Cluster
[docs]
class Queue(Base):
"""Queue Table in the Database."""
[docs]
__tablename__ = "queue"
[docs]
def to_wire_as_requested_by_client(self) -> tuple:
"""Serialize cluster object."""
return SerializeQueue.to_wire(self.id, self.name, self.parameters)
[docs]
id: Mapped[int] = mapped_column(Integer, primary_key=True)
[docs]
name: Mapped[str] = mapped_column(String(255), nullable=False)
[docs]
cluster_id = Column(Integer, ForeignKey("cluster.id"), nullable=False)
[docs]
parameters: Mapped[str] = mapped_column(String(2500), nullable=False)
# ORM relationships
[docs]
cluster = relationship("Cluster", back_populates="queues")
[docs]
__table_args__ = (
UniqueConstraint("name", "cluster_id", name="uc_name_cluster_id"),
)
[docs]
def add_queues(session: Session) -> None:
"""Populate the queue table in the database."""
for cluster_name in ["dummy", "sequential", "multiprocess"]:
cluster = (
session.execute(select(Cluster).where(Cluster.name == cluster_name))
.scalars()
.one()
)
if cluster_name == "multiprocess":
parameters = '{"cores": (1,20)}'
else:
parameters = "{}"
session.add(Queue(name="null.q", cluster_id=cluster.id, parameters=parameters))