You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@arrow.apache.org by Tanveer Ahmad - EWI <T....@tudelft.nl> on 2019/01/07 14:24:41 UTC

c_glib API for plasma

Hi,


I'm using arrow c_glib API for plasma.

How can I pass my data and metadata to created plasma client object and similarly how can receive back data and metadata from referred plasma object? Thanks.

GPlasmaClient *gPlasmaClient;
GPlasmaObjectID *object_id;
GPlasmaCreatedObject *Object;
GPlasmaReferredObject *refObject;

object_id = gplasma_object_id_new(id_arr, 20, &error);
gPlasmaClient = gplasma_client_new("/tmp/store0", &error);
Object = gplasma_client_create(gPlasmaClient, object_id, 16, NULL, &error);

gplasma_created_object_seal(Object, &error);
gplasma_client_disconnect(gPlasmaClient, &error);

///////////////////////////////
gPlasmaClient = gplasma_client_new("/tmp/store0", &error);
refObject = gplasma_client_refer_object(gPlasmaClient, object_id, -1, &error);

gplasma_client_disconnect(gPlasmaClient, &error);




Regards,
Tanveer Ahmad


Re: c_glib API for plasma

Posted by Tanveer Ahmad - EWI <T....@tudelft.nl>.
Thank you so much Kouhei, It works.

Just a little typo (@ ref object, in g_object_get(Object,...) should be refObject) if someone wants to use it.


Regards,
Tanveer Ahmad


________________________________
From: Kouhei Sutou <ko...@clear-code.com>
Sent: Tuesday, January 8, 2019 3:33:25 AM
To: user@arrow.apache.org
Subject: Re: c_glib API for plasma

Hi,

In <52...@tudelft.nl>
  "c_glib API for plasma" on Mon, 7 Jan 2019 14:24:41 +0000,
  Tanveer Ahmad - EWI <T....@tudelft.nl> wrote:

> I'm using arrow c_glib API for plasma.
>
> How can I pass my data and metadata to created plasma client object and similarly how can receive back data and metadata from referred plasma object? Thanks.

You need to set your data between gplasma_client_create()
and gplasma_created_object_seal(). You can get buffer for
data by g_object_get(object, "data", &data, NULL).
g_object_get() is a function to get properties from an
object:
  https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-get

You can set metadata with gplasma_client_create().

You can get data and metadata from referred object by
g_object_get(). Property names of them are "data" and
"metadata":

  g_object_get(referred_object,
               "data", &data,
               "metadata", &metadata,
               NULL);

You can get raw data and metadata as
GBytes. g_bytes_get_data() will help you:

  https://developer.gnome.org/glib/stable/glib-Byte-Arrays.html#g-bytes-get-data


The following code will work:

GPlasmaClient *gPlasmaClient;
GPlasmaObjectID *object_id;
GPlasmaClientCreateOptions *create_options;
GPlasmaCreatedObject *Object;
GPlasmaReferredObject *refObject;

gPlasmaClient = gplasma_client_new("/tmp/store0", &error);
object_id = gplasma_object_id_new(id_arr, 20, &error);
create_options = gplasma_client_create_options_new();
{
  /* It should be guint8 instead of gchar. We use gchar here
     just for convenient. */
  const gchar metadata[] = "your metadata";
  gplasma_client_create_options_set_metadata(create_options,
                                             (const guint8 *)metadata,
                                             sizeof(metadata));
}
Object = gplasma_client_create(gPlasmaClient, object_id, 16, create_options, &error);
g_object_unref(object_id);
g_object_unref(create_options);
{
  GArrowBuffer *data;
  g_object_get(Object,
               "data", &data,
               NULL);
  garrow_mutable_buffer_set_data(GARROW_MUTABLE_BUFFER(data),
                                 0,
                                 "your data",
                                 9, /* sizeof("your data"). */
                                 &error);
  g_object_unref(data);
}

gplasma_created_object_seal(Object, &error);
g_object_unref(Object);
gplasma_client_disconnect(gPlasmaClient, &error);
g_object_unref(gPlasmaClient);

