Modulo PeerServices - Strutture dati

PeerTupleNode

La classe serializzabile che identifica un nodo n (o un indirizzo da approssimare) all'interno di un g-nodo g. Deve contenere:

Il livello del g-nodo g è intrinsecamente indicato nella dimensione della tupla.

Il g-nodo g è sempre individuabile come vedremo sotto nei casi d'uso.

Si può testare la validità di un oggetto PeerTupleNode ricevuto dalla rete verificando che:

Questa classe è usata per restituire il risultato di hp ( k ). Di norma in questo caso rappresenta una tupla globale, cioè un indirizzo all'interno del g-nodo che costituisce l'intera rete; quindi in questo caso il g-nodo g è l'intera rete. Ma qualche specifico servizio può implementare la funzione hp in modo diverso e restituire una tupla con un numero minore di elementi per indicare che la ricerca va circoscritta ad un proprio g-nodo; in questo caso il g-nodo g è uno dei g-nodi a cui il nodo corrente (che ha calcolato hp) appartiene.

Questa classe è usata anche per indicare, all'interno del messaggio m’, un indirizzo all'interno del g-nodo che è la corrente destinazione del messaggio; in questo caso il g-nodo g è individuato dalle coordinate m’.lvl, m’.pos.

Questa classe è usata anche per individuare il nodo n originante di un messaggio e viene scritta nel messaggio, nel suo membro m’.n. Il nodo n, quando genera il messaggio m’, individua anche un g-nodo a cui esso appartiene e all'interno del quale avverrà tutto l'instradamento di m’. Esso è il g-nodo g in questo caso.

PeerTupleGNode

La classe serializzabile che identifica un g-nodo h (possibile che sia di livello 0 cioè un nodo) all'interno di un g-nodo g. Deve contenere:

Il valore di ε, che è il livello del g-nodo h, si calcola come top - tuple.size.

Il g-nodo g è sempre individuabile come vedremo sotto nei casi d'uso.

Si può testare la validità di un oggetto PeerTupleGNode ricevuto dalla rete verificando che:

Questa classe è usata per identificare, all'interno del messaggio m’, un g-nodo h da escludere dal calcolo distribuito di Ht; in questo caso il g-nodo g è individuato dalle coordinate m’.lvl, m’.pos.

Questa classe è usata anche per identificare un g-nodo h di cui si sta divulgando la partecipazione ad un servizio opzionale; questa divulgazione avviene sempre a livello globale, quindi in questo caso il g-nodo g è l'intera rete.

Questa classe è usata anche per identificare un g-nodo h di cui si sta divulgando la non-partecipazione ad un servizio opzionale; questa divulgazione avviene contestualmente all'instradamento di un messaggio m’ per il calcolo distribuito di Ht e siccome questo calcolo può avvenire anche in modo circoscritto ad un g-nodo, in questo caso il g-nodo g di riferimento può non essere l'intera rete, ma sicuramente è sempre uno dei g-nodi a cui il nodo corrente appartiene.

PeerTupleGNodeContainer

Classe contenitore non serializzabile, che contiene un set di PeerTupleGNode e fa in modo che quando vi si inserisce un g-nodo h vengano contestualmente rimossi i g-nodi h’ ∈ h.

Al momento della creazione di questo set va individuato il livello del g-nodo g all'interno del quale i singoli g-nodi di questo set appartengono.

L'interfaccia esposta dalla classe consente di:

PeerMessageForwarder

La classe serializzabile per inviare i messaggi m’. Deve contenere:

Si può testare la validità di un oggetto PeerMessageForwarder ricevuto dalla rete verificando che:

WaitingAnswer

Questa classe non serializzabile è usata dal nodo che inizia una chiamata. Il nodo ne crea un'istanza per mettervi le informazioni da memorizzare durante l'attesa delle risposte, per ricevere le segnalazioni di eventi durante questa attesa e per leggervi i risultati. Mette questa istanza in una mappa waiting_answer_map associandola al msg_id come indice.

Contiene:

PeerParticipantMap

Classe serializzabile in cui il nodo mantiene la mappa dei g-nodi visibili nella sua topologia che partecipano ad un servizio opzionale. E' serializzabile perché viene comunicata ai nodi che la richiedono.

L'istanza contiene:

Si può testare la validità di un oggetto PeerParticipantMap ricevuto dalla rete verificando che:

La classe PeersManager ha un set di istanze di PeerParticipantMap, participant_maps, indicizzato con l'identificativo del servizio.

Se il nodo partecipa al servizio opzionale p allora l'istanza participant_maps[p.p_id] esiste e almeno la sua posizione è memorizzata.

Se il nodo non partecipa e non ha mai sentito parlare dell'identificativo p_id allora l'istanza participant_maps[p_id] non esiste.

Quando il nodo (nel modulo PeersManager) viene informato della partecipazione o della non partecipazione al servizio p_id di un g-nodo che è visibile nella sua topologia, allora agisce di conseguenza su participant_maps[p_id].

Se ad un certo punto il nodo viene a conoscenza della partecipazione di un g-nodo al servizio p_id e participant_maps[p_id] non esisteva, allora viene istanziata e viene memorizzata la posizione di quel g-nodo.

Se ad un certo punto il nodo viene a conoscenza della non partecipazione di un g-nodo al servizio p_id e participant_maps[p_id] non esisteva, allora questo non ha conseguenze su participant_maps.

Se ad un certo punto il nodo viene a conoscenza della non partecipazione di un g-nodo al servizio p_id e questo fa sì che participant_maps[p_id].participant_list risulta ora vuota, allora viene rimosso l'elemento p_id dal set participant_maps.

PeerParticipantSet

Classe serializzabile usata per passare tutto insieme il set participant_maps di PeersManager. Contiene:

Si può testare la validità di un oggetto PeerParticipantSet ricevuto dalla rete verificando che:

Netsukuku/ita/docs/ModuloPeers/AppuntiStrutture (last edited 2015-11-28 11:15:32 by lukisi)