Github user paul-rogers commented on a diff in the pull request:
https://github.com/apache/drill/pull/921#discussion_r150984962
--- Diff:
exec/java-exec/src/test/java/org/apache/drill/test/TestGracefulShutdown.java ---
@@ -0,0 +1,248 @@
+/*
+ * 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.drill.test;
+import com.google.common.io.Files;
+import org.apache.commons.io.FileUtils;
+import org.apache.drill.exec.ExecConstants;
+import org.apache.drill.exec.proto.CoordinationProtos.DrillbitEndpoint;
+import org.apache.drill.exec.server.Drillbit;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Properties;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.fail;
+
+public class TestGracefulShutdown {
+
+ static String testDirPath;
+ @BeforeClass
+ public static void setUpTestData() throws Exception {
+
+ final File testDir = getTempDir("graceful_shutdown");
+ testDirPath = testDir.getAbsolutePath();
+ for( int i = 0; i < 500; i++) {
+ setupFile(testDir, i);
+ }
+ }
+
+
+ public static final Properties WEBSERVER_CONFIGURATION = new
Properties() {
+ {
+ put(ExecConstants.HTTP_ENABLE, true);
+ put(ExecConstants.HTTP_PORT_HUNT, true);
+ }
+ };
+
+ public ClusterFixtureBuilder enableWebServer(ClusterFixtureBuilder
builder) {
+ Properties props = new Properties();
+ props.putAll(WEBSERVER_CONFIGURATION);
+ builder.configBuilder.configProps(props);
+ return builder;
+ }
+
+
+ /*
+ Start multiple drillbits and then shutdown a drillbit. Query the online
+ endpoints and check if the drillbit still exists.
+ */
+ @Test
+ public void testOnlineEndPoints() throws Exception {
+
+ String[] drillbits = {"db1" ,"db2","db3", "db4", "db5", "db6"};
+ ClusterFixtureBuilder builder =
ClusterFixture.builder().withBits(drillbits).withLocalZk();
+
+
+ try ( ClusterFixture cluster = builder.build();
+ ClientFixture client = cluster.clientFixture()) {
+
+ Drillbit drillbit = cluster.drillbit("db2");
+ DrillbitEndpoint drillbitEndpoint =
drillbit.getRegistrationHandle().getEndPoint();
+ int grace_period =
drillbit.getContext().getConfig().getInt("drill.exec.grace_period");
+ new Thread(new Runnable() {
+ public void run() {
+ try {
+ cluster.closeDrillbit("db2");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ //wait for graceperiod
+ Thread.sleep(grace_period);
+ Collection<DrillbitEndpoint> drillbitEndpoints =
cluster.drillbit().getContext()
+ .getClusterCoordinator()
+ .getOnlineEndPoints();
+ Assert.assertFalse(drillbitEndpoints.contains(drillbitEndpoint));
+ }
+ }
+ /*
+ Test if the drillbit transitions from ONLINE state when a shutdown
+ request is initiated
+ */
+ @Test
+ public void testStateChange() throws Exception {
+
+ String[] drillbits = {"db1" ,"db2", "db3", "db4", "db5", "db6"};
+ ClusterFixtureBuilder builder =
ClusterFixture.builder().withBits(drillbits).withLocalZk();
+
+ try ( ClusterFixture cluster = builder.build();
+ ClientFixture client = cluster.clientFixture()) {
+ Drillbit drillbit = cluster.drillbit("db2");
+ int grace_period =
drillbit.getContext().getConfig().getInt("drill.exec.grace_period");
+ DrillbitEndpoint drillbitEndpoint =
drillbit.getRegistrationHandle().getEndPoint();
+ new Thread(new Runnable() {
+ public void run() {
+ try {
+ cluster.closeDrillbit("db2");
+ } catch (Exception e) {
+ e.printStackTrace();
--- End diff --
OK for debugging. For automated uses, replace with `fail()` here and in any
other tests that use this same pattern.
---