fix: fixes

This commit is contained in:
itqop 2025-11-05 02:34:15 +03:00
parent fbcdbac6a0
commit 1789270d17
2 changed files with 17 additions and 13 deletions

View File

@ -8,7 +8,7 @@ from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker
from dataloader.base import Singleton from dataloader.base import Singleton
from dataloader.config import APP_CONFIG, Secrets from dataloader.config import APP_CONFIG, Secrets
from dataloader.logger import ContextVarsContainer, LoggerConfigurator from dataloader.logger import ContextVarsContainer, LoggerConfigurator
from sqlalchemy import event from sqlalchemy import event, select, func, text
class AppContext(metaclass=Singleton): class AppContext(metaclass=Singleton):
@ -100,6 +100,11 @@ class AppContext(metaclass=Singleton):
cur.close() cur.close()
self._sessionmaker = async_sessionmaker(self._engine, expire_on_commit=False, class_=AsyncSession) self._sessionmaker = async_sessionmaker(self._engine, expire_on_commit=False, class_=AsyncSession)
async with self._sessionmaker() as s:
await s.execute(select(func.count()).select_from(text("dl_jobs")))
await s.execute(select(func.count()).select_from(text("dl_job_events")))
self.logger.info("All connections checked. Application is up and ready.") self.logger.info("All connections checked. Application is up and ready.")
async def on_shutdown(self) -> None: async def on_shutdown(self) -> None:

View File

@ -5,8 +5,8 @@ from dataclasses import dataclass
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from typing import Any, Optional from typing import Any, Optional
from sqlalchemy import BigInteger, String, Text, select, func, update from sqlalchemy import BigInteger, String, Text, select, func, update, DateTime
from sqlalchemy.dialects.postgresql import JSONB, ENUM from sqlalchemy.dialects.postgresql import JSONB, ENUM, UUID
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.orm import Mapped, mapped_column
@ -32,7 +32,7 @@ class DLJob(Base):
""" """
__tablename__ = "dl_jobs" __tablename__ = "dl_jobs"
job_id: Mapped[str] = mapped_column(String(36), primary_key=True) job_id: Mapped[str] = mapped_column(UUID(as_uuid=False), primary_key=True)
queue: Mapped[str] = mapped_column(Text, nullable=False) queue: Mapped[str] = mapped_column(Text, nullable=False)
task: Mapped[str] = mapped_column(Text, nullable=False) task: Mapped[str] = mapped_column(Text, nullable=False)
args: Mapped[dict[str, Any]] = mapped_column(JSONB, default=dict, nullable=False) args: Mapped[dict[str, Any]] = mapped_column(JSONB, default=dict, nullable=False)
@ -40,21 +40,21 @@ class DLJob(Base):
lock_key: Mapped[str] = mapped_column(Text, nullable=False) lock_key: Mapped[str] = mapped_column(Text, nullable=False)
partition_key: Mapped[str] = mapped_column(Text, default="", nullable=False) partition_key: Mapped[str] = mapped_column(Text, default="", nullable=False)
priority: Mapped[int] = mapped_column(nullable=False, default=100) priority: Mapped[int] = mapped_column(nullable=False, default=100)
available_at: Mapped[datetime] = mapped_column(nullable=False) available_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
status: Mapped[str] = mapped_column(dl_status_enum, nullable=False, default="queued") status: Mapped[str] = mapped_column(dl_status_enum, nullable=False, default="queued")
attempt: Mapped[int] = mapped_column(nullable=False, default=0) attempt: Mapped[int] = mapped_column(nullable=False, default=0)
max_attempts: Mapped[int] = mapped_column(nullable=False, default=5) max_attempts: Mapped[int] = mapped_column(nullable=False, default=5)
lease_ttl_sec: Mapped[int] = mapped_column(nullable=False, default=60) lease_ttl_sec: Mapped[int] = mapped_column(nullable=False, default=60)
lease_expires_at: Mapped[Optional[datetime]] = mapped_column(nullable=True) lease_expires_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
heartbeat_at: Mapped[Optional[datetime]] = mapped_column(nullable=True) heartbeat_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
cancel_requested: Mapped[bool] = mapped_column(nullable=False, default=False) cancel_requested: Mapped[bool] = mapped_column(nullable=False, default=False)
progress: Mapped[dict[str, Any]] = mapped_column(JSONB, default=dict, nullable=False) progress: Mapped[dict[str, Any]] = mapped_column(JSONB, default=dict, nullable=False)
error: Mapped[Optional[str]] = mapped_column(Text) error: Mapped[Optional[str]] = mapped_column(Text)
producer: Mapped[Optional[str]] = mapped_column(Text) producer: Mapped[Optional[str]] = mapped_column(Text)
consumer_group: Mapped[Optional[str]] = mapped_column(Text) consumer_group: Mapped[Optional[str]] = mapped_column(Text)
created_at: Mapped[datetime] = mapped_column(nullable=False) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
started_at: Mapped[Optional[datetime]] = mapped_column(nullable=True) started_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
finished_at: Mapped[Optional[datetime]] = mapped_column(nullable=True) finished_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
class DLJobEvent(Base): class DLJobEvent(Base):
@ -64,9 +64,9 @@ class DLJobEvent(Base):
__tablename__ = "dl_job_events" __tablename__ = "dl_job_events"
event_id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) event_id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
job_id: Mapped[str] = mapped_column(String(36), nullable=False) job_id: Mapped[str] = mapped_column(UUID(as_uuid=False), nullable=False)
queue: Mapped[str] = mapped_column(Text, nullable=False) queue: Mapped[str] = mapped_column(Text, nullable=False)
ts: Mapped[datetime] = mapped_column(nullable=False) ts: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
kind: Mapped[str] = mapped_column(Text, nullable=False) kind: Mapped[str] = mapped_column(Text, nullable=False)
payload: Mapped[Optional[dict[str, Any]]] = mapped_column(JSONB) payload: Mapped[Optional[dict[str, Any]]] = mapped_column(JSONB)
@ -314,7 +314,6 @@ class QueueRepository:
job.lease_expires_at = None job.lease_expires_at = None
ids.append(job.job_id) ids.append(job.job_id)
await self._append_event(job.job_id, job.queue, "requeue_lost", None) await self._append_event(job.job_id, job.queue, "requeue_lost", None)
await self.s.commit()
return ids return ids
async def _get(self, job_id: str) -> Optional[DLJob]: async def _get(self, job_id: str) -> Optional[DLJob]: