Skip to content

lea-ger/BS_Gruppe14

Repository files navigation

Praktikumsgruppe 14

Projektübersicht

Das Key-Value Server Projekt von Gruppe 14 im Kurs "Betriebssysteme und verteilte Systeme" SS22 TH Köln. Alle vorgeschlagenen Erweiterungen wurden umgesetzt. Der Fokus lag auf dem Einsatz von Techniken die in der Vorlesung vorgestellt wurden (socket, fork, SysV [shmget, semget, msgget], pipe, ...). Diese wurden auch dann verwendet, wenn es einzelne Alternativen gab die ggf. besser für das Projekt geeignet gewesen wären (pthread, mmap, mutex, Unix Domain Sockets).

Datei Beschreibung
dynString.c / dynArray.c Von der C++ STL string / vector Klasse inspiriert. Erzeugt "Objekte" deren Heap-Speicher beim Benutzen der zugehörigen Funktionen automatisch vergrößert wird.
network.c Enthält die Eintrittsfunktionen der Server- und Client-Prozesse. Die Server-Funktion nimmt als Argument eine Client-Handler-Funktion entgegen, die dann von den Prozessen ausgeführt wird die bei eingehenden Verbindungen erzeugten werden. Es gibt einen Client-Handler für eine persistente Verbindung zur Befehlsverteilung, und einen Weiteren für HTTP / REST Requests.
command.c Die Befehlsverteilung des Programms. Hier können Kommandos registriert und eingehende Nachrichten im EVA-Prinzip verarbeitet werden (interpretieren, ausführen, formatieren). Dieser Teil hat keine Abhängigkeiten (außer zu den allgemeinen Datenstrukturen) und soll die Übersichtlichkeit und Wartbarkeit des Projekts durch lose Kopplung verbessern.
storage.c Die In-memory Datenhaltung des Programms. Verwaltet die Daten auf einem Shared-Memory Segment (als unsortiertes statisches Array :-() und bietet eine, gegen Race-Conditions abgesicherte, Schnittstelle darauf an (mit O(N)-Laufzeiten :-(). Die Wildcard-Platzhalter "?" und "*" werden für GET und DEL unterstützt. Die Daten werden als CSV beim Starten des Programms geladen und beim Beenden gespeichert. Zusätzlich kann ein Snapshot-Timer in festgelegten Intervallen ausgeführt werden.
lock.c Funktionen für den Mechanismus zur Prozess-Synchronisation und des Exklusiven Modus. Verwendet ein Multi-Reader/Single-Writer Lock zur Lösung des Leser/Schreiber-Problems.
newsletter.c Ein zusätzliches Shared Memory Segment beinhaltet eine int64 Bit-Maske für jeden Eintrag/Platz im Storage, die über den Index mit ihm assoziiert ist. Wenn ein Client seine erste Subscription tätigt, reserviert er sich ein freies Bit als Subscriber-Id (d.h. max. 64 Subscribers) und startet einen Observer-Prozess. Hauptaufgabe des Observer-Prozesses ist es Nachrichten aus der Notify Message Queue an den Client-Socket zu leiten. Das Verwenden eines zentralen Broker-Prozesses erwies sich als sehr umständlich, weil die File-Deskriptoren nur durch Vererbung übertragen werden können (und mit Unix Domain Sockets). Subscriptions von gelöschten Einträgen werden entfernt. Der Observer-Prozess entfernt bei Terminierung alle Subscriptions. Der Observer-Prozess wird terminiert wenn keine Subscriptions mehr vorliegen, oder der Client-Prozess selbst beendet wird.
httpInterface.c Die REST-API bzw. ein minimalistischer Webserver. GET/PUT/DELETE-Requests an die URL /storage/ werden in ein Befehls-Objekt umgewandelt und an den Verteiler geschickt. Die Antwort erfolgt im JSON-Format. Alle anderen URLs akzeptieren GET-Requests und greifen auf Dateien im http-Verzeichnis zu. Hier findet sich ein einfaches Web-Interface für die REST-API.
systemExec.c Leitet den Inhalt eines Eintrags an ein externes Programm und speichert die Ausgabe des Programms wieder in diesen Eintrag.

Aktuelles Testergebnis von BS_Verifier.jar

  1. OK - no compiling errors (mandatory)
  2. OK - socket is running (mandatory)
  3. OK - socket does not talk to me like a human
  4. OK - socket responds to every input
  5. OK - behaves correctly on empty store
  6. OK - has correct formatting (mandatory)
  7. OK - is correctly saving
  8. OK - is correctly removing
  9. OK - behaves correctly on already deleted value
  10. OK - allows more than one connection (mandatory)
  11. OK - shares data between connections (mandatory)
  12. OK - code uses semaphores (mandatory)
  13. OK - transactions have no impact on other operations
  14. OK - transactions make other clients block (mandatory)
  15. OK - publish/subscribe works for PUT (mandatory)
  16. OK - publish/subscribe works for DEL
  17. OK - subscribing does not block

Passed 17 of 17 tests.
Your progress: 100 %
You have passed all mandatory tests!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •