[
https://issues.apache.org/jira/browse/DRILL-4286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16252582#comment-16252582
]
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_r150978597
--- 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();
--- End diff --
See above.
This is the third copy of this pattern. Can we have a single function that
takes a shutdown mode? Does this mean the `Drillbit` class itself should have
such a method:
```
public void shutdown(ShutdownOption option) {
...
```
> 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)