You didn't call tr.open() ?
On Wed, Mar 17, 2010 at 3:45 PM, Sonny Heer <sonnyh...@gmail.com> wrote: > 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). >>>>>>>> >>>>>>>> >>>>>>>> >>> >> >