[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-07 Thread Samarth Jain (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15900259#comment-15900259
 ] 

Samarth Jain commented on HBASE-12790:
--

Thanks for the pointer [~anoop.hbase]. I see that there is already an executor 
RWQueueRpcExecutor that gets hold of the ScanRequest in the dispatch method. 

{code}
private boolean isScanRequest(final RequestHeader header, final Message param) {
if (param instanceof ScanRequest) {
  // The first scan request will be executed as a "short read"
  ScanRequest request = (ScanRequest)param;
  return request.hasScannerId();
}
return false;
  }

@Override
  public boolean dispatch(final CallRunner callTask) throws 
InterruptedException {
   ...
   if (numScanQueues > 0 && isScanRequest(call.getHeader(), call.param)) {
   queueIndex = numWriteQueues + numReadQueues + 
scanBalancer.getNextQueue();
   }
   ...
{code}

So yes, there is a way forward by utilizing the scan attribute for this purpose 
without having to add an API to Operation. Having said that, looking at the 
isWriteRequest method in the same class, I see that things can get 
gnarly/brittle/inefficient. 
{code}
private boolean isWriteRequest(final RequestHeader header, final Message param) 
{
// TODO: Is there a better way to do this?
if (param instanceof MultiRequest) {
  MultiRequest multi = (MultiRequest)param;
  for (RegionAction regionAction : multi.getRegionActionList()) {
for (Action action: regionAction.getActionList()) {
  if (action.hasMutation()) {
return true;
  }
}
  }
}

{code}



> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-07 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15899813#comment-15899813
 ] 

James Taylor commented on HBASE-12790:
--

IMHO, it would be best to have an attribute that is uniformly accessible from 
CallRunner. Though we may start by only using it for reads, it'd make sense to 
expand this to writes eventually. Andrews's original point is a good one I 
think.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-07 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15899769#comment-15899769
 ] 

Andrew Purtell commented on HBASE-12790:


We were going to add an API to Operation IIRC and to each RPC type a new 
optional field for carrying a label.  I recall this issue didn't move forward 
when I insisted we figure out something that makes sense for writes as well as 
reads. On the write side multiops present a real challenge for arriving at 
reasonable semantics. I won't do this this time. We can stick to scans and 
gets. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-07 Thread Anoop Sam John (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15899754#comment-15899754
 ] 

Anoop Sam John commented on HBASE-12790:


Oh!!  that level we might not have the protoc request bytes converted into Scan 
request or so.   It wont be straight way to get it at this layer.
RpcCall if available can get hold to ScanRequest (protoc) which in turn gives 
Scan instance.  But will need instance check over the protoc Message which 
comes in RpcCall.  Just saying.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-07 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15899749#comment-15899749
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


I remember that setting attribute had 3problems
1) The attribute has to be exposed to the client for all cases. So how to set 
the key for tht attribute as different scan can set different value for the 
same key.
2) The attribute has to be iterated at the RPC layer if the request is of scan 
type.
Overall the problem was that exposing this at the Client level in any form was 
the main concern.


> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-07 Thread Samarth Jain (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15899725#comment-15899725
 ] 

Samarth Jain commented on HBASE-12790:
--

[~anoop.hbase] - I don't see an obvious way of getting hold of scan attribute 
at the RpcScheduler level. Maybe I am missing something?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-07 Thread Anoop Sam John (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15899658#comment-15899658
 ] 

Anoop Sam John commented on HBASE-12790:


Phoenix can make use of Scan#setAttribute(String name, byte[] value) to pass 
these ids?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-07 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15899197#comment-15899197
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Yes. This not only needs a pluggable RPC but also we should tag every scan 
request with a specifc id. That Id has to come from the client. HAving such an 
API to mark the scan opertion with an id but that id getting used only inside 
the RPC layer was the reason why this JIRA was not taken forward.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-06 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15898857#comment-15898857
 ] 

Andrew Purtell commented on HBASE-12790:


[~samarthjain] Pluggable RPC scheduler plus API to set labels (or as you said 
'tags') on the RPC messages of client ops, presumably the ops themselves, 
adding to Operation perhaps. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-06 Thread Samarth Jain (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15898836#comment-15898836
 ] 

Samarth Jain commented on HBASE-12790:
--

[~lhofhansl] - just having a pluggable RPCScheduler won't do it. Assuming we 
are targeting only queries for now, we need to be able to tag/mark scans 
belonging to a query with the same identifier. This information will be then 
used by the round robin queue to do the round-robin of groups thing.
{code}
@Override
  public boolean dispatch(final CallRunner callTask) throws 
InterruptedException {
  roundRobinQueue.offer(callTask);  
  }
{code}

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-03 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15895556#comment-15895556
 ] 

Andrew Purtell commented on HBASE-12790:


I thought we might get somewhere with adding the ability for a client to tag a 
RPC call and then let the server side plugin do something special like manage 
multiple queues. As I recall this could work for scans but our multi ops 
presented a real problem if trying to generalize it for all RPC including 
mutations. Maybe we don't do that. Maybe we just address the need at hand and 
stick to reads. Maybe we need to plumb a bit on the server for it to really 
work. A new issue scoped to that referring back to here would be a fresh start. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-03 Thread Lars Hofhansl (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15895552#comment-15895552
 ] 

Lars Hofhansl commented on HBASE-12790:
---

bq. RpcScheduler is pluggable. You need more than that?

Is that all we need [~jamestaylor]?

Let me summarize how the Phoenix folks got here:
# HBase scan contract is serial per scan. I.e. a scan will already return all 
keys in order whether the client needs it that way or not. Hence no parallel 
execution on behalf of a single scan (both [~stack] and I had made attempts to 
improve that but did not finish)
# Scans cannot easily be broken down to units smaller than a region (it's 
certainly possible to do that, but there's no information about internal data 
skew inside a region)
# For this Phoenix adds "guideposts". These are equidistant markers, so that 
Phoenix can know about the key distribution inside a region.
# Phoenix uses guideposts to schedule many small scans. The units are fairly 
small (100MB-1GB worth of cells) to allow for fairness between queries.
# If many query-chunks - a.k.a. scans - of a large query can hog the RPC queues 
than much of the advantage is lost.
# Hence the desire for a this type of "group based" scheduling so that small 
queries can finish before all large queries in the queue need to finish. The 
group is a Phoenix query. So it is simply the desire to extend the fair queuing 
that HBase already has (HBASE-10993) to a query in Phoenix which may issue 
1000's of scans to as many region servers.

That just for the history... I do agree that the patch proposed here is too 
complex and perhaps wants to do too much.

Now perhaps hbase.ipc.server.callqueue.scan.ratio from HBASE-11355 and 
HBASE-11724 gives us what we need _if_ we can use this for small scans, so that 
small scans can land on the "Get" queue. That way we can reserve that queue for 
small scans and Gets, and other queues for large scans.

It's not ideal, though. The best is to allow somehow to round-robin between the 
queries on behave which the scans are operating. That abstraction is not 
available in HBase.


> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-03 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15895521#comment-15895521
 ] 

stack commented on HBASE-12790:
---

bq. How about a new JIRA, Lars Hofhansl?

Nah. Why would we drop history/context? There is good stuff in here: e.g. 
"apurtell Andrew Purtell added a comment - 09/Nov/15 10:25".

bq. James Taylor suggests to simply make the queue class pluggable.

RpcScheduler is pluggable. You need more than that?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-03 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15895487#comment-15895487
 ] 

James Taylor commented on HBASE-12790:
--

How about a new JIRA, [~lhofhansl]?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2017-03-03 Thread Lars Hofhansl (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15895299#comment-15895299
 ] 

Lars Hofhansl commented on HBASE-12790:
---

Can we restart this discussion?
[~jamestaylor] suggests to simply make the queue class pluggable. Phoenix can 
then inject its own implementation.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790_1.patch, 
> HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, HBASE-12790.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-11 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15001806#comment-15001806
 ] 

James Taylor commented on HBASE-12790:
--

bq. and make sure if you have internal notions of "this is for query A" and 
"that is for query B" that you interleave calls to scanner.next for A and B. 
[~apurtell] We already do that, but it won't mitigate the case when a number of 
clients run only a single large scan. The RS is the ultimate arbitrator.

