You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by sw...@apache.org on 2014/01/18 07:33:41 UTC
git commit: first cut of app spec related changes
Updated Branches:
refs/heads/helix-provisioning 8b1763585 -> e03a9228c
first cut of app spec related changes
Project: http://git-wip-us.apache.org/repos/asf/helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/e03a9228
Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/e03a9228
Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/e03a9228
Branch: refs/heads/helix-provisioning
Commit: e03a9228c031335619cede2c4633338429707551
Parents: 8b17635
Author: Swaroop <sw...@gmail.com>
Authored: Fri Jan 17 22:33:30 2014 -0800
Committer: Swaroop <sw...@gmail.com>
Committed: Fri Jan 17 22:33:30 2014 -0800
----------------------------------------------------------------------
.../helix/provisioning/yarn/AppConfig.java | 13 ++++++
.../provisioning/yarn/ApplicationSpec.java | 11 +++++
.../helix/provisioning/yarn/ServiceConfig.java | 13 ++++++
.../yarn/YamlApplicationSpecFactory.java | 49 ++++++++++++++++++++
.../yarn/example/HelloWorldService.java | 23 +++++++++
.../yarn/example/HelloWorldStateModel.java | 29 ++++++++++++
.../example/HelloWorldStateModelFactory.java | 12 +++++
7 files changed, 150 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/helix/blob/e03a9228/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/AppConfig.java
----------------------------------------------------------------------
diff --git a/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/AppConfig.java b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/AppConfig.java
new file mode 100644
index 0000000..82f6536
--- /dev/null
+++ b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/AppConfig.java
@@ -0,0 +1,13 @@
+package org.apache.helix.provisioning.yarn;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class AppConfig {
+ public Map<String, String> config = new HashMap<String, String>();
+
+ public String getValue(String key) {
+ return (config != null ? config.get(key) : null);
+ }
+}
http://git-wip-us.apache.org/repos/asf/helix/blob/e03a9228/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/ApplicationSpec.java
----------------------------------------------------------------------
diff --git a/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/ApplicationSpec.java b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/ApplicationSpec.java
new file mode 100644
index 0000000..6773b4a
--- /dev/null
+++ b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/ApplicationSpec.java
@@ -0,0 +1,11 @@
+package org.apache.helix.provisioning.yarn;
+
+import java.util.List;
+
+public interface ApplicationSpec {
+ public String getAppName();
+ public int getMinContainers();
+ public int getMaxContainers();
+ public AppConfig getConfig();
+ public List<ServiceConfig> getServices();
+}
http://git-wip-us.apache.org/repos/asf/helix/blob/e03a9228/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/ServiceConfig.java
----------------------------------------------------------------------
diff --git a/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/ServiceConfig.java b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/ServiceConfig.java
new file mode 100644
index 0000000..4d9173e
--- /dev/null
+++ b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/ServiceConfig.java
@@ -0,0 +1,13 @@
+package org.apache.helix.provisioning.yarn;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ServiceConfig {
+ public Map<String, String> config = new HashMap<String, String>();
+
+ public String getValue(String key) {
+ return (config != null ? config.get(key) : null);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/helix/blob/e03a9228/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/YamlApplicationSpecFactory.java
----------------------------------------------------------------------
diff --git a/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/YamlApplicationSpecFactory.java b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/YamlApplicationSpecFactory.java
new file mode 100644
index 0000000..0c50fc0
--- /dev/null
+++ b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/YamlApplicationSpecFactory.java
@@ -0,0 +1,49 @@
+package org.apache.helix.provisioning.yarn;
+
+import java.io.InputStream;
+import java.util.List;
+
+import org.yaml.snakeyaml.Yaml;
+
+class DefaultApplicationSpec implements ApplicationSpec {
+ public String appName;
+ public Integer minContainers;
+ public Integer maxContainers;
+
+ public AppConfig appConfig;
+
+ public List<ServiceConfig> serviceConfig;
+
+ @Override
+ public String getAppName() {
+ return appName;
+ }
+
+ @Override
+ public int getMinContainers() {
+ return minContainers;
+ }
+
+ @Override
+ public int getMaxContainers() {
+ return maxContainers;
+ }
+
+ @Override
+ public AppConfig getConfig() {
+ return appConfig;
+ }
+
+ @Override
+ public List<ServiceConfig> getServices() {
+ return serviceConfig;
+ }
+
+}
+
+public class YamlApplicationSpecFactory {
+ ApplicationSpec fromYaml(InputStream input) {
+ Yaml yaml = new Yaml();
+ return yaml.loadAs(input, DefaultApplicationSpec.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/helix/blob/e03a9228/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldService.java
----------------------------------------------------------------------
diff --git a/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldService.java b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldService.java
new file mode 100644
index 0000000..055bfd7
--- /dev/null
+++ b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldService.java
@@ -0,0 +1,23 @@
+package org.apache.helix.provisioning.yarn.example;
+
+import org.apache.helix.HelixConnection;
+import org.apache.helix.api.id.ClusterId;
+import org.apache.helix.api.id.ParticipantId;
+import org.apache.helix.api.id.StateModelDefId;
+import org.apache.helix.provisioning.yarn.ContainerParticipant;
+
+
+public class HelloWorldService extends ContainerParticipant {
+
+ public HelloWorldService(HelixConnection connection, ClusterId clusterId,
+ ParticipantId participantId) {
+ super(connection, clusterId, participantId);
+ }
+
+ @Override
+ public void init() {
+ HelloWorldStateModelFactory stateModelFactory = new HelloWorldStateModelFactory();
+ getParticipant().getStateMachineEngine().registerStateModelFactory(StateModelDefId.from("OnlineOffline"), stateModelFactory);
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/helix/blob/e03a9228/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldStateModel.java
----------------------------------------------------------------------
diff --git a/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldStateModel.java b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldStateModel.java
new file mode 100644
index 0000000..95f66e3
--- /dev/null
+++ b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldStateModel.java
@@ -0,0 +1,29 @@
+package org.apache.helix.provisioning.yarn.example;
+
+import org.apache.helix.NotificationContext;
+import org.apache.helix.api.id.PartitionId;
+import org.apache.helix.model.Message;
+import org.apache.helix.participant.statemachine.StateModel;
+import org.apache.helix.participant.statemachine.StateModelInfo;
+import org.apache.helix.participant.statemachine.Transition;
+
+@StateModelInfo(initialState = "OFFLINE", states = { "OFFLINE", "ONLINE",
+ "ERROR" })
+public class HelloWorldStateModel extends StateModel {
+
+ public HelloWorldStateModel(PartitionId partitionId) {
+ // TODO Auto-generated constructor stub
+ }
+
+ @Transition(to = "ONLINE", from = "OFFLINE")
+ public void onBecomeOnlineFromOffline(Message message,
+ NotificationContext context) throws Exception {
+ System.out.println("Started HelloWorld service");
+ }
+
+ @Transition(to = "OFFLINE", from = "ONLINE")
+ public void onBecomeOfflineFromOnline(Message message,
+ NotificationContext context) throws InterruptedException {
+ System.out.println("Stopped HelloWorld service");
+ }
+}
http://git-wip-us.apache.org/repos/asf/helix/blob/e03a9228/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldStateModelFactory.java
----------------------------------------------------------------------
diff --git a/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldStateModelFactory.java b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldStateModelFactory.java
new file mode 100644
index 0000000..850cc19
--- /dev/null
+++ b/helix-provisioning/src/main/java/org/apache/helix/provisioning/yarn/example/HelloWorldStateModelFactory.java
@@ -0,0 +1,12 @@
+package org.apache.helix.provisioning.yarn.example;
+
+import org.apache.helix.api.id.PartitionId;
+import org.apache.helix.participant.statemachine.HelixStateModelFactory;
+import org.apache.helix.participant.statemachine.StateModel;
+
+public class HelloWorldStateModelFactory extends HelixStateModelFactory<StateModel> {
+ @Override
+ public StateModel createNewStateModel(PartitionId partitionId) {
+ return new HelloWorldStateModel(partitionId);
+ }
+}