hwechtla-tl:
Versioitu tiedostojärjestelmä
Versioidussa tiedostojärjestelmässä ei voi tuhota tiedostoja
kokonaan: aina, kun tekee jotain, mikä ylikirjoittaa vanhan tiedoston,
siitä tuleekin uusi versio kyseiselle tiedostolle. Unixeista on
perinteisesti puuttunut versioiva tiedostojärjestelmä, joten
versioinnin lisääminen perinteisen tiedostojärjestelmän päälle
edellyttää tarkkoja valintoja.
Päämäärät:
- Semanttisesti yksinkertainen
- Sallii tarkkailla tiedostojärjestelmää, ikään kuin se ei olisi versioitu (eli perinteiset tiedostojärjestelmän tutkailut näyttävät uusimmat versiot tiedostoista)
- Käyttäjä voi halutessaan puuttua vanhoihin versioihin
semantiikka:
- jokaisesta tiedostosta on tallessa n versiota, joita voi käsitellä
erikseen samalla lailla kuin versioimattomia tiedostoja; (tai
mahdollisesti vanhat versiot ovat aina read-only)
- versioilla on numerot, jotka ovat positiivisia kokonaislukuja.
- jos tiedostolle ei määritetä versionumeroa, valitaan
versionumeroltaan suurin (uusin) versio luettaessa, ja perustetaan
uusi versio (suurin versionumero + 1) kirjoitettaessa.
- kun kirjoitetaan tiedosto, josta ei ole vielä yhtäkään versiota,
se saa versionumeron 1.
- versio voi olla merkittynä poistetuksi; tiedoston poistaminen ilman
versiomäärittelyä perustaa siitä uuden version, joka merkitään
poistetuksi.
- hakemistolistaus näyttää vain uusimmat versiot tiedostoista, eikä
ollenkaan tiedostoja, joiden uusin versio on poistettu.
- vanhoja versioita voidaan (tiedostojärjestelmän asetuksista
riippuen) poistaa vailla kummempaa varoitusta, esim. uusien
tiedostoversioiden varauksen yhteydessä.
- versiot voi listata kohtelemalla tiedostoa hakemistona
syntaksi:
- tiedosto ilman versiomäärittelyä käyttää perinteistä
Unix-syntaksia: tiedosto;
- tiedostoon voi liittää versiomäärittelyn lisäämällä perään
kauttaviivan (/) ja versionumeron, esim. tiedosto/13;
- tiedoston vanhoihin versioihin voi viitata negatiivisilla luvuilla:
tiedosto/-1 tarkoittaa viime versiota, tiedosto/-2 sitä
edellistä jne.
- tiedoston versioista saa hakemistomaisen listauksen pakottamalla
tiedoston hakemistoksi tiedosto/ -syntaksilla (ehkä;
tarvitaankohan tätä?)
API:
- open() palauttaa filehandlen uusimpaan versioon
- write() alkaa kirjoittaa uutta versiota, mutta ei vielä assosioi
sitä tiedostoon
- useampi write():a yhtaikaa käyttävä prosessi muokkaa tiedoston
samaa versiota (ts. "tulevaa uutta versiota")
- close() assosioi uuden version tiedostoon uudella
versionumerolla, mahdollisesti samoin sync()
- atomiset operaatiot, kuten link(), unlink() jne. assosioivat
uuden version suoraan tiedostoon
- jos tiedostosta osoitetaan suoraan jokin versio, sitä kohdellaan
kuin perinteistä Unix-tiedostoa (eli uusimman version pystyy
tuhoamaan määrittämällä sen suoraan)
kategoria: projektit
kommentoi
(viimeksi muutettu 01.01.2006 10:32)