On 05:44 pm, [email protected] wrote:
Thanks for both those suggestions.
I'll be taking a closer look at txLoadbabancer when I get time as it looks
like it'll take care of a lot of my desired functionality out the box.
To get started tho I'll move my async routing decision call into the
protocol as suggested.

Is there any reason why the internal calls to buildProtocol shouldn't be
wrapped in a maybeDeferred?

I'm not sure what you mean by "internal" here. I think you might mean "calls to buildProtocol made by reactor implementations". It is a mistake to take this perspective, though. If buildProtocol is allowed to return a Deferred sometimes then *all* callers have to be prepared to handle a Deferred (by using `maybeDeferred` or using some other strategy).

This points to the reason *buildProtocol* can't be allowed to return a Deferred. It is already defined as not returning a Deferred and changing this definition would potentially break every call, both those in reactor implementations and elsewhere (and there are plenty of other places that call `buildProtocol`).

Whether there is any good reason we could not introduce a new interface that is like `buildProtocol` but is also allowed to return a Deferred is another (more interesting :) question. I can't think of any offhand.

The reactor would probably want to avoid monitoring new connections for read or write events until this Deferred fired (but bonus points if it still monitors it for connection lost and cancels the Deferred if this happens before it fires). That's all relatively straightforward to implement though, for someone sufficiently motivated.

Jean-Paul

_______________________________________________
Twisted-Python mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to