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

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_r150978855
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/DrillRoot.java 
---
    @@ -58,13 +63,170 @@
       @Inject UserAuthEnabled authEnabled;
       @Inject WorkManager work;
       @Inject SecurityContext sc;
    +  @Inject Drillbit drillbit;
     
       @GET
       @Produces(MediaType.TEXT_HTML)
       public Viewable getClusterInfo() {
         return ViewableWithPermissions.create(authEnabled.get(), 
"/rest/index.ftl", sc, getClusterInfoJSON());
       }
     
    +
    +  @SuppressWarnings("resource")
    +  @GET
    +  @Path("/state")
    +  @Produces(MediaType.APPLICATION_JSON)
    +  public Response getDrillbitStatus(){
    +    Collection<DrillbitInfo> drillbits = 
getClusterInfoJSON().getDrillbits();
    +    Map<String, String> drillStatusMap = new HashMap<String ,String>();
    +    for (DrillbitInfo drillbit : drillbits) {
    +      
drillStatusMap.put(drillbit.getAddress()+"-"+drillbit.getUserPort(),drillbit.getState());
    +    }
    +    return Response.ok()
    +            .entity(drillStatusMap)
    +            .header("Access-Control-Allow-Origin", "*")
    +            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
PUT")
    +              .header("Access-Control-Allow-Credentials","true")
    +            .allow("OPTIONS").build();
    +  }
    +
    +  @SuppressWarnings("resource")
    +  @GET
    +  @Path("/graceperiod")
    +  @Produces(MediaType.APPLICATION_JSON)
    +  public Map<String, Integer> getGracePeriod(){
    +
    +    final DrillConfig config = work.getContext().getConfig();
    +    final int gracePeriod = config.getInt(ExecConstants.GRACE_PERIOD);
    +    Map<String, Integer> gracePeriodMap = new HashMap<String, Integer>();
    +    gracePeriodMap.put("graceperiod",gracePeriod);
    +    return gracePeriodMap;
    +  }
    +
    +  @SuppressWarnings("resource")
    +  @GET
    +  @Path("/queriesCount")
    +  @Produces(MediaType.APPLICATION_JSON)
    +  public Response getRemainingQueries() {
    +    Map<String, Integer> queriesInfo = new HashMap<String, Integer>();
    +    queriesInfo = work.getRemainingQueries();
    +    return Response.ok()
    +            .entity(queriesInfo)
    +            .header("Access-Control-Allow-Origin", "*")
    +            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
PUT")
    +              .header("Access-Control-Allow-Credentials","true")
    +            .allow("OPTIONS").build();
    +  }
    +
    +  @SuppressWarnings("resource")
    +  @POST
    +  @Path("/graceful_shutdown")
    +  @Produces(MediaType.APPLICATION_JSON)
    +  public Response shutdownDrillbit() throws Exception {
    +    Map<String, String> shutdownInfo = new HashMap<String, String>();
    +    try {
    +      new Thread(new Runnable() {
    +        public void run() {
    +          try {
    +            drillbit.close();
    +          } catch (Exception e) {
    +            e.printStackTrace();
    +          }
    +        }
    +      }).start();
    +      shutdownInfo.put("response", "Shutdown request is triggered");
    +      return Response.ok()
    +              .entity(shutdownInfo)
    +              .header("Access-Control-Allow-Origin", "*")
    +              .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
PUT")
    +              .header("Access-Control-Allow-Credentials","true")
    +              .allow("OPTIONS").build();
    +    }
    +    catch (Exception e) {
    +      logger.debug("Exception in triggering shutdown request",e);
    +      shutdownInfo.put("response", "Error in triggering shutdown request");
    +      return Response.ok()
    +              .entity(shutdownInfo)
    +              .header("Access-Control-Allow-Origin", "*")
    +              .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
PUT")
    +              .header("Access-Control-Allow-Credentials","true")
    +              .allow("OPTIONS").build();
    +    }
    +  }
    +
    +  @SuppressWarnings("resource")
    +  @POST
    +  @Path("/shutdown")
    +  @Produces(MediaType.APPLICATION_JSON)
    +  public Response ShutdownForcefully() throws Exception {
    +    Map<String, String> shutdownInfo = new HashMap<String, String>();
    +    try {
    +      new Thread(new Runnable() {
    +        public void run() {
    +          try {
    +            drillbit.setForcefulShutdown(true);
    +            drillbit.close();
    +          } catch (Exception e) {
    +            e.printStackTrace();
    +          }
    +        }
    +      }).start();
    +      shutdownInfo.put("response", "Forceful shutdown request is 
triggered");
    +      return Response.ok()
    +              .entity(shutdownInfo)
    +              .header("Access-Control-Allow-Origin", "*")
    +              .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
PUT")
    +              .header("Access-Control-Allow-Credentials","true")
    +              .allow("OPTIONS").build();
    +    }
    +    catch (Exception e) {
    +      logger.debug("Exception in triggering forceful shutdown request",e);
    +      shutdownInfo.put("response", "Error in triggering forceful 
shutdown");
    +      return Response.ok()
    +              .entity(shutdownInfo)
    +              .header("Access-Control-Allow-Origin", "*")
    +              .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
PUT")
    +              .header("Access-Control-Allow-Credentials","true")
    +              .allow("OPTIONS").build();
    +    }
    +  }
    +  @SuppressWarnings("resource")
    +  @POST
    +  @Path("/quiescent")
    +  @Produces(MediaType.APPLICATION_JSON)
    +  public Response drillbitToQuiescentMode() throws Exception {
    +    Map<String, String> shutdownInfo = new HashMap<String, String>();
    +    try {
    +      new Thread(new Runnable() {
    +        public void run() {
    +          try {
    +            drillbit.setQuiescentMode(true);
    +            drillbit.close();
    +          } catch (Exception e) {
    +            e.printStackTrace();
    +          }
    +        }
    +      }).start();
    +      shutdownInfo.put("response", "Putting the drillbit in Quiescent 
mode");
    +      return Response.ok()
    +              .entity(shutdownInfo)
    +              .header("Access-Control-Allow-Origin", "*")
    +              .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
PUT")
    +              .header("Access-Control-Allow-Credentials","true")
    +              .allow("OPTIONS").build();
    +    }
    +    catch (Exception e) {
    +      logger.debug("Exception in putting drillbit to Quiescent mode",e);
    +      shutdownInfo.put("response", "Error in putting drillbit to Quiescent 
mode");
    +      return Response.ok()
    +              .entity(shutdownInfo)
    +              .header("Access-Control-Allow-Origin", "*")
    +              .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
PUT")
    +              .header("Access-Control-Allow-Credentials","true")
    +              .allow("OPTIONS").build();
    --- End diff --
    
    Similarly, there are many copies of the above pattern. Can we do this in a 
function that takes, say, the entity as a parameter?


> 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)

Reply via email to