bq. Your requirement changes every time you comment
[~stack] Not true. I've stated it clearly above. I've just given you more 
examples of why the round-robin-on-connection won't solve this issue. Here's 
another one: Apache Drill + Phoenix. There will be large scans parallelized 
across many distributed client nodes. It's useful for the RS scheduler to know 
that they're linked so that it can round-robin between them. It's similar to 
the MR job, but these wouldn't be batch queries, but interactive queries.

When I said it was simple, I'm talking from the users POV. It really is just 
having an extra optional attribute on an operation that links them together as 
one "virtual operation". I agree that the implementation is kind of a mess.

[~apurtell] - those idea you floated are all good potential workarounds that we 
may need to resort to. Would be good to start with a good test case and a 
design IMHO. Maybe that's something we can all agree on.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-10 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14999067#comment-14999067
 ] 

stack commented on HBASE-12790:
---

bq. Glad to see you're working on that over at Cloudera.  Hopefully you're 
testing with Phoenix too.

You did not read it. It is not "cloudera" work. It is apache hbase work. See 
listed JIRAs.  It is a summary of the state of scheduling art in apache hbase 
as of a while ago.

bq. I don't think having an extra optional attribute on an operation adds "a 
bunch of new complexity". That's fine if we disagree.

Andrews' considered response 'On complexity' plainly left no mark and you can't 
have reviewed the attached patch and comments. Only a superficial engagement 
with this issue and what all is involved could result in a characterization of 
what is going on here as just "having an extra optional attribute" (or that the 
cited, pertinent blog post is 'cloudera' work).

bq. Andrew Purtell made the point that if you're round robining on reads you 
should be consistent and do it on writes too - I think this is a fair point. 
Our immediate need is on the read side - I'll share our data when the analysis 
is complete... Our requirement is simple: the latency of point lookups and 
small-ish scans shouldn't be impacted by other workloads on the cluster. What 
ever implementation you come up with is fine by us.

Your requirement changes every time you comment and you do not know what you 
are asking for.

Let me try and write something up and situate it relative to work already done.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-10 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14999119#comment-14999119
 ] 

Andrew Purtell commented on HBASE-12790:


bq. Hopefully there's enough information to feed into requirements from a user 
perspective: round robin across parallelized operations and MR jobs running on 
the same cluster to prevent one job from locking out others.

There may be an implicit "in 0.98" here too. Let's remove that, if so, because:

bq. (In 1.1 and up) Scanners can return after a certain size and/or time 
threshold has been crossed

Step 1: Have both Phoenix scanners and those MR jobs set these parameters to 
constrain the amount of time each scanner.next call will run. Let's double 
check that we can set the defaults we want in site configuration. 

Step 2: On the server, as a generic and transparent improvement, have the 
scheduler round-robin requests between connections.

With both of these in place, we get:
- No one client can starve other clients. That means Phoenix work is 
interleaved with MR work on the server side. This is what you want.
- Within your own single connection, no unit of work will exceed time X. This 
doesn't give you everything you want "within the connection" but you can work 
with this, because the server will give you ~deterministic performance per op.

Now you can take the queue of local work - you own this, this is client side, 
HBase server side doesn't (and can't) know about internal client priorities - 
and make sure if you have internal notions of "this is for query A" and "that 
is for query B" that you interleave calls to scanner.next for A and B. It's 
more work than naively blasting ops at the servers and expecting the server 
side to handle differentiated QoS "within the connection", but this is the step 
too far the community doesn't want (yet). Leave this out and we might arrive at 
agreement.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-10 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14999155#comment-14999155
 ] 

Andrew Purtell commented on HBASE-12790:


Just throwing out ideas, considering existing interfaces:

We might also consider if Phoenix's overloading of scanner.next processing on 
the server can help here. Scan parameters can be changed on the way in on the 
server side (in the preXXX hooks) according to Phoenix's view of the arriving 
requests.

A static adjustment for predictable performance could be enough.

However, there are interesting opportunities for making dynamic changes here: 
As workload increases, perhaps measured by arrival rate or by an estimation of 
query perf characteristics (like estimated cardinality), the amount of work by 
time performed by each scanner.next iteration can be made smaller, providing 
lower latency / better responsiveness when work is interleaved at the expense 
of throughput. As workload decreases, the quanta can be increased, optimizing 
for better throughput. 

In any case it's really up to the coprocessor application what wants to do with 
respect to rewriting scan parameters on the server. (And up to the client / 
query planner how it wants to set up scan parameters in the first place.)

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14997011#comment-14997011
 ] 

Andrew Purtell commented on HBASE-12790:


bq. The Connection level idea doesn't solves the issue for our use case. We'll 
soon have MR jobs intermingled with Phoenix queries and this Connection-level 
model doesn't address this.

The patch as-is isn't getting in so we need to find some consensus middle 
ground. I tried to do that above. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14997005#comment-14997005
 ] 

James Taylor commented on HBASE-12790:
--

The Connection level idea doesn't solves the issue for our use case. We'll soon 
have MR jobs intermingled with Phoenix queries and this Connection-level model 
doesn't address this.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14997058#comment-14997058
 ] 

Andrew Purtell commented on HBASE-12790:


On complexity.

We've added a lot of knobs and extension surfaces over the years rather than 
make architectural decisions that would tame complexity at the expense of 
addressing some use cases.

Perhaps one of the worst offenses in that regard is coprocessors. I'm saying 
that even as the person who designed them. (smile) Now of course as a means for 
mixin platform extensions they've been really successful, and have enabled even 
something like Phoenix, which is a wild success. At the same time, when 
thinking about sources of complexity, the coprocessor API is right up there 
because by it's nature it will leak internal implementation detail all over the 
place. We hope coprocessor applications will treat internal data types as 
opaque but can't enforce that. The potential for abuse is acute. I will refrain 
from more than the briefest mention of local indexing.

Moreover having internal extensions invites apps like Phoenix who want to, of 
course, make good use of other HBase internals, since they are available, 
leading to additional sources of abstraction leakage. On some level this is 
expected and ok. A risk we always have to face, though, is once we have 
external users of an interface we are locked into supporting its semantics 
as-is, or at least to providing a path to upgrade, leading to a backwards 
compatible code path for every iteration on semantics, even the stuff that 
leaked which shouldn't have. A good example of this latter phenomenon IMHO is 
pluggable RPC scheduling as it is today.

I'm not fond of the idea of applications plugging in RPC schedulers, as they 
are currently designed. This part of the code was meant to be private, but was 
promoted to LP once Phoenix extended it for indexing. I think we can debate if 
this was the right choice. I think it was a reasonable decision at the time and 
won't relitigate it, mainly because I had a big hand in it (smile). However 
someone with a critical perspective could call it an expedient tactical 
decision leaving behind an architectural smell, and they would have a point. 
RPC schedulers most unfortunately must specify some hard coded details on 
executor types and queue types. This will be a problem because third party 
scheduler implementations will not have the same velocity as HBase core as 
executor types and queue types change and maybe the whole area of scheduling is 
refactored. This design problem wasn't considered back when it wasn't expected 
third parties would plug in schedulers. Now, we'll have to live with it 
somehow. 

In that spirit let us turn and consider the current patch here and its 
approach. We are doubling down on leaking internal RPC scheduling 
implementation minutiae to third parties. Tagging RPC requests with a "group 
ID". What is a group ID? Not discussed or documented. How is it used? Not 
discussed or documented, but we can look at the code. When we dig in, only 
scans are tagged. WTF? What about the other RPC types? What is the objective? A 
clean design rationalized across all HBase operation types? No, it's not that. 
If we accept this patch into our RPC we must support it "forever". Not everyone 
thinks that is a good idea. One thing we can all agree on about this patch, if 
accepted as is it will be another expedient tactical decision leaving behind 
another architectural smell.

We may simply need to reset this whole conversation and start over with a 
design discussion. What is the fundamental need? How can we address it in a way 
this developer community as a whole feels comfortable supporting going forward? 
Reviewing this JIRA from top to bottom, it looks to me like we had a problem 
specification, followed immediately by a tactical patch. We skipped over design 
discussion and therefore have reached an impasse.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is 

[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14996945#comment-14996945
 ] 

Andrew Purtell commented on HBASE-12790:


If we can all conceptually agree on round robin scheduling of connections then 
the gap here is pretty small. 