///////////////////////////////
gPlasmaClient = gplasma_client_new("/tmp/store0", &error);
refObject = gplasma_client_refer_object(gPlasmaClient, object_id, -1, &error);
{
  GArrowBuffer *data;
  GArrowBuffer *metadata;
  g_object_get(Object,
               "data", &data,
               "metadata", &metadata,
               NULL);
  {
    GBytes *data_bytes;
    data_bytes = garrow_buffer_get_data(data);
    g_print("data: <%.*s>\n",
            (int)g_bytes_get_size(data_bytes),
            g_bytes_get_data(data_bytes, NULL));
    g_bytes_unref(data_bytes);
  }
  g_object_unref(data);
  {
    GBytes *metadata_bytes;
    metadata_bytes = garrow_buffer_get_data(metadata);
    g_print("metadata: <%.*s>\n",
            (int)g_bytes_get_size(metadata_bytes),
            g_bytes_get_data(metadata_bytes, NULL));
    g_bytes_unref(metadata_bytes);
  }
  g_object_unref(metadata);
}
g_object_unref(refObject);

gplasma_client_disconnect(gPlasmaClient, &error);
g_object_unref(gPlasmaClient);


Thanks,
--
kou

Re: c_glib API for plasma

Posted by Kouhei Sutou <ko...@clear-code.com>.
Hi,

In <52...@tudelft.nl>
  "c_glib API for plasma" on Mon, 7 Jan 2019 14:24:41 +0000,
  Tanveer Ahmad - EWI <T....@tudelft.nl> wrote:

> I'm using arrow c_glib API for plasma.
> 
> How can I pass my data and metadata to created plasma client object and similarly how can receive back data and metadata from referred plasma object? Thanks.

You need to set your data between gplasma_client_create()
and gplasma_created_object_seal(). You can get buffer for
data by g_object_get(object, "data", &data, NULL).
g_object_get() is a function to get properties from an
object:
  https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-get

You can set metadata with gplasma_client_create().

You can get data and metadata from referred object by
g_object_get(). Property names of them are "data" and
"metadata":

  g_object_get(referred_object,
               "data", &data,
               "metadata", &metadata,
               NULL);

You can get raw data and metadata as
GBytes. g_bytes_get_data() will help you:

  https://developer.gnome.org/glib/stable/glib-Byte-Arrays.html#g-bytes-get-data


The following code will work:

GPlasmaClient *gPlasmaClient;
GPlasmaObjectID *object_id;
GPlasmaClientCreateOptions *create_options;
GPlasmaCreatedObject *Object;
GPlasmaReferredObject *refObject;

gPlasmaClient = gplasma_client_new("/tmp/store0", &error);
object_id = gplasma_object_id_new(id_arr, 20, &error);
create_options = gplasma_client_create_options_new();
{
  /* It should be guint8 instead of gchar. We use gchar here
     just for convenient. */
  const gchar metadata[] = "your metadata";
  gplasma_client_create_options_set_metadata(create_options,
                                             (const guint8 *)metadata,
                                             sizeof(metadata));
}
Object = gplasma_client_create(gPlasmaClient, object_id, 16, create_options, &error);
g_object_unref(object_id);
g_object_unref(create_options);
{
  GArrowBuffer *data;
  g_object_get(Object,
               "data", &data,
               NULL);
  garrow_mutable_buffer_set_data(GARROW_MUTABLE_BUFFER(data),
                                 0,
                                 "your data",
                                 9, /* sizeof("your data"). */
                                 &error);
  g_object_unref(data);
}

gplasma_created_object_seal(Object, &error);
g_object_unref(Object);
gplasma_client_disconnect(gPlasmaClient, &error);
g_object_unref(gPlasmaClient);

///////////////////////////////
gPlasmaClient = gplasma_client_new("/tmp/store0", &error);
refObject = gplasma_client_refer_object(gPlasmaClient, object_id, -1, &error);
{
  GArrowBuffer *data;
  GArrowBuffer *metadata;
  g_object_get(Object,
               "data", &data,
               "metadata", &metadata,
               NULL);
  {
    GBytes *data_bytes;
    data_bytes = garrow_buffer_get_data(data);
    g_print("data: <%.*s>\n",
            (int)g_bytes_get_size(data_bytes),
            g_bytes_get_data(data_bytes, NULL));
    g_bytes_unref(data_bytes);
  }
  g_object_unref(data);
  {
    GBytes *metadata_bytes;
    metadata_bytes = garrow_buffer_get_data(metadata);
    g_print("metadata: <%.*s>\n",
            (int)g_bytes_get_size(metadata_bytes),
            g_bytes_get_data(metadata_bytes, NULL));
    g_bytes_unref(metadata_bytes);
  }
  g_object_unref(metadata);
}
g_object_unref(refObject);

gplasma_client_disconnect(gPlasmaClient, &error);
g_object_unref(gPlasmaClient);


Thanks,
--
kou