Virtlab:Protokoly/Rezervační server

Z VirtlabWiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Verze z 06:55, 8. 3. 2007
Hra196 (Diskuse | příspěvky)
(kategorizace)
← Předchozí porovnání
Verze z 18:02, 8. 3. 2007
Hra196 (Diskuse | příspěvky)
(Změna způsobu odesílání dat)
Následující porovnání →
Řádka 2: Řádka 2:
== Vlastnosti == == Vlastnosti ==
-* Textově orientovaný protokol+* Textově orientovaný protokol.
* Textové příkazy, oddělené <LF> (0x0A), (symbol <CR> (0x0D) je ignorován) * Textové příkazy, oddělené <LF> (0x0A), (symbol <CR> (0x0D) je ignorován)
-* Přes TCP spojení, standardně na portu 50001+* Komunikace přes TCP spojení, standardně na portu 50001.
-* Pro názvy příkazů a jména argumentů nerozlišuje velká a malá písmena (''case insensitive'')+* Pro názvy příkazů a jména argumentů nerozlišuje velká a malá písmena (''case insensitive'').
-* První řádek a každý další první po prázdném řádku určuje příkaz, následující řádky jeho argumenty+* První řádek a každý další první po prázdném řádku určuje příkaz, následující řádky jeho argumenty.
-* Na pořadí argumentů nezáleží, vyjímkou je pořadí argumentů ''DATA''+* Na pořadí argumentů nezáleží a jsou case-insensitive.
-* Za názvem argumentu je dvojtečka, za kterou ihned nasledují jeho parametry, za dvojtečkou nesmí být mezera+* Za názvem argumentu je dvojtečka, za kterou ihned nasledují jeho parametry, za dvojtečkou nesmí být mezera.
-* Bílé znaky (''whitespace''), jako tabelátory (0x09), mezery (0x20) nejsou povoleny, slouží jako oddělovače parametrů pro argumenty+* Bílé znaky (''whitespace''), jako tabelátory (0x09), mezery (0x20) nejsou povoleny, slouží jako oddělovače. parametrů pro argumenty. Výjimku tvoří mezery a tabelátory před názvem příkazu a argumentu. Tyto jsou odfiltrovány.
-* Odeslání prázdného řádku (jen <LF> (0x0A)), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz+* Odeslání prázdného řádku (jen <LF> (0x0A)), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz.
-* Po odeslání prázdného řádku je možno psát další příkaz+* Po odeslání prázdného řádku je možno psát další příkaz. Výjimku tvoří příkaz "SEND-DATA", kde jsou očekávána data a potom až další příkaz.
-* Spojení ukončeno vždy na žádost klienta, mimo speciální případy, kdy rezervační server přijímaným datům nerozumí, nebo je klient připojen příliš dlouho+* Spojení ukončeno vždy na žádost klienta, mimo speciální případy, kdy rezervační server přijímaným datům nerozumí, nebo je klient připojen příliš dlouho.
-* Při odpovědi serveru na příkaz je na prvním řádku návratový kód, mezera a za ní popis odpovědi+* Při odpovědi serveru na příkaz je na prvním řádku návratový kód, mezera a za ní popis odpovědi.
* Pokud je definováno, že za návratovým kódem odesílá server data (například u ''get-offer''), je na následujícím řádku za kódem uvedeno číslo, znamenající velikost následujících dat v bytech. Data musí být textová a jejich budoucí interpreter musí počítat jen s malými písmenky. Dále nesmí používat znak <CR> (0x0D). Na dalším řádku pak začínají samotná data. * Pokud je definováno, že za návratovým kódem odesílá server data (například u ''get-offer''), je na následujícím řádku za kódem uvedeno číslo, znamenající velikost následujících dat v bytech. Data musí být textová a jejich budoucí interpreter musí počítat jen s malými písmenky. Dále nesmí používat znak <CR> (0x0D). Na dalším řádku pak začínají samotná data.
Řádka 62: Řádka 62:
* Odeslání konfigurace se provádí příkazem '''SEND-DATA'''. * Odeslání konfigurace se provádí příkazem '''SEND-DATA'''.
* Povinným argumentem je ID rezervace (''číslo@lokalita'') * Povinným argumentem je ID rezervace (''číslo@lokalita'')
-* Dalším argumentem je "data". Každý z argumentů "data" určuje postupně jeden řádek odesílaného souboru.+* Dalším povinným argumentem je "data-length", který obsahuje číslo odesílaného souboru v bytech.
 +* Data se přiloží za ukončovací znak příkazu (tedy za prázdný řádek). Data musejí mít přesně uvedenou velikost, protože bude-li jich odesláno méně, potom na ně server bude čekat a pro dané spojení nebude přijímat příkazy. Jedinou možností vysvobození pak bude ukončení spojení. Bude-li jich více, potom data nad rámec budou vnímána jako další příkaz, což způsobí chybová hlášení.