bq. Opening a new HConnection takes three seconds. It's not feasible to pool 
enough HConnections to support the concurrency we see over the various types of 
queries.

Then can we make this faster? 

For example, when creating a new Connection object, it is not strictly 
necessary this must map 1:1 with communication channels at the RPC layer or TCP 
connections on the wire. Why can't a new Connection transparently re-use the 
communication channel constructed by a previous instance? In which case the 
distinction between the new Connection and previous is a logical identifier. A 
logical identifier carried in requests that can be used to schedule round robin 
on the server. A logical identifier which does not need to be exposed to the 
application. The application has control of round-robin dispatch through its 
allocation of Connection objects. 



> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14997269#comment-14997269
 ] 

James Taylor commented on HBASE-12790:
--

Thanks, [~apurtell] - appreciate the write-up.

Hopefully there's enough information to feed into requirements from a user 
perspective: round robin across parallelized operations and MR jobs running on 
the same cluster to prevent one job from locking out others.

Would be good if we can stay on subject too. I've already pointed out why the 
round-robining on Connections won't meet the use case.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14997232#comment-14997232
 ] 

stack commented on HBASE-12790:
---

Thanks for the eloquence [~apurtell] summarizing where we are at and how we got 
here using illustration from our community past. I also appreciate and agree 
with your outline of the positions involved and for hitting the reset button 
(should have been done long ago). 

When we reset, can the discussion be more grounded?

For example, "Opening a new HConnection takes three seconds..." I just measured 
it against a cluster. Total connection setup takes 20ms... less if I let the 
JVM warm up. Its 3.5 seconds to start a cold JVM, hit about 40 regions, then 
completely shut all down again. Improving Connection setup is an issue many 
could benefit from so would be worth doing in general. We can work on sharing 
cache/zk over Connections too.

Or, "It's not feasible to pool enough HConnections to support the concurrency 
we see over the various types of queries."... Please substantiate your claim 
with numbers and use case.





> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14996383#comment-14996383
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


The confusion of exposing groupID API can be avoided by going with Attributres 
but still for the write part we cannot set the attribute for the entire batch.
Going thro the comments over here - If we go with per connection approach - it 
would mean that all the requests coming from one client will have the same 
groupid (what ever the name it can be).  This id will be set in every request 
that that client processes and based on that id the scheduler decides on the 
round robin part.  This will include both reads and writes.
So this will not be working out for same JVM different clients and will work 
only if the parallel scans and the point queries are issued by 2 different 
clients. Am i missing some thing here?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14997639#comment-14997639
 ] 

James Taylor commented on HBASE-12790:
--

Glad to see you're working on that over at Cloudera. Hopefully you're testing 
with Phoenix too.

I don't think having an extra optional attribute on an operation adds "a bunch 
of new complexity". That's fine if we disagree.

[~apurtell] made the point that if you're round robining on reads you should be 
consistent and do it on writes too - I think this is a fair point. Our 
immediate need is on the read side - I'll share our data when the analysis is 
complete.

Our requirement is simple: the latency of point lookups and small-ish scans 
shouldn't be impacted by other workloads on the cluster. What ever 
implementation you come up with is fine by us.


> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-09 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14997572#comment-14997572
 ] 

stack commented on HBASE-12790:
---

bq. I've already pointed out why the round-robining on Connections won't meet 
the use case.

[~jamestaylor] Nah. Arguments based on hyperbole and unsubstantiated 
'concurrency we see' do not carry any weight hereabouts. 

bq. We'll soon have MR jobs intermingled with Phoenix queries and this 
Connection-level model doesn't address this.

Just have MR tasks schedule at a lower priority.

It doesn't have to be a 'connection-based' solution. It just can't be a bunch 
of new complexity whether a new scheduling tier (My objection has been there 
since the first patch was posted back in March), new configurations, or plugin 
points that inevitably just rot but meantime the project needs to keep them up 
'just-in-case'.

The use case seems to have expanded significantly since this issue began. It 
has to be round robin over all ops?  We are to chunk-in large writes? That is a 
massive undertaking. Suggest you rein in your requirements there [~jamestaylor]

This exposition, 
http://blog.cloudera.com/blog/2014/12/new-in-cdh-5-2-improvements-for-running-multiple-workloads-on-a-single-hbase-cluster/,
 covers most of what has been discussed above. Would be useful if what is 
wanted here in this issue was situated relative to this previous work. It 
mentions means of  deprioritizing long-running scans (IIRC, results were 
murky... worth further investigation) and Scanners have since this citation was 
written been redone so they can return after a certain size and/or time 
threshold has been crossed. This latter will help mitigate long-running scans 
shutting out others. In this new regime, its as though a pure round-robin 
scheduler that did not distinguish on any attribute -- group or connection -- 
could work especially if long-running scans were weighted so they were 
scheduled less frequently.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-08 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995792#comment-14995792
 ] 

stack commented on HBASE-12790:
---

bq. We share the same HConnection for clients on the same JVM because opening 
an HConnection is expensive - that's why I was saying this option won't work.

If Connection set up was fast, would arbitrating on Connection work for your 
use case?

On slow Connection setup, how long you seeing? How long is too much (these are 
long scans, right?)? Connections taking a long time to set up is something 
worth working on (share cache of regions, share zookeeper). Could do pool of 
Connections too... that seems pretty standard way of dealing with slow 
connection setup.

Thanks



> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-08 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995824#comment-14995824
 ] 

James Taylor commented on HBASE-12790:
--

What's the resistance to having a round robin scheduler? Conceptually it's 
pretty simple and I think it's a good addition to HBase. The client just needs 
to pass some kind of identifier that tells the server that these operations are 
"one operation" that should be round robin-ed against others (that's the 
GroupID - we can name it something else too and it's fine as an attribute or 
new field). 

It's not Phoenix specific either. Another common use case would be if multiple 
MR jobs are running against a cluster - all the mappers from a given job could 
use the same identifier (i.e. identifying them conceptually as "one 
operation"). Then these map tasks would be round robin-ed against other sets of 
map task from other MR jobs.

This is a real issue right now and there's a patch available (which has taken 
considerable effort - started back in Feb 2015). We've perf tested it under 
scale and it looks good. What's the reason to *not* have this optionally 
configurable, round-robin scheduler?


> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-08 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995841#comment-14995841
 ] 

James Taylor commented on HBASE-12790:
--

How about this proposal?
- Address the write-side of the equation as Andrew suggested for this patch. 
That seems like a pretty straightforward fix that could be documented.
- Longer term, for 2.0, a new client-side operation class is introduced for 
batch operations (BatchOperation) so that the client would have a place to set 
the GroupID (or whatever we call it) for batch operations. It'd also be useful 
to have a way to set attributes for an entire batch and this could server that 
purpose as well.


> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-08 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995953#comment-14995953
 ] 

stack commented on HBASE-12790:
---

bq. What's the resistance to having a round robin scheduler?

None. See above where I argue this should probably be made the default. The 
discussion is about what to round robin over. Please answer the question asked 
(allow that there is a ConnectionPool as there is for other DBs so no 
setup-time in-line).

Your Maptask illustration doesn't help your case given each Mapper will put up 
its own Connection (it is an argument in favor of scheduling across 
Connections).

bq. What's the reason to not have this optionally configurable, round-robin 
scheduler?

The argument has been made a few times above (i.e. introduces a new 
tier/complexity/friction on scheduler when it doesn't seem like we need it, 
when it looks like we can do a more simple approach that would work inherently 
without apps having to ask for the behavior... etc.)


> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-08 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995996#comment-14995996
 ] 

James Taylor commented on HBASE-12790:
--

My Maptask illustrates another reason to have the round-robining mechanism 
supported in this patch. As you've pointed out this is independent of 
connections. I'm not advocating a Connection-based approach. Opening a new 
HConnection takes three seconds. It's not feasible to pool enough HConnections 
to support the concurrency we see over the various types of queries.

I don't get the "complexity/friction on scheduler" bit. It's pretty straight 
forward from the client point of view.



> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14994874#comment-14994874
 ] 

stack commented on HBASE-12790:
---

bq. So to do that we need to give clients a way to label requests for QoS and 
then give them a way (or build in something we do automatically) to schedule on 
the server side according to label and some policy. 

