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 18:33:00 GMT
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