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

Ariel Weisberg edited comment on CASSANDRA-7392 at 9/9/15 1:42 AM:
-------------------------------------------------------------------

This looks good. After initial review I don't have much feedback other than 
some minor concurrency/performance nits.

* [I don't think the check is necessary, lazySet is 
sufficient|https://github.com/stef1927/cassandra/commit/2a3437ebd64bc479f594c286b9ef1a94ee89d07a#diff-7dfb2e2b64bd70dc52bd6c1b04aa9912R55]
* Don't reset MonitorableThreadLocal, that requires retrieving the threadlocal, 
and then storing a value in the AR (which would be cheap if lazy set). Set the 
state associated with the task to "done" and let the monitoring thread ignore 
it. Ideally you only have to get the threadlocal once per request.
* When doing state transitions on the monitoring ref I don't think you need 
CAS. You can read and then lazySet and there is a small chance that the logging 
will think something was dropped when it wasn't. The primary functionality of 
shedding still works and that is always an approximation.
* MonitorableImpl could extend AtomicReference instead of composing 
MonitoringState. This would leak the methods into the derived classes. I'm torn 
as to whether that pollution is worth it.

Tomorrow I'll review it again and look at the tests and coverage.


was (Author: aweisberg):
This looks good. After initial review I don't have much feedback other than 
some minor concurrency/performance nits.

* [I don't think the check is necessary, lazySet is 
sufficient|https://github.com/stef1927/cassandra/commit/2a3437ebd64bc479f594c286b9ef1a94ee89d07a#diff-7dfb2e2b64bd70dc52bd6c1b04aa9912R55]
* Don't reset MonitorableThreadLocal, that requires retrieving the threadlocal, 
and then storing a value in the AR (which would be cheap if lazy set). Set the 
state associated with the task to "done" and let the monitoring thread ignore 
it. Ideally you only have to get the threadlocal once per request.
* When doing state transitions on the monitoring ref I don't think you need 
CAS. You can read and then lazySet and there is a small chance that the logging 
will think something was dropped when it wasn't. The primary functionality of 
shedding still works and that is always an approximation.
* MonitorableImpl could extend AtomicReference instead of composing 
MonitoringState. This would leak the methods into the derived classes. I'm torn 
as to whether that pollution is worth it.

> Abort in-progress queries that time out
> ---------------------------------------
>
>                 Key: CASSANDRA-7392
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7392
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Core
>            Reporter: Jonathan Ellis
>            Assignee: Stefania
>            Priority: Critical
>             Fix For: 3.x
>
>
> Currently we drop queries that time out before we get to them (because node 
> is overloaded) but not queries that time out while being processed.  
> (Particularly common for index queries on data that shouldn't be indexed.)  
> Adding the latter and logging when we have to interrupt one gets us a poor 
> man's "slow query log" for free.



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

Reply via email to