Description asks for something much more basic than means of QoS based on a 
request settable label with policy-based handling. It -- and the patch -- are 
only about Scans. No problem broadening scope of the issue...

bq. We don't have to call it "groups" or make the currently proposed API 
changes if someone has a better approach in mind.

Will the server round-robin'ing amongst the client connections work for phoenix?


> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread Elliott Clark (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14994869#comment-14994869
 ] 

Elliott Clark commented on HBASE-12790:
---

RPC already has priority.  Adding more fields seems really dubious when we're 
not even using that one well yet.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14994815#comment-14994815
 ] 

Andrew Purtell commented on HBASE-12790:


bq. Long scans or a single client hogging server resources is broke for 
everyone. Lets fix it for all rather than just for phoenix?

So to do that we need to give clients a way to label requests for QoS and then 
give them a way (or build in something we do automatically) to schedule on the 
server side according to label and some policy. I agree the current patch has 
issues but it does head toward implementing this strategy. We don't have to 
call it "groups" or make the currently proposed API changes if someone has a 
better approach in mind. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14994819#comment-14994819
 ] 

Andrew Purtell commented on HBASE-12790:


It's also not only about scans. Any of the batch ops can run for a long time. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14994830#comment-14994830
 ] 

Andrew Purtell commented on HBASE-12790:


Should this take a while to hash out and/or be a 2.0 thing, Phoenix can almost 
entirely do its own thing. The one enabling piece missing is a 
priority/group/whatever label carried in the RPC from the client to the 
(pluggable) scheduler. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995080#comment-14995080
 ] 

stack commented on HBASE-12790:
---

bq. Therefore dispatching work queued per connection in a round robin manner 
would satisfy the problem as stated there.

Thank you for the summary and intercession [~andrew.purt...@gmail.com]

bq. That won't work because an HConnection is shared by all the clients on the 
same JVM.

Not so [~giacomotaylor], not since hbase 1.0. But I can see where you are 
coming from; previous to 1.0, connection handling was voodoo. The connection 
handling is for the client to manage now.

If a client wants to run a particular configuration (priority, etc.), I suggest 
that it open a new connection and set attributes appropriately and away you go. 
It will be easier on the server to sort the incoming loading/scheduling on a 
Connection-basis rather than on a per-request-and-then-on-group basis. Would 
this work for phoenix mighty James?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995085#comment-14995085
 ] 

James Taylor commented on HBASE-12790:
--

Phoenix already manages the connections. We share the same HConnection for 
clients on the same JVM because opening an HConnection is expensive - that's 
why I was saying this option won't work. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995039#comment-14995039
 ] 

Andrew Purtell commented on HBASE-12790:


BTW I personally see allowing a label to be passed and consumed by a scheduler 
as something generically useful but I do apologize because going off on that 
tangent for that reason complicates the discussion. 

Waiting to hear back from the Phoenix peeps. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995037#comment-14995037
 ] 

Andrew Purtell commented on HBASE-12790:


bq. RPC already has priority.  Adding more fields seems really dubious when 
we're not even using that one well yet.

Not dubious at all when there's a user lined up to take advantage of it. And 
optional protobuf fields cost nothing when not used. 

bq. Will the server round-robin'ing amongst the client connections work for 
phoenix?

I think this addresses the scenario described way up on the description: client 
A issues 100 parallel scans, so does client B, we don't want A's work to delay 
B's work. This suggests to me A and B are separate clients hence separate 
connections. Therefore dispatching work queued per connection in a round robin 
manner would satisfy the problem as stated there. Is that correct 
[~giacomotaylor] ? However the description must miss some requirement because 
when working up the patch [~ram_krish] then introduces the group ID claiming 
it's needed for the Phoenix use case and James follows up saying it's only the 
client who knows what work belongs in one "group" versus another. But is that 
absolutely necessary?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14995056#comment-14995056
 ] 

James Taylor commented on HBASE-12790:
--

bq. Will the server round-robin'ing amongst the client connections work for 
phoenix?
That won't work because an HConnection is shared by all the clients on the same 
JVM.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14994488#comment-14994488
 ] 

James Taylor commented on HBASE-12790:
--

If HBase can provide a means for Phoenix to realize its SLAs across a fully 
loaded cluster, then we'll happily leverage it. The current HBase FIFO 
scheduled doesn't do that, so we need to either make it pluggable or provide a 
scheduler that does. The current patch solves the issue - how about we do the 
simple suggestion that [~apurtell] suggested to fix up the patch to handle 
writes too?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-06 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14994538#comment-14994538
 ] 

stack commented on HBASE-12790:
---

bq. Scan attributes alone will not do IMHO because the queues cannot do this 
round robin for now.

They can round robin over the Scans but you are saying the scheduler needs to 
distinguish at a higher level than per Scan? It can't arbitrate on Scanner 
lease or a Scanner id attribute? Scheduler needs to make sure that we schedule 
scans from different clients... We could just schedule the same client over and 
over and shut out all others?

bq. Let me check that more closely in terms of phoenix code also.

Thanks.

bq. ...or provide a scheduler that does.

I agree with this bit. Long scans or a single client hogging server resources 
is broke for everyone. Lets fix it for all rather than just for phoenix?

bq.  how about we do the simple suggestion that Andrew Purtell suggested to 
fix up the patch to handle writes too?

Because it pulls in an alien notion of 'groups', a tiering/complication that we 
can hopefully do without.




> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-05 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14992100#comment-14992100
 ] 

stack commented on HBASE-12790:
---

Phoenix shouldn't have to add its own scheduler. Phoenix changing basic 
functionality of hbase is not sustainable; for phoenix nor hbase; neither 
project has resources to ensure custom scheduler and executor setups perform 
and are bug free at scale. Phoenix shouldn't have to do hbase customization 
given that what Phoenix wants of the scheduler is super basic (staccato scan 
rather than sustained). I've asked if this groupid specialization is a deal 
breaker or will pulling on exisiting attributes whether connection identifier 
or scan attributes will do. I may have been answered above or over in rb but 
have not seen it if I have.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-05 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14993243#comment-14993243
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


bq.I've asked if this groupid specialization is a deal breaker or will pulling 
on exisiting attributes whether connection identifier or scan attributes will 
do. I may have been answered above or over in rb but have not seen it if I have.
Scan attributes alone will not do IMHO because the queues cannot do this round 
robin for now. It can handle only priority but cannot round robin within the 
same priority.
Let me see if the connection identifier can be of any use. Then use this 
connection identifier to go thro a queue that can do the round robin with the 
connection identifier. Let me check that more closely in terms of phoenix code 
also. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14991246#comment-14991246
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


To me having grouping Id for scan was ok but not to other requests.  We could 
go with Attributes and that is a very simple approach - but the problem was 
that even if Phoenix wants to add its own scheduler to the installations, the 
executors are not configurable, So its better we try to allow HBase to 
configure its executors and queues for replication and priority executions and  
the basic read and write executors. Doing this would allow Phoenix to use its 
own impl of read and write part of the executors alone rather than have to 
replace the entire stuff. If you see in the current patch we only try to tweak 
this executor and all the other executors and queues are left the older way. 
Though HBase allows configuring its own schedulers it is not so generic.



> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14991231#comment-14991231
 ] 

stack commented on HBASE-12790:
---

bq. We will extend the groupid concept to all the client requests. That 
includes scan, gets, MutateRequest, MultiRequest, Bulkloadrequest etc.

Sorry. Wasn't party to the conversation, but this seems at first blush (until I 
hear more), like the wrong direction completely. Rather than making Scan 
"staccato", a notion that I think you could argue should be the default 
behavior when scanning (its already sortof 'staccato' given its going to be 
preading from hdfs), instead, the codebase is to be littered with this 
arbitrary 'groupid' doohickey thingy that, truth be told, is a phoenix thing 
(yeah, others could use it but its so exotic, only phoenix will be able to make 
sense of it).

bq. This will allow every Put, Delete, Increment, Append, Get and Scan to have 
a grouping id. 

Stinks!! (Not  directed at you [~ram_krish] but whoever all who came up w/ this 
notion sir).

Why we need groupid at all? Scan already has an identifier kept in lease 
accounting, etc. If you want grouping, arbitrate by Connection. If Connection 
to coarse for a client, have your client create a new Connection per its notion 
of 'group', whatever that is.

