Virtlab:Protokoly/Rezervační server
Z VirtlabWiki
(Rozdíly mezi verzemi)
												
			
			| Verze z 12:20, 8. 2. 2007 Hra196 (Diskuse | příspěvky) (Přepsání do wiki vzhledu (potřebuje úpravy)) ← Předchozí porovnání  | 
				Verze z 13:55, 15. 2. 2007 Hra196 (Diskuse | příspěvky) (opravy) Následující porovnání →  | 
			||
| Řádka 63: | Řádka 63: | ||
| * Rezervace je potvrzovana <<dvojitým '''commit'''>>, | * Rezervace je potvrzovana <<dvojitým '''commit'''>>, | ||
| * Nejprve voláním příkazu "RESERVE\n" a poté "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, ostatnim ho neposkytne a čeká (daný čas) na "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ý | * Druhý COMMIT je zavolán, byl-li první u všech serverů úspěšný | ||
| * Nebyl-li úspěšný, volá se přikaz "ROLLBACK" | * Nebyl-li úspěšný, volá se přikaz "ROLLBACK" | ||
| * Nastane-li timeout, volá se ROLLBACK automaticky | * Nastane-li timeout, volá se ROLLBACK automaticky | ||
| - | * Povinným argumentem je vygenerované globalní Reservation id, které je složené z lokality a místního čísla id: "ID:<LocalID>@<lokalita>" | + | * 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á. | 
| - | * Povinné je rovnež uvést čas ve stejném formátu jako u zjištování nabídky | + | * U "RESERVE" je povinné rovnež uvést čas ve stejném formátu jako u zjištování nabídky. | 
| - | * Jako další argumenty COMMIT jsou ID síťových prvků dané lokace (každé jako zvláštní argument) | + | * Jako další argumenty RESERVE jsou ID síťových prvků dané lokace (každé jako zvláštní argument) | 
| ** Argument: DEVICE:id_zarizeni\n | ** Argument: DEVICE:id_zarizeni\n | ||
| * Odpovědi: | * Odpovědi: | ||
| Řádka 115: | Řádka 115: | ||
| -> COMMIT<lf> | -> COMMIT<lf> | ||
| + | ID:14@su_karvina | ||
| <- 200 ACCEPTED | <- 200 ACCEPTED | ||
| end of the connection | end of the connection | ||
Verze z 13:55, 15. 2. 2007
Tento článek popisuje komunikační prokokol mezi rezervačními servery distribuovaného Virtlabu.
Obsah | 
Navržené vlastnosti
- Dotaz na prvky lokality daného rezervačního serveru (parametry: ID dotazující se lokality - filtrace podle ní, časový úsek - speciální případ:bez udání času vrátí všechny potenciálně zapůjčitelné prvky pro žádající lokalitu)
 
-  Dotaz na všechny prvky systému (zevnitř lokality lokálnímu rezervačními serveru, dotazy zvnějšku lokality budou filtrovány aplikací serveru (nepřicházejí z privátní zdrojové adresy)
- slouží jako proxy, zeptá se všech rezervačních serverů jiných lokalit (zprávou dotaz na prvky lokality)
 - může být speciálním případen zprávy pro dotaz na prvky lokality s nastaveným příznakem žádosti o rekurzi.
 
 
- Zadost o rezervaci - DOPRACOVAT PARAMETRY A MOZNE ODPOVEDI NA ZPRAVU
 - Zrušení rezervace podle globálního čísla rezervace (u sebe nebo rekurzivně u všech, rekurze přijímána jen při poždavku zevnitř lokality)
 - Výpis rezervací – výpis rezervační tabulky (lokálního rezervačního serveru nebo rekurzivně, ale v rekurzivním případě vrátí jen rezervace rezervace z tázající se lokality)
 
ID rezervace – bude vymýšlet rezervující lokalita (název lokality + sekvenční číslo). Bude sloužit i k možnosti zruseni rezervace
Při komunikaci mezi rezervačními servery uvádět jako parametr ID tázající se lokality + vymyslet systém autentizace, aby se ID tázající lokality nedalo podvrhnout.
Lze počítat s tím, že komunikace půjde IPSec tunelem.
Distribuovaná rezervace prvků je distribuovanou transakcí, vymyslet 2-fázový commit, včetně podpory rollbacku od timeoutu při neaktivitě rezervačního klienta. Rezerv. server obsluhuje více spojení najednou, promyslet, zda nevznikají potenciální deadlocky.
Administrátorské CLI rezervačního serveru - navrh
- Výpis všech rezervací (dle časového intervalu od-do)
 - Smazání záznamů o již proběhnuvších rezervacích
 - Smazání budoucí rezervace
 
Popis protokolu
Vlastnosti
- Přes TCP spojení
 - Textové příkazy, oddělené <LF> (0x0A), <CR> (0x0D) je ignorováno
 - Case insensitive
 - První řádek určuje příkaz, další jeho argumenty
 - Na pořadí argumentů nezáleží
 - Za názvem argumentu je dvojtecka, za kterou ihned nasledují jeho parametry
 - Whitespace (tabelátory (0x09), mezery (0x20)) nejsou povoleny, slouží jako oddělovače parametrů pro argumenty
 - Odeslání prázdného řádku (jen <LF>), potvrdí, že všechny argumenty byly odeslány a je možno zpracovat příkaz
 - Spojení ukončeno vždy na žádost klienta
 - Server po komunikaci neukončuje spojení, pouze po určitém timeoutu
 - Při odpovědi je na prvním řádku kód odpovědi, mezera a za ní popis odpovědi, poté jsou poslána textová data
 
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ěď: 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ěď: 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:<lokalita> <id>"
 - Argument "DISTRIB:YES" pro distribuovanou verzi
 -  Odpovědi:
- "210 Cancelled" operace provedena
 - "410 Bad ID" žádne takové ID neexistuje
 
 
Příklad
 User->Local RS
 
 -> GET-OFFER<lf>
    FOR:su_karvina<lf>
    DISTRIB:yes<lf>
    <lf>
 <- 200 OK
    <?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
    TIME:FROM{2007-01-18 10:00}TO{2007-01-18 11:00}<lf>
    DEVICE:r1
    DEVICE:r5
    DEVICE:sw2
    <lf>
 <- 200 ACCEPTED
 end of the connection
 
 -> COMMIT<lf>
    ID:14@su_karvina
 <- 200 ACCEPTED
 end of the connection
						
			
		