Poprawianie błędów
: 08 sie 2003, 16:43
Czekajac na zrodla od Adamma (i na urlop tez), sciagnalem wersje 2.1.9 Ikonboardu i troche po niej powedrowalem. Wyszlo mi, ze:
- wszystkie operacje tworzenia nowego pliku (w szczegollnosci zakladania nowego watku, dopisywania nowej wiadomosci) sa niepoprawnie zrobione. nie jest zapewniona synchronizacja procesow i mozliwe jest, ze 2 osoby wysylajac naraz posty, tworzac nowe watki itp. moga sie wzajemnie nadpisac, tzn. pierwsza wysle, druga wysle, i pierwsza swojego nie zobaczy, bo mu to druga (nieswiadomie) skasowala
- niestety to dotyczy wszystkich operacji polegajacych na tworzeniu nowych plikow
- wydaje mi sie tez, ze mozliwa jest sytuacja, kiedy ktos
napisze nowa wiadomosc, ale podczas wysylania cos mu sie z laczem popsuje. wiec po chwili sprobuje odswiezyc. wtedy potencjalnie wiadomosc dopisze sie 2 razy i - to juz w ogole kaszana - wyslane zostana 2 powiadomienia mailowe
a teraz konkretnie:
- moim zdaniem przy kazdym wywolaniu w skryptach typu:
open(FILE, ">filename")
flock(FILE, 2) (pomijajac pytanie, czemu 2, a nie LOCK_EX)
trzeba wprowadzic synchronizacje (np. plikami semaforow) - inaczej procesy moga sobie wzajemnie nadpisac nowo tworzone pliki
tych wywolan jest sporo - przegrepowalem to i az dziwne, ze tworcy o tych 'wyscigach' nie pomysleli...
- do poprawienia 'podwojnosci' postow i powiadomien o nich przydaloby sie dopisac cos, co sprawdza, czy nowy post nie jest aby przypadkiem idealna kopia postu ostatniego sprzed np < niz 5 minut
- blokowanie semaforami powinna objac szersze fragmenty - innymi slowy trzeba utworzyc (przynajmniej kilka) sekcji krytycznych i zapewnic atomowosc przeprowadzanych wewnatrz operacji
to sa oczywiscie uwagi do kogos, kto nad tym siadzie, czyli albo adamma , albo - mnie ?
to o co mi chodzi jest mniej wiecej opisane tutaj:
http://www.samag.com/documents/s=4075/s ... m0203i.htm
jeszcze inne pytanie:
czy skrypty ikonboardu na serwerze dzialaja jako mod_perl? czy tez jest to czyste cgi i zarazem gwarancja, ze kazdy skrypt to swiezy , czysciutki i pozbawiony smieci z potencjalnego poprzedniego uruchomienia nowy proces utworzony przez interpreter za kazdym pobraniem strony?
nie wiem jeszcze, czy wysypywanie sie pocztu modeli moze miec z tym zwiazek... wlasciwie to by bylo dziwne, bo przeciez obrazki sa wysylane osobno. ale moze jak jest ich duzo, procesy zostaja ubijane, wczesniej czegos nie pozwalnialy albo nie zamknely i ... pliki znikaja.
marek
(Edited by kingeri at 4:44 pm on Aug. 8, 2003)
- wszystkie operacje tworzenia nowego pliku (w szczegollnosci zakladania nowego watku, dopisywania nowej wiadomosci) sa niepoprawnie zrobione. nie jest zapewniona synchronizacja procesow i mozliwe jest, ze 2 osoby wysylajac naraz posty, tworzac nowe watki itp. moga sie wzajemnie nadpisac, tzn. pierwsza wysle, druga wysle, i pierwsza swojego nie zobaczy, bo mu to druga (nieswiadomie) skasowala
- niestety to dotyczy wszystkich operacji polegajacych na tworzeniu nowych plikow
- wydaje mi sie tez, ze mozliwa jest sytuacja, kiedy ktos
napisze nowa wiadomosc, ale podczas wysylania cos mu sie z laczem popsuje. wiec po chwili sprobuje odswiezyc. wtedy potencjalnie wiadomosc dopisze sie 2 razy i - to juz w ogole kaszana - wyslane zostana 2 powiadomienia mailowe
a teraz konkretnie:
- moim zdaniem przy kazdym wywolaniu w skryptach typu:
open(FILE, ">filename")
flock(FILE, 2) (pomijajac pytanie, czemu 2, a nie LOCK_EX)
trzeba wprowadzic synchronizacje (np. plikami semaforow) - inaczej procesy moga sobie wzajemnie nadpisac nowo tworzone pliki
tych wywolan jest sporo - przegrepowalem to i az dziwne, ze tworcy o tych 'wyscigach' nie pomysleli...
- do poprawienia 'podwojnosci' postow i powiadomien o nich przydaloby sie dopisac cos, co sprawdza, czy nowy post nie jest aby przypadkiem idealna kopia postu ostatniego sprzed np < niz 5 minut
- blokowanie semaforami powinna objac szersze fragmenty - innymi slowy trzeba utworzyc (przynajmniej kilka) sekcji krytycznych i zapewnic atomowosc przeprowadzanych wewnatrz operacji
to sa oczywiscie uwagi do kogos, kto nad tym siadzie, czyli albo adamma , albo - mnie ?
to o co mi chodzi jest mniej wiecej opisane tutaj:
http://www.samag.com/documents/s=4075/s ... m0203i.htm
jeszcze inne pytanie:
czy skrypty ikonboardu na serwerze dzialaja jako mod_perl? czy tez jest to czyste cgi i zarazem gwarancja, ze kazdy skrypt to swiezy , czysciutki i pozbawiony smieci z potencjalnego poprzedniego uruchomienia nowy proces utworzony przez interpreter za kazdym pobraniem strony?
nie wiem jeszcze, czy wysypywanie sie pocztu modeli moze miec z tym zwiazek... wlasciwie to by bylo dziwne, bo przeciez obrazki sa wysylane osobno. ale moze jak jest ich duzo, procesy zostaja ubijane, wczesniej czegos nie pozwalnialy albo nie zamknely i ... pliki znikaja.
marek
(Edited by kingeri at 4:44 pm on Aug. 8, 2003)