Repository: incubator-myriad
Updated Branches:
  refs/heads/master 832cf0589 -> 420cb78a6


MYRIAD-164 Remove Myriad state after framework shutdown

New Myriad framework fails to start after an earlier one is shutdown.

The Myriad state saves the framework id for the old framework.
When the new framework starts, it tries to re-registers with the old framework 
id.
This causes an error message similar to

I1029 12:07:08.330493 15884 sched.cpp:819] Got error 'Completed framework
attempted to re-register'
I1029 12:07:08.330507 15884 sched.cpp:1625] Asked to abort the driver
I1029 12:07:08.331507 15884 sched.cpp:861] Aborting framework
'20151029-110656-1986333194-5050-10105-0001'

We need to remove the Myriad state as part of framework shutdown.

Added a method removeMyriadState to MyriadStateStore interface and added
implementation in MyriadFileSystemRMStateStore.

This closes: #31
Review: https://github.com/apache/incubator-myriad/pull/31


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

Branch: refs/heads/master
Commit: 420cb78a6d24e1016647f1f81d4421c52dc49130
Parents: 832cf05
Author: Swapnil Daingade <sdaing...@maprtech.com>
Authored: Wed Nov 4 16:52:48 2015 -0800
Committer: Santosh Marella <mare...@gmail.com>
Committed: Wed Nov 4 16:52:48 2015 -0800

----------------------------------------------------------------------
 .../recovery/MyriadFileSystemRMStateStore.java  | 11 ++++++++
 .../java/org/apache/myriad/MyriadModule.java    |  4 ++-
 .../myriad/scheduler/MyriadOperations.java      | 28 ++++++++++++++------
 .../apache/myriad/state/MyriadStateStore.java   |  1 +
 4 files changed, 35 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/420cb78a/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
 
b/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
index 85fed08..dda9b28 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
@@ -97,4 +97,15 @@ public class MyriadFileSystemRMStateStore extends 
FileSystemRMStateStore impleme
       LOGGER.error("State information for Myriad could not be stored at: " + 
myriadStatePath, e);
     }
   }
+
+  @Override
+  public synchronized void removeMyriadState() throws Exception {
+    if (fs.exists(myriadPathRoot)) {
+      if (!fs.delete(myriadPathRoot, true)) {
+        LOGGER.error("Failed to delete MyriadStateStore path " + 
myriadPathRoot);
+        return;
+      }
+      LOGGER.info("Deleted Myriad state store path " + myriadPathRoot);
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/420cb78a/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 41abb9a..5896e93 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
@@ -146,7 +146,9 @@ public class MyriadModule extends AbstractModule {
     return new SchedulerState(myriadStateStore);
   }
 
-  private MyriadStateStore providesMyriadStateStore() {
+  @Provides
+  @Singleton
+  MyriadStateStore providesMyriadStateStore() {
     // TODO (sdaingade) Read the implementation class from yml
     // once multiple implementations are available.
     if (rmContext.getStateStore() instanceof MyriadStateStore) {

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/420cb78a/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 34367ef..c662902 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
@@ -33,6 +33,7 @@ import org.apache.myriad.configuration.ServiceConfiguration;
 import org.apache.myriad.policy.NodeScaleDownPolicy;
 import org.apache.myriad.scheduler.constraints.Constraint;
 import org.apache.myriad.scheduler.constraints.LikeConstraint;
+import org.apache.myriad.state.MyriadStateStore;
 import org.apache.myriad.state.NodeTask;
 import org.apache.myriad.state.SchedulerState;
 import org.apache.myriad.webapp.MyriadWebServer;
@@ -50,15 +51,18 @@ public class MyriadOperations {
   private NodeScaleDownPolicy nodeScaleDownPolicy;
   private MyriadDriverManager driverManager;
   private MyriadWebServer myriadWebServer;
+  private MyriadStateStore myriadStateStore;
 
   @Inject
-  public MyriadOperations(MyriadConfiguration cfg, SchedulerState 
schedulerState, NodeScaleDownPolicy nodeScaleDownPolicy,
-                          MyriadDriverManager driverManager, MyriadWebServer 
myriadWebServer) {
+  public MyriadOperations(MyriadConfiguration cfg, SchedulerState 
schedulerState,
+      NodeScaleDownPolicy nodeScaleDownPolicy, MyriadDriverManager 
driverManager,
+      MyriadWebServer myriadWebServer, MyriadStateStore myriadStateStore) {
     this.cfg = cfg;
     this.schedulerState = schedulerState;
     this.nodeScaleDownPolicy = nodeScaleDownPolicy;
     this.driverManager = driverManager;
     this.myriadWebServer = myriadWebServer;
+    this.myriadStateStore = myriadStateStore;
   }
 
   public void flexUpCluster(ServiceResourceProfile serviceResourceProfile, int 
instances, Constraint constraint) {
@@ -255,6 +259,7 @@ public class MyriadOperations {
    * Shutdown framework means the Mesos driver is stopped taking down the 
executors and associated tasks
    */
   public void shutdownFramework() {
+    LOGGER.info("Received request to shutdown Myriad Framework..");
     Status driverStatus = driverManager.getDriverStatus();
 
     if (Status.DRIVER_RUNNING != driverStatus) {
@@ -263,13 +268,20 @@ public class MyriadOperations {
       // Stop the driver, tasks, and executor.
       driverStatus = driverManager.stopDriver(false);
       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;
-      }
+    }
+
+    try {
+      myriadWebServer.stop();
       LOGGER.info("Myriad webserver was shutdown successfully");
+    } catch (Exception e) {
+      LOGGER.info("Failed to shutdown Myriad webserver: " + e.getMessage());
+    }
+
+    try {
+      myriadStateStore.removeMyriadState();
+      LOGGER.info("Myriad State store was removed successfully.");
+    } catch (Exception e) {
+      LOGGER.info("Failed to remove Myriad state store: " + e.getMessage());
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/420cb78a/myriad-scheduler/src/main/java/org/apache/myriad/state/MyriadStateStore.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/state/MyriadStateStore.java 
b/myriad-scheduler/src/main/java/org/apache/myriad/state/MyriadStateStore.java
index 69b0238..73a0c8e 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/myriad/state/MyriadStateStore.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/state/MyriadStateStore.java
@@ -30,4 +30,5 @@ public interface MyriadStateStore {
 
   void storeMyriadState(StoreContext storeContext) throws Exception;
 
+  void removeMyriadState() throws Exception;
 }

Reply via email to