From 41e6e955e840fe2318e565223dadbb49c3aacfd7 Mon Sep 17 00:00:00 2001 From: Kezhu Wang Date: Thu, 19 Sep 2024 22:01:14 +0800 Subject: [PATCH] ZOOKEEPER-4712: Add test case to assert request processors got shutdown in ZooKeeperServer::shutdown --- .../quorum/SendAckRequestProcessor.java | 2 - .../server/ZooKeeperServerShutdownTest.java | 85 +++++++++++++++++++ 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 zookeeper-server/src/test/java/org/apache/zookeeper/server/ZooKeeperServerShutdownTest.java diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java index 868fb2b4627..3f42c2bd30f 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java @@ -20,8 +20,6 @@ import java.io.Flushable; import java.io.IOException; -import java.net.Socket; - import org.apache.zookeeper.ZooDefs.OpCode; import org.apache.zookeeper.server.Request; import org.apache.zookeeper.server.RequestProcessor; diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/server/ZooKeeperServerShutdownTest.java b/zookeeper-server/src/test/java/org/apache/zookeeper/server/ZooKeeperServerShutdownTest.java new file mode 100644 index 00000000000..b0dd19cb77c --- /dev/null +++ b/zookeeper-server/src/test/java/org/apache/zookeeper/server/ZooKeeperServerShutdownTest.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.zookeeper.server; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.io.File; +import java.io.IOException; +import org.apache.zookeeper.ZKTestCase; +import org.apache.zookeeper.server.persistence.FileTxnSnapLog; +import org.apache.zookeeper.server.quorum.Learner; +import org.apache.zookeeper.server.quorum.LearnerZooKeeperServer; +import org.apache.zookeeper.server.quorum.QuorumPeer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +public class ZooKeeperServerShutdownTest extends ZKTestCase { + + static class ShutdownTrackRequestProcessor implements RequestProcessor { + boolean shutdown = false; + + @Override + public void processRequest(Request request) throws RequestProcessorException { + } + + @Override + public void shutdown() { + shutdown = true; + } + } + + public static class ShutdownTrackLearnerZooKeeperServer extends LearnerZooKeeperServer { + public ShutdownTrackLearnerZooKeeperServer(FileTxnSnapLog logFactory, QuorumPeer self) throws IOException { + super(logFactory, 2000, 2000, 2000, -1, new ZKDatabase(logFactory), self); + } + + @Override + protected void setupRequestProcessors() { + firstProcessor = new ShutdownTrackRequestProcessor(); + syncProcessor = new SyncRequestProcessor(this, null); + syncProcessor.start(); + } + + ShutdownTrackRequestProcessor getFirstProcessor() { + return (ShutdownTrackRequestProcessor) firstProcessor; + } + + SyncRequestProcessor getSyncRequestProcessor() { + return syncProcessor; + } + + @Override + public Learner getLearner() { + return null; + } + } + + @Test + void testLearnerZooKeeperServerShutdown(@TempDir File tmpDir) throws Exception { + File tmpFile = File.createTempFile("test", ".dir", tmpDir); + tmpFile.delete(); + FileTxnSnapLog logFactory = new FileTxnSnapLog(tmpFile, tmpFile); + ShutdownTrackLearnerZooKeeperServer zooKeeperServer = new ShutdownTrackLearnerZooKeeperServer(logFactory, new QuorumPeer()); + zooKeeperServer.startup(); + zooKeeperServer.shutdown(false); + assertTrue(zooKeeperServer.getFirstProcessor().shutdown); + assertFalse(zooKeeperServer.getSyncRequestProcessor().isAlive()); + } +}