-
Notifications
You must be signed in to change notification settings - Fork 0
magladko/java-network-resource-management
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
$$$$$$\ $$\ $$\ $$$$$$$$\ $$$$$$\
\_$$ _|$$$\ $$ |$$ _____|$$ __$$\
$$ | $$$$\ $$ |$$ | $$ / $$ |
$$ | $$ $$\$$ |$$$$$\ $$ | $$ |
$$ | $$ \$$$$ |$$ __| $$ | $$ |
$$ | $$ |\$$$ |$$ | $$ | $$ |
$$$$$$\ $$ | \$$ |$$ | $$$$$$ |
\______|\__| \__|\__| \______/
======================================================================================================================================
>> kompilacja projektu:
javac AllocationRequest.java
javac -encoding utf8 NetworkClient.java
>> uruchomienie odbywa się zgodnie z przedstawioną w specyfikacji procedurą,
przykładowe skrypt testowe uruchamiające projekt znajdują się w folderze ./GAKKOtestScripts
(są to pliki pobrane z platformy Gakko)
>> zaimplementowane zostały:
- podłączanie kolejnych węzłów oraz terminacja całości,
- odbieranie żądań od klienta i wykonanie rezerwacji przy założeniu, że wybrany węzeł kontaktowy posiada wolne zasoby w wymaganej liczności
- dowolna alokacja zasobów
======================================================================================================================================
$$$$$$\ $$\ $$\ $$$$$$$\ $$\ $$$$$$$$\ $$\ $$\ $$$$$$$$\ $$\ $$\ $$$$$$$$\ $$$$$$\ $$$$$$\ $$$$$\ $$$$$$\
\_$$ _|$$$\ $$$ |$$ __$$\ $$ | $$ _____|$$$\ $$$ |$$ _____|$$$\ $$ |\__$$ __|$$ __$$\ $$ __$$\ \__$$ |$$ __$$\
$$ | $$$$\ $$$$ |$$ | $$ |$$ | $$ | $$$$\ $$$$ |$$ | $$$$\ $$ | $$ | $$ / $$ |$$ / \__| $$ |$$ / $$ |
$$ | $$\$$\$$ $$ |$$$$$$$ |$$ | $$$$$\ $$\$$\$$ $$ |$$$$$\ $$ $$\$$ | $$ | $$$$$$$$ |$$ | $$ |$$$$$$$$ |
$$ | $$ \$$$ $$ |$$ ____/ $$ | $$ __| $$ \$$$ $$ |$$ __| $$ \$$$$ | $$ | $$ __$$ |$$ | $$\ $$ |$$ __$$ |
$$ | $$ |\$ /$$ |$$ | $$ | $$ | $$ |\$ /$$ |$$ | $$ |\$$$ | $$ | $$ | $$ |$$ | $$\ $$ | $$ |$$ | $$ |
$$$$$$\ $$ | \_/ $$ |$$ | $$$$$$$$\ $$$$$$$$\ $$ | \_/ $$ |$$$$$$$$\ $$ | \$$ | $$ | $$ | $$ |\$$$$$$ |\$$$$$$ |$$ | $$ |
\______|\__| \__|\__| \________|\________|\__| \__|\________|\__| \__| \__| \__| \__| \______/ \______/ \__| \__|
======================================================================================================================================
Węzły sieciowe (NetworkNode) komunikują się między sobą za pomocą protokołu TCP i są zorganizowane w strukturze takiego drzewa, że pierwszy zainicjowany węzeł będzie jego korzeniem.
Każdy węzeł standardowo posiada informacje na temat swoich sąsiadów i z nimi prowadzi więszką część komunikacji.
Wyjątkiem są tutaj informacje możliwe do pozyskania z treści protokołu lub rozesłanie finalnego statusu alokacji do oczekujących węzłów (oraz kontaktowego).
Węzeł oczekujący - węzeł, który zarezerwował zasoby do alokacji. Oczekuje na ostateczny status alokacji, nowe żądania oczekują jako procesy w SingleThreadedExecutorService()
Węzeł kontaktowy - jedyny węzeł komunikujący się z podłączonym klientem. Jeżeli nie zarezerwołał swoich zasobów do alokacji, nie jest wówczas "węzłem oczekującym" i jest gotowy na przetwarzenie nowego żądania.
Standardowo węzły w komunikacji między sobą posługują się portem podanym w argumentach przy inicjalizacji.
Wyjątkiem są "węzły oczekujące" finalnego statusu lokalizacji oraz węzeł kontaktowy (ComNode), które dla statusu alokacji korzystają z dynamicznie przydzielonego portu (listenPort).
Możliwe komunikaty nadawane przez węzły:
>> HELLO -- przesyłany od nowego węzła do węzłą "rodzica", do którego podłączany jest nowy węzeł
"rodzic" po otrzymaniu komunikatu, dodaje nowy węzeł do listy węzłów-dzieci
=================================================================
| HELLO <childNodeId>:<childNodeIp>:<childNodePort> |
=================================================================
- childNodeId: identyfikator podłączanego węzła
- childNodeIp: adres nowego węzła
- childNodePort: port nowego węzła
>> TERMINATE -- przesyłany do wszystkich sąsiadujących węzłów (jeżeli wciąż istnieją), kończy działanie węzła
=================================================================
| TERMINATE |
=================================================================
>> ALLOCATE -- trwające żądanie alokacji przetworzone przez węzeł komunikacji,
używane przy żądaniach wysyłanych między węzłami
zakończone jedną pustą linią
=================================================================
| ALLOCATE <ComNodeIP>:<ComNodePORT>:<listenPort> |
|***************************************************************|
| <clientId> <zasób>:<liczność> [<zasób>:liczność] |
| [<zasób>:<liczność>:<ip węzła>:<port węzła>[:<listenPort>]] |
| [<zasób>:<liczność>:<ip węzła>:<port węzła>[:<listenPort>]] |
| [...] |
| <empty line> |
=================================================================
ALLOCATE <ComNodeIP>:<ComNodePORT>:<listenPort>:
- ComNodeIp: adres węzła komunikacyjnego
- ComNodePort: port węzła komunikacyjnego
- listenPort: port węzła komunikacyjnego otwarty na komunikację odnośnie finalnego statusu żądania
<clientId> <zasób>:<liczność> [<zasób>:liczność]:
- clientId: identyfikator żądającego klienta
- zasób: typ żądanego zasobu
- liczność: liczność żądanego zasobu
[<zasób>:<liczność>:<ip węzła>:<port węzła>[:<listenPort>]]:
- opcjonalne
- zasób: typ przygotowanych do alokacji zasobu (lub placeholder dla utrzymania historii odwiedzin, gdy liczność = 0
- liczność: liczność przygotowanych do alokacji zasobów
- ip węzła: adres IP węzła z oczekującymi zasobami lub węzła odwiedzonego (liczność = 0)
- port węzła: główny port komunikacyjny węzła, inicjowany z argumentów przy inicjalizacji programu
- listenPort: dla oczekujących węzłów, port nasłuchu statusu żądania
>> ALLOCATED -- status wysyłany w przypadku udanej alokacji węzłom oczekującym oraz
węzłowi komunikacyjnemu, który przekazuje go potem klientowi
=================================================================
| ALLOCATED |
|***************************************************************|
| [<zasób>:<liczność>:<ip węzła>:<port węzła>] |
| [<zasób>:<liczność>:<ip węzła>:<port węzła>] |
| [...] |
=================================================================
[<zasób>:<liczność>:<ip węzła>:<port węzła>]:
- zasób: typ alokowanego zasobu
- liczność: liczność alokowanego zasobu
- ip węzła: adres IP węzła alokującego ww. zasób
- port węzła: główny port komunikacyjny węzła, inicjowany z argumentów przy inicjalizacji programu
>> FAILED -- (1) status przesyłany węzłom oczekującym oraz węzłowi komunikacyjnego oznaczający nieudaną alokację,
następstwem jest zwolnienie zarezerwowanych zasobów
(2) status wysyłany klientowi przez węzeł komunikacji oznaczający nieudaną alokację żądanych zasobów
(1)
=================================================================
| FAILED |
|***************************************************************|
| <clientId> |
=================================================================
<clientId>:
- clientId: identyfikator klienta, którego dotyczy nieudana alokacja
(2)
=================================================================
| FAILED |
=================================================================
About
Projekt SKJ 2022
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published