A roundrobin scheduler that lives in phoenix only and that requires a rolling 
restart and dedication of the cluster to phoenix-only workloads is one way to 
solve this, yeah, but it seems like you have a generic problem and a generic 
soln would be less work and generally beneficial.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14991075#comment-14991075
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Am not sure whether within in end of this week can come up with a change of 
avoiding the hardcoded selection of executors and queue types. I have a patch 
ready for trunk that supports groupid for client operations. Will try to come 
up with tasks that needs to be done in hbase if Phoenix has to have this 
RoundRobinScheduler. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread Anoop Sam John (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14989500#comment-14989500
 ] 

Anoop Sam John commented on HBASE-12790:


No need to expose any Key.. Phoenix has its own naming convention for 
attributes it use.  (we use attributes in Scan itself)  Can name the new key 
also in similar way.  HBase has nothing to do with that key any way then.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread Anoop Sam John (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14989451#comment-14989451
 ] 

Anoop Sam John commented on HBASE-12790:


And we have RpcSchedulerFactory  exposed to Phoenix
{code}
@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC, 
HBaseInterfaceAudience.PHOENIX})
@InterfaceStability.Evolving
public interface RpcSchedulerFactory {

{code}

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14989453#comment-14989453
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Ya fine with this. HBase needs to expose the attributes KEY that can be used 
for setting the GROUP_ID and Phoenix needs to set that and the plugged new RPC 
scheduler may help in doing this stuff. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread Anoop Sam John (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14989446#comment-14989446
 ] 

Anoop Sam John commented on HBASE-12790:


This is a specific case with parallel scan (split one scan into many scans) so 
I think we can do this impl only in Phoenix?  HBase allows to plugin custom 
scheduler.  And if the new scheduler in this patch goes into Phoenix and sets 
that in conf, we can achieve the same. So instead of setting groupId on Scan we 
may have to pass that as an attribute in Scan.  Parsing an attribute from a PB 
object is having bit more overhead still not much IMO..  So we wont complicate 
things in HBase..   Thoughts?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14989819#comment-14989819
 ] 

Andrew Purtell commented on HBASE-12790:


Doing this entirely over in Phoenix would obviously remove concerns we have 
over on the HBase side. If that's how you'd like to proceed please resolve this 
JIRA accordingly.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14989826#comment-14989826
 ] 

Andrew Purtell commented on HBASE-12790:


If this is to be a Phoenix-only thing may I suggest the implementation should 
depend on HBase LimitedPrivate or Public interfaces only. This way we won't 
have a repeat of the problems we've faced with local indexing. Not a HBase 
issue so much as a potential maintenance headache for Phoenix, FWIW. If the 
available interfaces so designated are insufficient please open issues for what 
you need. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14989896#comment-14989896
 ] 

James Taylor commented on HBASE-12790:
--

The round robin scheduler could live in Phoenix, but we still need a way of 
configuring a different executor on the cluster. Plus what Andrew said - we 
should be able to only use LimitedPrivate or Public interfaces in our 
implementation of the round robin scheduler.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14989995#comment-14989995
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


There are few things to check here. Once Phoenix allows this type of factory 
and since this is an external entity adding to hbase's scheduling - then the 
executors to be used with Replication, the type of queues like fifo, deadline 
everything needs to be handled. 
So if HBase adds some new type of Executor all that needs to be included and as 
Andrew said maintenance will be a tougher. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14990016#comment-14990016
 ] 

Andrew Purtell commented on HBASE-12790:


bq. then the executors to be used with Replication, the type of queues like 
fifo, deadline everything needs to be handled. So if HBase adds some new type 
of Executor all that needs to be included and as Andrew said maintenance will 
be a tougher.

We have a window, potentially narrow, to get in a refactor of pluggable 
scheduling for 1.2 and up.

As I mentioned on the RB for this work (at 
https://reviews.apache.org/r/32447/diff/4/?file=1078465#file1078465line104), 
it's unfortunate that schedulers hard code the selection of executors and queue 
types.

/cc [~stack] [~busbey] [~mbertozzi]

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-04 Thread Sean Busbey (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14990039#comment-14990039
 ] 

Sean Busbey commented on HBASE-12790:
-

FYI, jiras I'm waiting on to feature-freeze branch-1.2:

* HBASE-14712
* HBASE-14329
* HBASE-14233

I might try to convince folks to bump the first two if there isn't progress 
this week.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-03 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14987863#comment-14987863
 ] 

Andrew Purtell commented on HBASE-12790:


bq.  So if there is no 1-1 mapping from Mutation/Operation to RPC things get 
ambiguity.

Yes, and we need to document this, but if the proposal is to only support group 
ID for reads and not writes, then I'm not in favor of this change. Clients send 
mixed workloads to the server. Only supporting reads means only half the work 
is done and the feature would be only half useful.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-03 Thread Anoop Sam John (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14987853#comment-14987853
 ] 

Anoop Sam John commented on HBASE-12790:


Basically 'groupId' make sense for RPC requests but that is not really exposed 
to user.  So if there is no 1-1 mapping from Mutation/Operation to RPC things 
get ambiguity.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-11-03 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14987759#comment-14987759
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Thanks for all the comments on the RB. Had an offline discussion with Andy, 
James and Anoop.  I would like to update the discussion here.
We will extend the groupid concept to all the client requests. That includes 
scan, gets, MutateRequest, MultiRequest, Bulkloadrequest etc.
In order to do this we expose the groupId API at the Operation level. This will 
allow every Put, Delete, Increment, Append, Get and Scan to have a grouping id. 
Now at the Rpc layer the scan and gets have one to one mapping with the scan 
requests. So the groupid set on the individual scan/gets can be used to do the 
round robin.
But for MultiRequest there could be 'n' number of actions like Puts, deletes, 
gets etc. And every thing will be mapped to one multiRequest. Since we expose 
groupId at the Operation level it will mean that different actions can have 
different groupids set but at the Rpc layer we take the first groupId as the id 
for the entire multiRequest. I had a concern with this part because users will 
be allowed to set different groupIds but internally we will be using only one 
of them and this point gets hidden from the user totally. May be it could 
confuse the user is what I thought. Overall this groupingId concept is not a 
direct parameter that affects the users result whereas it is more on how the 
server is going to handle the request. 
I can update the patch based on the above feedbacks/discussions. Any more 
queries and feedback are welcome!!


> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-15 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14960117#comment-14960117
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Thanks Andy for the update. I have just loaded my little cluster with the 
required phoenix tables and thought of repeating the experiments. 
Let me get back on the review board comments.
One request/suggestion - Is it possible to test the branch-1 patch also . 
Because that is more to do with the prirority based handling and that would be 
the default in the branch-1 case.  If that scheduler is also tested and we 
ensure we get the same benefit on the phoenix side without any regression then 
I would be more than happy.  I can perform my side of tests but the Phoenix 
team's test would be of more value add. /cc [~apurtell]?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-15 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14960135#comment-14960135
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Sure James. My initial tests on branch-1 also revealed there were no regression 
and the patch worked as that of the FIFO based approach in 0.98. I will do it 
once again.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-15 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14960122#comment-14960122
 ] 

James Taylor commented on HBASE-12790:
--

[~ram_krish] - since we run HBase 0.98 in production, that's what we have 
installed on our test clusters. It'd be best if you could test that branch, as 
it wouldn't be feasible on our end.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch, PHOENIX_4.5.3-HBase-0.98-2317-SNAPSHOT.zip
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-06 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14944894#comment-14944894
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


bq.Did you mean: instead of waiting 20 seconds for one count query now we will 
see several point queries completing during that interval?
Yes [~apurtell]. That is right. 
bq.Should see clear improvement when the count query is running with the patch 
applied. (smile)
The count query still runs with the same amount of time but it is the smaller 
queries that stays behind the bigger queries gets benefited. I think that is a 
valid case and I can see that the point queries are lagging without the patch 
because the queues are filled up with the parallel scans launched by the bigger 
count query. Let me see how to present these results. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-06 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14945252#comment-14945252
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


bq.And when no count query is running the point queries shouldn't show a 
penalty (or if they do then we discuss)
That does not happen and I have verified that. Thanks Andy.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-06 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14945217#comment-14945217
 ] 

Andrew Purtell commented on HBASE-12790:


