4.3 Interazione con i clienti di SRDS
4.3.4 Altri clienti/funzionalit`a
Nell’ambito dello sviluppo di un architettura come quella di SRDS mappata su pi`u livelli si `e pensato anche ad ulteriori tipologie di clienti e di funzionalit`a che essi avrebbero potuto richiedere. Una di queste risulta la possibilit`a di creare “on demand” namespace nuovi per poterli associare a differenti aree semantiche destinate alla memorizzazione di dati.
In particolare la gestione dei metadati che riguardano i namespace attivi sulla griglia deve essere condivisa e quindi accedibile a tutti i nodi della griglia. Nel- l’implementazione che `e stata fatta fino a questo punto la possibilit`a di ampliare i namespace funziona esclusivamente a livello locale. Si presume infatti che tutti i nodi abbiano fin qui la conoscenza relativa ai namespace attivi in locale e che tale conoscenza sia in realt`a a livello globale poich`e tutti i nodi hanno gli stessi name- space attivi. Tuttavia nell’ambito della tesi `e stato studiato un algoritmo che possa permettere un implementazione efficace a livello architetturale della gestione dei namespace a livello globale. Si presume che possa essere utilizzata una DHT di tipo transazionale come quella sviluppata da Zib, Chord # (sezione 4.2.5 ). In figura 4.3.4 `e mostrato un esempio di utilizzo della meta dht. Supponiamo che i nodi appartenenti alla griglia di XtreemOS in un dato momento siano N 1, N 2, N 3, N 4, N 5 e N 6 e che siano presenti 4 dht pi`u quella globale (meta). La prima, quella in blu, `e costituita dai nodi N 1, N 3, N 5 e al suo interno ospita i namespace A e B. La seconda, quella on rosso, `e composta dai nodi N 1, N 3, N 5, N 6 e ospita i namespace C, D ed E. La terza, quella in verde, `e costituita dai nodi N 1, N 2, N 4, N 6 e contiene i namespace F , G, H e I. L’ultima, quella in nero, `e costituita dai nodi N 2, N 3, N 4, N 6 e contiene il namespace L. La meta-dht, quella in arancione, `e composta da tutti i nodi della griglia infine.
Il meccanismo che permette al singolo nodo di associarsi ad un name space `e mostrato invece nel listato di codice 4.1.
namespaceAssociation prende due parametri, il primo rappresenta l’og- getto namespace che a sua volta `e definito da un nome e da una serie di feature list ad esso associate, il secondo rappresenta l’ID univoco del crea-
4.3. INTERAZIONE CON I CLIENTI DI SRDS 65 DHT 1: N1,N3,N5 Namespace A Namespace B DHT 2: N1,N3,N5,N6 Namespace C Namespace D Namespace E DHT 3: N1,N2,N4,N6 Namespace F Namespace G Namespace H Namespace I DHT 4: N2,N3,N4,N6 Namespace L META‐DHT: tutti i nodi N1 N2 N3 N5 N6 N4
Figura 4.7: Esempio di utilizzo della meta-dht
tore del namespace, tuttavia nel caso dell’associazione tale parametro non `e necessario e pu`o essere anche nullo. La prima operazione che effettua, transaction begin() consiste nell’invocare l’inizio di una transazione sulla meta-dht per cui le operazioni che seguono vengono effettuate in mutua esclusione da parte ogni nodo.
Successivamente viene controllato se il namespace esiste gi`a o meno, nel caso che esista gi`a si ottengono tramite l’oggetto Meta-dht, che in questo caso funge da proxy verso la meta-dht stessa, le informazioni sulla dht alla quale appartiene, come il nodo di riferimento sul quale effettuare la join, le feature list della dht e altre informazioni di rilievo.
Tramite la funzionecheck dht association() controlla se il nodo `e effettiva- mente associato alla dht e se non lo `e vi si associa e crea il namespace. Infine tramite transaction end() esce dalla mutua esclusione.
namespaceCreation prende gli stessi due parametri della nameSpaceAs- sociation. La prima operazione che effettua, transaction begin() consiste
nell’invocare l’inizio di una transazione sulla meta-dht per cui le operazio- ni che seguono vengono effettuate in mutua esclusione da parte ogni nodo. Successivamente si controlla se il namespace che si intende creare esiste gi`a e nel caso che l’ID ad esso associato sia diverso dal quello passato come parametro si genera un eccezione che indica che lo stesso namespace `e gi`a stato creato da un altro owner. Nel caso invece che il namespace sia gia sta- to creato dallo stesso owner si ritorna il dhtObject associato al namespace ricavandolo tramite l’utilizzo del proxy alla meta-dht (Meta-dht object). Nel caso invece che il namespace non esista si tenta di crearlo su una del- le dht gi`a esistenti. Se esiste una dht che mappa le feature list richieste dal namespace tramite la funzione check dht association() si crea il nuo- vo namespace, altrimenti si crea la nuova dht tramite sempre le funzionali`a che l’oggetto proxy Meta-dht mette a disposizione e si provvede alla suc- cessiva creazione del namespace sulla dht sempre utilizzando la funzione check dht association().
Listing 4.1: Pseudocodice che rappresenta le funzioni di associazione e di creazione di namespace
public DhtObject nameSpaceAssociation(NameSpace,ID_UNIVOCO_owner
){
transaction_begin();
if ( (ID = check_exists(NameSpace))!=null ) then {
Dht dht = getHostingDHT(NameSpace);
return check_dht_association(dht,NameSpace,
ID_UNIVOCO_owner); } else {
Dht dhtNew;
for(dht istanceof Meta-dht.dhts) {
if(NameSpace.featureList.map(dht. featureList)) then { dhtNew= dht; break; } }
4.3. INTERAZIONE CON I CLIENTI DI SRDS 67 Dht dht =Meta-dht.createNewDht(NameSpace. featureList,ID_UNIVOCO_owner); return check_dht_association(dht,NameSpace, ID_UNIVOCO_owner); } transaction_end(); }
public DhtObject nameSpaceCreation(NameSpace,ID_UNIVOCO_owner){
transaction_begin();
if ( (ID = check_exists(NameSpace))!=null ) then {
if(ID == ID_UNIVOCO_owner) then {
return Meta-dht.returnAssociatedNS(
NameSpace); } else {
new Exception(‘‘ERROR: namespace already
created by another owner’’); } } else { Dht dhtNew; foreach(dht in Meta-dht.dhts) { if(NameSpace.featureList .map(dht. featureList)) then { dhtNew= dht; break; } }
if (dhtNew == null) then
Dht dht =Meta-dht.createNewDht(NameSpace. featureList,ID_UNIVOCO_owner); return check_dht_association(dht,NameSpace, ID_UNIVOCO_owner); } transaction_end(); }
private DhtObject check_dht_association(dht, NameSpace,
DhtObject dhtObject; if (!check_associated(dht)) then Meta-dht.joinDHT(dht); Meta-dht.createNewNameSpace(dht,NameSpace, ID_UNIVOCO_owner); dhtObject =Meta-dht.returnAssociatedNS(NameSpace); return dhtObject; } ————————————————————————————————— —————————————–