This is an old revision of the document!


Tuples on the Ambient (TOTAM)

TOTAM is a communication abstraction to enable pervasive social interactivity: it make possible that flockrs can communicate with each other without being connected at the same time while maintaining privacy and limited network traffic. The basic communications API of the framework provides means to address and communicate with individual flockrs by means of remote objects references. However, communicating with a large amount of flockrs in this fashion does not scale (as it would require to manually manage a group of remote references whose composition change often). Instead, we have designed a dedicated communication abstraction for flock communication called TOTAM.

Design

We have reused the concepts developed by TOTA. This could be combined with the RETE engine we built for the characteristic functions, in the future to reason about multiple tuples.

The original idea was to build a framework similar to TOTA to be able to exchange and percolate guanotes. Tota proposes relying on distributed tuples to coordinate distributed application nodes. Tuples are injected in the network and can autonomously propagate according to application-specific propagation rules expressed in the tuples themselves. The idea is to implement TOTAM as a general framework so that we can then instantiate our TOTAM with guanote objects in Guanotes. A guanote actually extends a tuple object of TOTAM with some flockr-dependent behaviour.

TOTAM has been designed to be independent from service discovery. So, Guanotes will also have to implement some glue codeto plug in the discovery mechanism of Urbiflock (via Flockr).

API

Here comes the public interface to interact with an AmbientTota framework:

makeTupleSpace()
makeTuple(tupleID)
extendTuple: tuple with: closure

A tuple space (ts) in AmbientTota basically consists of a local ts, an ambient ts (to inject tuples in the ambient). The public interface of an ts is the following:

// tota operations to manage a local ts
def add(tuple)
def delete(template) -> vector with the deleted tuples 
matching the template
def read(template) -> vector with the matching tuples

//publishes a tuple into the ambient ( ~ inject in TOTA)
def inject(tuple) -> subscription object to cancel the injection

// places a listener on to the local TS ( ~ subscribe in TOTA)
// it returns a publication object to be able to unsusbscribe 
when: template matches:{ | tuple |
 // code  
}
//Templates are currently boolean expressions on tuples. 
Example of template applied to guanotes:
{ |guanote|  guanote.flock == "KK" }

//methods belonging to the propagation protocol

// notifies the discovery of a remote ts
// and starts the propagation protocol (send side)
def notifyTSDiscovered(ts)
// notifies the arrival of tuples from a ts 
// receive side of the propagation protocol
def receiveTyples(tuples)

A tuple in our system is just the object contained in a local TS offering the following API to propagate itself:

// called in every tuple at pass() 
def decidePropagation() -> boolean
// specifies operations on the local TS
def doAction ();
// specifies operations on the tuple itself 
def changeTupleContent() -> tuple
// if true -> note gets added to local TS
def decideStore () -> boolean
// if true -> tuple gets unexported and deleted from local TS.
//new operation not in TOTA
def decideDie() -> boolean 

decideDie() is there for discontinuous decidePropagation functions. for example, tuples that should be only propagated every Tuesday could not implemented with TOTA because the propagation protocol only gets called once. We change this by providing decideDie() that gets called when you decide not to propagate. Like this a tuple can still be propagate at a later point in time, despite the fact that the decidePropagation function has evaluated to false at a certain moment.

uf/totam.1258553415.txt.gz · Last modified: 2010/01/21 17:20 by elisag
 
 
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki