fix(tags): tag_vertical_counts bez klucza obcego, koniec zakleszczenia o 05:00
Refresh licznikow (co 3 h) i tag_tail_trim (raz dziennie) startuja razem o 05:00. Kasowanie osieroconych tagow schodzilo kaskada do tag_vertical_counts i czekalo na refresh, a refresh przy wstawianiu czekal na blokade tego samego tagu przez sprawdzenie klucza obcego. Od 29.09 Postgres co rano zabijal przycinanie (Sentry GOON-7N). Tabela to kopia liczona od zera, wiec klucz obcy nie byl potrzebny (migracja 0050). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
8a9fea3eef
commit
8f8bb1c448
2 changed files with 44 additions and 5 deletions
40
alembic/versions/20260930_0050_tag_vertical_counts_no_fk.py
Normal file
40
alembic/versions/20260930_0050_tag_vertical_counts_no_fk.py
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
"""tag_vertical_counts bez klucza obcego do tags (zakleszczenie o 05:00, Sentry GOON-7N).
|
||||||
|
|
||||||
|
Codziennie o 05:00 rusza naraz refresh_taxonomy_counts (co 3 h) i tag_tail_trim (raz
|
||||||
|
dziennie). Przycinanie kasuje przypisania rule34video, a potem osierocone tagi; DELETE na
|
||||||
|
tags schodzi kaskada do tag_vertical_counts i czeka na refresh, ktory te wiersze wlasnie
|
||||||
|
podmienia. Refresh wstawia liczniki z migawki, w ktorej skasowane przypisania jeszcze sa,
|
||||||
|
a sprawdzenie klucza obcego czeka na blokade tego samego wiersza tags. Od 2026-09-29
|
||||||
|
Postgres co rano zabija tag_tail_trim.
|
||||||
|
|
||||||
|
Tabela to kopia liczona od zera co 3 h, wiec klucz obcy nic nie daje: wiersz po
|
||||||
|
skasowanym tagu znika przy nastepnym odswiezeniu, a /tags i tak zaczyna od tabeli tags.
|
||||||
|
|
||||||
|
Revision ID: 0050_tag_vertical_counts_no_fk
|
||||||
|
Revises: 0049_playback_origin_sort_idx
|
||||||
|
Create Date: 2026-09-30
|
||||||
|
"""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
revision = "0050_tag_vertical_counts_no_fk"
|
||||||
|
down_revision: str | None = "0049_playback_origin_sort_idx"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
op.execute("SET LOCAL lock_timeout = '5s'")
|
||||||
|
op.execute(
|
||||||
|
"ALTER TABLE tag_vertical_counts DROP CONSTRAINT IF EXISTS fk_tag_vertical_counts_tag_id_tags"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
op.execute("SET LOCAL lock_timeout = '5s'")
|
||||||
|
op.execute("DELETE FROM tag_vertical_counts v WHERE NOT EXISTS (SELECT 1 FROM tags t WHERE t.id = v.tag_id)")
|
||||||
|
op.execute(
|
||||||
|
"ALTER TABLE tag_vertical_counts ADD CONSTRAINT fk_tag_vertical_counts_tag_id_tags "
|
||||||
|
"FOREIGN KEY (tag_id) REFERENCES tags (id) ON DELETE CASCADE"
|
||||||
|
)
|
||||||
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
Wypelnia `refresh_taxonomy_counts`, czyta /tags?vertical=. Ta sama definicja co dawny
|
Wypelnia `refresh_taxonomy_counts`, czyta /tags?vertical=. Ta sama definicja co dawny
|
||||||
agregat na zywo: sceny z >= 1 zywym zrodlem z originow wertykalu, bez progu dlugosci.
|
agregat na zywo: sceny z >= 1 zywym zrodlem z originow wertykalu, bez progu dlugosci.
|
||||||
Patrz migracja 0047.
|
Patrz migracja 0047. Bez klucza obcego do tags (0050): z nim kasowanie tagow w
|
||||||
|
tag_tail_trim zakleszczalo sie z odswiezaniem tej tabeli.
|
||||||
"""
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from sqlalchemy import ForeignKey, Integer, String
|
from sqlalchemy import Integer, String
|
||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
|
||||||
|
|
@ -19,7 +20,5 @@ class TagVerticalCount(Base):
|
||||||
__tablename__ = "tag_vertical_counts"
|
__tablename__ = "tag_vertical_counts"
|
||||||
|
|
||||||
vertical: Mapped[str] = mapped_column(String(32), primary_key=True)
|
vertical: Mapped[str] = mapped_column(String(32), primary_key=True)
|
||||||
tag_id: Mapped[uuid.UUID] = mapped_column(
|
tag_id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True)
|
||||||
UUID(as_uuid=True), ForeignKey("tags.id", ondelete="CASCADE"), primary_key=True
|
|
||||||
)
|
|
||||||
scene_count: Mapped[int] = mapped_column(Integer, nullable=False)
|
scene_count: Mapped[int] = mapped_column(Integer, nullable=False)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue