Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

plánování sklizní - generování semínek #518

Closed
mariehaskovcova opened this issue Jun 1, 2020 · 15 comments
Closed

plánování sklizní - generování semínek #518

mariehaskovcova opened this issue Jun 1, 2020 · 15 comments
Assignees
Labels
Milestone

Comments

@mariehaskovcova
Copy link
Contributor

při kombinaci "mimosystémových semínek" a "přiřazených zdrojů" zlobí generování seznamu URL adres - nejsou tam všechny. Viz např.: https://webarchiv.cz/seeder/harvests/136/detail (v seznamu jsou pouze mimosystémová semínka, manuálně nadefinovaný zdroj chybí)

@Fasand
Copy link
Contributor

Fasand commented Jun 4, 2020

At neotviram novy issue, tak to hodim sem, protoze to tenhle issue vlastne zahrnuje: obecne je ted po vsech moznych zmenach problem s generovanim seminek, je to ukrutne pomale a zrejme jsou tedy i problemy se spravnosti.

Modely v harvests.models

HarvestAbstractModel

  • get_blacklisted
  • get_custom_seeds
  • get_custom_sources_seeds
  • get_seeds
  • get_harvests_by_frequency

Harvest

  • get_topic_collections_by_frequency
  • get_previously_harvested_seeds
  • get_seeds_by_frequency
  • get_tests_seeds
  • get_oneshot_seeds
  • get_archiveit_seeds
  • get_topic_collection_seeds
  • get_seeds
  • freeze_seeds

TopicCollection(HarvestAbstractModel)

  • TopicCollection nema vlastni metody, pouze inherituje z abstract modelu

Toto je aktualni seznam metod, ktere se pouzivaji ve skliznich na generovani vysledneho seznamu seminek.
V abstract modelu se resi custom seeds & sources, tedy mimosystemova seminka a manualne prirazene zdroje.
Zaroven se pres nej generuje blacklist a ta funkce se aktualne vola asi 6x, coz je samozrejme vice nez "neoptimální".

Samotna sklizen potom ma spoustu dalsich funkci na vygenerovani konkretnich typů seminek, napr OneShot, ArchiveIt apod., pro ktere je potreba i metoda get_previously_harvested_seeds, ktera proleze vsechny starsi sklizne a z nich vytahne vsechna seminka, aby se pro OneShot a ArchiveIt nemusela znovu sklizet. To je samozrejme hodne pomala operace, pokud v minulosti existuje spousta sklizni, ktere treba jeste nemaji zmrazena seminka, tedy ulozena textove do databaze.

Rychlost/efektivita implementace

Pro zrychleni me napada par reseni: funkce jako get_blacklisted a get_previously_harvested_seeds by se nemusely volat nekolikrat, pokud si sklizen žádá o vsechna seminka, coz by to uz docela vyrazne zrychlilo.
Treba prave get_previously_harvested_seeds by se ve spouste pripadech nemusela volat vubec, pokud ve sklizni nejsou zadna OneShot nebo ArchiveIt seminka, coz by ale ted uz taky mela delat a i presto nacteni jednoho custom zdroje a jednoho custom seminka mi na lokale trva nejakych 13 sekund, protoze se pocita i vse ostatni.

Proc to je teda takhle pomale: kdyz jsem funkce psal, pocital jsem s modelem z nejake poloviny #468 kde jsem to pochopil tak, ze pro kazdy typ seminek (OneShot, jednou rocne, ...) bude samostatna URL a k temto URL se bude pristupovat postupne.
Pokud tedy chci z dneska jenom custom seminka a zdroje, nactu si /seeder/harvests/2020-06-04/seeds-2020-06-04-VNC.txt a ta mi na lokale bezi nejakych 33ms...

Jak se to tedy bude sklizet?

Z tech poslednich uprav jsem tak pochopil, ze tyto rozdelene URL na jednotlive typy sklizni se vlastne pouzivat nebudou, takze tam zustanou jenom lezet a primarne se bude pouzivat format "sklizeň -> všechna semínka".

Pokud tomu tak tedy bude, tak pridam do generovacich funkci nejakou optional memoizaci, aby se treba blacklisty nacetly jen jednou a potom se posilaly pres parametr funkce a podobne s previously harvested seeds.

