You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cassandra.apache.org by Padraig O'Sullivan <os...@gmail.com> on 2009/12/11 05:26:39 UTC
C++ Interface Issues
Hi!
I was curious if anyone has had success using the C++ interface to
Cassandra? I've been having some difficulties and just wanted to check
if I was doing something wrong before debugging further or if there
was any known issues with C++ interface.
I have a simple test program to demonstrate my issue (headers and
using namespace declarations omitted for clarity):
int main()
{
shared_ptr<TTransport> socket(new TSocket(host, port));
shared_ptr<TTransport> transport(new TBufferedTransport(socket));
shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
CassandraClient client(protocol);
try
{
transport->open();
ColumnPath old_col;
old_col.column_family.assign("Data");
old_col.super_column.assign("");
old_col.column.assign("first");
ColumnOrSuperColumn ret_val;
client.get(ret_val,
"drizzle",
"padraig",
old_col,
ZERO);
transport->close();
}
catch (InvalidRequestException &re)
{
printf("ERROR: %s\n", re.why.c_str());
}
catch (TException &tx)
{
printf("ERROR: %s\n", tx.what());
}
}
Now, when I run this, I get the following (from the InvalidRequestException):
$ ./simple_get
ERROR: column parameter is not optional for standard CF Data
$
When I look at the relevant piece of code in the method
validateColumnPath() in ThriftValidation.java, I see the following:
if (column_path.column == null)
{
throw new InvalidRequestException("column parameter is not optional
for standard CF " + column_path.column_family);
}
and I can confirm that the super_column and column members of the
ColumnPath object are appearing as null strings in this method but the
column parameter is not being passed as a null parameter from my C++
program.
So basically, I'm just wondering if anyone has successfully used the
C++ interface generated by thrift to Cassandra? Are there any issues
with it that I am not aware of? Has anyone else encountered this
problem?
I should mention that I checked out the latest version of thrift from
SVN and used that to generate the C++ files for interfacing with
cassandra and I used git to clone the latest version of Cassandra (the
output of show version from the CLI shows the Cassandra version as
0.5-beta1).
Thanks,
Padraig
Re: C++ Interface Issues
Posted by Jonathan Ellis <jb...@gmail.com>.
I think you are seeing the behavior described at in
http://issues.apache.org/jira/browse/THRIFT-455, where "In C++,
optional fields require applications to manually set __isset fields,
otherwise they are not serialized on writing." Apparently this is
considered a "feature."
-Jonathan
On Thu, Dec 10, 2009 at 10:26 PM, Padraig O'Sullivan
<os...@gmail.com> wrote:
> Hi!
>
> I was curious if anyone has had success using the C++ interface to
> Cassandra? I've been having some difficulties and just wanted to check
> if I was doing something wrong before debugging further or if there
> was any known issues with C++ interface.
>
> I have a simple test program to demonstrate my issue (headers and
> using namespace declarations omitted for clarity):
>
> int main()
> {
> shared_ptr<TTransport> socket(new TSocket(host, port));
> shared_ptr<TTransport> transport(new TBufferedTransport(socket));
> shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
> CassandraClient client(protocol);
> try
> {
> transport->open();
> ColumnPath old_col;
> old_col.column_family.assign("Data");
> old_col.super_column.assign("");
> old_col.column.assign("first");
> ColumnOrSuperColumn ret_val;
> client.get(ret_val,
> "drizzle",
> "padraig",
> old_col,
> ZERO);
> transport->close();
> }
> catch (InvalidRequestException &re)
> {
> printf("ERROR: %s\n", re.why.c_str());
> }
> catch (TException &tx)
> {
> printf("ERROR: %s\n", tx.what());
> }
> }
>
> Now, when I run this, I get the following (from the InvalidRequestException):
>
> $ ./simple_get
> ERROR: column parameter is not optional for standard CF Data
> $
>
> When I look at the relevant piece of code in the method
> validateColumnPath() in ThriftValidation.java, I see the following:
>
> if (column_path.column == null)
> {
> throw new InvalidRequestException("column parameter is not optional
> for standard CF " + column_path.column_family);
> }
>
> and I can confirm that the super_column and column members of the
> ColumnPath object are appearing as null strings in this method but the
> column parameter is not being passed as a null parameter from my C++
> program.
>
> So basically, I'm just wondering if anyone has successfully used the
> C++ interface generated by thrift to Cassandra? Are there any issues
> with it that I am not aware of? Has anyone else encountered this
> problem?
>
> I should mention that I checked out the latest version of thrift from
> SVN and used that to generate the C++ files for interfacing with
> cassandra and I used git to clone the latest version of Cassandra (the
> output of show version from the CLI shows the Cassandra version as
> 0.5-beta1).
>
> Thanks,
> Padraig
>