Bug #1931
closedWarden server 2.2 vrací zprávy po jedné, nezávisle na tom, jak jsou nastavené serverové či klientské limity
0%
Description
Warden server 2.2 vrací zprávy po jedné, nezávisle na tom, jak jsou nastavené serverové či klientské limity.
Pro klienty je to naštěstí na warden.cesnet.cz transparentní, dostanou jednu zprávu a jdou si pro další novým dotazem, dokud nedostanou všechno.
Uvnitř už to tak hezké není. Na letmý pohled totiž nejspíš dochází k tomu, že ve smyčce Warden.pm(375), která iteruje pomocí fetchrow() přes události $sth, se zavolá znovu prepare, a znovu na $sth. Takže se zpracuje v první iteraci první řádek/událost, zbytek se zahodí na nový select, z něj se vezme hostname a service, další řádky už nejsou (klienti jsou unikátní), takže do další iterace smyčky dojde tatáž $sth, už s úplně jiným dotazem, naštěstí ale už s vyčerpanými výsledky, a smyčka skončí.
Tohle chce velmi rychle opravit, protože tahle věc teď běží na ostrém wardenu - a ne tak, že se pro každou zprávu v potenciálně dlouhém poli, získaném jedním SQL dotazem, zavolá další SELECT! Tím házíme výkon do stoupy a urážíme SQL.
Od toho je přece JOIN, který má být použit už v SELECTu, získávajícím události, a rovnou přihodit do výsledku hostname a service z clients.