On Feb 26, 2010, at 9:03 AM, Ashish wrote:

On Fri, Feb 26, 2010 at 7:03 PM, Emmanuel Lecharny <elecha...@gmail.com > wrote:
Hi guys,

I'm reviewing the IoFuture interface and all the depending interfaces and classes. This is a complete mess. Looks like it has been built layer after layer, and I fell like being an archeoligist, diging to discover what was
eating the previous civilization...

The ConnectFuture interface and its implementing classes
(DefaultConnectFuture and ConnectionRequest) is flawed in many ways.

First, it last as long as the session exists. To me, the semantic of this
Future should be :
- create one when we start a connection
- once the connection has been accepted or refused (exception/ cancellation),
the Future is 'dead' (ie, won't be modified)

So there is  need to store it into the Session's attributes as it's
currently done.

The ConnectionRequest class is a special sub-class used when an immediate (ie, blocking) connection wasn't possible. That's also a wrong idea : if the connection is granted immediately, because the connect() method is blocking, then the Future should be set to Done. Otherwise, it should be set to done once the session has been created. There is no need to use a different Future to manage this case, the blocking connection is just a special case
of a non blocking connection.

There are many other areas in which Future are broken and need to be
cleaned, and I will post mails in the near future, but in any case, it has
to be cleaned up.

I don't see how this can be fixed without unfreezing the API, btw...

Planning to invest more in 2.0? I thought we agreed to move on to 3.0 :)

Thoughts ?

Unless it breaks the system, i would say lets not loose our sleep over this.

While I share the same opinion about the IoFuture hierarchy as you I have the same sentiments as Ashish.


Regards,
Alan

Reply via email to