HBASE-18633 Add more info to understand the source/scenario of large batch requests exceeding threshold

This commit is contained in:
Vikas Vishwakarma 2017-08-23 11:34:10 +05:30 committed by Vikas Vishwakarma
parent d63a287bfd
commit 4e7f677170
2 changed files with 13 additions and 8 deletions

View File

@ -1131,16 +1131,17 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
// Exposed for testing
static interface LogDelegate {
void logBatchWarning(int sum, int rowSizeWarnThreshold);
void logBatchWarning(String firstRegionName, int sum, int rowSizeWarnThreshold);
}
private static LogDelegate DEFAULT_LOG_DELEGATE = new LogDelegate() {
@Override
public void logBatchWarning(int sum, int rowSizeWarnThreshold) {
public void logBatchWarning(String firstRegionName, int sum, int rowSizeWarnThreshold) {
if (LOG.isWarnEnabled()) {
LOG.warn("Large batch operation detected (greater than " + rowSizeWarnThreshold
+ ") (HBASE-18023)." + " Requested Number of Rows: " + sum + " Client: "
+ RpcServer.getRequestUserName() + "/" + RpcServer.getRemoteAddress());
+ RpcServer.getRequestUserName() + "/" + RpcServer.getRemoteAddress()
+ " first region in multi=" + firstRegionName);
}
}
};
@ -2513,11 +2514,15 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
private void checkBatchSizeAndLogLargeSize(MultiRequest request) {
int sum = 0;
String firstRegionName = null;
for (RegionAction regionAction : request.getRegionActionList()) {
if (sum == 0) {
firstRegionName = Bytes.toStringBinary(regionAction.getRegion().getValue().toByteArray());
}
sum += regionAction.getActionCount();
}
if (sum > rowSizeWarnThreshold) {
ld.logBatchWarning(sum, rowSizeWarnThreshold);
ld.logBatchWarning(firstRegionName, sum, rowSizeWarnThreshold);
}
}

View File

@ -117,25 +117,25 @@ public class TestMultiLogThreshold {
@Test
public void testMultiLogThresholdRegionActions() throws ServiceException, IOException {
sendMultiRequest(THRESHOLD + 1, ActionType.REGION_ACTIONS);
verify(LD, Mockito.times(1)).logBatchWarning(Mockito.anyInt(), Mockito.anyInt());
verify(LD, Mockito.times(1)).logBatchWarning(Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt());
}
@Test
public void testMultiNoLogThresholdRegionActions() throws ServiceException, IOException {
sendMultiRequest(THRESHOLD, ActionType.REGION_ACTIONS);
verify(LD, Mockito.never()).logBatchWarning(Mockito.anyInt(), Mockito.anyInt());
verify(LD, Mockito.never()).logBatchWarning(Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt());
}
@Test
public void testMultiLogThresholdActions() throws ServiceException, IOException {
sendMultiRequest(THRESHOLD + 1, ActionType.ACTIONS);
verify(LD, Mockito.times(1)).logBatchWarning(Mockito.anyInt(), Mockito.anyInt());
verify(LD, Mockito.times(1)).logBatchWarning(Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt());
}
@Test
public void testMultiNoLogThresholdAction() throws ServiceException, IOException {
sendMultiRequest(THRESHOLD, ActionType.ACTIONS);
verify(LD, Mockito.never()).logBatchWarning(Mockito.anyInt(), Mockito.anyInt());
verify(LD, Mockito.never()).logBatchWarning(Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt());
}
}