[ 
https://issues.apache.org/jira/browse/HBASE-14443?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jianwei Cui updated HBASE-14443:
--------------------------------
    Attachment: HBASE-14443-trunk-v1.patch

The patch will add request parameters into warn message.
For get/scan/mutate request, the warn message will be formatted as:
{code}
(operationTooSlow): 
{"region":"test_table,,1442476299154.3ee9b59f45681b73c79b58b25d0be062.","Condition":{"family":"C","qualifier":""},"Put":{"totalColumns":1,"families":{"C":[{"timestamp":9223372036854775807,"tag":[],"qualifier":"","vlen":6}]},"row":"105"},
 ... ,"method":"Mutate"
{code}
This is a warn log for checkAndPut request, the condition and put info will 
both be included.
For multi request, the quantity of actions will be included as:
{code}
(operationTooSlow): 
{..."method":"Multi","MultiAction":{"Increment":1,"Put":1,"Append":1,"Delete":1,"regions":1}}
 
{code}
For coprocessor exec, the coprocessor service and method name will be extracted 
from request and included as:
{code}
(responseTooSlow): {"call":"hbase.pb.MultiRowMutationService#MutateRows(region: 
test_table,,1442476299154.3ee9b59f45681b73c79b58b25d0be062., row:106)",...}
{code}

> Add request parameter to the TooSlow/TooLarge warn message of RpcServer
> -----------------------------------------------------------------------
>
>                 Key: HBASE-14443
>                 URL: https://issues.apache.org/jira/browse/HBASE-14443
>             Project: HBase
>          Issue Type: Improvement
>          Components: rpc
>            Reporter: Jianwei Cui
>            Priority: Minor
>             Fix For: 1.2.1
>
>         Attachments: HBASE-14443-trunk-v1.patch
>
>
> The RpcServer will log a warn message for TooSlow or TooLarge request as:
> {code}
>         logResponse(new Object[]{param},
>             md.getName(), md.getName() + "(" + param.getClass().getName() + 
> ")",
>             (tooLarge ? "TooLarge" : "TooSlow"),
>             status.getClient(), startTime, processingTime, qTime,
>             responseSize);
> {code}
> The RpcServer#logResponse will create the warn message as:
> {code}
> if (params.length == 2 && server instanceof HRegionServer &&
>         params[0] instanceof byte[] &&
>         params[1] instanceof Operation) {
>       ...
>       responseInfo.putAll(((Operation) params[1]).toMap());
>       ...
>     } else if (params.length == 1 && server instanceof HRegionServer &&
>         params[0] instanceof Operation) {
>       ...
>       responseInfo.putAll(((Operation) params[0]).toMap());
>       ...
>     } else {
>       ...
>     }
> {code}
> Because the parameter is always a protobuf message, not an instance of 
> Operation, the request parameter will not be added into the warn message. The 
> parameter is helpful to find out the problem, for example, knowing the 
> startRow/endRow is useful for a TooSlow scan. To improve the warn message, we 
> can transform the protobuf request message to corresponding Operation 
> subclass object by ProtobufUtil, so that it can be added the warn message. 
> Suggestion and discussion are welcomed.  



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

Reply via email to