ARUP-CAS / aiscr-webamcr

Archeologická mapa České republiky
https://amcr-info.aiscr.cz/
GNU General Public License v3.0
5 stars 0 forks source link

Konkurenční úpravy jednoho záznamu #2245

Open motyc opened 1 month ago

motyc commented 1 month ago

Navazuje na #2215

http://192.168.254.34:5601/app/discover#/doc/858d02c4-091e-44c1-9600-ddb1a3dbaf32/amcr?id=-eWD_pABbIKW8Eg7CmFe http://192.168.254.34:5601/app/discover#/doc/858d02c4-091e-44c1-9600-ddb1a3dbaf32/amcr?id=9uWD_pABbIKW8Eg7CWGH

@jhavrlant @pesikj Hledal jsem, co se mohlo stát, a zdá se mi, že problém je viditelný zde: http://192.168.254.34:5601/app/discover#/doc/858d02c4-091e-44c1-9600-ddb1a3dbaf32/amcr?id=1OWD_pABbIKW8Eg7B2Fo image

Do nějaké chvíle tam běží transakce 0e8fbdb4-c236-4d92-8b34-03829f13cc87&_a=(columns:!(level,message,path,logger_name,transaction),filters:!(),grid:(),hideChart:!f,index:'858d02c4-091e-44c1-9600-ddb1a3dbaf32',interval:auto,query:(language:kuery,query:%220e8fbdb4-c236-4d92-8b34-03829f13cc87%22),sort:!(!('@timestamp',desc)))). Najednou je vyvolána nová transakce 68f10bf3-5efc-4f5f-9700-1277729232a5&_a=(columns:!(level,message,path,logger_name,transaction),filters:!(),grid:(),hideChart:!f,index:'858d02c4-091e-44c1-9600-ddb1a3dbaf32',interval:auto,query:(language:kuery,query:%2268f10bf3-5efc-4f5f-9700-1277729232a5%22),sort:!(!('@timestamp',desc)))) nad stejným PIAN. To logicky skončí chybou.

Mám pocit, že to může být něčím klikáním v aplikaci bez čekání na dokončení úlohy. Něco podobného se mi podařilo reprodukovat tak, že jsem si stejný záznam otevřel ve dvou oknech, udělal stejnou úpravu a odeslal v obou oknech najednou. To bychom měli zkusit případně odchytit a správně vyhodnotit (nejen pro PIAN, ale obecně).

Asi to nebude mít snadné řešení, ale prosím zamyslete se. co se s tím dá dělat. Může se to asi dotýkat různých situací na různých úrovních.

pesikj commented 1 week ago

@motyc @jhavrlant Podle mě můžeme použít následující řešení: Zprávu o úspěšném uložení nebudeme vyvolávat v editačním pohledu, ale až v následujícím pohledu na základě informace o správném zápisu dat do Fedory (které proběhne až po úspěšném zápisu do databáze). Transakce uloží informaci o svém úspěšném commitu do redisu a pohled si z redisu informaci o uložení následně načte a podle toho zobrazí zprávu o úspěchu nebo neúspěch. Tím bude zajištěno, že informace o úspěšném uložení nebude zobrazena, pokud uložení úspěšné nebylo. Plus chyba při commitu transakce z důvodu uzamčení záznamu jinou transakcí bude mít svoji chybovou hlášku. Chování aplikace tady nebude úplně konzistentní, ale to je dáno tím, že část aplikace používá function-based view a část aplikace class-based views.

motyc commented 1 week ago

@pesikj Za mne je to asi ok, ale je to hlavně na posouzení @jhavrlant , protože nedohlédnu přesné důsledky. Můžeš mi prosím jen ještě víc vysvětlit, co myslíš tímto (jak se to bude projevovat?):

Chování aplikace tady nebude úplně konzistentní, ale to je dáno tím, že část aplikace používá function-based view a část aplikace class-based views.

Důležité hlavně je, aby bylo spolehlivě zajištěno, že ať už se to dostane do kteréhokoli bodu, tak v případě chyby proběhne ten rollback v DB i ve Fedoře...

pesikj commented 1 week ago

@motyc Jde o to, že v některých případech se ukáže chybová stránka a v některých případech bude uživatel přesměrován na detail záznamu a zobrazí se červená pop-up zpráva nahoře. Práce s daty se to netýká, ta bude vždy stejná.

motyc commented 1 week ago

@pesikj Ok, to se tedy nedá nic dělat a není to myslím velký problém.