diff --git a/doc/feindesign/datenerhaltung.fodt b/doc/feindesign/datenerhaltung.fodt index 55e3cdd..6d976cb 100644 --- a/doc/feindesign/datenerhaltung.fodt +++ b/doc/feindesign/datenerhaltung.fodt @@ -1,28 +1,28 @@ - 2019-03-22T18:11:56.7688408422019-04-17T18:30:52.961357576PT1H44M18S53LibreOffice/5.1.6.2$Linux_X86_64 LibreOffice_project/10m0$Build-2Datenerhaltung1.0 + 2019-03-22T18:11:56.7688408422019-04-19T13:38:29.899117548PT2H24S56LibreOffice/5.1.6.2$Linux_X86_64 LibreOffice_project/10m0$Build-2Datenerhaltung1.1 - 0 + 167917 0 - 40166 - 22386 + 43129 + 20350 true false view2 - 11582 - 2925 + 17798 + 175715 0 - 0 - 40164 - 22384 + 167917 + 43127 + 188265 0 1 false - 100 + 110 false @@ -68,7 +68,7 @@ false false true - 3715526 + 3864100 false false true @@ -151197,6 +151197,12 @@ + + + + + + @@ -151219,180 +151225,202 @@ - + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + + + + + + + + + + - + + + + - + + + + + + + + + + + + + - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - - - - + - + + + + + + + + + + + + + + + + - - - - - - + + - - + + - - - - - - + + @@ -151445,6 +151473,12 @@ + + + + + + @@ -151762,266 +151796,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -152066,7 +151840,7 @@ - TextureSync Datenerhaltung Version 1.0Seite 7/8 + TextureSync Datenerhaltung Version 1.1Seite 0/7 @@ -152083,8 +151857,8 @@ - - + + Datenerhaltung TextureSync @@ -152105,15 +151879,15 @@ - Version + Version - 1.0 + 1.1 - Datum + Datum 17.04.19 @@ -152121,26 +151895,26 @@ - Autor + Autor - Lukas Fürderer + Lukas Fürderer - Projektmitglieder + Projektmitglieder - Hendrik Schutter, - Lukas Fürderer, - Robin Willmann, - Jannik Seiler + Hendrik Schutter, + Lukas Fürderer, + Robin Willmann, + Jannik Seiler - + Inhaltsverzeichnis @@ -152227,122 +152001,122 @@ - Inhaltsverzeichnis + Inhaltsverzeichnis - 1Einleitung4 - 2Genereller Aufbau4 - 3Metadaten4 - 3.1Definitionen4 - 4Konsistenz6 - 5Changelog8 + 1Einleitung4 + 2Genereller Aufbau4 + 3Metadaten4 + 3.1Definitionen4 + 4Konsistenz6 + 5Changelog8 - - 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 in einem gemeinsamen Basisverzeichnis untergebracht. Standardmäßig ist dies /var/texturesync/, doch dies ist konfigurierbar. In dieser Dokumentation wird immer der Standardpfad angegeben. - Die Texturdateien selbst liegen im Ordner /var/texturesync/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 /var/texturesync/collection.json abgelegt. - Metadaten - Die Textur-Metadaten sind in der collections-Datei so abgelegt, wie sie auch über das Netzwerk übertragen werden. - Definitionen - Im Folgenden sind sind Datentypen für JSON definiert, welche zur Speicherung verwendet werden: - Für String, Number, Array von <..> siehe JSON-Standart. - UUID ::= <String> - UUID nach Version 4 - Beispiele - + + 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 + Im Folgenden sind sind Datentypen für JSON definiert, welche zur Speicherung verwendet werden: + Für String, Number, Array von <..> siehe JSON-Standart. + UUID ::= <String> + UUID nach Version 4 + Beispiele + - "a78c59fc-4198-421a-8ba4-db232ad7b91e" + "a78c59fc-4198-421a-8ba4-db232ad7b91e" - "1f010407-130f-432c-8463-6c61fdfb8c14" + "1f010407-130f-432c-8463-6c61fdfb8c14" - "ecb109bb-d9d6-494d-9d5e-b1e44734e20d" + "ecb109bb-d9d6-494d-9d5e-b1e44734e20d" - - Format ::= "png" | "jpeg" - Dateiformat - Beispiele - + + Format ::= "png" | "jpeg" + Dateiformat + Beispiele + - "png" + "png" - "jpeg" + "jpeg" - Resolution ::= [<Number>, <Number>] - Die erste Nummer stellt die Weite in Pixeln dar, die Höhe in Pixeln wird durch die zweite Nummer repräsentiert. - Beispiele - + Resolution ::= [<Number>, <Number>] + Die erste Nummer stellt die Weite in Pixeln dar, die Höhe in Pixeln wird durch die zweite Nummer repräsentiert. + Beispiele + - [1024, 1024] + [1024, 1024] - [2048, 512] + [2048, 512] - [13, 400] + [13, 400] - Tag ::= <String> - Stellt ein Tag dar. Kann Groß- und Kleinbuchstaben beinhalten. - Hinweis: Vergleiche von Tags sind nicht Case-Sensitiv. Die Darstellung in der UI jedoch unter Umständen schon. - Beispiele - + Tag ::= <String> + Stellt ein Tag dar. Kann Groß- und Kleinbuchstaben beinhalten. + Hinweis: Vergleiche von Tags sind nicht Case-Sensitiv. Die Darstellung in der UI jedoch unter Umständen schon. + Beispiele + - "Holz" + "Holz" - "mEtALL" + "mEtALL" - "Chesse Cake" + "Chesse Cake" - Date ::= <String> - im Format "yyyy-MM-dd", siehe Javadoc unter java.text.SimpleDateFormat für mehr Informationen. - Beispiele - + Date ::= <String> + im Format "yyyy-MM-dd", siehe Javadoc unter java.text.SimpleDateFormat für mehr Informationen. + Beispiele + - "2019-03-04" + "2019-03-04" - "2017-12-21" + "2017-12-21" - Hash ::= <String> - Sha256-Hash von z.B. Texturdaten oder anderen Binärdaten, in Hexadezimal-Darstellung. Kann Groß- oder Kleinbuchstaben enthalten. Dies wird genutzt, um auf diese zu verweisen. - Beispiele - + Hash ::= <String> + Sha256-Hash von z.B. Texturdaten oder anderen Binärdaten, in Hexadezimal-Darstellung. Kann Groß- oder Kleinbuchstaben enthalten. Dies wird genutzt, um auf diese zu verweisen. + Beispiele + - "a98f43a976e5b501961635b981022ebaf98321b97055ead4d8d4de55114015e7" + "a98f43a976e5b501961635b981022ebaf98321b97055ead4d8d4de55114015e7" - "02a08f7d697a93937cc5ace273a534c2eb021ae76b7c15ba146d279d57898893" + "02a08f7d697a93937cc5ace273a534c2eb021ae76b7c15ba146d279d57898893" - "A6A04ADC2E6D580B8E37CE8F4784652BE6D668EC1FB340B971DD8E8A582CE6BC" + "A6A04ADC2E6D580B8E37CE8F4784652BE6D668EC1FB340B971DD8E8A582CE6BC" - "7bdc65d8550b0A4FBC899550bbda87DAA2E780D618A66a1F7813967ECF6C0831" + "7bdc65d8550b0A4FBC899550bbda87DAA2E780D618A66a1F7813967ECF6C0831" - Texture ::= {id: <UUID>,name: <String>,tags: <Array von <Tag>>,format : <Format>,resolution: <Resolution>,added_on: <Date>,texture_hash: <Hash>} - Stellt einen Textur-Eintrag mit Metadaten dar. - CollectionFile ::= {textures: <Array von <Texture>>} - Die Datei /var/texturesync/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 zu gewährleisten, muss die Collection-Datei atomar überschrieben werden. Hierzu erstellt der Server zunächst eine neue Datei unter dem Namen /var/texturesync/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 inkonsistente Backups zu vermeiden, sollte hier zusätzlich eine Verzögerung von beispielsweise einer Stunde eingebaut werden. Das Backup-Tool könnte sonst beim Austausch einer Textur die alte Datei aber den neuen Metadaten-Eintrag sichern, wodurch die Textur verloren wäre. - 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. - Changelog + Texture ::= {id: <UUID>,name: <String>,tags: <Array von <Tag>>,format : <Format>,resolution: <Resolution>,added_on: <Date>,texture_hash: <Hash>} + Stellt einen Textur-Eintrag mit Metadaten dar. + 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 @@ -152356,10 +152130,18 @@ - 1.0 + 1.0 - Dokument Datenerhaltung erstellt + Dokument Datenerhaltung erstellt + + + + + 1.1 + + + Daten liegen im CWD statt unter /var/texturesync/ diff --git a/doc/feindesign/datenerhaltung.pdf b/doc/feindesign/datenerhaltung.pdf index 17c3ad2..e3c9bf0 100644 Binary files a/doc/feindesign/datenerhaltung.pdf and b/doc/feindesign/datenerhaltung.pdf differ