incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sonny Heer <sonnyh...@gmail.com>
Subject Re: Dividing the client load between machines in Cassandra
Date Wed, 17 Mar 2010 20:45:32 GMT
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 <sonnyheer@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 <bburruss@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 <jbellis@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 <bburruss@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 <sonnyheer@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).
>>>>>>>
>>>>>>>
>>>>>>>
>>
>

Mime
View raw message