bq. The count query still runs with the same amount of time but it is the 
smaller queries that stays behind the bigger queries gets benefited.   

Yes, that's what I mean. And when no count query is running the point queries 
shouldn't show a penalty (or if they do then we discuss)

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-05 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14944277#comment-14944277
 ] 

Andrew Purtell commented on HBASE-12790:


bq.  Instead of waiting for some 20 secs for one point query now we will be 
able to execute around 10 queries each with 2 secs time. Let me see how I can 
present the reports.

Thanks Ram.

Did you mean: instead of waiting 20 seconds for one count query now we will see 
several point queries completing during that interval? 

In addition to how many of the different query types can complete during the 
test interval, when testing the mixed point and count load you're putting on 
the system I wonder how does the distribution of completion times for point 
queries change? Should see clear improvement when the count query is running 
with the patch applied. (smile) Shouldn't see perf impact when not, or if we do 
we can see the magnitude of it and decide if its acceptable. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-03 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14942166#comment-14942166
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


[~apurtell]
Thanks for the comment Andrew. Regarding the testing part, this particular 
feature is not going to improve the performance of a point query or a count 
query but basically it is going to say how the query distribution is.  Instead 
of waiting for some 20 secs for one point query now we will be able to execute 
around 10 queries each with 2 secs time.  Let me see how I can present the 
reports.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-02 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14941922#comment-14941922
 ] 

Andrew Purtell commented on HBASE-12790:


I added a comment above as a reply on another comment. Basically, perf gain and 
impact not characterized well enough yet, but it's just a testing issue I think 
and an improved test run and analysis will do the trick. See 
https://issues.apache.org/jira/browse/HBASE-12790?focusedCommentId=14941919=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14941919

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-10-02 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14941919#comment-14941919
 ] 

Andrew Purtell commented on HBASE-12790:


I'm sorry but this doesn't help. Looks like output captured from one test run?

What would help is a few runs of the test, i.e. 10, with statistics 
average/min/max/p99 provided for the measured point and count query running 
times over all of the test runs with and without the patch.

/cc [~giacomotaylor] [~lhofhansl]

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-09-21 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14901876#comment-14901876
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Updated the patch in RB. RB link is 
https://reviews.apache.org/r/32447/diff/#

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-09-14 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14744299#comment-14744299
 ] 

James Taylor commented on HBASE-12790:
--

[~apurtell], [~lhofhansl] - would it be possible for one of you to review?

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-09-11 Thread Hadoop QA (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14740598#comment-14740598
 ] 

Hadoop QA commented on HBASE-12790:
---

{color:red}-1 overall{color}.  Here are the results of testing the latest 
attachment 
  
http://issues.apache.org/jira/secure/attachment/12755372/HBASE-12790_trunk_1.patch
  against master branch at commit fda317cebb5d306cabf1899e05cedb0225b2b62b.
  ATTACHMENT ID: 12755372

{color:green}+1 @author{color}.  The patch does not contain any @author 
tags.

{color:green}+1 tests included{color}.  The patch appears to include 10 new 
or modified tests.

{color:green}+1 hadoop versions{color}. The patch compiles with all 
supported hadoop versions (2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.6.0 2.7.0 2.7.1)

{color:green}+1 javac{color}.  The applied patch does not increase the 
total number of javac compiler warnings.

{color:green}+1 protoc{color}.  The applied patch does not increase the 
total number of protoc compiler warnings.

{color:red}-1 javadoc{color}.  The javadoc tool appears to have generated 3 
warning messages.

