diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/EventDest.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/EventDest.java new file mode 100644 index 0000000..a891812 --- /dev/null +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/EventDest.java @@ -0,0 +1,12 @@ +package org.apache.hadoop.yarn.state; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface EventDest { + String value(); +} diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/EventSource.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/EventSource.java new file mode 100644 index 0000000..008fea7 --- /dev/null +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/EventSource.java @@ -0,0 +1,12 @@ +package org.apache.hadoop.yarn.state; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface EventSource { + + String value(); +} diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/VisualizeEventFlow.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/VisualizeEventFlow.java new file mode 100644 index 0000000..35be2ab --- /dev/null +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/state/VisualizeEventFlow.java @@ -0,0 +1,34 @@ +package org.apache.hadoop.yarn.state; + +import java.lang.reflect.Field; + +public class VisualizeEventFlow { + + @SuppressWarnings("rawtypes") + public static Graph generateStateGraph(String name, Class... clazzes) { + Graph g = new Graph(name); + for (Class clazz : clazzes) { + EventDest destAnnotation = + (EventDest) clazz.getAnnotation(EventDest.class); + String dest = destAnnotation.value(); + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + String event = field.getName(); + EventSource source = field.getAnnotation(EventSource.class); + if (source != null) { + String sourceStr = source.value(); + for (String s : sourceStr.split(",")) { + Graph.Node fromNode = g.getNode(s); + Graph.Node toNode = g.getNode(dest); + fromNode.addEdge(toNode, field.getName()); + } + } else { + System.out.println("warning, no source annotation for field:" + + field.getName()); + } + } + } + return g; + } + +} diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/ApplicationEventType.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/ApplicationEventType.java index b4ba76a..a415c04 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/ApplicationEventType.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/application/ApplicationEventType.java @@ -18,22 +18,35 @@ package org.apache.hadoop.yarn.server.nodemanager.containermanager.application; +import org.apache.hadoop.yarn.state.EventDest; +import org.apache.hadoop.yarn.state.EventSource; + +@EventDest("Application") public enum ApplicationEventType { // Source: ContainerManager + @EventSource("ContainerManager") INIT_APPLICATION, + @EventSource("ContainerManager") INIT_CONTAINER, + @EventSource("ContainerManager") FINISH_APPLICATION, // Source: LogAggregationService if init fails // Source: ResourceLocalizationService + @EventSource("ResourceLocalizationService") APPLICATION_INITED, + @EventSource("ResourceLocalizationService") APPLICATION_RESOURCES_CLEANEDUP, // Source: Container + @EventSource("Container") APPLICATION_CONTAINER_FINISHED, // Source: Log Handler + @EventSource("Log_Handler") APPLICATION_LOG_HANDLING_INITED, + @EventSource("Log_Handler") APPLICATION_LOG_HANDLING_FINISHED, + @EventSource("Log_Handler") APPLICATION_LOG_HANDLING_FAILED } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerEventType.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerEventType.java index 5622f8c..04c4893 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerEventType.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerEventType.java @@ -18,12 +18,20 @@ package org.apache.hadoop.yarn.server.nodemanager.containermanager.container; +import org.apache.hadoop.yarn.state.EventDest; +import org.apache.hadoop.yarn.state.EventSource; + +@EventDest("Container") public enum ContainerEventType { // Producer: ContainerManager + @EventSource("ContainerManager") INIT_CONTAINER, + @EventSource("ContainerManager") KILL_CONTAINER, + @EventSource("ContainerManager") UPDATE_DIAGNOSTICS_MSG, + @EventSource("ContainerManager") CONTAINER_DONE, // DownloadManager @@ -33,8 +41,12 @@ CONTAINER_RESOURCES_CLEANEDUP, // Producer: ContainersLauncher + @EventSource("ContainerLauncher") CONTAINER_LAUNCHED, + @EventSource("ContainerLauncher") CONTAINER_EXITED_WITH_SUCCESS, + @EventSource("ContainerLauncher") CONTAINER_EXITED_WITH_FAILURE, + @EventSource("ContainerLauncher") CONTAINER_KILLED_ON_REQUEST, }