Kazdopadne taky projdu na cem to ted nejvic visi i kdyz se sklizi treba jen dve seminka, takze provedu nejake obecne potrebne zrychleni.

K puvodnimu issue:

K produkcnimu Webarchivu nemam pristup, takze to nemuzu moc zkontrolovat (zlobi to treba i nekde na testovacim?), ale na lokale se mi nacitaji jak custom seminka tak zdroje.

Je mozne, ze treba ten custom zdroj nema archivovaci stav (teda je treba v jednani nebo neco takoveho)? Pripadne ze by ta seminka mela nastavene datum sklizeni?

@Fasand
Copy link
Contributor

Fasand commented Jun 4, 2020

Update:

Tak hlavni vec, ktera to zpomalovala byla get_oneshot_seeds, protoze tam byla spatna podminka na early exit, tedy vlastne spatna kontrola, jestli sklizen ma nejaka OneShot seminka nebo ne.
Na lokale se mi to tim jednim radkem podarilo zrychlit na vsech skliznich (mam jich jenom 18) z 25s na 4s, z cehoz se 1.8s opravdu nacitala OneShot seminka.

get_previously_harvested_seeds

Chtel bych tuhle funkci trochu zrychlit. Aktualne proste bere vsechna seminka vsech sklizni, ktere jsou nastaveny pred datem dane sklizne. To ale znamena i sklizne, ktere byly treba jen naplanovane a nikdy nebyly spustene, nebo ty, ktere selhaly.

Z tech stavů: Planned, Running, Sucess, Success_with_failures, Cancelled, Failed – ktere stavy by to vlastne melo brat?
Ja bych rekl ze v podstate jenom "Success", ale mozna i "Success_with_failures"? Nebo i "Running"?

Funkce by mela vratit vsechna již sklizená seminka, aby se u OneShot a ArchiveIt sklizni nesklizely znovu. Nejsem si tedy jenom jisty, co vlastne znamena "Success_with_failures", jestli to vubec pouzivate.

Rychlost

Uz kdyz se sklizne omezi pouze na Running, Success a Success_with_failures, tak se mi get_seeds() na vsechny sklizne zrychli z nejakych 3s na 0.5s. Samotne get_previously_harvested_seeds na vsechny sklizne z 7.7s na 0.06s.

Porad si kazdopadne nejsem jisty, jestli by se mely zahrnovat vsechny tyto sklizne a nebrat to treba jenom z tech "Success". To zalezi, jak se presne ty stavy v praxi pouzivaji.

@Fasand
Copy link
Contributor

Fasand commented Jun 4, 2020

Po zrychleni get_previously_harvested_seeds a get_oneshot_seeds jsem to i upravil, aby se pri volani get_seeds blacklist generoval pouze jednou a previously_harvested take (treba kdyz je ArchiveIt a OneShot sklizen) a s tim se to zrychlilo z puvodnich cca 25s na hezkych 0.5s :)
Spolu s dalsimi malimi issues to hodim na test a snad to uz teda pojede...

@mariehaskovcova
Copy link
Contributor Author

skvělý, na testu - https://app.webarchiv.cz/seeder se semínka už načítají rychle!

příklad kombinace mimosystémových semínek a manuálně nadefinovaných zdrojů na testu, je třeba tady: https://app.webarchiv.cz/seeder/harvests/93/detail. Ale máš pravdu, stav zdroje v tom nejspíš hraje roli. Mimosystémová semínka jsou ok a z manuálně nadefinovaných zdrojů se nejspíš zobrazují jen ty, které mají stav Archivován + příp. Archivován bez smlouvy, což vlastně dává smysl

@Fasand
Copy link
Contributor

Fasand commented Jun 9, 2020

Prosel jsem tu sklizen a vesmes to vypada, ze to je fakt v pohode, ale tezko rict, protoze je par mesicu stara. Mimosystemova seminka se nacitaji v pohode a ze zdroju se tam nacte Techmania a Matějka.

