Minor changes for destroy Myriad to work smoothly

* Making MyriadWebServer singleton
* Stopping the webserver after the driver has shutdown so there can be no more 
flexup and flexdown requests
* Making sure that the Myriad UI works on older versions of Firefox and IE.
  Minor syntax changes in js files like
-       renderOverlay() {
+       renderOverlay: function () {

This closes: #21
Review: #21


Project: http://git-wip-us.apache.org/repos/asf/incubator-myriad/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-myriad/commit/2df7da0e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-myriad/tree/2df7da0e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-myriad/diff/2df7da0e

Branch: refs/heads/master
Commit: 2df7da0e14825f183e3c8770b4a42715e46ad56a
Parents: e637513
Author: Swapnil Daingade <sdaing...@maprtech.com>
Authored: Mon Oct 26 13:21:28 2015 -0700
Committer: Santosh Marella <mare...@gmail.com>
Committed: Wed Oct 28 14:20:33 2015 -0700

----------------------------------------------------------------------
 .../java/org/apache/myriad/MyriadModule.java    |    2 +
 .../apache/myriad/api/ControllerResource.java   |   56 +-
 .../myriad/scheduler/MyriadOperations.java      |   14 +-
 .../apache/myriad/webapp/MyriadWebServer.java   |    5 +-
 .../src/main/resources/webapp/js/app.js         |    2 +-
 .../js/components/ShutdownFrameworkComponent.js |   12 +-
 .../main/resources/webapp/public/js/myriad.js   | 7613 +++++-------------
 7 files changed, 2192 insertions(+), 5512 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/2df7da0e/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java 
b/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
index 659160e..59866fe 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
@@ -52,6 +52,7 @@ import com.google.inject.multibindings.MapBinder;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
 import 
org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler;
+import org.apache.myriad.webapp.MyriadWebServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -91,6 +92,7 @@ public class MyriadModule extends AbstractModule {
     bind(DisruptorManager.class).in(Scopes.SINGLETON);
     bind(ReconcileService.class).in(Scopes.SINGLETON);
     bind(HttpConnectorProvider.class).in(Scopes.SINGLETON);
+    bind(MyriadWebServer.class).in(Scopes.SINGLETON);
     bind(TaskConstraintsManager.class).in(Scopes.SINGLETON);
     // add special binding between TaskFactory and NMTaskFactoryImpl to ease up
     // usage of TaskFactory

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/2df7da0e/myriad-scheduler/src/main/java/org/apache/myriad/api/ControllerResource.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/api/ControllerResource.java 
b/myriad-scheduler/src/main/java/org/apache/myriad/api/ControllerResource.java
index b47f1cc..7ab5a59 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/myriad/api/ControllerResource.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/api/ControllerResource.java
@@ -19,46 +19,44 @@
 package org.apache.myriad.api;
 
 import com.codahale.metrics.annotation.Timed;
-import org.apache.myriad.scheduler.MyriadOperations;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import org.apache.myriad.scheduler.MyriadOperations;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * RESTful API to resource manager
  */
 @Path("/framework")
 public class ControllerResource {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(ControllerResource.class);
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(ControllerResource.class);
+
+  private MyriadOperations myriadOperations;
+
+  @Inject
+  public ControllerResource(MyriadOperations myriadOperations) {
+    this.myriadOperations = myriadOperations;
+  }
+
+  /**
+   * Shutdown framework means the Mesos driver is stopped, all executors and 
tasks as well.
+   *
+   * @return a successful response.
+   */
+  @Timed
+  @GET
+  @Path("/shutdown/framework")
+  @Produces(MediaType.APPLICATION_JSON)
+  public Response shutdownFramework() {
+    LOGGER.info("shutdown....terminating framework... ");
+
+    myriadOperations.shutdownFramework();
 
-    private MyriadOperations myriadOperations;
-    
-    @Inject
-    public ControllerResource(MyriadOperations myriadOperations) {
-        this.myriadOperations = myriadOperations;
-    }
-    /**
-     * Shutdown framework means the Mesos driver is stopped, all executors and 
tasks as well.
-      * 
-     * @return a successful response. 
-     */      
-    @Timed
-    @GET
-    @Path("/shutdown/framework")
-    @Produces(MediaType.APPLICATION_JSON)
-    public Response shutdownFramework() {
-        LOGGER.info("shutdown....terminating framework... ");
-         
-        myriadOperations.shutdownFramework();
-        
-        return Response.ok().build();
-    }  
-    
-   
+    return Response.ok().build();
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/2df7da0e/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/MyriadOperations.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/MyriadOperations.java
 
b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/MyriadOperations.java
index 11d1c82..a6449b1 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/MyriadOperations.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/MyriadOperations.java
@@ -32,6 +32,7 @@ import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 
 import org.apache.mesos.Protos;
+import org.apache.myriad.webapp.MyriadWebServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,13 +51,15 @@ public class MyriadOperations {
   private MyriadConfiguration cfg;
   private NodeScaleDownPolicy nodeScaleDownPolicy;
   private MyriadDriverManager driverManager;
+  private MyriadWebServer myriadWebServer;
 
   @Inject
-  public MyriadOperations(MyriadConfiguration cfg, SchedulerState 
schedulerState, NodeScaleDownPolicy nodeScaleDownPolicy, MyriadDriverManager 
driverManager) {
+  public MyriadOperations(MyriadConfiguration cfg, SchedulerState 
schedulerState, NodeScaleDownPolicy nodeScaleDownPolicy, MyriadDriverManager 
driverManager, MyriadWebServer myriadWebServer) {
     this.cfg = cfg;
     this.schedulerState = schedulerState;
     this.nodeScaleDownPolicy = nodeScaleDownPolicy;
     this.driverManager = driverManager;
+    this.myriadWebServer = myriadWebServer;
   }
 
   public void flexUpCluster(ServiceResourceProfile serviceResourceProfile, int 
instances, Constraint constraint) {
@@ -247,7 +250,14 @@ public class MyriadOperations {
     } else {
       // Stop the driver, tasks, and executor.
       driverStatus = driverManager.stopDriver(false);
-      LOGGER.info("shutdown....driver status " + driverStatus);
+      LOGGER.info("Myriad driver was shutdown with status " + driverStatus);
+      try {
+        myriadWebServer.stop();
+      } catch (Exception e) {
+        LOGGER.info("Failed to shutdown Myriad webserver: " + e.getMessage());
+        return;
+      }
+      LOGGER.info("Myriad webserver was shutdown successfully");
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/2df7da0e/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java 
b/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java
index ac36683..98edfba 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java
@@ -68,5 +68,8 @@ public class MyriadWebServer {
     this.jetty.start();
   }
 
-
+  public void stop() throws Exception {
+    this.jetty.stop();
+    this.connector.close();
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/2df7da0e/myriad-scheduler/src/main/resources/webapp/js/app.js
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/resources/webapp/js/app.js 
b/myriad-scheduler/src/main/resources/webapp/js/app.js
index 44a00b9..4723f65 100644
--- a/myriad-scheduler/src/main/resources/webapp/js/app.js
+++ b/myriad-scheduler/src/main/resources/webapp/js/app.js
@@ -14,7 +14,7 @@ var Router = require('react-router')
 
 var routes = (
   <Route name="myriad" path="/" handler={Myriad} >
-    <Route name="frameworkDown" path="frameworkDown" {...this.props} 
handler={ShutdownFrameworkComponent} /> 
+    <Route name="frameworkDown" path="frameworkDown" {...this.props} 
handler={ShutdownFrameworkComponent} />
     <Route name="flex" path="flex" handler={FlexComponent} />
     <Route name="tasks" path="tasks" handler={TasksComponent} />
     <Route name="help" path="help" handler={HelpComponent} />

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/2df7da0e/myriad-scheduler/src/main/resources/webapp/js/components/ShutdownFrameworkComponent.js
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/resources/webapp/js/components/ShutdownFrameworkComponent.js
 
b/myriad-scheduler/src/main/resources/webapp/js/components/ShutdownFrameworkComponent.js
index 27a515b..5fc7e0d 100644
--- 
a/myriad-scheduler/src/main/resources/webapp/js/components/ShutdownFrameworkComponent.js
+++ 
b/myriad-scheduler/src/main/resources/webapp/js/components/ShutdownFrameworkComponent.js
@@ -10,13 +10,13 @@ var request = require('superagent');
 var XModal = React.createClass({
        mixins: [OverlayMixin],
 
-       getInitialState() {
+       getInitialState: function () {
                return {
                        isModalOpen: false
                };
        },
 
-       handleToggle() {
+       handleToggle: function () {
                // For whatever reason this toggle does not work as claimed on 
line....so cheat.
                if (!this.state.isModalOpen)
                        
document.getElementById('shutdownModal').style.visibility = "hidden";
@@ -24,7 +24,7 @@ var XModal = React.createClass({
                        isModalOpen: !this.state.isModalOpen
                });
        },
-       render() {
+       render: function () {
                return ( <Modal {...this.props} bsStyle='primary'   
id="shutdownModal" title='Shutdown Myriad Framework ?' animation={false}        
                            onRequestHide={this.handleToggle}>
                                <div className='modal-body' >
                                        <p> This will stop the driver in 
failover mode, which will stop the executor and tasks, but not stop the 
ResourceManager.</p>
@@ -42,7 +42,7 @@ var XModal = React.createClass({
                        </Modal>);
        },
 
-       renderOverlay() {
+       renderOverlay: function () {
                        return <span/>;
        }
 });
@@ -52,12 +52,12 @@ var ShutdownFrameworkComponent = React.createClass({
 
        displayName: "ShutdownFrameworkComponent",
 
-       render() {
+       render: function() {
                return (
                        <XModal onShutdown={this.onRequestShutdown} 
onCancel={this.onCancel}/>
                );
        },
-       onCancel : function() {
+       onCancel: function() {
                this.transitionTo("tasks");
        },
        onRequestShutdown: function() {

Reply via email to