Virtlab:Protokoly/Rezervační server
Z VirtlabWiki
< Virtlab:ProtokolyVerze z 16:30, 17. 12. 2006; zobrazit aktuální verzi
← Starší verze | Novější verze →
← Starší verze | Novější verze →
Protokol rezervačního serveru
První návrh:
- Dotaz na prvky lokality daného rezervačního serveru (parametry: ID dotazující se lokality - filtrace podle ní, časový úsek - spec. 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
Komunikační protokol (návrh Tomáše Hrabálka)
Výpis ze souboru reserv/doc/popis.txt:
Popis komunikačního protokolu ============================= - pres TCP spojeni - textove prikazy, oddelene <CR> - prvni radek urcuje prikaz, dalsi jeho argumenty - na poradi argumentu nezalezi - odeslani prazdneho radku, jen <CR>, potvrdi, ze vsechny argumenty byly odeslany - spojeni ukonceno vzdy na zadost klienta - server po komunikace neukoncuje spojeni, pouze po urcitem timeoutu Zjisteni obecne nabidky RS -------------------------- Prikaz: "GET OFFER\n" Argument (povinny): "FOR +'jednoznacny nazev lokality'\n" napr. "FOR vsb_ostrava\n" Odpoved: XML soubor s prefiltrovanou nabidkou fyzickych zarizeni pro danou lokalitu Zjisteni nabidky celeho distribuovaneho RS ----------------------------------------- Argument (povinny): DISTRIB Odpoved: XML soubor s prefiltrovanou nabidkou fyzickych zarizeni pro cely distribuovany RS Zjisteni nabidky v danem case (Co je volne?) -------------------------------------------- Argument (nepovinny): "TIME FROM YYYY-MM-DD HH:MM TO YYYY-MM-DD HH:MM\n" napr. "TIME FROM 2006-12-24 09:45 TO 2007-01-01 15:14\n" Odpoved: XML soubor s nabidkou vsech fyzickych zarizeni lokalne nebo v celem Distr VL pro danou lokalitu, podle argumentu (DISTRIB) Potvrzeni rezervace ------------------- - Rezervace je potvrzovana dvojim volanim prikazu "COMMIT\n" - Jeho prvni zavolani na vzdaleny rezervacni server znamena, ze si server dany cas zablokuje, ostatnim ho neposkytne a ceka (dany cas) na druhy COMMIT. - Druhy COMMIT je zavolan, byl-li prvni u vsech serveru uspesny - Nebyl-li uspesny, volame prikaz ROLLBACK - Nastane-li timeout, vola se ROLLBACK automaticky - Jako argumenty COMMIT jsou ID sitovych prvku dane lokace (kazde jako zvlastni argument) - Argumet: DEVICE id_zarizeni\n - Odpoved: ACCEPTED<cr> ...kladna odpoved REFUSED<cr> ...zaporna odpoved
Priklad ------- User->Local RS -> GET OFFER<cr> FOR su_karvina<cr> DISTRIB<cr> <cr> <- <?XML ..... > end the connection -> GET OFFER<cr> FOR su_karvina<cr> DISTRIB
TIME FROM 2007-01-18 10:00 TO 2007-01-18 11:00<cr> <cr> <- <? XML .... > -> COMMIT<cr> DEVICE r1 DEVICE r5 DEVICE sw2 <cr> <- ACCEPTED -> COMMIT<cr> <- ACCEPTED end of the connection