Skip to content

Commit ee81bef

Browse files
zouyonghaoeolivelli
authored andcommitted
ZOOKEEPER-4409 NullPointerException in SendAckRequestProcessor (#2163)
(cherry picked from commit 9b81d10)
1 parent d289262 commit ee81bef

File tree

2 files changed

+48
-16
lines changed

2 files changed

+48
-16
lines changed

zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,7 @@ public void processRequest(Request si) {
4646
learner.writePacket(qp, false);
4747
} catch (IOException e) {
4848
LOG.warn("Closing connection to leader, exception during packet send", e);
49-
try {
50-
if (!learner.sock.isClosed()) {
51-
learner.sock.close();
52-
}
53-
} catch (IOException e1) {
54-
// Nothing to do, we are shutting things down, so an exception here is irrelevant
55-
LOG.debug("Ignoring error closing the connection", e1);
56-
}
49+
learner.closeSockSync();
5750
}
5851
}
5952
}
@@ -63,14 +56,7 @@ public void flush() throws IOException {
6356
learner.writePacket(null, true);
6457
} catch (IOException e) {
6558
LOG.warn("Closing connection to leader, exception during packet send", e);
66-
try {
67-
if (!learner.sock.isClosed()) {
68-
learner.sock.close();
69-
}
70-
} catch (IOException e1) {
71-
// Nothing to do, we are shutting things down, so an exception here is irrelevant
72-
LOG.debug("Ignoring error closing the connection", e1);
73-
}
59+
learner.closeSockSync();
7460
}
7561
}
7662

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
package org.apache.zookeeper.server.quorum;
20+
21+
import static org.junit.jupiter.api.Assertions.assertTrue;
22+
import java.io.IOException;
23+
import org.apache.zookeeper.ZKTestCase;
24+
import org.apache.zookeeper.ZooDefs;
25+
import org.apache.zookeeper.server.Request;
26+
import org.apache.zookeeper.txn.TxnHeader;
27+
import org.junit.jupiter.api.Test;
28+
29+
class SendAckRequestProcessorTest extends ZKTestCase {
30+
static class FakeLearner extends Learner {
31+
public FakeLearner() {
32+
sock = null;
33+
}
34+
35+
void writePacket(QuorumPacket pp, boolean flush) throws IOException {
36+
throw new IOException();
37+
}
38+
}
39+
40+
@Test
41+
public void learnerSocketCloseTest() {
42+
SendAckRequestProcessor processor = new SendAckRequestProcessor(new FakeLearner());
43+
processor.processRequest(new Request(0L, 0, ZooDefs.OpCode.sync, new TxnHeader(), new LearnerInfo(), 0L));
44+
assertTrue(true, "should get here without exception");
45+
}
46+
}

0 commit comments

Comments
 (0)