[Python] Come gestireste una funziona di rollback

Marco Beri marcoberi a gmail.com
Dom 12 Maggio 2013 12:44:49 CEST


Il giorno 12/mag/2013 12:01, "Diego Barrera" <diegonebarrera a yahoo.it> ha
scritto:
>
> Il 12/05/2013 11:03, Marco Beri ha scritto:
>>
>> 2013/5/12 Diego Barrera <diegonebarrera a yahoo.it>
>>>
>>> Se la struttura non e' molto grande, potresti gestirla facendo una
>>> copia di backup temporanea della struttura, se qualcosa va storto
>>> rimuovi la struttura corrotta e rinomini quella di backup.
>>> Ciao diego
>>
>>
>> Se potesse permetterselo (ma ha già detto che non può) la cosa giusta
sarebbe fare la copia su cui fare le modifiche e, solo come atto "atomico"
finale, fare una move sulla copia di backup. Qualunque cosa vada male, ha
la copia vera, attiva, senza problemi. Facendo come dici tu, se le cose
vanno a schifio tra la verifica della corruzione e la rinomina della copia
di backup, è fregato.
>>
> Pensavo che fosse equivalente l'approccio

È assolutamente diverso.
Caso 1) faccio una copia, inizio a lavorare sull'originale, da questo punto
in poi, se va via la corrente, sono nella cacca.
Caso 2) faccio una copia, inizio a lavorare sulla copia, qualunque cosa
accada, sono tranquillo che solo alla fine sostituirò l'originale.

Sono stato spiegato?

:-)

>> La parola chiave è "atomica". La rename dovrebbe essere una operazione
atomica a livello di file system e quindi va per forza usata quella se uno
vuole essere sicuro di fare un cambio solo finale che lo porta alla nuova
situazione.
>>
>> Certo, poi servirebbe anche che nessuno facesse modifiche alla struttura
che il programma ha copiato e su cui sta effettuando le modifiche.
>>
> Per capire: i problemi di concorrenza e atomicita' delle operazioni sul
filesystem non sono intrinseci alla struttura da lui utilizzata?

Certo, se il file system ti fornisce delle api atomiche tanto meglio,
altrimenti devi usare tu quello che hai. Di norma la rename è atomica e con
quello riesci a fare tanto.

> Altra riflessione: come approcciano i software di versioning al problema?

Non so risponderti.

Ciao.
Marco.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130512/a8df4ad8/attachment-0001.html>


Maggiori informazioni sulla lista Python