Virtlab:Protokoly/Rezervační server
Z VirtlabWiki
< Virtlab:ProtokolyVerze z 13:55, 15. 2. 2007; zobrazit aktuální verzi
← Starší verze | Novější verze →
← Starší verze | Novější verze →
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