{color:red}-1 checkstyle{color}.  The applied patch generated 
1837 checkstyle errors (more than the master's current 1834 errors).

{color:green}+1 findbugs{color}.  The patch does not introduce any  new 
Findbugs (version 2.0.3) warnings.

{color:red}-1 release audit{color}.  The applied patch generated 1 release 
audit warnings (more than the master's current 0 warnings).

{color:red}-1 lineLengths{color}.  The patch introduces the following lines 
longer than 100:
+  new java.lang.String[] { "Column", "Attribute", "StartRow", 
"StopRow", "Filter", "TimeRange", "MaxVersions", "CacheBlocks", "BatchSize", 
"MaxResultSize", "StoreLimit", "StoreOffset", "LoadColumnFamiliesOnDemand", 
"Small", "Reversed", "Consistency", "Caching", "GroupingId", });
+  queues.add((BlockingQueue) 
ReflectionUtils.newInstance(queueClass, initargs));
+  scheduler = new RoundRobinRPCScheduler(schedConf, 1, 1, 1, priority, 
HConstants.QOS_THRESHOLD);
+AbstractPriorityBasedRoundRobinQueue testList = new 
AbstractRoundRobinPriorityQueueImpl(

  {color:green}+1 site{color}.  The mvn post-site goal succeeds with this patch.

 {color:red}-1 core tests{color}.  The patch failed these unit tests:
   org.apache.hadoop.hbase.client.TestOperation

Test results: 
https://builds.apache.org/job/PreCommit-HBASE-Build/15558//testReport/
Release audit warnings: 
https://builds.apache.org/job/PreCommit-HBASE-Build/15558//artifact/patchprocess/patchReleaseAuditWarnings.txt
Release Findbugs (version 2.0.3)warnings: 
https://builds.apache.org/job/PreCommit-HBASE-Build/15558//artifact/patchprocess/newFindbugsWarnings.html
Checkstyle Errors: 
https://builds.apache.org/job/PreCommit-HBASE-Build/15558//artifact/patchprocess/checkstyle-aggregate.html

Javadoc warnings: 
https://builds.apache.org/job/PreCommit-HBASE-Build/15558//artifact/patchprocess/patchJavadocWarnings.txt
Console output: 
https://builds.apache.org/job/PreCommit-HBASE-Build/15558//console

This message is automatically generated.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch, 
> HBASE-12790_trunk_1.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin 

[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-09-10 Thread Hadoop QA (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14738288#comment-14738288
 ] 

Hadoop QA commented on HBASE-12790:
---

{color:red}-1 overall{color}.  Here are the results of testing the latest 
attachment 
  http://issues.apache.org/jira/secure/attachment/12755075/HBASE-12790_5.patch
  against master branch at commit e770cf34174c8226eaf703c303ee3d8397c38242.
  ATTACHMENT ID: 12755075

{color:green}+1 @author{color}.  The patch does not contain any @author 
tags.

{color:green}+1 tests included{color}.  The patch appears to include 10 new 
or modified tests.

{color:red}-1 patch{color}.  The patch command could not apply the patch.

Console output: 
https://builds.apache.org/job/PreCommit-HBASE-Build/15521//console

This message is automatically generated.

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-09-10 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14740173#comment-14740173
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


The patch that I attached was based on branch-1.0. Will create a patch based on 
trunk. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-09-10 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14738268#comment-14738268
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


bq.Why both FairShareBlockingQueue and FairSharePriorityBasedBlockingQueue? 
Which one would Phoenix use? Pick that one.
I think we need to support both here because currently hbase allows both 
configs (fifo and deadline).
bq.Have we tried using one of the concurrent queue types instead of a blocking 
(locking) queue type? Does that scale better as the concurrency is turned up?
Till now I have tried.  But may be work happening in HBASE-14331 can be checked 
if we can accomodate it for the RoundRobin behaviour. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> Project: HBase
>  Issue Type: New Feature
>Reporter: James Taylor
>Assignee: ramkrishna.s.vasudevan
>  Labels: Phoenix
> Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
> HBASE-12790_1.patch, HBASE-12790_5.patch, HBASE-12790_callwrapper.patch
>
>
> Some HBase clients parallelize the execution of a scan to reduce latency in 
> getting back results. This can lead to starvation with a loaded cluster and 
> interleaved scans, since the RPC queue will be ordered and processed on a 
> FIFO basis. For example, if there are two clients, A & B that submit largish 
> scans at the same time. Say each scan is broken down into 100 scans by the 
> client (broken down into equal depth chunks along the row key), and the 100 
> scans of client A are queued first, followed immediately by the 100 scans of 
> client B. In this case, client B will be starved out of getting any results 
> back until the scans for client A complete.
> One solution to this is to use the attached AbstractRoundRobinQueue instead 
> of the standard FIFO queue. The queue to be used could be (maybe it already 
> is) configurable based on a new config parameter. Using this queue would 
> require the client to have the same identifier for all of the 100 parallel 
> scans that represent a single logical scan from the clients point of view. 
> With this information, the round robin queue would pick off a task from the 
> queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
> starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-09-09 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=14736595#comment-14736595
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


In between my HBASE-11425 tests, I spent some time in this JIRA and completed 
the testing that is needed. The set up was to load a Phoenix table with 
7000 rows. 
The RS is configured with 5 handler threads.  The table is major compacted and 
ensure that the STATS table is filled up with stats that would be enough to 
fill up the handler threads with parallel scan queries with same GROUP ID  when 
a count(*) query is issued.
We basically set up a client program which infinitely runs two queries in two 
threads - count(*) and another a point query (a query that exactly retrieves a 
single row).
The count(*) is split into around 15 parallel queries each with the same group 
id.
Now before we implement such a patch where we could round robin on a group id 
we get this 
In case of FIFO based implementation (0.98)
Without patch
==
{code}
The completion time for point query is 5
The completion time for point query is 5
The completion time for countquery is 19793
The completion time for point query is 12
The completion time for point query is 20656
..
The completion time for countquery is 21127
The completion time for point query is 5
The completion time for point query is 22454
The completion time for point query is 8

The completion time for point query is 3
The completion time for countquery is 24144
The completion time for point query is 26
The completion time for point query is 18876
The completion time for point query is 6
{code}

With patch

{code}
The completion time for point query is 8
The completion time for countquery is 6
The completion time for point query is 8
The completion time for point query is 2131
The completion time for point query is 12628
The completion time for point query is 6359



The completion time for countquery is 22656
The completion time for point query is 7
The completion time for point query is 2476
The completion time for point query is 14469
The completion time for point query is 318
{code}

Deadline based priority queue
Without patch
===
{code}
The completion time for point query is 4
The completion time for countquery is 29877
The completion time for point query is 5
The completion time for point query is 26895
The completion time for point query is 9

The completion time for point query is 4
The completion time for countquery is 29027
The completion time for point query is 6
The completion time for point query is 27288
The completion time for point query is 5
{code}

With patch

{code}
The completion time for point query is 6
The completion time for countquery is 26445
The completion time for point query is 8
The completion time for point query is 3098
The completion time for point query is 215
The completion time for point query is 1682
The completion time for point query is 963
The completion time for point query is 760
The completion time for point query is 1386
The completion time for point query is 1185
The completion time for point query is 2013
The completion time for point query is 809
The completion time for point query is 2410
The completion time for point query is 869
The completion time for point query is 1661
The completion time for point query is 1430
The completion time for point query is 1748
The completion time for point query is 1046
The completion time for point query is 1299
The completion time for point query is 698
The completion time for point query is 1320
The completion time for point query is 23
The completion time for point query is 6
The completion time for point query is 11


The completion time for countquery is 27141
The completion time for point query is 5
The completion time for point query is 3158
The completion time for point query is 177
The completion time for point query is 1828
The completion time for point query is 1222
The completion time for point query is 3745
The completion time for point query is 30
The completion time for point query is 207
The completion time for point query is 2639
The completion time for point query is 1396
The completion time for point query is 2425
The completion time for point query is 903
The completion time for point query is 668
The completion time for point query is 2718
The completion time for point query is 1863
{code}

so we could see that instead of waiting for a single point query upto 25 to 29 
secs we try to round robin with the point queries that are interspersed with 
the count query's scans(with same groupid).  Thus avoiding the delay due to 
that single point query. 

> Support fairness across parallelized scans
> --
>
> Key: HBASE-12790
> URL: https://issues.apache.org/jira/browse/HBASE-12790
> 

[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-27 Thread Nick Dimiduk (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14514653#comment-14514653
 ] 

Nick Dimiduk commented on HBASE-12790:
--

For what it's worth, I believe there's an open ticket in Hive to break large 
scans down into multiple smaller ones. Don't know which one off the top of my 
head though. cc [~sushanth]

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-27 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14514673#comment-14514673
 ] 

James Taylor commented on HBASE-12790:
--

bq. For what it's worth, I believe there's an open ticket in Hive to break 
large scans down into multiple smaller ones. 
FWIW, Phoenix already does this. This is for the next step of ensuring that a 
big scan broken down into many small chunks doesn't lock out a small scan from 
being able to complete.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-27 Thread Nick Dimiduk (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14514680#comment-14514680
 ] 

Nick Dimiduk commented on HBASE-12790:
--

[~jamestaylor] would you say this kind of thinking applies to MR jobs as well? 
We'd want to group all scans from a job together so that the scheduler will 
prevent one-off's from starving? Previously I've thought about this in terms of 
batch vs online scans, but maybe group is the generalization of this 
thinking?

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-27 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14514696#comment-14514696
 ] 

James Taylor commented on HBASE-12790:
--

Yes, I think conceptually this is the same. However, sometimes with batch jobs 
you don't care about latency, so the concern may be lower.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-27 Thread Nick Dimiduk (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14514737#comment-14514737
 ] 

Nick Dimiduk commented on HBASE-12790:
--

I bring up batch jobs for two reasons. (1) you care about the latency of your 
non-batch jobs a lot, so a system that supports fairness should help non-batch 
running simultaneously with batch. (2) lots of people actually do care about 
the latency of batch jobs as they relate to each other; having one job drown 
out all the others on a shared cluster isn't helpful, and is why so much time 
goes into Hadoop/YARN schedulers. 

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-27 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14514753#comment-14514753
 ] 

James Taylor commented on HBASE-12790:
--

Excellent point, [~ndimiduk].

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-22 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14507460#comment-14507460
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


bq.An instanceof check for ScanRequest on the result of o.getCall().param
I can change that.  I just used the pattern that was already in use.  But your 
suggestion makes sense. can change it.
bq.Have these changes been benchmarked? What is the performance difference? 
Going to be important to put up numbers gathered in a statistically meaningful 
way I think.
No. Not yet.
bq.Have we tried using one of the concurrent queue types instead of a blocking 
(locking) queue type? Does that scale better as the concurrency is turned up?
bq.Consider JMH for collecting microbenchmarks.
Sure will try that.  Learning to use JMH.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-22 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14507426#comment-14507426
 ] 

Andrew Purtell commented on HBASE-12790:


bq. SimpleRpcScheduler is getting more complex. Beginning to not live up to its 
naming.

On this part, I see why SimpleRpcScheduler is being changed so this is ok.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-22 Thread Andrew Purtell (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14507418#comment-14507418
 ] 

Andrew Purtell commented on HBASE-12790:


Why both FairShareBlockingQueue and FairSharePriorityBasedBlockingQueue? Which 
one would Phoenix use? Pick that one.

In the new *BlockingQueue classes, each time we want to remove an item from the 
queue we have to do a string comparison? An instanceof check for ScanRequest on 
the result of {{o.getCall().param}} would be faster, probably a lot faster. 
Need to be performance conscious here, at least in this case I'm not seeing it.

Have these changes been benchmarked? What is the performance difference? Going 
to be important to put up numbers gathered in a statistically meaningful way I 
think.

SimpleRpcScheduler is getting more complex. Beginning to not live up to its 
naming.

Are the changes made to SimpleRpcScheduler available to the other schedulers? 
In other words, are you teaching all of the schedulers about call grouping? If 
not, why not? 

Have we tried using one of the concurrent queue types instead of a blocking 
(locking) queue type? Does that scale better as the concurrency is turned up?

Consider JMH for collecting microbenchmarks.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-21 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14506360#comment-14506360
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Pointed out by [~giacomotaylor] over in 
https://issues.apache.org/jira/browse/PHOENIX-1906 for a typical usecase for 
this type of round robin scheduler.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch, HBASE-12790_callwrapper.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-16 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14497628#comment-14497628
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


