5.2 Die Schnittstellenkomponente

Die Aufgaben und die grundlegenden Funktionalitäten einer Schnittstellenkomponente wurden bereits in Kapitel 3.4.2 beschrieben. Dieser Abschnitt beschäftigt sich mit der Realisierung der Schnittstellenkomponente.

Die realisierte Schnittstellenkomponente wird über eine Konfigurationsdatei parametrisiert. In Tabelle 5.1 sind die Parameter und ihre Bedeutung zusammengefaßt.





Parameter Argumente Bedeutung



RECEIVE_PORT <port> Portadresse, unter der die Schnitt-
stellenkomponente auf Aufträge wartet



BROKER_ADDRESS <host>,<port> Die Connectadresse des Brokers



MAP_MODULE <filtermodule> Pythonmodul, das die
Filterroutinen bereitstellt



MAP_COMMAND <command>, Zuordnung der Kommandos
<filterfunction> zu den Filterroutinen



MAX_ORDERS <maxorders> maximale Anzahl der offenen Aufträge
der Schnittstellenkomponente



LOGFILE <logfilename> Dateiname der LOG-Datei




Tabelle 5.1: Parameter der Schnittstellenkomponente

Von besonderem Interesse sind die Parameter MAP_MODUL und MAP_COMMAND. Durch sie wird festgelegt, in welchem Pythonmodul die Filterroutinen definiert sind und welches Kommando durch welche Funktion gefiltert wird. Dabei wird der gesamte Auftrag als Parameter an die Funktion übergeben. Der Rückgabewert der Filterfunktion entspricht dem konvertierten Auftrag. Diese Filterroutinen können ebenfalls für die Rückgabewerte von Speicher bzw. Broker festgelegt werden. Die Funktionsweise der Schnittstellenkomponente wird in Abbildung 5.1 verdeutlicht.
PIC
Abbildung 5.1: Funktionsweise der Schnittstellenkomponente

Eingehende Aufträge werden derart konvertiert, daß sie dem internen Protokoll des Speichersystems entsprechen.

Die an den Broker gesendeten Aufträge entsprechen einem der folgenden Formate:

Die Rückmeldungen, die der Schnittstellenkomponente vom Broker übergeben werden, können folgende Gestalt annehmen:

Bei Ausfall des Brokers und damit bei Unterbrechung der Verbindungen sendet die Schnittstellenkomponente eine Fehlermeldung an die auftraggebenden Instanzen.

5.2.1 Die Netzverbindungsklasse

Da sowohl der Broker als auch die Schnittstellenkomponenten eine Reihe von Netzverbindungen und damit Sockets parallel überwachen müssen, wurde für diese Aufgabe eine eigene Klasse implementiert. Die Klasse c_multiconn (multible connections) erzeugt, überwacht und verwaltet eine Menge von TCP/IP-Sockets der Internet-Domäne und unterstützt alle gängigen Socketoperationen.

Die Identifikation der einzelnen Sockets innerhalb der Socketmenge erfolgt über den eindeutig zugeordneten Socketdeskriptor. So liefert beispielsweise die Methode open_sock, die einen neuen Socket erzeugt, den korrespondierenden Socketdeskriptor zurück. Unter Angabe des Socketdeskriptors können dann weitere Operationen (z.B. lesen, schreiben, schließen) auf dem Socket ausgeführt werden. Als besonders nützlich erwies sich die Methode wait_event. Sie ermittelt unter Benutzung der Python select-Klasse alle Sockets, die innerhalb eines gegebenen Zeitraums aktiv sind und liefert eine Liste der zugehörigen Socketdeskriptoren zurück. Anhand der Deskriptoren und der Benutzung der Methoden accept und sock_read können die Ereignisse abgearbeitet werden. Eine Gesamtübersicht der implementierten Methoden dieser Klasse zeigt Tabelle 5.2.





Methode Parameter Funktionalität



Konstruktor - Initialisiert interne Variable.



Destruktor - Löscht interne Variable.



open_sock <host>,<port> Erzeugt einen Socket und bindet ihn
an die übergebene Adresse.



close_sock <socketnr> Schließt den Socket,
mit der übergebenen Socketnummer.



wait_event <seconds> Wartet <seconds> Sekunden auf
Ereignisse an allen in der Socketmenge
befindlichen Sockets. Für seconds=0
wird solange gewartet bis ein Ereignis eintritt.



write_sock <socketnr>, Schreibt <message> auf den Socket, mit
<message> der Nummer <socketnr>.



read_sock <socketnr> Liest vom Socket <socketnr> und liefert
als Ergebnis, die gelesene Nachricht zurück.



poll_sock <socketnr>, Wartet <seconds> Sekunden an Socketnummer
<seconds> <socketnr> auf eine Nachricht.



connect <socketnr>, Verbindet Socket <socketnr> mit der durch
<host>,<port> <host>,<port> angegebenen Adresse.



accept <socketnr> Führt einen Accept an Socketnummer
<socketnr> aus und liefert als Ergebnis
den neuen Verbindungssocket zurück.



get_localaddr <socketnr> Gibt die lokale Adresse des Sockets zurück




Tabelle 5.2: Methoden der Klasse c_multiconn