[
https://issues.apache.org/jira/browse/CASSANDRA-11218?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15637696#comment-15637696
]
Sam Tunnicliffe commented on CASSANDRA-11218:
---------------------------------------------
I took a step back to re-evaulate exactly what is prioritized and when and it
turns out that adding priorities to {{CompactionTask}} itself is redundant, and
actually, in every case it's ignored. Really, it's the
{{Runnable/WrappedRunnable/Callable}} being submitted to {{CompactionExecutor}}
that needs to be prioritized and even in cases where these wrap a
{{CompactionTask}}, these have their own priority explicitly set and do not
usually inherit it from the task. That is to say, that it's the context of the
submission which determines the priority, rather than the task itself. Having
{{CompactionTask}} implement {{Prioritized}} actually makes some stuff pretty
hard to follow.
Actually, it turns out that this is somewhat academic, as most of the
priorities are not actually being observed anyway, due to the fact that
{{CompactionExecutor::submitIfRunning}} wraps everything in a
{{ListenableFutureTask}} before submission. This effectively hides any priority
that might be set so {{newTask}} always ends up creating another wrapper layer
with default priorities.
I've pushed a fix for this to my branch, and also refactored so that
{{CompactionTask}} no longer implements {{Prioritized}}, which I think
simplifies things quite a bit.
Another thing that was bugging me was that the relationship between
{{OperationType}} and {{Priority}} is somewhat muddy, as for some operations
prioritization is a meaningless concept (as indicated by the multiple special
cases). It feels like we're overloading the concepts somewhat which, for me,
again makes it much harder to grok. So I propose removing all the priority
stuff from {{OperationType}} and adding a new enum solely to represent the task
priorities (also done in my branch).
bq. I've removed the remaining uses of subtype prioritization...I've left the
logic in place for later
I think we should just rip it out if it's not being used. Like you say, if we
do come up with some good way to prioritise within types later, then we can
easily add it back, so leaving half of it hanging around in the meantime is
only going to be confusing.
The other thing that's obviously missing here is tests,
{{CompactionPriorityTest}} alone clearly isn't sufficient, seeing as it didn't
catch the fact that no prioritization was actually being done :)
> Prioritize Secondary Index rebuild
> ----------------------------------
>
> Key: CASSANDRA-11218
> URL: https://issues.apache.org/jira/browse/CASSANDRA-11218
> Project: Cassandra
> Issue Type: Improvement
> Components: Compaction
> Reporter: sankalp kohli
> Assignee: Jeff Jirsa
> Priority: Minor
>
> We have seen that secondary index rebuild get stuck behind other compaction
> during a bootstrap and other operations. This causes things to not finish. We
> should prioritize index rebuild via a separate thread pool or using a
> priority queue.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)