Liviu Daia scria la data de 7 Februarie 2006:
> Matei Conovici scria la data de 7 Februarie 2006:
[...]
> > Daca vrei doar sa minimizezi sansele, i/dnotify ca sa vezi daca se
> > umbla pe fs, si astepti un pic sa nu mai apara operatii noi :)
> 
>     We have a winner! :-) Asta ar putea sa mearga:
> 
> (1) Monitorizez directorul cu [di]notify; la fiecare modificare spawn-ez
>     un proces care incrementeaza un semafor, asteapta 20 secunde,
>     decrementeaza acelasi semafor, apoi iese.
> 
> (2) Dintr-un cron job verific semaforul; daca nu e pe zero, iese; daca e
>     pe zero face directorul readonly, cheama rsync, apoi face directorul
>     read-write.
> 
>     Probleme ramase:
> 
> (a) Inotify nu merge pentru 2.4.  Dnotify nu monitorizeaza automat
>     directoarele nou create.  Solutie posibila: chem dnotify cu optiunea
>     "--once" si il repornesc de fiecare data.  Problema cu asta: race
>     condition.
> 
> (b) Mecanismul cu semafoare nu e robust, indiferent ce intgeleg prin
>     "semafor".  Daca unul din procese moare inainte sa apuce sa
>     decrementeze semaforul, sincronizarea nu se mai face niciodata.

    Solutia pentru asta ar putea fi sa inlocuiesc semaforul cu un
timestamp (touch /path/to/file) pe care il update-aza fiecare proces
dnotify la inceput, fara sa mai astepte nimic.  Asta poate folosi
si ca flag "dirty": procesul cron care face sincronizarea verifica
timestamp-ul; daca exista si e mai vechi de 20 secunde porneste
rsync, altfel iese.  Cand rsync a terminat, sterge timestamp-ul (rm
/path/to/file).

> (c) Nu pot face directorul read only fara race conditions.  Daca
>     directorul este o partitie separata, situatia se imbunatateste
>     putin, dar problema ramane.
> 
>     Pentru semafoare am AFAICT doua posibilitati: SysV IPC (shared
> memory, nu semafoare in sensul ipc(2)), si named pipes.  Ambele abordari
> ofera ample oportunitati pentru noi race conditions, si pentru nici una
> comenzile shell standard nu sunt suficiente.  De fapt speram intr-o
> solutie mai simpla.

    Un fisier timestamp simplifica enorm lucrurile.

    Raman deci deschise (a) si (c).

    Salutari,

    Liviu Daia

-- 
Dr. Liviu Daia                                  http://www.imar.ro/~daia

_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui