2019-03-22T18:11:56.768840842
2019-04-25T21:24:13.114675590
PT2H5M11S
62
LibreOffice/6.2.3.2$Linux_X86_64 LibreOffice_project/20$Build-2

# Datenerhaltung

1.2
0
0
45485
20592
true
false
view2
14242
2925
0
0
45484
20590
0
1
false
110
false
false
false
false
false
false
false
false
true
true
true
0
true
false
true
false
true
false
false
true
false
false
192011
false
false
true
true
false
false
true
true
true
true
true
false
false
true
false
false
1
0
0
false
true
false
false
false
false
false
false
false
true
false
high-resolution
true
true
true
false
true
false
true
false
false
false
false
false
false
false
true
false
true
4065797
true
false
false
true
false
false
false
true
false
false
false
false
false
false
false
AAEAAAAQAQAABAAARkZUTWkDcA0AAyoMAAAAHEdERUYE8wkPAAMptAAAAFZPUy8yUL7s9wAA [encoded data, 303281 characters] AAAAAQAAAAEAAAAAAAAAAQAAAADURmmjAAAAAMBkEbcAAAAA1Fj0sg==
AAEAAAARAQAABAAQR0RFRoPydSYABzQoAAAFEEdQT1OnXngWAAc5OAABIJ5HU1VCNVXTdgAI [encoded data, 812199 characters] AAAAAQAIAAEABgxyAAEAAQATAAEAAAABAAgAAQAGC1AAAQABAUEAAA==
AAEAAAARAQAABAAQR0RFRoPydSYAB4EMAAAFEEdQT1OGQmKLAAeGHAABH0hHU1VCNVXTdgAI [encoded data, 840552 characters]
AAEAAAARAQAABAAQR0RFRvVN2ToAB9xYAAAE9kdQT1Mjah5qAAfhUAABKJBHU1VCzwZh5wAJ [encoded data, 878638 characters] CIcIhAiFAAEABgBJB9QH1QfWB9cH2AABAAAAAQAIAAEABgmAAAEAAQFB
AAEAAAARAQAABAAQR0RFRvVN2ToACBcEAAAE9kdQT1NBz2RdAAgb/AABKFRHU1VCzwZh5wAJ [encoded data, 900588 characters]
AAEAAAARAQAABAAQR0RFRuFh5UEAAotwAAACtEdQT1PKV4glAAKOJAAAGypHU1VCP1wkyQAC [encoded data, 309352 characters]
AAEAAAARAQAABAAQR0RFRuFh5UEAAqA0AAACtEdQT1PdcpZ2AAKi6AAAG2ZHU1VC7cbXcgAC [encoded data, 320108 characters] A8YAAgAEA1cDaAAAA3UDdwASA5kDmQAVA8UDxQAW
T1RUTwAMAIAAAwBAQ0ZGILmRse4AAFtAAAFfMUdERUZO81E/AAG6dAAAAIBHUE9TNEuxaAAB [encoded data, 183833 characters]
T1RUTwAMAIAAAwBAQ0ZGIKQZSBEAAFtMAAFr/EdERUZO81E/AAHHSAAAAIBHUE9TAsnA9QAB [encoded data, 188652 characters]
T1RUTwAMAIAAAwBAQ0ZGILmRse4AAFtAAAFfMUdERUZO81E/AAG6dAAAAIBHUE9TNEuxaAAB [encoded data, 183833 characters]
T1RUTwAMAIAAAwBAQ0ZGIKQZSBEAAFtMAAFr/EdERUZO81E/AAHHSAAAAIBHUE9TAsnA9QAB [encoded data, 188652 characters]
AAEAAAAWAQAABABgRFNJR2DB06IABIiwAAAVsEVCRFSpq0xcAARm8AAAA/RFQkxDHSv9XAAE [encoded data, 442716 characters] dfcsK5ghh+268Yq7X3MQXAoA
AAEAAAASAQAABAAgRFNJRxVrJzIABKsoAAAVrEdERUakzKUNAASayAAAAR5HU1VCGAYu5gAE [encoded data, 455593 characters] tOac0bwSwLPhUNvFBnNKv3P4lG90C5JsM0WhUm4Ps8QuAAAA
AAEAAAAQAQAABAAARFNJR+WmYMAAA6QMAAAVsE9TLzKcupF7AAABiAAAAFZWRE1YNnVQ5gAA [encoded data, 357080 characters] 1oaFSpG9wnJzXyVDmejDHybEnQAAAA==
AAEAAAAQAQAABAAARFNJR+gfklgAA39sAAAVuE9TLzKeEJNxAAABiAAAAFZWRE1YNqZQ6wAA [encoded data, 343409 characters]
AAEAAAASAQAABAAgRkZUTVh3hSIAAaewAAAAHEdERUYC0gAkAAGnHAAAAChHUE9TY6lyjQAB [encoded data, 158632 characters] AADOw1ku
AAEAAAASAQAABAAgRkZUTVh3SqIAAZ1cAAAAHEdERUYC0gAkAAGcyAAAAChHUE9TY6lyjQAB [encoded data, 154761 characters] AAAAAM7DHq4=
AAEAAAASAQAABAAgRkZUTVh2heMAAecUAAAAHEdERUYC1wAkAAHmZAAAAChHUE9TY6lyjQAB [encoded data, 182332 characters] AAAAAAAAAAAAAQAAAADMPaLPAAAAAL12iSQAAAAAzsJZ7w==
AAEAAAASAQAABAAgRkZUTVh2hgMAAdD8AAAAHEdERUYC1wAkAAHQTAAAAChHUE9TY6lyjQAB [encoded data, 174108 characters]
AAEAAAATAQAABAAwRkZUTVocIkYAAlM8AAAAHEdERUYC0AAkAAJCoAAAAChHUE9TCN31fwAC [encoded data, 222859 characters] zD2izwAAAAC/G2HwAAAAAM7DHYY=
AAEAAAATAQAABAAwRkZUTVocImoAAj6gAAAAHEdERUYCzwAkAAIt+AAAAChHUE9THRsXeAAC [encoded data, 215117 characters] Ag0CDgISApYAAAABAAAAAMw9os8AAAAAvxth8AAAAADOwx2q
AAEAAAATAQAABAAwRkZUTVobFScAAjZoAAAAHEdERUYC1QAkAAImJAAAAChHUE9T0/tBYAAC [encoded data, 212036 characters] AgwCDQIOAhICnAAAAAEAAAAAzD2izwAAAAC/G2HwAAAAAM7CEGc=
AAEAAAATAQAABAAwRkZUTVobFVQAAlQ4AAAAHEdERUYC1AAkAAJDpAAAAChHUE9TrCXAFwAC [encoded data, 223254 characters] EJQ=
AAEAAAATAQAABAAwRkZUTVocIkYAAlM8AAAAHEdERUYC0AAkAAJCoAAAAChHUE9TCN31fwAC [encoded data, 222859 characters] zD2izwAAAAC/G2HwAAAAAM7DHYY=
AAEAAAATAQAABAAwRkZUTVocImoAAj6gAAAAHEdERUYCzwAkAAIt+AAAAChHUE9THRsXeAAC [encoded data, 215117 characters] Ag0CDgISApYAAAABAAAAAMw9os8AAAAAvxth8AAAAADOwx2q
AAEAAAATAQAABAAwRkZUTVobFScAAjZoAAAAHEdERUYC1QAkAAImJAAAAChHUE9T0/tBYAAC [encoded data, 212036 characters] AgwCDQIOAhICnAAAAAEAAAAAzD2izwAAAAC/G2HwAAAAAM7CEGc=
AAEAAAATAQAABAAwRkZUTVobFVQAAlQ4AAAAHEdERUYC1AAkAAJDpAAAAChHUE9TrCXAFwAC [encoded data, 223254 characters] EJQ=
AAEAAAAUAQAABABARkZUTXPB9PAAAAFMAAAAHEdERUaUz47mAAABaAAAApRHUE9TVoDENQAA [encoded data, 1107497 characters]
AAEAAAATAQAABAAwRkZUTXPB9PAAAAE8AAAAHEdERUaNwIfxAAABWAAAAjhHUE9T1BxgqAAA [encoded data, 1032293 characters] KysrKysrKysrKx0A
AAEAAAARAQAABAAQR0RFRuFh5UEAAotwAAACtEdQT1PKV4glAAKOJAAAGypHU1VCP1wkyQAC [encoded data, 309352 characters]
AAEAAAARAQAABAAQR0RFRuFh5UEAAqA0AAACtEdQT1PdcpZ2AAKi6AAAG2ZHU1VC7cbXcgAC [encoded data, 320108 characters] A8YAAgAEA1cDaAAAA3UDdwASA5kDmQAVA8UDxQAW

TextureSync

# Datenerhaltung

⸬ Version 1.2 Seite 5/5

# Datenerhaltung

TextureSync

Version

1.2

Datum

25.04.19

Autor

Lukas Fürderer

Projektmitglieder

Hendrik Schutter,

Lukas Fürderer,

Robin Willmann,

Jannik Seiler

Inhaltsverzeichnis

Inhaltsverzeichnis

1 Einleitung3

2 Genereller Aufbau3

3 Metadaten3

3.1 Definitionen3

4 Konsistenz4

5 Changelog5

Einleitung

Dieses Dokument beschreibt die Art und Weise, wie Texturen und deren Metadaten auf dem Server im Dateisystem abgelegt werden.

Genereller Aufbau

Alle Nutzdaten sind im aktuellen Arbeitsverzeichnis des Serverprozesses untergebracht. Auf diese Weise ist der Speicherort einfach konfigurierbar.

Die Texturdateien selbst liegen im Ordner ./textures/ und haben als Namen ihren SHA256-Hashwert ohne Dateiendung. Der Hashwert ist wie üblich hexadezimal angegeben und die enthaltenen Buchstaben sind klein geschrieben.

Alle Metadaten der Texturen sind in einer Datei unter ./collection.json abgelegt.

Metadaten

Die Textur-Metadaten sind in der Collections-Datei so abgelegt, wie sie auch über das Netzwerk übertragen werden.

Definitionen

Für Basisdefinitionen siehe Netzwerk-Protokoll 2.1.

CollectionFile ::= {textures: <Array von <Texture>>}

Die Datei ./collection.json enthält genau ein Json-Objekt vom Typ CollectionFile.

Konsistenz

Um die Daten bei einem Serverabsturz konsistent zu halten und auch die Konsistenz eines einfachen Datei-Backups möglichst zu gewährleisten, muss die Collection-Datei atomar überschrieben werden. Hierzu erstellt der Server zunächst eine neue Datei unter dem Namen ./collection_new.json und füllt diese mit allen notwendigen Daten. Als letzter Schritt wird mit einem rename(2) Syscall die ./collection.json atomar durch die neue Datei ersetzt.

Beim Hinzufügen und Löschen von Texturen können die Datei selbst und der zugehörige Metadaten-Eintrag nicht gemeinsam atomar erstellt bzw. gelöscht werden. An dieser Stelle gilt die Grundregel: Eine Datei darf ohne Metadaten-Eintrag existieren, jedoch nicht umgekehrt.

Beim Hinzufügen einer Textur muss also zuerst die Textur-Datei selbst geschrieben werden, danach darf der Server die collection.json aktualisieren.

Umgekehrt muss der Server beim Löschen einer Textur zuerst den Eintrag aus der collection.json entfernen und diese neu schreiben, danach darf er die Textur-Datei löschen.

Um Datenmüll aufzuräumen muss der Server zusätzlich nach dem Start das Verzeichnis aller Texturen auslesen und alle nicht mehr referenzierten Texturdateien löschen. Umgekehrt löscht er auch Metadaten-Einträge, bei denen die Textur-Datei fehlt. Dieser Fall kann bei Backups im laufenden Betrieb auftreten.

Changelog

Version

Änderung

1.0

Dokument Datenerhaltung erstellt

1.1

Daten liegen im CWD statt unter /var/texturesync/

1.2

Entferne Basisdefinitionen, Verweise stattdessen bei Definitionen auf Netzwerkprotokoll, um Inkonsistenz zu vermeiden.