While running some real time cases using PE tool. I got some NPEs here.  After 
spending time in digging what's going on, the reason is because once we 
complete a call we just cleanUp the calls.
This datastructure AbstractPriorityRoundRobinQueue holds the CallRunner as the 
Key and the same is being used in the ProducerList also. (ie) The 
CallPriorityComparator is used to construct the Tree Map which acts as the 
comparator for the keys in the tree map.  
Now after poll() ing for an element in the queue the RPC Executor nullifies the 
call.  So when a new element needs to be added this comaprator throws an NPE 
because already one of the calls has been nullified. 
From the design side, we cannot pass the CallRunner directly for these type of 
cases because in case of BoundedPriorityQueue it is only the head that is 
being returned and the pointer gets moved away from that element as the head 
itself changes.  But in data structurs like TreeMap that is not the case.  
Interesting to debug this.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-14 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14494501#comment-14494501
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Am not very clear on how to write an end to end test case with actual scans.  
Anyway am trying to do some testing in the cluster.  Will report back here.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-04-03 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14394235#comment-14394235
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Seeing the current code, SimpleRPCScheduler is the only scheduler created from 
the RPCSchedulerFactory. So we will introduce a PriorityRPCSchedulerFactory and 
initialize a new PriorityRPCScheduler? So that we don't add the Grouping 
information to the SimpleRPCScheduler.  
What do you think?

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-03-31 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14388359#comment-14388359
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Clients that require this grouping strategy would go for this RoundRobin with 
Priroity (if there is deadline set for the Calls). Hence it would be the same. 
In fact we have a configuration to be set if this scheduler needs to get used. 
Any more reviews welcome!!

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-03-31 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14388654#comment-14388654
 ] 

stack commented on HBASE-12790:
---

So looking at the patch, a new concept -- 'grouping' -- is added to Scan as 
public apis with no doc on what it is about.

Why is a grouping id a 'string'?

Does FairShareBalancedRPCExecutor add anything? Why in class comment does it 
talk about scan when it plainly does nothing with scan.  Ditto 
FairShareRWQueueRPCExecutor.

So, simplerpcscheduler has defines for

53public static final String CALL_QUEUE_GROUPING = 
hbase.ipc.server.callqueue.grouping;
54public static final boolean CALL_QUEUE_GROUPING_DEFAULT_VALUE = false;

and other grouping pollution.  Is this because you wanted to avoid putting in 
place a fair scheduler implementation? Wouldn't it be cleaner doing this than 
adding flags and conditional construction to simplerpcscheduler (its not a 
simple scheduler anymore if it has fair scheduling stuff in it).

Back in a sec.



 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-03-31 Thread stack (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14388730#comment-14388730
 ] 

stack commented on HBASE-12790:
---

I see the new queue implementation doing a bunch of extra work while the q lock 
is held. Any micro-benchmark compare of this implementation to current q 
implementation even with no grouping enabled?

Is a 'producer' a 'group'? (Odd having method named extractProducer return 
group).

Why only 'scans' implemented? Wouldn't we want fairness for any method invoked 
against the server?

Do you have any proof this code delivers what is suggested at the top of this 
issue, that if all cilent A's scans are queued before all of client B's, that 
client B will get some action.

So, users would have to 'enable' this on the cluster? It would not be on by 
default?  If no degradation in scheduler, why would we not want this always on 
(if it indeed does fairness)?





 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-03-31 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14388771#comment-14388771
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


Thanks Stack for the review. 
bq.a new concept – 'grouping' – is added to Scan as public apis with no doc on 
what it is about.
I added the comment (not as doc) on the groupingId String variable. Will add a 
doc on the setters and getters. bq.Why is a bq.grouping id a 'string'?
What do you think we could add, an Integer? I thought a groupingId could a be a 
simple random string formed from a Unique random Id generated and use it with a 
clientId - Atleast currently in Phoenix it is a String.
bq.Does FairShareBalancedRPCExecutor add anything? Why in class comment does it 
talk about scan when it plainly does nothing with scan. Ditto 
FairShareRWQueueRPCExecutor.
Yes.  It actually instantiates the PriorityQueue that will be used.  In the 
BalancedRPCExecutor it will be LinkedBlockingQueue or BoundedPriorityQueue.  
Here we instantiate the FairShareBlockingQueue or the 
FairSharePriorityBasedBlockingQueue.
What I mean in the comment is that currently as I had tried out only for scan 
wanted to highlight that this feature works with SCan only.
bq.and other grouping pollution. Is this because you wanted to avoid putting in 
place a fair scheduler implementation?
May be yes.  That would be cleaner. I did this way because wanted to use this 
new queue only in the read part.  
As you suggested if you go with a new scheduler then should we use this for 
Replication, write and read also?
bq.Any micro-benchmark compare of this implementation to current q 
implementation even with no grouping enabled?
Yes sure.
bq.Is a 'producer' a 'group'? (Odd having method named extractProducer return 
group).
Yes here producer is a group. The AbstractPriorityRoundRobinQueue is a generic 
impl. So here in this case we have the producer as a simple grouping String.
bq.Do you have any proof this code delivers what is suggested at the top of 
this issue, that if all cilent A's scans are queued before all of client B's, 
that client B will get some action.
Yes I will add a real world test case.  Mainly this patch is to highlight the 
idea.  
My main question would be should we use this scheduler in all cases like writes 
and replication?  OR may be as a first cut as in this patch we go only 'scans' 
or 'gets'?
Even in the current way we have different queues for writes and reads.
bq.So, users would have to 'enable' this on the cluster? It would not be on by 
default? If no degradation in scheduler, why would we not want this always on 
Sure we could try this, based on the above question.
Once again thanks for the review.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-03-26 Thread James Taylor (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14381440#comment-14381440
 ] 

James Taylor commented on HBASE-12790:
--

The grouping ID is any client identifier that links a set of scans as a unit 
of work. It's not Phoenix specific. Every SQL query that is executed by 
Phoenix is parallelized as a set of scans. This set will have the same grouping 
ID to define them as a single unit of work. We just generate a UUID on the 
client for the grouping ID. I'm sure there's room for improvement in the 
performance of the round robin priority queue (but isn't there always :-) ).

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-03-26 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14381449#comment-14381449
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


James has just replied to your question.  Just seeing.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


[jira] [Commented] (HBASE-12790) Support fairness across parallelized scans

2015-03-26 Thread ramkrishna.s.vasudevan (JIRA)

[ 
https://issues.apache.org/jira/browse/HBASE-12790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14381446#comment-14381446
 ] 

ramkrishna.s.vasudevan commented on HBASE-12790:


bq.So is 'grouping' a pure phoenix construct or is 'grouping' just a client 
identifier?
I would say it is a client identifier. It may not be phoenix specific.  
bq.Or does a single phoenix client run multiple groups?
Single phoenix client - I am not getting your point here. When you say client 
you mean every Phoenix client will generate a fixed group Id?
 Every query can be split into parallel scans. And each query can set a unique 
Scan Id. I think Phoenix does it with a random ID. (Correct me if am wrong here 
[~giacomotaylor].)
bq.I ask because this scheduling of rpc in the server is a hot spot when I 
profile
We could do a profile to say how much it is.  I think the Phoenix team would 
already have some profiling information on this area.

 Support fairness across parallelized scans
 --

 Key: HBASE-12790
 URL: https://issues.apache.org/jira/browse/HBASE-12790
 Project: HBase
  Issue Type: New Feature
Reporter: James Taylor
Assignee: ramkrishna.s.vasudevan
  Labels: Phoenix
 Attachments: AbstractRoundRobinQueue.java, HBASE-12790.patch, 
 HBASE-12790_1.patch


 Some HBase clients parallelize the execution of a scan to reduce latency in 
 getting back results. This can lead to starvation with a loaded cluster and 
 interleaved scans, since the RPC queue will be ordered and processed on a 
 FIFO basis. For example, if there are two clients, A  B that submit largish 
 scans at the same time. Say each scan is broken down into 100 scans by the 
 client (broken down into equal depth chunks along the row key), and the 100 
 scans of client A are queued first, followed immediately by the 100 scans of 
 client B. In this case, client B will be starved out of getting any results 
 back until the scans for client A complete.
 One solution to this is to use the attached AbstractRoundRobinQueue instead 
 of the standard FIFO queue. The queue to be used could be (maybe it already 
 is) configurable based on a new config parameter. Using this queue would 
 require the client to have the same identifier for all of the 100 parallel 
 scans that represent a single logical scan from the clients point of view. 
 With this information, the round robin queue would pick off a task from the 
 queue in a round robin fashion (instead of a strictly FIFO manner) to prevent 
 starvation over interleaved parallelized scans.



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


  1   2   >