SLIDER-782: all tests passing; rename protocol service: SliderIPCService

Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/4b56e54d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/4b56e54d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/4b56e54d

Branch: refs/heads/develop
Commit: 4b56e54d40c6c2f8e7b79f800efa6811b9defce6
Parents: ca1e008
Author: Steve Loughran <ste...@apache.org>
Authored: Wed Feb 11 16:31:59 2015 +0000
Committer: Steve Loughran <ste...@apache.org>
Committed: Wed Feb 11 16:31:59 2015 +0000

----------------------------------------------------------------------
 .../server/appmaster/SliderAppMaster.java       |   6 +-
 .../rpc/SliderClusterProtocolService.java       | 303 -------------------
 .../server/appmaster/rpc/SliderIPCService.java  | 303 +++++++++++++++++++
 3 files changed, 306 insertions(+), 306 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/4b56e54d/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
index 8a33735..7f3211e 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
@@ -139,7 +139,7 @@ import org.apache.slider.server.appmaster.rpc.RpcBinder;
 import org.apache.slider.server.appmaster.rpc.SliderAMPolicyProvider;
 import org.apache.slider.server.appmaster.rpc.SliderClusterProtocolPBImpl;
 import org.apache.slider.server.appmaster.operations.AbstractRMOperation;
-import org.apache.slider.server.appmaster.rpc.SliderClusterProtocolService;
+import org.apache.slider.server.appmaster.rpc.SliderIPCService;
 import org.apache.slider.server.appmaster.security.SecurityConfiguration;
 import org.apache.slider.server.appmaster.state.AppState;
 import org.apache.slider.server.appmaster.state.ContainerAssignment;
@@ -253,7 +253,7 @@ public class SliderAppMaster extends 
AbstractSliderLaunchedService
   /**
    * Slider IPC: Real service handler
    */
-  private SliderClusterProtocolService sliderIPCService;
+  private SliderIPCService sliderIPCService;
   /**
    * Slider IPC: binding
    */
@@ -1498,7 +1498,7 @@ public class SliderAppMaster extends 
AbstractSliderLaunchedService
       throws IOException, SliderException {
     verifyIPCAccess();
 
-    sliderIPCService = new SliderClusterProtocolService(
+    sliderIPCService = new SliderIPCService(
         this,
         stateForProviders,
         actionQueues,

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/4b56e54d/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolService.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolService.java
deleted file mode 100644
index d467414..0000000
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderClusterProtocolService.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.slider.server.appmaster.rpc;
-
-import com.google.common.base.Preconditions;
-import org.apache.hadoop.ipc.ProtocolSignature;
-import org.apache.hadoop.service.AbstractService;
-import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.slider.api.ClusterDescription;
-import org.apache.slider.api.SliderClusterProtocol;
-import org.apache.slider.api.proto.Messages;
-import org.apache.slider.core.conf.AggregateConf;
-import org.apache.slider.core.conf.ConfTree;
-import org.apache.slider.core.exceptions.ServiceNotReadyException;
-import org.apache.slider.core.main.LauncherExitCodes;
-import org.apache.slider.core.persist.ConfTreeSerDeser;
-import org.apache.slider.server.appmaster.AppMasterActionOperations;
-import org.apache.slider.server.appmaster.actions.ActionFlexCluster;
-import org.apache.slider.server.appmaster.actions.ActionHalt;
-import org.apache.slider.server.appmaster.actions.ActionKillContainer;
-import org.apache.slider.server.appmaster.actions.ActionStopSlider;
-import org.apache.slider.server.appmaster.actions.AsyncAction;
-import org.apache.slider.server.appmaster.actions.QueueAccess;
-import org.apache.slider.server.appmaster.management.MetricsAndMonitoring;
-import org.apache.slider.server.appmaster.state.RoleInstance;
-import org.apache.slider.server.appmaster.state.StateAccessForProviders;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Implement the {@link SliderClusterProtocol}.
- */
-public class SliderClusterProtocolService extends AbstractService
-    implements SliderClusterProtocol {
-
-  protected static final Logger log =
-      LoggerFactory.getLogger(SliderClusterProtocol.class);
-
-  private final QueueAccess actionQueues;
-  private final StateAccessForProviders appState;
-  private final MetricsAndMonitoring metricsAndMonitoring;
-  private final AppMasterActionOperations amOperations;
-  
-  /**
-   * This is the prefix used for metrics
-   */
-  public static final String PROTOCOL_PREFIX =
-      "org.apache.slider.api.SliderClusterProtocol.";
-
-  /**
-   * Constructor
-   * @param amOperations access to any AM operations
-   * @param appState state view
-   * @param actionQueues queues for actions
-   * @param metricsAndMonitoring metrics
-   */
-  public SliderClusterProtocolService(AppMasterActionOperations amOperations,
-      StateAccessForProviders appState,
-      QueueAccess actionQueues,
-      MetricsAndMonitoring metricsAndMonitoring) {
-    super("SliderClusterProtocolService");
-    Preconditions.checkArgument(amOperations != null, "null amOperations");
-    Preconditions.checkArgument(appState != null, "null appState");
-    Preconditions.checkArgument(actionQueues != null, "null actionQueues");
-    Preconditions.checkArgument(metricsAndMonitoring != null, "null 
metricsAndMonitoring");
-    this.appState = appState;
-    this.actionQueues = actionQueues;
-    this.metricsAndMonitoring = metricsAndMonitoring;
-    this.amOperations = amOperations;
-  }
-
-  @Override   //SliderClusterProtocol
-  public ProtocolSignature getProtocolSignature(String protocol,
-      long clientVersion,
-      int clientMethodsHash) throws IOException {
-    return ProtocolSignature.getProtocolSignature(
-        this, protocol, clientVersion, clientMethodsHash);
-  }
-
-
-  @Override   //SliderClusterProtocol
-  public long getProtocolVersion(String protocol, long clientVersion)
-      throws IOException {
-    return SliderClusterProtocol.versionID;
-  }
-
-  /**
-   * General actions to perform on a slider RPC call coming in
-   * @param operation operation to log
-   * @throws IOException problems
-   * @throws ServiceNotReadyException if the RPC service is constructed
-   * but not fully initialized
-   */
-  protected void onRpcCall(String operation) throws IOException {
-    log.debug("Received call to {}", operation);
-    metricsAndMonitoring.markMeterAndCounter(PROTOCOL_PREFIX + operation);
-  }
-
-  /**
-   * Schedule an action
-   * @param action for delayed execution
-   */
-  public void schedule(AsyncAction action) {
-    actionQueues.schedule(action);
-  }
-
-  /**
-   * Queue an action for immediate execution in the executor thread
-   * @param action action to execute
-   */
-  public void queue(AsyncAction action) {
-    actionQueues.put(action);
-  }
-
-  @Override //SliderClusterProtocol
-  public Messages.StopClusterResponseProto 
stopCluster(Messages.StopClusterRequestProto request)
-      throws IOException, YarnException {
-    onRpcCall("stop");
-    String message = request.getMessage();
-    if (message == null) {
-      message = "application stopped by client";
-    }
-    ActionStopSlider stopSlider =
-        new ActionStopSlider(message,
-            1000, TimeUnit.MILLISECONDS,
-            LauncherExitCodes.EXIT_SUCCESS,
-            FinalApplicationStatus.SUCCEEDED,
-            message);
-    log.info("SliderAppMasterApi.stopCluster: {}", stopSlider);
-    schedule(stopSlider);
-    return Messages.StopClusterResponseProto.getDefaultInstance();
-  }
-
-  @Override //SliderClusterProtocol
-  public Messages.FlexClusterResponseProto 
flexCluster(Messages.FlexClusterRequestProto request)
-      throws IOException, YarnException {
-    onRpcCall("flex");
-    String payload = request.getClusterSpec();
-    ConfTreeSerDeser confTreeSerDeser = new ConfTreeSerDeser();
-    ConfTree updatedResources = confTreeSerDeser.fromJson(payload);
-    schedule(new ActionFlexCluster("flex", 1, TimeUnit.MILLISECONDS,
-        updatedResources));
-    return Messages.FlexClusterResponseProto.newBuilder().setResponse(
-        true).build();
-  }
-
-  @Override //SliderClusterProtocol
-  public Messages.GetJSONClusterStatusResponseProto getJSONClusterStatus(
-      Messages.GetJSONClusterStatusRequestProto request)
-      throws IOException, YarnException {
-    onRpcCall("getstatus");
-    String result;
-    //quick update
-    //query and json-ify
-    ClusterDescription cd = appState.refreshClusterStatus();
-    result = cd.toJsonString();
-    String stat = result;
-    return Messages.GetJSONClusterStatusResponseProto.newBuilder()
-                                                     .setClusterSpec(stat)
-                                                     .build();
-  }
-
-  @Override
-  public Messages.GetInstanceDefinitionResponseProto getInstanceDefinition(
-      Messages.GetInstanceDefinitionRequestProto request)
-      throws IOException, YarnException {
-
-    onRpcCall("getinstancedefinition");
-    String internal;
-    String resources;
-    String app;
-    AggregateConf instanceDefinition =
-        appState.getInstanceDefinitionSnapshot();
-    internal = instanceDefinition.getInternal().toJson();
-    resources = instanceDefinition.getResources().toJson();
-    app = instanceDefinition.getAppConf().toJson();
-    assert internal != null;
-    assert resources != null;
-    assert app != null;
-    log.debug("Generating getInstanceDefinition Response");
-    Messages.GetInstanceDefinitionResponseProto.Builder builder =
-        Messages.GetInstanceDefinitionResponseProto.newBuilder();
-    builder.setInternal(internal);
-    builder.setResources(resources);
-    builder.setApplication(app);
-    return builder.build();
-  }
-
-  @Override //SliderClusterProtocol
-  public Messages.ListNodeUUIDsByRoleResponseProto 
listNodeUUIDsByRole(Messages.ListNodeUUIDsByRoleRequestProto request)
-      throws IOException, YarnException {
-    onRpcCall("listnodes)");
-    String role = request.getRole();
-    Messages.ListNodeUUIDsByRoleResponseProto.Builder builder =
-        Messages.ListNodeUUIDsByRoleResponseProto.newBuilder();
-    List<RoleInstance> nodes = appState.enumLiveNodesInRole(role);
-    for (RoleInstance node : nodes) {
-      builder.addUuid(node.id);
-    }
-    return builder.build();
-  }
-
-  @Override //SliderClusterProtocol
-  public Messages.GetNodeResponseProto getNode(Messages.GetNodeRequestProto 
request)
-      throws IOException, YarnException {
-    onRpcCall("getnode");
-    RoleInstance instance = appState.getLiveInstanceByContainerID(
-        request.getUuid());
-    return Messages.GetNodeResponseProto.newBuilder()
-                                        .setClusterNode(instance.toProtobuf())
-                                        .build();
-  }
-
-  @Override //SliderClusterProtocol
-  public Messages.GetClusterNodesResponseProto getClusterNodes(
-      Messages.GetClusterNodesRequestProto request)
-      throws IOException, YarnException {
-    onRpcCall("getclusternodes");
-    List<RoleInstance>
-        clusterNodes = appState.getLiveInstancesByContainerIDs(
-        request.getUuidList());
-
-    Messages.GetClusterNodesResponseProto.Builder builder =
-        Messages.GetClusterNodesResponseProto.newBuilder();
-    for (RoleInstance node : clusterNodes) {
-      builder.addClusterNode(node.toProtobuf());
-    }
-    //at this point: a possibly empty list of nodes
-    return builder.build();
-  }
-
-  @Override
-  public Messages.EchoResponseProto echo(Messages.EchoRequestProto request)
-      throws IOException, YarnException {
-    onRpcCall("echo");
-    Messages.EchoResponseProto.Builder builder =
-        Messages.EchoResponseProto.newBuilder();
-    String text = request.getText();
-    log.info("Echo request size ={}", text.length());
-    log.info(text);
-    //now return it
-    builder.setText(text);
-    return builder.build();
-  }
-
-  @Override
-  public Messages.KillContainerResponseProto 
killContainer(Messages.KillContainerRequestProto request)
-      throws IOException, YarnException {
-    onRpcCall("killcontainer");
-    String containerID = request.getId();
-    log.info("Kill Container {}", containerID);
-    //throws NoSuchNodeException if it is missing
-    RoleInstance instance =
-        appState.getLiveInstanceByContainerID(containerID);
-    queue(new ActionKillContainer(instance.getId(), 0, TimeUnit.MILLISECONDS,
-        amOperations));
-    Messages.KillContainerResponseProto.Builder builder =
-        Messages.KillContainerResponseProto.newBuilder();
-    builder.setSuccess(true);
-    return builder.build();
-  }
-
-
-  @Override
-  public Messages.AMSuicideResponseProto amSuicide(
-      Messages.AMSuicideRequestProto request)
-      throws IOException, YarnException {
-    onRpcCall("amsuicide");
-    int signal = request.getSignal();
-    String text = request.getText();
-    if (text == null) {
-      text = "";
-    }
-    int delay = request.getDelay();
-    log.info("AM Suicide with signal {}, message {} delay = {}", signal, text,
-        delay);
-    ActionHalt action = new ActionHalt(signal, text, delay,
-        TimeUnit.MILLISECONDS);
-    schedule(action);
-    return Messages.AMSuicideResponseProto.getDefaultInstance();
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/4b56e54d/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
new file mode 100644
index 0000000..e2f3644
--- /dev/null
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/SliderIPCService.java
@@ -0,0 +1,303 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.slider.server.appmaster.rpc;
+
+import com.google.common.base.Preconditions;
+import org.apache.hadoop.ipc.ProtocolSignature;
+import org.apache.hadoop.service.AbstractService;
+import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import org.apache.slider.api.ClusterDescription;
+import org.apache.slider.api.SliderClusterProtocol;
+import org.apache.slider.api.proto.Messages;
+import org.apache.slider.core.conf.AggregateConf;
+import org.apache.slider.core.conf.ConfTree;
+import org.apache.slider.core.exceptions.ServiceNotReadyException;
+import org.apache.slider.core.main.LauncherExitCodes;
+import org.apache.slider.core.persist.ConfTreeSerDeser;
+import org.apache.slider.server.appmaster.AppMasterActionOperations;
+import org.apache.slider.server.appmaster.actions.ActionFlexCluster;
+import org.apache.slider.server.appmaster.actions.ActionHalt;
+import org.apache.slider.server.appmaster.actions.ActionKillContainer;
+import org.apache.slider.server.appmaster.actions.ActionStopSlider;
+import org.apache.slider.server.appmaster.actions.AsyncAction;
+import org.apache.slider.server.appmaster.actions.QueueAccess;
+import org.apache.slider.server.appmaster.management.MetricsAndMonitoring;
+import org.apache.slider.server.appmaster.state.RoleInstance;
+import org.apache.slider.server.appmaster.state.StateAccessForProviders;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Implement the {@link SliderClusterProtocol}.
+ */
+public class SliderIPCService extends AbstractService
+    implements SliderClusterProtocol {
+
+  protected static final Logger log =
+      LoggerFactory.getLogger(SliderClusterProtocol.class);
+
+  private final QueueAccess actionQueues;
+  private final StateAccessForProviders appState;
+  private final MetricsAndMonitoring metricsAndMonitoring;
+  private final AppMasterActionOperations amOperations;
+  
+  /**
+   * This is the prefix used for metrics
+   */
+  public static final String METRICS_PREFIX =
+      "org.apache.slider.api.SliderIPCService.";
+
+  /**
+   * Constructor
+   * @param amOperations access to any AM operations
+   * @param appState state view
+   * @param actionQueues queues for actions
+   * @param metricsAndMonitoring metrics
+   */
+  public SliderIPCService(AppMasterActionOperations amOperations,
+      StateAccessForProviders appState,
+      QueueAccess actionQueues,
+      MetricsAndMonitoring metricsAndMonitoring) {
+    super("SliderIPCService");
+    Preconditions.checkArgument(amOperations != null, "null amOperations");
+    Preconditions.checkArgument(appState != null, "null appState");
+    Preconditions.checkArgument(actionQueues != null, "null actionQueues");
+    Preconditions.checkArgument(metricsAndMonitoring != null, "null 
metricsAndMonitoring");
+    this.appState = appState;
+    this.actionQueues = actionQueues;
+    this.metricsAndMonitoring = metricsAndMonitoring;
+    this.amOperations = amOperations;
+  }
+
+  @Override   //SliderClusterProtocol
+  public ProtocolSignature getProtocolSignature(String protocol,
+      long clientVersion,
+      int clientMethodsHash) throws IOException {
+    return ProtocolSignature.getProtocolSignature(
+        this, protocol, clientVersion, clientMethodsHash);
+  }
+
+
+  @Override   //SliderClusterProtocol
+  public long getProtocolVersion(String protocol, long clientVersion)
+      throws IOException {
+    return SliderClusterProtocol.versionID;
+  }
+
+  /**
+   * General actions to perform on a slider RPC call coming in
+   * @param operation operation to log
+   * @throws IOException problems
+   * @throws ServiceNotReadyException if the RPC service is constructed
+   * but not fully initialized
+   */
+  protected void onRpcCall(String operation) throws IOException {
+    log.debug("Received call to {}", operation);
+    metricsAndMonitoring.markMeterAndCounter(METRICS_PREFIX + operation);
+  }
+
+  /**
+   * Schedule an action
+   * @param action for delayed execution
+   */
+  public void schedule(AsyncAction action) {
+    actionQueues.schedule(action);
+  }
+
+  /**
+   * Queue an action for immediate execution in the executor thread
+   * @param action action to execute
+   */
+  public void queue(AsyncAction action) {
+    actionQueues.put(action);
+  }
+
+  @Override //SliderClusterProtocol
+  public Messages.StopClusterResponseProto 
stopCluster(Messages.StopClusterRequestProto request)
+      throws IOException, YarnException {
+    onRpcCall("stop");
+    String message = request.getMessage();
+    if (message == null) {
+      message = "application stopped by client";
+    }
+    ActionStopSlider stopSlider =
+        new ActionStopSlider(message,
+            1000, TimeUnit.MILLISECONDS,
+            LauncherExitCodes.EXIT_SUCCESS,
+            FinalApplicationStatus.SUCCEEDED,
+            message);
+    log.info("SliderAppMasterApi.stopCluster: {}", stopSlider);
+    schedule(stopSlider);
+    return Messages.StopClusterResponseProto.getDefaultInstance();
+  }
+
+  @Override //SliderClusterProtocol
+  public Messages.FlexClusterResponseProto 
flexCluster(Messages.FlexClusterRequestProto request)
+      throws IOException, YarnException {
+    onRpcCall("flex");
+    String payload = request.getClusterSpec();
+    ConfTreeSerDeser confTreeSerDeser = new ConfTreeSerDeser();
+    ConfTree updatedResources = confTreeSerDeser.fromJson(payload);
+    schedule(new ActionFlexCluster("flex", 1, TimeUnit.MILLISECONDS,
+        updatedResources));
+    return Messages.FlexClusterResponseProto.newBuilder().setResponse(
+        true).build();
+  }
+
+  @Override //SliderClusterProtocol
+  public Messages.GetJSONClusterStatusResponseProto getJSONClusterStatus(
+      Messages.GetJSONClusterStatusRequestProto request)
+      throws IOException, YarnException {
+    onRpcCall("getstatus");
+    String result;
+    //quick update
+    //query and json-ify
+    ClusterDescription cd = appState.refreshClusterStatus();
+    result = cd.toJsonString();
+    String stat = result;
+    return Messages.GetJSONClusterStatusResponseProto.newBuilder()
+                                                     .setClusterSpec(stat)
+                                                     .build();
+  }
+
+  @Override
+  public Messages.GetInstanceDefinitionResponseProto getInstanceDefinition(
+      Messages.GetInstanceDefinitionRequestProto request)
+      throws IOException, YarnException {
+
+    onRpcCall("getinstancedefinition");
+    String internal;
+    String resources;
+    String app;
+    AggregateConf instanceDefinition =
+        appState.getInstanceDefinitionSnapshot();
+    internal = instanceDefinition.getInternal().toJson();
+    resources = instanceDefinition.getResources().toJson();
+    app = instanceDefinition.getAppConf().toJson();
+    assert internal != null;
+    assert resources != null;
+    assert app != null;
+    log.debug("Generating getInstanceDefinition Response");
+    Messages.GetInstanceDefinitionResponseProto.Builder builder =
+        Messages.GetInstanceDefinitionResponseProto.newBuilder();
+    builder.setInternal(internal);
+    builder.setResources(resources);
+    builder.setApplication(app);
+    return builder.build();
+  }
+
+  @Override //SliderClusterProtocol
+  public Messages.ListNodeUUIDsByRoleResponseProto 
listNodeUUIDsByRole(Messages.ListNodeUUIDsByRoleRequestProto request)
+      throws IOException, YarnException {
+    onRpcCall("listnodes)");
+    String role = request.getRole();
+    Messages.ListNodeUUIDsByRoleResponseProto.Builder builder =
+        Messages.ListNodeUUIDsByRoleResponseProto.newBuilder();
+    List<RoleInstance> nodes = appState.enumLiveNodesInRole(role);
+    for (RoleInstance node : nodes) {
+      builder.addUuid(node.id);
+    }
+    return builder.build();
+  }
+
+  @Override //SliderClusterProtocol
+  public Messages.GetNodeResponseProto getNode(Messages.GetNodeRequestProto 
request)
+      throws IOException, YarnException {
+    onRpcCall("getnode");
+    RoleInstance instance = appState.getLiveInstanceByContainerID(
+        request.getUuid());
+    return Messages.GetNodeResponseProto.newBuilder()
+                                        .setClusterNode(instance.toProtobuf())
+                                        .build();
+  }
+
+  @Override //SliderClusterProtocol
+  public Messages.GetClusterNodesResponseProto getClusterNodes(
+      Messages.GetClusterNodesRequestProto request)
+      throws IOException, YarnException {
+    onRpcCall("getclusternodes");
+    List<RoleInstance>
+        clusterNodes = appState.getLiveInstancesByContainerIDs(
+        request.getUuidList());
+
+    Messages.GetClusterNodesResponseProto.Builder builder =
+        Messages.GetClusterNodesResponseProto.newBuilder();
+    for (RoleInstance node : clusterNodes) {
+      builder.addClusterNode(node.toProtobuf());
+    }
+    //at this point: a possibly empty list of nodes
+    return builder.build();
+  }
+
+  @Override
+  public Messages.EchoResponseProto echo(Messages.EchoRequestProto request)
+      throws IOException, YarnException {
+    onRpcCall("echo");
+    Messages.EchoResponseProto.Builder builder =
+        Messages.EchoResponseProto.newBuilder();
+    String text = request.getText();
+    log.info("Echo request size ={}", text.length());
+    log.info(text);
+    //now return it
+    builder.setText(text);
+    return builder.build();
+  }
+
+  @Override
+  public Messages.KillContainerResponseProto 
killContainer(Messages.KillContainerRequestProto request)
+      throws IOException, YarnException {
+    onRpcCall("killcontainer");
+    String containerID = request.getId();
+    log.info("Kill Container {}", containerID);
+    //throws NoSuchNodeException if it is missing
+    RoleInstance instance =
+        appState.getLiveInstanceByContainerID(containerID);
+    queue(new ActionKillContainer(instance.getId(), 0, TimeUnit.MILLISECONDS,
+        amOperations));
+    Messages.KillContainerResponseProto.Builder builder =
+        Messages.KillContainerResponseProto.newBuilder();
+    builder.setSuccess(true);
+    return builder.build();
+  }
+
+
+  @Override
+  public Messages.AMSuicideResponseProto amSuicide(
+      Messages.AMSuicideRequestProto request)
+      throws IOException, YarnException {
+    onRpcCall("amsuicide");
+    int signal = request.getSignal();
+    String text = request.getText();
+    if (text == null) {
+      text = "";
+    }
+    int delay = request.getDelay();
+    log.info("AM Suicide with signal {}, message {} delay = {}", signal, text,
+        delay);
+    ActionHalt action = new ActionHalt(signal, text, delay,
+        TimeUnit.MILLISECONDS);
+    schedule(action);
+    return Messages.AMSuicideResponseProto.getDefaultInstance();
+  }
+}

Reply via email to