incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Ellis <jbel...@gmail.com>
Subject Re: Dividing the client load between machines in Cassandra
Date Wed, 17 Mar 2010 20:47:04 GMT
You didn't call tr.open() ?

On Wed, Mar 17, 2010 at 3:45 PM, Sonny Heer <sonnyheer@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 <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