drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DRILL-4286) Have an ability to put server in quiescent mode of operation
Date Tue, 14 Nov 2017 22:42:10 GMT

    [ https://issues.apache.org/jira/browse/DRILL-4286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16252605#comment-16252605
] 

ASF GitHub Bot commented on DRILL-4286:
---------------------------------------

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.


> Have an ability to put server in quiescent mode of operation
> ------------------------------------------------------------
>
>                 Key: DRILL-4286
>                 URL: https://issues.apache.org/jira/browse/DRILL-4286
>             Project: Apache Drill
>          Issue Type: New Feature
>          Components: Execution - Flow
>            Reporter: Victoria Markman
>            Assignee: Venkata Jyothsna Donapati
>
> I think drill will benefit from mode of operation that is called "quiescent" in some
databases. 
> From IBM Informix server documentation:
> {code}
> Change gracefully from online to quiescent mode
> Take the database server gracefully from online mode to quiescent mode to restrict access
to the database server without interrupting current processing. After you perform this task,
the database server sets a flag that prevents new sessions from gaining access to the database
server. The current sessions are allowed to finish processing. After you initiate the mode
change, it cannot be canceled. During the mode change from online to quiescent, the database
server is considered to be in Shutdown mode.
> {code}
> This is different from shutdown, when processes are terminated. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message