* Odeslaná data jsou uložena do souboru a později předána konfiguračním skriptům. Rezervační server je nijak neinterpretuje ani neupravuje. * Odeslaná data jsou uložena do souboru a později předána konfiguračním skriptům. Rezervační server je nijak neinterpretuje ani neupravuje.
Řádka 114: Řádka 115:
-> SEND-DATA<lf> -> SEND-DATA<lf>
ID:14@su_karvina<lf> ID:14@su_karvina<lf>
- DATA:r7:s0/2/2 r5:s0/0<lf> + DATA-LENGTH:113<lf>
- DATA:r3:fa0/1 r5:gi0<lf> +
- DATA:r7:s0/2/4 r1:s0/1/1<lf>+
<lf> <lf>
 + r7:s0/2/2 r5:s0/0
 + r3:fa0/1 r5:gi0
 + r7:s0/2/4 r1:s0/1/1
<- 200 SEND-DATA OK <- 200 SEND-DATA OK
[[Kategorie:Tomáš Hrabálek]] [[Kategorie:Tomáš Hrabálek]]

Verze z 18:02, 8. 3. 2007

Tento článek popisuje komunikační prokokol mezi rezervačními servery mezi klientem a rezervačním serverem distribuovaného Virtlabu.

Obsah

Vlastnosti

  • Textově orientovaný protokol.
  • Textové příkazy, oddělené <LF> (0x0A), (symbol <CR> (0x0D) je ignorován)
  • Komunikace přes TCP spojení, standardně na portu 50001.
  • Pro názvy příkazů a jména argumentů nerozlišuje velká a malá písmena (case insensitive).
  • První řádek a každý další první po prázdném řádku určuje příkaz, následující řádky jeho argumenty.
  • Na pořadí argumentů nezáleží a jsou case-insensitive.
  • Za názvem argumentu je dvojtečka, za kterou ihned nasledují jeho parametry, za dvojtečkou nesmí být mezera.
  • Bílé znaky (whitespace), jako tabelátory (0x09), mezery (0x20) nejsou povoleny, slouží jako oddělovače. parametrů pro argumenty. Výjimku tvoří mezery a tabelátory před názvem příkazu a argumentu. Tyto jsou odfiltrovány.
  • Odeslání prázdného řádku (jen <LF> (0x0A)), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz.
  • Po odeslání prázdného řádku je možno psát další příkaz. Výjimku tvoří příkaz "SEND-DATA", kde jsou očekávána data a potom až další příkaz.
  • Spojení ukončeno vždy na žádost klienta, mimo speciální případy, kdy rezervační server přijímaným datům nerozumí, nebo je klient připojen příliš dlouho.
  • Při odpovědi serveru na příkaz je na prvním řádku návratový kód, mezera a za ní popis odpovědi.
  • Pokud je definováno, že za návratovým kódem odesílá server data (například u get-offer), je na následujícím řádku za kódem uvedeno číslo, znamenající velikost následujících dat v bytech. Data musí být textová a jejich budoucí interpreter musí počítat jen s malými písmenky. Dále nesmí používat znak <CR> (0x0D). Na dalším řádku pak začínají samotná data.

Popis protokolu

Zjištění obecné nabídky Rezervačního serveru

  • Příkaz: "GET-OFFER\n"
  • Argument (povinný): "FOR: +'jednoznačný název lokality'\n" např. "FOR:vsb_ostrava\n"
  • Odpověď: Na prvním řádku odpovědi je číslo s velikostí následujících dat (v bytech). Následuje XML soubor s přefiltrovanou nabídkou fyzických zařízení pro danou lokalitu

Zjištění nabídky celého distribuovaného RS

  • Stejné jako obecné zjištení "GET-OFFER"
  • Argument (povinný): DISTRIB Parametr: "YES", "DISTRIB:YES"
  • Odpověď: Na prvním řádku odpovědi je číslo s velikostí následujících dat (v bytech). Následuje XML soubor s přefiltrovanou nabídkou fyzických zařízení pro celý distribuovaný RS

Zjištění nabídky v daném čase (Co je volné?)

  • Opět "GET-OFFER"
  • Argument (povinný): "TIME:FROM{YYYY-MM-DD HH:MM}TO{YYYY-MM-DD HH:MM}\n"
    • Příklad: "TIME:FROM{2006-12-24 09:45}TO{2007-01-01 15:14}\n"
  • Odpověď: XML soubor s nabídkou všech fyzických zařízení lokalně nebo v celem distribuovaném VL pro danou lokalitu, podle argumentu (DISTRIB)

