I have many cases where ScanSessions will consume resources that I otherwise want shorter running scans to utilize. In some cases, a scan may continue for hours, while a short running scan may come in and execute quickly. As a result, I want to be able to adjust the priority of these scan sessions.
I have a patch which is forthcoming, that breaks Session out of TabletServer and replaces the queue in the readAheadThreadPool with a priority pool. The comparator I have created as a proof of concept, which can be adjustable, reduces the priority of the oldest scan. Using an aging technique, we guarantee execute of these older running scans based upon the previous run time. As a result, we give preference to newer scans. If they execute quickly, older scans will have an inherent rise in priority. If they also take a while, their priority will be reduced and incoming scans will yet again be given a greater priority with the intent (and/or hope ) their execution will be faster.
Priority should be configurable based on the desired Session Comparator.