[saga-core-wg] Grid RPC data management & SAGA
Andre Merzky
andre at merzky.net
Fri Sep 25 05:34:40 CDT 2009
Quoting [Ga?l Le Mahec] (Sep 25 2009):
>
> >Some suggested changes below:
>
> >> class buffer_parameter : extends parameter
> >
> >This one should then also inherit saga::buffer I guess.
>
> For a C++ mapping, it is probably the easiest and cleanest way but if
> I remember well, SIDL does not allow multiple inheritance. So I
> avoided to use it.
Oh, SIDL does allow multiple inheritance - and, for good or
for bad, we use it in a number of places already. Mostly
for interfaces though - but at the end, that is what your
base parameter class provides, right?
For example, the rpc class in SAGA is:
class rpc : implements saga::object
implements saga::async
implements saga::permissions
> A solution is then to encapsulate a buffer object
> inside the buffer_parameter class.
>
> >>[...]
>
> >What would a container_parameter look like? I am not sure I
> >understood that one, yet.
>
> Ooops, I forgot to give the container class.
>
> class container_parameter : extends handle_parameter
> {
> /* For a container, the dimension size is the size of the
> * container which is increasing each time we add a data.
> * And the data type is "Container".
> *
> * So, the constructor call its parent constructor like this:
> * saga::rpc::handle_parameter([0], input_uris,
> *
> output_uris,
> *
> Container,
> *
> data_modes);
> */
>
> CONSTRUCTOR(in array<uri> input_uris,
> in array<uri> output_uris,
> in array<data_mode>
> data_modes,
> out container_parameter obj);
>
> // add a data into this data container
> set_data(in parameter data, in int rank);
This should be 'add_data()'? Or is rank the id of the data
item to be set?
> // get a data from this data container
> get_data(out parameter data, in int rank);
>
> // add a data at the end of this data container
> push_back(in parameter data);
> ...
>
> }
>
> A container is then a "special" handle_parameter which contains a set
> of parameters (accessible using an index value or push/pop methods).
> We defined it in the Grid RPC data management document to manage sets
> of data.
> (We have some use-cases where a service is called with a variable
> length set of input data and a variable length set of output).
I am not sure I understand the purpose of the container
class, really. The rpc-data draft I found on GridForge
(http://forge.ogf.org/sf/go/doc15355) does not mention it,
really - could you send me an update, please?
> By using the "parameter" class as the type a "container_parameter" can
> manage, all the different data types can be stored in the container.
Why is that actually needed on API level? The rpc call is
getting a list of parameters, right (IIRC, its a vararg in
the original C binding.) For SAGA, its a vector. So, that
vector already acts as a container for all parameters. What
additional functionality would a parameter_container
provide?
Cheers, Andre.
>
> Regards,
>
> Gaël.
>
>
--
Nothing is ever easy.
More information about the saga-core-wg
mailing list