[
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)