Re: [RFC] client-side cleanup

From: Amos Jeffries <squid3_at_treenet.co.nz>
Date: Wed, 30 Mar 2011 13:36:58 +1300

 On Tue, 29 Mar 2011 11:15:18 -0600, Alex Rousskov wrote:
> On 03/26/2011 03:49 AM, Amos Jeffries wrote:
>> On the cleanup branch I've been going through and trying to document
>> what the client-side classes do.
>>
>> As you probably know their names only have loose affiliation with
>> their
>> operation and there is a LOT of scope creep blurring the boundaries.
>>
>> Below are the steps I'm seriously considering making to trunk over
>> the
>> new few weeks in order to be able to clarify and document the scopes
>> properly.
>>
>> 1) I would like to rename ConnStateData to "ConnectionManager" since
>> its
>> core scope seems to be:
>> * owning the client FD
>> * owning the request transaction state object(s)
>> * passing data to the request parser
>> * managing read/write ops with the client-streams buffers
>> ie (ultimate Producer for request and Consumer for reply)
>
> I think the name should be specific to the client side unless we add
> a
> Clt namespace or some such: Clt::ConnMgr or CltConnMgr should work.
> You
> can spell those short names out more if you prefer, of course.
>
> And let's start documenting somewhere what we think those classes do
> now
> (and what we change them to do next). Is Wiki the best place for
> that?
>
>
>> 2) I would like to rename ClientSocketContext as ClientXaction since
>> its
>> core scope seems to be owning the processing state flags.
>
> There is definitely a client transaction hidden among all those
> client-side classes. I am not sure which class should be renamed. If
> you
> think ClientSocketContext is it, and nobody has better ideas, let's
> try
> that.
>
>
>> This would eventually become the master transaction object, storing
>> the
>> log history and master pointers to bits of data.
>
> That would be wrong, IMO. The Master Transaction class should not be
> tied to the client-side or any "side" transaction management. The
> master
> object must survive when the client disconnects, for example, because
> we
> may still need it for finishing adaptation, logging, etc.
>
> I would not be surprised if that MasterXact class will have virtually
> no
> "processing" code of its own, just transaction history, metadata
> management, and sides coordination.
>
>
>> Although there is a lot of change before it gets to be used
>> everywhere.
>> Starting with turning its doCallouts with Async steps.
>
> One of the first steps would be to move code that belongs to one
> class
> from all the random client*cc files it appears in into the file
> dedicated to that class. That may be more difficult than it sounds,
> but
> it may also help you identify class boundaries and roles better.
>
>
>> 3) deflating the parser levels and documenting the structure of
>> ownership for each parse step.
>> I've started with breaking HttpParser out of HttpMsg.*.
>>
>>
>> 4) figuring out if we actually need ClientHttpRequest after the
>> above.
>>
>>
>> Ideas? opinions? stuff I've overlooked?
>
> The three biggest problems with the client side that I constantly
> bump
> into is
>
> (a) it is not clear which class is responsible for what
> (b) sharing of client-side objects (everybody points to everybody)
> (c) ClientStream API (low level pointer and other's buffer
> manipulation)
>
> You are already working on improving (a), thank you. Anything you can
> do
> to help with (b) and (c) would be welcomed.
>
>
> Please do not do many things at once. If you are renaming and moving
> code then avoid any other changes -- it becomes impossible to review
> those correctly. If you are changing code in other ways, please keep
> your changes to the minimum so that we have a better chance of
> understanding the consequences while being surrounded by the client
> side
> mess.

 Aye, I learnt that lesson with comm-cleanup. The auth changes going in
 now are a good example of how I hope to go forward in all my projects.
 Baby steps of one change, skipping all those with larger side effects.
 Audit on everything which changes behaviour.

>
> Finally, I am very concerned with your plan to commit the above
> changes
> to trunk when 3.2 is not stable yet. If the above changes are not
> limited to simple renaming/moving, those of us who work on the
> remaining
> 3.2 stability projects would have to switch from trunk code to the
> 3.2
> branch. As you know from 3.0 and especially 3.1 experience, this will
> significantly reduce the amount of changes going back to trunk
> because
> we will be confined to our 3.2-based branches that will move away
> from
> trunk pretty fast (unlike today when we can work with trunk and trust
> you to carefully copy changes to the official 3.2 branch).

 I am *definitely* hoping to avoid anything beyond simple renaming and
 documentation.
 Though as you noted the SourceLayout shuffles would be good thing.

>
> IMO, the above changes to trunk should be postponed until we make
> v3.2
> stable, including performance regressions, as discussed earlier.

 Okay.

 Amos
Received on Wed Mar 30 2011 - 00:37:02 MDT

This archive was generated by hypermail 2.2.0 : Wed Mar 30 2011 - 12:00:08 MDT