Potvrzení rezervace

  • Rezervace je potvrzovana <<dvojitým commit>>,
  • Nejprve voláním příkazu "RESERVE\n" a poté "COMMIT"
  • Zavolání "RESERVE" na vzdalený rezervační server znamená, že si server daný čas zablokuje, ostatním ho neposkytne a čeká (daný čas) na "COMMIT".
  • Druhý COMMIT je zavolán, byl-li první u všech serverů úspěšný
  • Nebyl-li úspěšný, volá se přikaz "ROLLBACK"
  • Nastane-li timeout, volá se ROLLBACK automaticky
  • Povinným argumentem u obou příkazů je vygenerované globalní Reservation id, které je složené z lokality a místního čísla id: "ID:<LocalID>@<lokalita>". COMMIT již jiný argument nemá.
  • U "RESERVE" je povinné rovnež uvést čas ve stejném formátu jako u zjištování nabídky.
  • Jako další argumenty RESERVE jsou ID síťových prvků dané lokace (každé jako zvláštní argument)
    • Argument: DEVICE:id_zarizeni\n
  • Odpovědi:
    • 200 ACCEPTED<lf> ...kladná odpověď
    • 400 REFUSED<lf> ...zaporná odpověď

Smazání rezervace

  • Příkaz "CANCEL"
  • Povinný argument "ID:id_rezervace"
  • Argument "DISTRIB:YES" pro distribuovanou verzi
  • Pokud dané ID v systému neexistuje je ignorováno a není oznámena žádná chyba
  • Odpovědi:
    • "210 Cancelled" operace provedena
    • "410 Error" nebylo možno rušení provést (výpadek databáze)

Odeslání konfigurace k rezervaci

Když klient rezervačního serveru na základě nabídky prvků a poté kladné rezervace vygeneruje síť spojení jednotlivých prvků (Mapovací algoritmus), je třeba tuto konfigurace předat rezervačnímu serveru. Ten ji dále poskytne konfiguračním skriptům, které vytvoří náplň konfigurace jednotlivých prvků. Konfigurace dané rezervace se může měnit kdykoliv před započetím úlohy.

  • Odeslání konfigurace se provádí příkazem SEND-DATA.
  • Povinným argumentem je ID rezervace (číslo@lokalita)
  • Dalším povinným argumentem je "data-length", který obsahuje číslo odesílaného souboru v bytech.
  • Data se přiloží za ukončovací znak příkazu (tedy za prázdný řádek). Data musejí mít přesně uvedenou velikost, protože bude-li jich odesláno méně, potom na ně server bude čekat a pro dané spojení nebude přijímat příkazy. Jedinou možností vysvobození pak bude ukončení spojení. Bude-li jich více, potom data nad rámec budou vnímána jako další příkaz, což způsobí chybová hlášení.
  • Odeslaná data jsou uložena do souboru a později předána konfiguračním skriptům. Rezervační server je nijak neinterpretuje ani neupravuje.
 SEND-DATA
 id:14@vsb
 data:<první řádek konfigurace>
 data:<druhý řádek konfigurace za kterým je prázdný řádek>
 data:
 data:<čtvrtý řádek>
 


Příklad

 User->Local RS
 
 -> GET-OFFER<lf>
    FOR:su_karvina<lf>
    DISTRIB:yes<lf>
    <lf>
 <- 200 OK
    375
    <?XML ..... >
 end of the connection   
 
 -> GET-OFFER<lf>
    FOR:su_karvina<lf>
    DISTRIB:yes<lf>
    TIME:FROM{2007-01-18 10:00}TO{2007-01-18 11:00}<lf>
    <lf>
 <- 200 OK
    <? XML .... >
 end of the connection   
 
 -> RESERVE<lf>
    FOR:su_karvina<lf>
    ID:14@su_karvina<lf>
    TIME:FROM{2007-01-18 10:00}TO{2007-01-18 11:00}<lf>
    DEVICE:r1<lf>
    DEVICE:r5<lf>
    DEVICE:sw2<lf>
    <lf>
 <- 200 ACCEPTED
 end of the connection
 
 -> COMMIT<lf>
    ID:14@su_karvina<lf>
    <lf>
 <- 200 ACCEPTED
 end of the connection
 
 -> SEND-DATA<lf>
    ID:14@su_karvina<lf>
    DATA-LENGTH:113<lf>
    <lf>
    r7:s0/2/2 r5:s0/0
    r3:fa0/1  r5:gi0
    r7:s0/2/4 r1:s0/1/1
 <- 200 SEND-DATA OK