[ https://issues.apache.org/jira/browse/HBASE-14674?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14972417#comment-14972417 ]
Heng Chen commented on HBASE-14674: ----------------------------------- IMO Failed {{org.apache.hadoop.hbase.snapshot.TestMobExportSnapshot}} has no relates with this issue. But if necessary, i will dig it. > Rpc handler / task monitoring seems to be broken after 0.98 > ----------------------------------------------------------- > > Key: HBASE-14674 > URL: https://issues.apache.org/jira/browse/HBASE-14674 > Project: HBase > Issue Type: Bug > Reporter: Enis Soztutar > Fix For: 1.3.0, 1.2.1, 1.0.3, 1.1.4, 0.98.17 > > Attachments: HBASE-14674.patch, HBASE-14674_v1.patch, > HBASE-14674_v2.patch > > > In 0.96, we have the RPC handlers listed as tasks and show them in the web UI > as well: > {code} > Tasks: > =========================================================== > Task: RpcServer.handler=0,port=64231 > Status: WAITING:Waiting for a call > Running for 932s > Task: RpcServer.handler=1,port=64231 > Status: WAITING:Waiting for a call > Running for 932s > Task: RpcServer.handler=2,port=64231 > Status: WAITING:Waiting for a call > Running for 932s > {code} > After pluggable RPC scheduler, the way the tasks work for the handlers got > changed. We no longer list idle RPC handlers in the tasks, but we register > them dynamically to {{TaskMonitor}} through {{CallRunner}}. However, the IPC > readers are still registered the old way (meaning that idle readers are > listed as tasks, but not idle handlers). > From the javadoc of {{MonitoredRPCHandlerImpl}}, it seems that we are NOT > optimizing the allocation for the MonitoredTask anymore, but instead allocate > one for every RPC call breaking the pattern (See CallRunner.getStatus()). > {code} > /** > * A MonitoredTask implementation designed for use with RPC Handlers > * handling frequent, short duration tasks. String concatenations and object > * allocations are avoided in methods that will be hit by every RPC call. > */ > @InterfaceAudience.Private > public class MonitoredRPCHandlerImpl extends MonitoredTaskImpl > {code} > There is also one more side affect that, since the CallRunner is a per-RPC > object and created in the RPC listener thread, the created task ends up > having a name "listener" although the actual processing happens in a handler > thread. This is obviously very confusing during debugging. -- This message was sent by Atlassian JIRA (v6.3.4#6332)