[ 
https://issues.apache.org/jira/browse/CASSANDRA-8963?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14628794#comment-14628794
 ] 

Benedict commented on CASSANDRA-8963:
-------------------------------------

bq.  it's easy to get offended

I'm not at all offended, just reticent to enter into conflict that appeared to 
be on the cards, even if it is all good natured. But, in for a penny...

On the naming, I'm not a _fan_, however I'll mostly roll over. To state my 
thoughts, though: 
* RestartableOp again implies you should leave it dormant, which is actively a 
bad idea (I realise restart is what its method is named). It's just about 
periodically declaring you're happy to cross an Op/Phase boundary. MultiPhaseOp 
is another possibility, to indicate it crosses phase boundaries.
* As to the Op's ordering, it is a _property_ of the Phase, but the Phase is 
simply a construct to _provide_ a partial order between operations. From my 
POV, names should always elevate _intent_ above _implementation_. 
* For this reason I'm not a fan of OpPhaseChain either. I would prefer 
something like OpPhaser, or something that conveys that it is a mechanism for 
_creating_ a partial or phased ordering of operations.
** As to encoding characteristics in names, I would typically agree, but here 
the relevant nuances are not really tied to its being a linked-list. Its 
performance risks are mostly associated with the mutex ownership for barrier 
issuance, waiting on barriers, ordered cleanup of phases, and most critically 
bounded runtime of any single Op.

bq. I think there's a nice middle-ground between the lack of commenting so 
prevalent in the code-base and the giant wall of text that a first glance at 
this branch feels like.

I may be a little chatty in my approach to comments sometimes, but I find that 
overly terse comments can leave out important details. To give examples, by 
rebutting some of your examples...

{quote}
- // prevents any further operations starting against this Phase
    one sentence method description (I think not unwarranted here)
- // if there are no running operations, calls unlink; otherwise, we let the 
last op to close call it.
    second clause is important to relate this to other methods in the class 
that interleave concurrently with this, without which behaviour would be 
broken; it is contextualised by first clause
- // if we hit an unfinished ancestor, we're not COMPLETE, so leave it to the 
ancestor to clean up when done
    this second clause (again contextualised by the first) is very important: 
the responsibility of the ancestor to ensure cleanup is performed is absolutely 
critical to correctness, and so declaring it here when it is not in any way 
expressed by the code is absolutely critical
{quote}

I definitely agree there's some redundancy, such as "// our waiters are good to 
go, so signal them" but if we had to make a choice, I'd prefer a couple too 
many than a couple too few. _Some_ of this may be a matter of style, too, so it 
may be worth a brief meta-discussion about this:

bq. Comments that simply restate what the code does are prone to atrophy over 
time

I agree, _unless_ they provide structural scaffolding, as I try to make them do 
these days (not referencing these old specimens). If comments break a logical 
flow up into discrete units (say, 3-10 LOC), so that each unit is easily 
corroborated to match the comment, and the whole flow can be understood by 
_only_ the comments, I think this makes digestion of the code far far easier.

That all said, I agree these comments are _certainly_ imperfect, having been 
written early on in my tenure on a public community project, at which point my 
approach to commenting was... unrefined. They were also perhaps overspecified 
exactly because there was a degree of revulsion expressed to OpOrder when it 
first appeared. Anyway, if _that's_ all we're talking about, we really don't 
have as much distance between us as I read into. I'll go and spruce them up.

> Make OpOrder more intuitive
> ---------------------------
>
>                 Key: CASSANDRA-8963
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8963
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Benedict
>            Assignee: Benedict
>            Priority: Minor
>             Fix For: 3.x
>
>
> There has been plenty of feedback about OpOrder being unintuitive. As well as 
> revisiting the naming, I propose to introduce an Action object with RAII 
> (AutoCloseable) protection that should be more obvious to users of the API. 
> We can also then protect this by a Ref instance for use cases where the 
> action lifetime is illdefined, and perhaps also introduce some checks for 
> actions whose lifetimes extend beyond a sensible limit to report those where 
> the object reference is retained.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to