Modulo PeerServices - Appunti - Algoritmi 2 / 2

Algoritmo di rilevamento di non partecipazione

check_non_participation

bool check_non_participation(p_id, lvl, _pos)

Algoritmo di divulgazione della partecipazione

publish_my_participation

void publish_my_participation(p_id)

set_participant

void set_participant(int p_id, PeerTupleGNode gn)

Algoritmi per il mantenimento di un database distribuito

per assicurare delle repliche

bool begin_replica(q, p_id, x̄, r, timeout_exec, out IPeersResponse? resp, out IPeersContinuation cont)

bool next_replica(IPeersContinuation cont, out IPeersResponse? resp)

per reperire i record di pertinenza nella fase di ingresso in una rete

Il modulo fornisce alcuni algoritmi alle classi che implementano servizi che prevedono il mantenimento di database distribuiti. Con questi algoritmi tali classi sono facilitate nel compito di reperire i record di pertinenza nella fase di ingresso in una rete. Questi algoritmi pongono alcune regole che la classe del servizio deve rispettare:

Il modulo fornisce la classe RequestWaitThenSendRecord. Si tratta di una classe serializzabile, che deriva da Object, e contiene una istanza di Object serializzabile k. Implementa l'interfaccia (vuota) IPeersRequest. È la richiesta di aspettare un tempo δ (valutato direttamente dal nodo che riceve la richiesta) e poi inviare il record relativo alla chiave k. Tale classe viene esposta dal modulo, in quanto la classe del servizio deve poter riconoscere una sua istanza, ma i suoi membri non sono esposti, incluso il costruttore.

Il modulo fornisce la classe RequestWaitThenSendRecordResponse. Si tratta di una classe serializzabile, che deriva da Object, e contiene una istanza di Object serializzabile record. Implementa l'interfaccia (vuota) IPeersResponse. È la risposta alla richiesta sopra descritta. Tale classe non viene esposta dal modulo.

Il modulo fornisce la classe RequestWaitThenSendRecordNotFound. Si tratta di una classe serializzabile, che deriva da Object, e non ha alcun dato al suo interno. Implementa l'interfaccia (vuota) IPeersResponse. È la risposta come eccezione NOT_FOUND alla richiesta sopra descritta. Tale classe non viene esposta dal modulo.

servizi con scadenza temporale dei record

I metodi ttl_db_* servono a gestire un database distribuito in cui i record hanno una scadenza, o TTL. Il modulo, oltre a fornire tali metodi, fornisce la classe RequestSendKeys, la classe RequestSendKeysResponse, la classe TemporalDatabaseHandler, l'interfaccia ITemporalDatabaseDescriptor.

La classe RequestSendKeys è una classe serializzabile, che deriva da Object, e non ha alcun dato al suo interno. Implementa l'interfaccia (vuota) IPeersRequest. È la richiesta di inviare tutte le chiavi memorizzate. Tale classe viene esposta dal modulo, in quanto la classe del servizio deve poter riconoscere una sua istanza, ma i suoi membri non sono esposti, incluso il costruttore.

La classe RequestSendKeysResponse è una classe serializzabile, che deriva da Object, e contiene una lista di istanze di Object serializzabili. Implementa l'interfaccia (vuota) IPeersResponse. È la risposta alla richiesta di inviare tutte le chiavi memorizzate. Tale classe non viene esposta dal modulo.

La classe TemporalDatabaseHandler è esposta dal modulo, ma il suo contenuto è del tutto oscuro all'esterno del modulo. I suoi membri, accessibili solo dal modulo, sono:

L'interfaccia ITemporalDatabaseDescriptor espone questi metodi:

void ttl_db_begin(ITemporalDatabaseDescriptor tdd, List<int> tuple_n)

IPeersResponse ttl_db_got_request(ITemporalDatabaseDescriptor tdd, IPeersRequest r, int common_lvl) throws PeersRefuseExecutionError

internal void ttl_db_retrieve_record(ITemporalDatabaseDescriptor tdd, Object k)

servizi con un numero preciso ed esiguo di possibili chiavi

I metodi fixed_keys_db_* servono a gestire un database distribuito in cui le possibili chiavi sono in un set definito e in numero esiguo. Il modulo, oltre a fornire tali metodi, fornisce la classe FixedKeysDatabaseHandler, l'interfaccia IFixedKeysDatabaseDescriptor.

La classe RequestNop è una classe serializzabile, che deriva da Object, e non ha alcun dato al suo interno. Implementa l'interfaccia (vuota) IPeersRequest. È una finta richiesta, serve solo a contattare il detentore corrente del record di una chiave e vederne l'indirizzo. Tale classe viene esposta dal modulo, in quanto la classe del servizio deve poter riconoscere una sua istanza, ma i suoi membri non sono esposti, incluso il costruttore.

La classe RequestNopResponse è una classe serializzabile, che deriva da Object, e non ha alcun dato al suo interno. Implementa l'interfaccia (vuota) IPeersResponse. È la risposta alla finta richiesta di cui sopra. Tale classe non viene esposta dal modulo.

La classe FixedKeysDatabaseHandler è esposta dal modulo, ma il suo contenuto è del tutto oscuro all'esterno del modulo. I suoi membri, accessibili solo dal modulo, sono:

L'interfaccia IFixedKeysDatabaseDescriptor espone questi metodi:

void fixed_keys_db_begin(IFixedKeysDatabaseDescriptor fkdd, List<Object> K)

IPeersResponse fixed_keys_db_got_request(IFixedKeysDatabaseDescriptor fkdd, IPeersRequest r, int common_lvl) throws PeersRefuseExecutionError

internal void fixed_keys_db_retrieve_record(IFixedKeysDatabaseDescriptor fkdd, Object k)