When I try to reuse socket to make multiple thrift operation in multithread
I get always exception

On Tue, Dec 22, 2009 at 9:28 PM, Brian Burruss <bburr...@real.com> wrote:

> i don't close the connection to a server unless i get exceptions.  and when
> i close the connection i try a new server in the cluster just to keep the
> connections spread across the cluster.
>
> should i be closing them?  if the connection is closed by client or server
> i'll just reconnect.
>
> ________________________________________
> From: Ran Tavory [ran...@gmail.com]
> Sent: Tuesday, December 22, 2009 9:50 AM
> To: cassandra-user@incubator.apache.org
> Subject: Re: MultiThread Client problem with thrift
>
> I don't know how keeping the connections open affects at scale. I suppose
> if you have 10 to 1 ratio of cassandra clients to cassandra server (probably
> a typical ratio) then you may be using too much server resources
>
> On Tue, Dec 22, 2009 at 4:46 PM, matthew hawthorne <mhawtho...@gmail.com
> <mailto:mhawtho...@gmail.com>> wrote:
> On Tue, Dec 22, 2009 at 9:10 AM, Ran Tavory <ran...@gmail.com<mailto:
> ran...@gmail.com>> wrote:
> > Not at expert in this field, but I think what you want is use a
> connection
> > pool and NOT close the connections - reuse them. Only idle connections
> are
> > released after, say 1sec. Also, with a connection pool it's easy
> > to throttle the application, you can tell the pool to block if all 50
> > connections, or how many you define are allowed.
>
> I did something very similar to this.  A difference in my approach is
> that I did not release idle connections after a specific time period,
> instead I performed a liveness check on each connection after
> obtaining it from the pool, like this:
>
> // get client connection from pool
> Cassandra.Client client =
>
> try {
>  client.getInputProtocol().getTransport().flush();
> } catch (TTransportException e) {
>  // connection is invalid, obtain new connection
> }
>
> It seemed to work during my testing, not sure if the thrift specifics
> are 100% correct (meaning I'm not sure if the catch block will work
> for all situations involving stale or expired connections).
>
> -matt
>
>
> > On Tue, Dec 22, 2009 at 4:01 PM, Richard Grossman <richie...@gmail.com
> <mailto:richie...@gmail.com>>
> > wrote:
> >>
> >> So I can't use it.
> >> But I've make my own connection pool. This are not fix nothing because
> the
> >> problem is lower than even java. In fact the socket is closed and java
> >> consider it as close but the system keep the Socket in the  state
> TIME_WAIT.
> >> Then the port used is actually still in use.
> >> So my question is that is there people that manage to open multiple
> >> connection and ride off the TIME_WAIT. No matter in which language PHP
> or
> >> Python etc...
> >> Thanks
> >> On Tue, Dec 22, 2009 at 2:55 PM, Ran Tavory <ran...@gmail.com<mailto:
> ran...@gmail.com>> wrote:
> >>>
> >>> I don't have a 0.5.0-beta2 version, no. It's not too difficult to add
> it,
> >>> but I haven't done so myself, I'm using 0.4.2
> >>>
> >>> On Tue, Dec 22, 2009 at 2:42 PM, Richard Grossman <richie...@gmail.com
> <mailto:richie...@gmail.com>>
> >>> wrote:
> >>>>
> >>>> Yes of course but do you have updated to cassandra 0.5.0-beta2 ?
> >>>>
> >>>> On Tue, Dec 22, 2009 at 2:30 PM, Ran Tavory <ran...@gmail.com<mailto:
> ran...@gmail.com>> wrote:
> >>>>>
> >>>>> Would connection pooling work for you?
> >>>>> This Java client http://code.google.com/p/cassandra-java-client/ has
> >>>>> connection pooling.
> >>>>> I haven't put the client under stress yet so I can't testify, but
> this
> >>>>> may be a good solution for you
> >>>>>
> >>>>> On Tue, Dec 22, 2009 at 2:22 PM, Richard Grossman <
> richie...@gmail.com<mailto:richie...@gmail.com>>
> >>>>> wrote:
> >>>>>>
> >>>>>> I agree it's solve my problem but can give a bigger one.
> >>>>>> The problem is I can't succeed to prevent opening a lot of
> connection
> >>>>>>
> >>>>>> On Tue, Dec 22, 2009 at 1:51 PM, Jaakko <rosvopaalli...@gmail.com
> <mailto:rosvopaalli...@gmail.com>>
> >>>>>> wrote:
> >>>>>>>
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> I don't know the particulars of java implementation, but if it
> works
> >>>>>>> the same way as Unix native socket API, then I would not recommend
> >>>>>>> setting linger to zero.
> >>>>>>>
> >>>>>>> SO_LINGER option with zero value will cause TCP connection to be
> >>>>>>> aborted immediately as soon as the socket is closed. That is, (1)
> >>>>>>> remaining data in the send buffer will be discarded, (2) no proper
> >>>>>>> disconnect handshake and (3) receiving end will get TCP reset.
> >>>>>>>
> >>>>>>> Sure this will avoid TIME_WAIT state, but TIME_WAIT is our friend
> and
> >>>>>>> is there to avoid packets from old connection being delivered to
> new
> >>>>>>> incarnation of the connection. Instead of avoiding the state, the
> >>>>>>> application should be changed so that TIME_WAIT will not be a
> >>>>>>> problem.
> >>>>>>> How many open files you can see when the exception happens? Might
> be
> >>>>>>> that you're out of file descriptors.
> >>>>>>>
> >>>>>>> -Jaakko
> >>>>>>>
> >>>>>>>
> >>>>>>> On Tue, Dec 22, 2009 at 8:17 PM, Richard Grossman
> >>>>>>> <richie...@gmail.com<mailto:richie...@gmail.com>> wrote:
> >>>>>>> > Hi
> >>>>>>> > To all is interesting I've found a solution seems not recommended
> >>>>>>> > but
> >>>>>>> > working.
> >>>>>>> > When opening a Socket set this:
> >>>>>>> >    tSocket.getSocket().setReuseAddress(true);
> >>>>>>> >    tSocket.getSocket().setSoLinger(true, 0);
> >>>>>>> > it's prevent to have a lot of connection TIME_WAIT state but not
> >>>>>>> > recommended.
> >>>>>>> >
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> >
> >
>
>

Reply via email to