Skip to content

Commit 395cfce

Browse files
binlijinApache9
authored andcommitted
HBASE-22370 ByteBuf LEAK ERROR (#720)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
1 parent 17495d8 commit 395cfce

3 files changed

Lines changed: 31 additions & 0 deletions

File tree

hbase-server/src/main/java/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutput.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,10 @@ private void endBlock() throws IOException {
550550
*/
551551
@Override
552552
public void recoverAndClose(CancelableProgressable reporter) throws IOException {
553+
if (buf != null) {
554+
buf.release();
555+
buf = null;
556+
}
553557
datanodeList.forEach(ch -> ch.close());
554558
datanodeList.forEach(ch -> ch.closeFuture().awaitUninterruptibly());
555559
endFileLease(client, fileId);

hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/CallRunner.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public void setStatus(MonitoredRPCHandler status) {
8888
* Cleanup after ourselves... let go of references.
8989
*/
9090
private void cleanup() {
91+
this.call.cleanup();
9192
this.call = null;
9293
this.rpcServer = null;
9394
}

hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCallRunner.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,30 @@ public void testSimpleCall() {
4545
cr.setStatus(new MonitoredRPCHandlerImpl());
4646
cr.run();
4747
}
48+
49+
@Test
50+
public void testCallCleanup() {
51+
RpcServerInterface mockRpcServer = Mockito.mock(RpcServerInterface.class);
52+
Mockito.when(mockRpcServer.isStarted()).thenReturn(true);
53+
ServerCall mockCall = Mockito.mock(ServerCall.class);
54+
Mockito.when(mockCall.disconnectSince()).thenReturn(1L);
55+
56+
CallRunner cr = new CallRunner(mockRpcServer, mockCall);
57+
cr.setStatus(new MonitoredRPCHandlerImpl());
58+
cr.run();
59+
Mockito.verify(mockCall, Mockito.times(1)).cleanup();
60+
}
61+
62+
@Test
63+
public void testCallRunnerDrop() {
64+
RpcServerInterface mockRpcServer = Mockito.mock(RpcServerInterface.class);
65+
Mockito.when(mockRpcServer.isStarted()).thenReturn(true);
66+
ServerCall mockCall = Mockito.mock(ServerCall.class);
67+
Mockito.when(mockCall.disconnectSince()).thenReturn(1L);
68+
69+
CallRunner cr = new CallRunner(mockRpcServer, mockCall);
70+
cr.setStatus(new MonitoredRPCHandlerImpl());
71+
cr.drop();
72+
Mockito.verify(mockCall, Mockito.times(1)).cleanup();
73+
}
4874
}

0 commit comments

Comments
 (0)