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

asc.di.fct.unl.pt
from asc.di.fct.unl.pt More from this publisher
11.04.2013 Views

34 CAPÍTULO 3. APRESENTAÇÃO DO SISTEMA DOORS 3.2.2.3 Funcionamento comum no servidor Nos servidores, os coobjectos são manipulados em duas situações: quando o servidor recebe operações de um cliente e durante as sessões de sincronização. Para tal, o servidor cria uma cópia do coobjecto (em memória), executa as acções necessárias e grava o novo estado em memória estável. De seguida descrevem-se as acções efectuadas em cada uma das situações. Quando o servidor recebe, de um cliente, uma sequência de operações, entrega essas operações ao coobjecto (através da interface de sistema do coobjecto). No coobjecto, a função que recebe as opera- ções, implementada na cápsula, executa as seguintes acções. Primeiro, entrega a sequência de operações ao componente de registo. O componente de registo atribui um identificador à sequência de operações e armazena-a. Adicionalmente, o sumário das operações 9 conhecidas, mantido no componente de atri- butos e usado durante o funcionamento do coobjecto, é actualizado. Segundo, notifica o componente de reconciliação da existência de novas operações — este componente é responsável por executar as opera- ções armazenadas no componente de registo de acordo com a política definida (garantindo que as várias réplicas de um mesmo coobjecto evoluem da forma esperada). A execução das operações é efectuada de forma idêntica à execução local de operações no cliente (e pode originar a produção e tratamento de informação de awareness ou a invocação de outras operações de outros subobjectos — estas invocações são processadas executando imediatamente as operações nos subobjectos respectivos). Durante as sessões de sincronização os coobjectos podem ser acedidos em três situações: (1) para transmitir o sumário das operações conhecidas e a informação sobre as operações conhecidas noutros servidores; (2) para enviar o conjunto de operações desconhecidas no parceiro; (3) para receber um conjunto de operações desconhecidas do parceiro. O sumário das operações conhecidas e a informação sobre as operações conhecidas nos outros servi- dores está guardada nos atributos do coobjecto. Para obter esta informação, o servidor não necessita de criar uma cópia do coobjecto — a API do sistema permite obter apenas os atributos de um coobjecto. O conjunto de operações que um servidor conhece, mas que o parceiro desconhece, é obtido através da interface do coobjecto (checkChanges). Esta função obtém o conjunto de operações a enviar para o parceiro a partir do componente de registo. Nesta situação, o servidor utiliza a informação sobre o estado do parceiro (operações conhecidas e operações que o parceiro sabe que os outros servidores conhecem) para actualizar a sua informação local. Quando um servidor recebe um conjunto de operações de outro servidor, esse conjunto de operações é entregue ao coobjecto através da interface do coobjecto (insertOp). Esta função efectua as seguintes operações. Primeiro, entrega as operações ao componente de registo, o qual as armazena. Segundo, 9 O identificador de uma operação e os sumários de operações usados no sistema DOORS são baseados em relógios lógicos e vectoriais, como se detalha na secção 4.1.1.

3.2. FRAMEWORK DE COMPONENTES: PRINCÍPIOS GERAIS 35 informa o componente de reconciliação que existem novas operações no componente de registo. Como anteriormente, o servidor utiliza a informação sobre o estado do parceiro para actualizar a sua informação local. Um coobjecto pode ainda ser acedido durante os protocolos de mudança de filiação (do conjunto de servidores que replicam um volume). Durante este processo, e de forma semelhante às situações anteri- ores, o núcleo do sistema limita-se a executar as operações respectivas na interface do coobjecto. Estas operações, implementadas na cápsula, acedem aos vários componentes do coobjecto para executarem as operações respectivas (por exemplo, para determinar se um servidor pode ser removido é necessário verificar se o componente de reconciliação já não necessita da informação sobre as operações submetidas nesse servidor). 3.2.2.4 Operações definidas nos componentes A descrição anterior omitiu a possibilidade de definir, nos vários componentes, operações que devam ser processadas de forma semelhante às operações dos subobjectos, i.e., registando a sua invocação e pro- pagando estas invocações para todas as réplicas. Por exemplo, a remoção de um coobjecto é controlada por uma operação definida no componente de atributos (ver detalhes na secção 6.1.3). Esta funcionalidade é implementada por pré-processamento do código dos componentes. Para cada operação que deve ser registada (e propagada para as várias réplicas) são criados dois métodos: um método que se limita a registar a operação (de forma idêntica aos métodos definidos num representante de um subobjecto) e um método “sombra” com o código da operação. Todas as outras funções definidas nos componentes são processadas como normais funções de um objecto e afectam apenas o estado da cópia na qual são executadas. Por exemplo, a actualização do sumário das operações conhecidas localmente efectuada durante uma sessão de sincronização apenas tem efeito sobre a cópia local do coobjecto. 3.2.2.5 Atributos de uma operação Até ao momento descreveu-se o processamento comum das operações definidas nos subobjectos (e nos outros componentes de um coobjecto) cuja invocação é interceptada no âmbito do funcionamento de um coobjecto. Este processamento comum pode ser modificado através dum conjunto de atributos que o programador pode associar a uma operação quando define o código do subobjecto/coobjecto — este có- digo é pré-processado, como se descreve na secção 3.4.1, de forma a que as operações sejam executadas da forma especificada. No sistema DOORS estão actualmente definidos os seguintes atributos: Leitura Indica que a operação não modifica o estado do coobjecto. Estas operações não necessitam de ser registadas.

