• Non ci sono risultati.

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; } ————————————————————————————————— —————————————–

4.4

(NO!!)Interfacciamento verso le DHT

Documenti correlati