@Override public boolean dispatch(CallRunner callTask) throws InterruptedException, IOException { ServerCall call = callTask.getCall(); int priority = call.getHeader().getPriority(); if (indexPriority == priority) { return indexCallExecutor.dispatch(callTask); } else if (metadataPriority == priority) { return metadataCallExecutor.dispatch(callTask); } else { return delegate.dispatch(callTask); } }
private void dispatchCallWithPriority(RpcScheduler scheduler, int priority) throws Exception { CallRunner task = Mockito.mock(CallRunner.class); RequestHeader header = RequestHeader.newBuilder().setPriority(priority).build(); RpcServer server = RpcServerFactory.createRpcServer(null, "test-rpcserver", Lists.newArrayList(new BlockingServiceAndInterface( SERVICE, null)), isa, conf, scheduler); ServerCall call = Mockito.mock(ServerCall.class); when(call.getHeader()).thenReturn(header); when(call.getRequestUser()).thenReturn(Optional.empty()); Mockito.when(task.getCall()).thenReturn(call); scheduler.dispatch(task); Mockito.verify(task).getCall(); Mockito.verifyNoMoreInteractions(task); server.stop(); } }
@Override public int compare(CallRunner a, CallRunner b) { RpcServer.Call callA = a.getCall(); RpcServer.Call callB = b.getCall(); long deadlineA = priority.getDeadline(callA.getHeader(), callA.param); long deadlineB = priority.getDeadline(callB.getHeader(), callB.param); deadlineA = callA.timestamp + Math.min(deadlineA, maxDelay); deadlineB = callB.timestamp + Math.min(deadlineB, maxDelay); return (int)(deadlineA - deadlineB); } }
@Override public boolean dispatch(final CallRunner callTask) throws InterruptedException { RpcServer.Call call = callTask.getCall(); int queueIndex; if (isWriteRequest(call.getHeader(), call.param)) { queueIndex = writeBalancer.getNextQueue(); } else if (numScanQueues > 0 && isScanRequest(call.getHeader(), call.param)) { queueIndex = numWriteQueues + numReadQueues + scanBalancer.getNextQueue(); } else { queueIndex = numWriteQueues + readBalancer.getNextQueue(); } return queues.get(queueIndex).offer(callTask); }
@Override public boolean dispatch(CallRunner callTask) throws InterruptedException, IOException { ServerCall call = callTask.getCall(); int priority = call.getHeader().getPriority(); if (indexPriority == priority) { return indexCallExecutor.dispatch(callTask); } else if (metadataPriority == priority) { return metadataCallExecutor.dispatch(callTask); } else { return delegate.dispatch(callTask); } }
@Override public boolean dispatch(CallRunner callTask) throws InterruptedException, IOException { ServerCall call = callTask.getCall(); int priority = call.getHeader().getPriority(); if (indexPriority == priority) { return indexCallExecutor.dispatch(callTask); } else if (metadataPriority == priority) { return metadataCallExecutor.dispatch(callTask); } else { return delegate.dispatch(callTask); } }
@Override public boolean dispatch(CallRunner callTask) throws InterruptedException { RpcServer.Call call = callTask.getCall(); int level = priority.getPriority(call.getHeader(), call.param, call.getRequestUser()); if (priorityExecutor != null && level > highPriorityLevel) { return priorityExecutor.dispatch(callTask); } else if (replicationExecutor != null && level == HConstants.REPLICATION_QOS) { return replicationExecutor.dispatch(callTask); } else { return callExecutor.dispatch(callTask); } }