3.2. FRAMEWORK DE COMPONENTES: PRINCÍPIOS GERAIS 35<br />

informa o componente <strong>de</strong> reconciliação que exist<strong>em</strong> novas operações no componente <strong>de</strong> registo. Como<br />

anteriormente, o servidor utiliza a informação sobre o estado do parceiro para actualizar a sua informação<br />

local.<br />

Um coobjecto po<strong>de</strong> ainda ser acedido durante os protocolos <strong>de</strong> mudança <strong>de</strong> filiação (do conjunto <strong>de</strong><br />

servidores que replicam um volume). Durante este processo, e <strong>de</strong> forma s<strong>em</strong>elhante às situações anteri-<br />

ores, o núcleo do sist<strong>em</strong>a limita-se a executar as operações respectivas na interface do coobjecto. Estas<br />

operações, impl<strong>em</strong>entadas na cápsula, ace<strong>de</strong>m aos vários componentes do coobjecto para executar<strong>em</strong><br />

as operações respectivas (por ex<strong>em</strong>plo, para <strong>de</strong>terminar se um servidor po<strong>de</strong> ser r<strong>em</strong>ovido é necessário<br />

verificar se o componente <strong>de</strong> reconciliação já não necessita da informação sobre as operações submetidas<br />

nesse servidor).<br />

3.2.2.4 Operações <strong>de</strong>finidas nos componentes<br />

A <strong>de</strong>scrição anterior omitiu a possibilida<strong>de</strong> <strong>de</strong> <strong>de</strong>finir, nos vários componentes, operações que <strong>de</strong>vam ser<br />

processadas <strong>de</strong> forma s<strong>em</strong>elhante às operações dos subobjectos, i.e., registando a sua invocação e pro-<br />

pagando estas invocações para todas as réplicas. Por ex<strong>em</strong>plo, a r<strong>em</strong>oção <strong>de</strong> um coobjecto é controlada<br />

por uma operação <strong>de</strong>finida no componente <strong>de</strong> atributos (ver <strong>de</strong>talhes na secção 6.1.3).<br />

Esta funcionalida<strong>de</strong> é impl<strong>em</strong>entada por pré-processamento do código dos componentes. Para cada<br />

operação que <strong>de</strong>ve ser registada (e propagada para as várias réplicas) são criados dois métodos: um<br />

método que se limita a registar a operação (<strong>de</strong> forma idêntica aos métodos <strong>de</strong>finidos num representante<br />

<strong>de</strong> um subobjecto) e um método “sombra” com o código da operação.<br />

Todas as outras funções <strong>de</strong>finidas nos componentes são processadas como normais funções <strong>de</strong> um<br />

objecto e afectam apenas o estado da cópia na qual são executadas. Por ex<strong>em</strong>plo, a actualização do<br />

sumário das operações conhecidas localmente efectuada durante uma sessão <strong>de</strong> sincronização apenas<br />

t<strong>em</strong> efeito sobre a cópia local do coobjecto.<br />

3.2.2.5 Atributos <strong>de</strong> uma operação<br />

Até ao momento <strong>de</strong>screveu-se o processamento comum das operações <strong>de</strong>finidas nos subobjectos (e nos<br />

outros componentes <strong>de</strong> um coobjecto) cuja invocação é interceptada no âmbito do funcionamento <strong>de</strong> um<br />

coobjecto. Este processamento comum po<strong>de</strong> ser modificado através dum conjunto <strong>de</strong> atributos que o<br />

programador po<strong>de</strong> associar a uma operação quando <strong>de</strong>fine o código do subobjecto/coobjecto — este có-<br />

digo é pré-processado, como se <strong>de</strong>screve na secção 3.4.1, <strong>de</strong> forma a que as operações sejam executadas<br />

da forma especificada. No sist<strong>em</strong>a DOORS estão actualmente <strong>de</strong>finidos os seguintes atributos:<br />

Leitura Indica que a operação não modifica o estado do coobjecto. Estas operações não necessitam <strong>de</strong><br />

ser registadas.

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

Saved successfully!

Ooh no, something went wrong!