I'm getting: org.apache.thrift.transport.TTransportException: Cannot write to null outputStream at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:137) at org.apache.thrift.protocol.TBinaryProtocol.writeI32(TBinaryProtocol.java:152) at org.apache.thrift.protocol.TBinaryProtocol.writeMessageBegin(TBinaryProtocol.java:80) at org.apache.cassandra.service.Cassandra$Client.send_get_string_property(Cassandra.java:681) at org.apache.cassandra.service.Cassandra$Client.get_string_property(Cassandra.java:675) at com.atsid.cassandra.ngram.test.TestRingConnection.main(TestRingConnection.java:26)
when running: TTransport tr = new TSocket("localhost", 9160); TProtocol proto = new TBinaryProtocol(tr); Cassandra.Client client = new Cassandra.Client(proto); try { String jsonServerList = client.get_string_property("token map"); What am I doing wrong here? On Wed, Mar 17, 2010 at 11:33 AM, Sonny Heer <sonnyh...@gmail.com> wrote: > Cool thanks Todd. I'd be interested at some point to see the updated > .6 version as well. Thanks again! > > On Wed, Mar 17, 2010 at 9:24 AM, B. Todd Burruss <bburr...@real.com> wrote: >> below is the commented out code i once used. i think it is from the 0.5 >> days, so it might not even work now. not sure. the bootstrapHostArr is >> simply a list of host information used to bootstrap the process. >> connectToHost is a method used to generate a Cassandra.Client object. >> there is sample code on cassandra wiki for doing this. good luck! >> >> // can't use this on cassandra because the tokens returned are for the >> "internal cassandra server comm", not the thrift IPs >> // String hostList = null; >> // for ( HostInfo hi : bootstrapHostArr ) { >> // Cassandra.Client client = null; >> // try { >> // client = connectToHost( hi.getHostName(), hi.getPort() ); >> // hostList = client.get_string_property( "token map" ); >> // break; >> // } >> // catch ( TTransportException e ) { >> // logger.error( "cannot connect to bootstrap node - will try >> another if available : " + hi.getNameAndPort() ); >> // } >> // catch ( TException e ) { >> // logger.error( "cannot retrieve host list from node - will >> try another if available : " + hi.getNameAndPort() ); >> // } >> // finally { >> // if ( null != client ) { >> // disconnectFromCluster( client ); >> // } >> // } >> // } >> // // if ( null != hostList ) { // >> ArrayList<String> newArr; >> // try { >> // JSONObject jsonObj = new JSONObject( hostList ); >> // String[] ringArr = JSONObject.getNames( jsonObj ); >> // newArr = new ArrayList<String>( ringArr.length ); >> // // for ( int i=0;i < ringArr.length;i++ ) { >> // String hostName = jsonObj.getString( ringArr[i] ); >> // if ( !hostIgnoreSet.contains(hostName) ) { >> // newArr.add( hostName ); >> // } >> // } >> // } >> // catch ( JSONException e ) { >> // throw new ClusterRuntimeException( "Could not parse JSON >> returned from Cassandra - don't know what to do? ARRRRGGGG" ); >> // } >> >> >> Sonny Heer wrote: >>> >>> Is there some example code on how to do this? >>> >>> On Tue, Mar 16, 2010 at 3:07 PM, Jonathan Ellis <jbel...@gmail.com> wrote: >>> >>>> >>>> token map is an internal representation, so returning the internal IPs >>>> is correct, even though this makes it slightly more difficult to use >>>> for thrift clients. >>>> >>>> On Tue, Mar 16, 2010 at 4:55 PM, B. Todd Burruss <bburr...@real.com> >>>> wrote: >>>> >>>>> >>>>> if you choose #3 - get_string_property("token map") - keep in mind that >>>>> the >>>>> IPs returned from this call are the IPs used for "ListenAddress" param >>>>> in >>>>> storage-conf.xml. In my case we have two NICs and I set this to be an >>>>> IP >>>>> that is only for "node to node" communication. The "ThriftAddress" >>>>> param is >>>>> the one i really want. maybe this has been changed, "fixed" ;), haven't >>>>> tested in a while. >>>>> >>>>> Jonathan Ellis wrote: >>>>> >>>>>> >>>>>> http://wiki.apache.org/cassandra/FAQ#node_clients_connect_to >>>>>> >>>>>> On Tue, Mar 16, 2010 at 4:30 PM, Sonny Heer <sonnyh...@gmail.com> >>>>>> wrote: >>>>>> >>>>>> >>>>>>> >>>>>>> How can I accomplish this? >>>>>>> >>>>>>> The way I'm doing it now it is creating a TSocket connection using a >>>>>>> static IP of one of the boxes on Cassandra: >>>>>>> TTransport tr = new TSocket(host, port.intValue()); >>>>>>> TProtocol proto = new TBinaryProtocol(tr); >>>>>>> Cassandra.Client client = new Cassandra.Client(proto); >>>>>>> tr.open(); >>>>>>> >>>>>>> With a larger cluster I would imagine there is another preferred >>>>>>> solution with no single point of failure (e.g. that one box goes >>>>>>> down). >>>>>>> >>>>>>> >>>>>>> >> >