Ty ostatni zdroje maji vsechny mimo-archivni stav az na Agosto Foundation, ktera ma archivovany stav az od 19. 4. 2020 (https://app.webarchiv.cz/seeder/source/history/10525)
Predtim ocividne byla v hodnoceni, tedy se spravne do sklizne nepropsala kdyz se sklizen poustela a seminka se zmrazila.

Kdybys na neco podobneho zase narazila, tak dej vedet. Klidne je mozne, ze tam je nejaky bug, ale minimalne podle kodu a te sklizne to nevypada, tak to zatim uzavru.

@Fasand Fasand closed this as completed Jun 9, 2020
@mariehaskovcova
Copy link
Contributor Author

ještě jedna drobnost ke generování semínek - na ostrém Seederu se ukazuje rovnou seznam semínek, v testovací verzi se nahoře objeví název sklizně (# pravidelná měsíční sklizeň - říjen, https://app.webarchiv.cz/seeder/harvests/99/urls) a pak teprve seznam semínek. Vadí to? Možná by to mohlo vadit operátorovi při zadávání sklizně nebo později při automatickém plánování
Screenshot_seeds

@mariehaskovcova
Copy link
Contributor Author

tak pardon, toto je nakonec po konzultaci s @horakjirinkp ok, nicméně na přání @JanMeritus nemáme zatím toto issue uzavírat - doplní prý další pole, co to má vracet, díky

@Fasand
Copy link
Contributor

Fasand commented Jun 18, 2020

@JanMeritus Ta dalsi pole bych asi pripsal do #402, tam uz jsou nejake 2-3 roky stare navrhy, takze se to kdysi v minulosti resilo.
Issue ale muzeme zatim klidne nechat otevrene.

@mariehaskovcova
Copy link
Contributor Author

po dohodě uzavírám více do #402

@mariehaskovcova
Copy link
Contributor Author

Mám dotaz k problému, který se řešil v tomto issue - do sklizně se načtou “mimosystémová semínka” a “manuálně nadefinované zdroje”, ale jen ty, která mají archivační stav, což je v pořádku u semínek, která se sklízí podle frekvence.

Může se ale stát, že chceme sklidit semínko, které archivační stav nemá - zdroj byl třeba odmítnutý pro pravidelné sklízení, ale můžeme ho chtít jednorázově v rámci tematické kolekce

Bylo by možné to řešit takto?:

  • když se generují semínka podle frekvence, musí mít archivační stav (Archivován nebo Archivován bez smlouvy)
  • když jsou vkládána v rámci tem. kolekce, příp. napřímo do formuláře sklizně, sklidilo by se všechno bez ohledu na stav?

@JanMeritus
Copy link
Contributor

zde jen tolik, ze pak by do budoucna i seminka dle frekvence meli byt kolekci, ktera ma ale parametr s vyplnenou frekvenci

seminka mimo stav archived by melo byt mozne taky pridavat, ale meli by v tom pripade frekvenci oneshot

@JanMeritus
Copy link
Contributor

JanMeritus commented Apr 29, 2021

jde o oneshots, napr v tematicky kolekci, jenom u serial je podminka - archived

@JanMeritus JanMeritus added this to the 1.0.6 milestone Apr 30, 2021
@mariehaskovcova
Copy link
Contributor Author

archivační stavy musí mít pouze semínka v rámci sklizně serials (+ Archive-it)

@mariehaskovcova
Copy link
Contributor Author

podle dnešní dohody - do tem. kolekcí lze vložit semínka s jakýmikoli stavy v Seederu (zrušit podmínku public) + mimosystémová

@Fasand
Copy link
Contributor

Fasand commented Sep 2, 2021

Vyřešeno v f93c10a. Aktuálně custom semínka se berou prostě tak jak jsou, custom zdroje se už také berou bez ohledu na archivační stav.
OneShot kolekce potom obsahuje ((oneshot - previously_harvested) + custom_seeds) - blacklisted, tedy semínka s nulovou frekvencí (mají archivační stav) se vyfiltrují o ty, co už byly sklizeny, k tomu se přidají custom semínka+zdroje a výsledek se vždy vyfiltruje o blacklistovaná semínka.

@Fasand Fasand closed this as completed Sep 2, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants