11.04.2013 Views

gestão de dados partilhados em ambientes de computação móvel

gestão de dados partilhados em ambientes de computação móvel

gestão de dados partilhados em ambientes de computação móvel

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

A.1. FILIAÇÃO 209<br />

estas situações, a última condição expressa anteriormente é generalizada para (consi<strong>de</strong>rando a r<strong>em</strong>oção<br />

conjunta <strong>de</strong> um conjunto R <strong>de</strong> servidores, sendo que o conjunto S <strong>de</strong> servidores não r<strong>em</strong>ovidos — com<br />

U = R∪S, o conjunto <strong>de</strong> servidores que replica o volume — <strong>de</strong>fine um quorum (neste caso, uma maioria)<br />

no sist<strong>em</strong>a U):<br />

• A r<strong>em</strong>oção forçada <strong>de</strong> um conjunto R <strong>de</strong> servidores po<strong>de</strong> prosseguir se o servidor com menor nú-<br />

mero <strong>de</strong> or<strong>de</strong>m, não contido <strong>em</strong> R, verificar que: (1) todos os servidores do volume, com excepção<br />

dos servidores incluídos <strong>em</strong> R, concordaram com a r<strong>em</strong>oção <strong>de</strong> todos os servidores <strong>em</strong> R (convém<br />

realçar que é possível que alguns servidores <strong>em</strong> R tenham concordado com a r<strong>em</strong>oção <strong>de</strong> outros<br />

servidores presentes <strong>em</strong> R e tenham posteriormente sido alvo <strong>de</strong> r<strong>em</strong>oção forçada); (2) o estado<br />

actual do servidor reflecte os estados <strong>de</strong> todos os servidores no momento <strong>em</strong> que eles executaram a<br />

última operação <strong>de</strong> concordância com a r<strong>em</strong>oção <strong>de</strong> um servidor pertencente a R (ou seja, o estado<br />

actual reflecte todas as operações submetidas pelos servidores <strong>em</strong> S).<br />

Impl<strong>em</strong>entação Para impl<strong>em</strong>entar a estratégia <strong>de</strong>scrita anteriormente, <strong>de</strong>finiram-se as seguintes ope-<br />

rações no coobjecto <strong>de</strong> filiação:<br />

askR<strong>em</strong>ove(uid,i) Pe<strong>de</strong> a r<strong>em</strong>oção do servidor i do grupo <strong>de</strong> replicadores, usando o i<strong>de</strong>ntificador único<br />

uid para i<strong>de</strong>ntificar univocamente o pedido. Esta operação, quando executada, coloca o estado do<br />

servidor i como a_r<strong>em</strong>over(uid) (no caso <strong>de</strong> o estado já ser a_r<strong>em</strong>over(uid0), a operação falha e é<br />

submetida a operação rollbackR<strong>em</strong>ove(uid)) 5 .<br />

agreeR<strong>em</strong>ove(j,uid) Indica a concordância do servidor j com o pedido <strong>de</strong> r<strong>em</strong>oção (do servidor i) com<br />

i<strong>de</strong>ntificador uid. O coobjecto <strong>de</strong> filiação mantém, para cada pedido <strong>de</strong> r<strong>em</strong>oção <strong>de</strong> um servidor, a<br />

lista <strong>de</strong> servidores que afirmaram a sua concordância com essa r<strong>em</strong>oção. Após a submissão <strong>de</strong>sta<br />

operação, o servidor j não po<strong>de</strong> retroce<strong>de</strong>r na sua intenção <strong>de</strong> r<strong>em</strong>over i, n<strong>em</strong> estabelecer qual-<br />

quer sessão <strong>de</strong> sincronização com i, a menos que seja executada uma operação <strong>de</strong> rollbackR<strong>em</strong>ove<br />

noutro servidor. Um servidor l que inicie a replicação <strong>de</strong> um volume <strong>de</strong>ve executar a acção agree-<br />

R<strong>em</strong>ove(l,uid) se o seu patrocinador, o servidor j, tiver executado a operação agreeR<strong>em</strong>ove(j,uid)<br />

5 A execução optimista das operações no coobjecto <strong>de</strong> filiação po<strong>de</strong> levar a que a primeira execução da operação askRe-<br />

move(uid,i) coloque o estado do servidor i como a_r<strong>em</strong>over(uid), enquanto na execução <strong>de</strong>finitiva se verifique que já existe<br />

outro pedido anterior para a r<strong>em</strong>oção do mesmo servidor i — esta situação não afecta a correcção do funcionamento do sis-<br />

t<strong>em</strong>a, <strong>de</strong>vendo <strong>em</strong> cada execução ser<strong>em</strong> executadas as acções indicadas. Quando a execução optimista da operação é <strong>de</strong>sfeita,<br />

o estado associado ao servidor i é reposto no estado anterior, mas as operações submetidas <strong>em</strong> consequências da primeira exe-<br />

cução não são r<strong>em</strong>ovidas (uma optimização possível é submeter a operação <strong>de</strong> rollbackR<strong>em</strong>ove apenas uma vez). A correcção<br />

<strong>de</strong> funcionamento do sist<strong>em</strong>a também não é afectada se aquando da execução <strong>de</strong>finitiva, ao contrário do que aconteceu numa<br />

execução optimista, o estado do servidor i não for activo — as operações <strong>de</strong> rollbackR<strong>em</strong>ove(uid) encarregam-se <strong>de</strong> abortar<br />

este pedido. Neste caso, um novo pedido <strong>de</strong>ve ser efectuado posteriormente.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!