[Python] Come gestireste una funziona di rollback

Manlio Perillo manlio.perillo a gmail.com
Dom 12 Maggio 2013 16:56:09 CEST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Il 12/05/2013 12:14, Gollum1 ha scritto:
> [...]
> 
> vediamo se può essere d'aiuto la descrizione della procedura che
> utilizzavo nella versione in perl,
> 
> praticamente ad ogni accesso in scrittura al file system, che fosse

Accesso da parte di software "esterno" e su cui non hai il controllo?

> per creare una directory, o un file, e ad ogni accesso al sistema che
> implica l'utilizzo di device (quindi agganciare un'immagine ad un loop
> device, montare questo loop device in una directory temporanea) erano
> tutte registrate (atomicamente, prendendo in modo esclusivo l'accesso

Registrate come (visto che dopo chiedi come fare)?

> al file di rollback) in un file criptato (criptato, perché potendo
> essere eseguito tra due istanze diverse del programma, se qualcuno
> avesse messo semplicemente "/" come directory da cancellare, va da se
> che avrebbe distrutto l'intero sistema, visto che il programma gira
> con i permessi di root). nel momento in cui il programma avesse
> abortito per un qualsiasi motivo, se potevo catturare l'eccezione,

Uhm, quindi è un processo esterno che esegui dal tuo programma?
Oppure avviene tutto nel tuo programma?

> eseguivo immediatamente il rollback, se non poteva essere eseguito
> subito, al successivo avvio del programma, la sola presenza del file
> di rollback ne provocava l'esecuzione e quindi il ristabilirsi della
> situazione precedente all'esecuzione andata a male.
> 
> credo che alla fine mi ricostruirò una situazione del genere, esiste
> un qualche modo per intercettare automaticamente le varie funzioni che
> possano creare file/directory montaggio di immagini, assegnazione di
> loop device?
> 

Se l'accesso al filesystem avviene dal tuo programma, ti basta
implementare ed offrire un API apposita.

> potrei forse costruirmi una classe che vada ad aggiungere queste
> caratteristiche alla classica open in write/append mode?
> 

Non lo puoi fare che io sappia, a meno di non utilizzare delle API molto
specifiche dei vari sistemi operativi.  Su Windows qualunque thread può
liberamente violentare un altro thread tramite hook o altre nefandezze,
quindi immagino si possa fare.

Una alternativa è forse quella di usare fuse per itercettare l'accesso
al filesystem, ma ti complichi la vita (a meno di non implementare tutto
nel modulo per fuse, ad esempio usando qualcosa come git per gestire le
modifiche -- e magari trovi qualcosa di già pronto).


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlGPrYkACgkQscQJ24LbaUSROwCfbi3CUM2O/aqb9uPo5SsXM+M8
9gMAn3RP7PvdbjBohTKKWy0oowiYAuXt
=kLR9
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python