fix(connectors/dooplay): max_pages cap to unblock movie ingest queue
Bug-report 2026-05-28 ("od wczoraj nie ma nowych filmow"). DooplayConnector
.fetch_movies mial `while True` po stronach bez bound; streamporn (>2k filmow)
wisial godzinami az do dailowego killa schedulera, blokujac kolejke mangoporn
+ pandamovies. Watermark zamrozony, dziennie 0 nowych filmow.
Fix: cap _MAX_PAGES_DELTA=3 (since-driven runs, ~144 najnowszych pozycji)
i _MAX_PAGES_FULL=50 (full backfill gdy since=None). Wczesniejsza proba
filtrowania przez release_date odrzucona - release_date to data wydania filmu
(np. 2013), nie data uploadu na strone, wiec sortowanie listing nie matchuje.
Po deployu manualne re-run: streamporn 144/46s, pandamovies 120/47s,
mangoporn 108 z 72 NEW filmow w 58s. Scheduler queue unblocked.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
81090ca8d2
commit
6ee0516e62
1 changed files with 18 additions and 1 deletions
|
|
@ -187,6 +187,18 @@ class DooplayConnector(BaseMovieConnector):
|
|||
)
|
||||
return r.text
|
||||
|
||||
# Bezpiecznik — dooplay listing potrafi mieć tysiące stron (streamporn.nl ma
|
||||
# >2k filmów). Bez tego ingest wisi godzinami, jest killowany przy restartcie
|
||||
# schedulera, blokując kolejne connectory w queue (bug-report 2026-05-28: "od
|
||||
# wczoraj nie ma nowych filmów" — streamporn wisiał od 5-24, blokował
|
||||
# mangoporn + pandamovies). Listing jest sortowany po dacie uploadu (NIE
|
||||
# release_date filmu — release może być z 2013 a upload z dziś), ale upload
|
||||
# date nie jest w markupie, więc filtrowanie po `since` przez release_date
|
||||
# nie działa. Pragmatyczny cap stron: 3 dla delta (≈150 nowych pozycji/dzień
|
||||
# to znacznie powyżej realnego upload-rate), 50 dla full ingestu (`since=None`).
|
||||
_MAX_PAGES_DELTA = 3
|
||||
_MAX_PAGES_FULL = 50
|
||||
|
||||
def fetch_movies(
|
||||
self,
|
||||
*,
|
||||
|
|
@ -196,7 +208,8 @@ class DooplayConnector(BaseMovieConnector):
|
|||
seen = 0
|
||||
page = 1
|
||||
seen_urls: set[str] = set()
|
||||
while True:
|
||||
max_pages = self._MAX_PAGES_DELTA if since is not None else self._MAX_PAGES_FULL
|
||||
while page <= max_pages:
|
||||
try:
|
||||
urls = list(self._fetch_listing(page))
|
||||
except httpx.HTTPError as e:
|
||||
|
|
@ -221,6 +234,10 @@ class DooplayConnector(BaseMovieConnector):
|
|||
if limit is not None and seen >= limit:
|
||||
return
|
||||
page += 1
|
||||
log.info(
|
||||
"%s: hit max_pages=%d cap (delta=%s), stopping after seen=%d",
|
||||
self.name, max_pages, since is not None, seen,
|
||||
)
|
||||
|
||||
def _fetch_listing(self, page: int) -> Iterator[str]:
|
||||
path = self._listing_path(page)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue