Re: [postgresql-it] [OT]php e galleria immagini

  • From: Manlio Perillo <manlio_perillo@xxxxxxxxx>
  • To: postgresql-it <postgresql-it@xxxxxxxxxxxxx>
  • Date: Thu, 22 Nov 2007 18:22:13 +0100

Daniele Varrazzo ha scritto:

Manlio Perillo ha scritto:

Comunque, come ho scritto un problema "grosso" esiste con questa procedura "in differita".

Il problema consiste nel fatto che per il database un certo file, quando la transazione che cancella il nome del file dal database è terminata, non esiste più, mentre in realtà esiste ancora.

Che succede quindi se subito dopo vuoi creare un altro file con lo stesso nome?

Il database non si fa problemi, ma magari il processo esterno andrà a cancellare proprio quel nuovo file.

La soluzione, probabilmente, è fare in modo che un nuovo file non possa essere creato (nel filesystem) se ne esiste un altro con lo stesso nome, assumendo che le varie operazioni siano tutte atomiche.

Infatti un'applicazione con questo design non potrebbe garantire l'atomicita.

Su questo non sono sicuro.

Ad esempio
open("pippo", O_WRONLY, O_CREAT | O_EXCL)
unlink("pippo")
rename("pippo", "pluto")


dovrebbero essere tutte operazioni atomiche.


http://en.wikipedia.org/wiki/Atomicity

Sembra che unlink non sia atomica, purtroppo.

In questo caso magari conviene fare un
rename("pippo", "/tmp/unique_id")

e cancellare poi con calma il file da /tmp.



Manlio Perillo

Other related posts: