Repository: incubator-reef
Updated Branches:
  refs/heads/master 6279d7d85 -> eb5bc9e31


[REEF-462] Add racks and nodes names to EvaluatorRequestSerializer

This commit includes the serialization/deserialization of the rackNames
and nodeNames in the EvaluatorRequest object. Added UTs.

JIRA:
  [REEF-462](https://issues.apache.org/jira/browse/REEF-462)

Pull Request:
  This closes #280


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

Branch: refs/heads/master
Commit: eb5bc9e318f84fdcd6f1de2025505864ec73bf88
Parents: 6279d7d
Author: nachocano <[email protected]>
Authored: Tue Jul 7 00:27:38 2015 -0700
Committer: Markus Weimer <[email protected]>
Committed: Tue Jul 7 08:56:48 2015 -0700

----------------------------------------------------------------------
 .../impl/EvaluatorRequestSerializer.java        | 38 ++++++++---
 .../impl/EvaluatorRequestSerializerTest.java    | 67 ++++++++++++++++++++
 2 files changed, 95 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/eb5bc9e3/lang/java/reef-io/src/main/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializer.java
----------------------------------------------------------------------
diff --git 
a/lang/java/reef-io/src/main/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializer.java
 
b/lang/java/reef-io/src/main/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializer.java
index 8522e4a..0177d74 100644
--- 
a/lang/java/reef-io/src/main/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializer.java
+++ 
b/lang/java/reef-io/src/main/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializer.java
@@ -22,41 +22,59 @@ import org.apache.commons.codec.binary.Base64;
 import org.apache.reef.driver.evaluator.EvaluatorRequest;
 
 import java.io.*;
+import java.util.List;
 
 /**
  * Serialize and deserialize EvaluatorRequest objects.
- * Currently only supports number & memory
- * Does not take care of Resource Descriptor
+ * Supports number, memory, cores, nodeNames and rackNames serialization
  */
 public final class EvaluatorRequestSerializer {
-  public static String serialize(EvaluatorRequest request) {
+  public static String serialize(final EvaluatorRequest request) {
     try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
       try (DataOutputStream daos = new DataOutputStream(baos)) {
 
         daos.writeInt(request.getNumber());
         daos.writeInt(request.getMegaBytes());
         daos.writeInt(request.getNumberOfCores());
+        final List<String> nodeNames = request.getNodeNames();
+        final List<String> rackNames = request.getRackNames();
+        daos.writeInt(nodeNames.size());
+        daos.writeInt(rackNames.size());
+        for (final String nodeName : nodeNames) {
+          daos.writeUTF(nodeName);
+        }
+        for (final String rackName : rackNames) {
+          daos.writeUTF(rackName);
+        }
 
-      } catch (IOException e) {
+      } catch (final IOException e) {
         throw e;
       }
 
       return Base64.encodeBase64String(baos.toByteArray());
-    } catch (IOException e1) {
+    } catch (final IOException e1) {
       throw new RuntimeException("Unable to serialize compute request", e1);
     }
   }
 
-  public static EvaluatorRequest deserialize(String serializedRequest) {
+  public static EvaluatorRequest deserialize(final String serializedRequest) {
     try (ByteArrayInputStream bais = new 
ByteArrayInputStream(Base64.decodeBase64(serializedRequest))) {
       try (DataInputStream dais = new DataInputStream(bais)) {
-        return EvaluatorRequest.newBuilder()
+        final EvaluatorRequest.Builder builder = EvaluatorRequest.newBuilder()
             .setNumber(dais.readInt())
             .setMemory(dais.readInt())
-            .setNumberOfCores(dais.readInt())
-            .build();
+            .setNumberOfCores(dais.readInt());
+        final int numNodes = dais.readInt();
+        final int numRacks = dais.readInt();
+        for (int i = 0; i < numNodes; i++) {
+          builder.addNodeName(dais.readUTF());
+        }
+        for (int i = 0; i < numRacks; i++) {
+          builder.addRackName(dais.readUTF());
+        }
+        return builder.build();
       }
-    } catch (IOException e) {
+    } catch (final IOException e) {
       throw new RuntimeException("Unable to de-serialize compute request", e);
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/eb5bc9e3/lang/java/reef-io/src/test/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/lang/java/reef-io/src/test/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializerTest.java
 
b/lang/java/reef-io/src/test/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializerTest.java
new file mode 100644
index 0000000..7852b2c
--- /dev/null
+++ 
b/lang/java/reef-io/src/test/java/org/apache/reef/io/data/loading/impl/EvaluatorRequestSerializerTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.reef.io.data.loading.impl;
+
+import org.apache.reef.driver.evaluator.EvaluatorRequest;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Test serialization and deserialization of EvaluatorRequest objects.
+ */
+public final class EvaluatorRequestSerializerTest {
+
+  @Test
+  public void testSerializeDeserializeCompleteRequest() {
+    final EvaluatorRequest expected = EvaluatorRequest.newBuilder()
+                                            .setNumber(1)
+                                            .setMemory(10)
+                                            .setNumberOfCores(3)
+                                            .addRackName("rack1")
+                                            .addRackName("rack2")
+                                            .addNodeName("nodename1")
+                                            .addNodeName("nodename2")
+                                            .build();
+    final String serialized = EvaluatorRequestSerializer.serialize(expected);
+    final EvaluatorRequest actual = 
EvaluatorRequestSerializer.deserialize(serialized);
+
+    Assert.assertEquals(expected.getMegaBytes(), actual.getMegaBytes());
+    Assert.assertEquals(expected.getNumber(), actual.getNumber());
+    Assert.assertEquals(expected.getNumberOfCores(), 
actual.getNumberOfCores());
+    Assert.assertEquals(expected.getRackNames(), actual.getRackNames());
+    Assert.assertEquals(expected.getNodeNames(), actual.getNodeNames());
+  }
+
+  @Test
+  public void testSerializeDeserializeNoRacksNorNodesRequest() {
+    final EvaluatorRequest expected = EvaluatorRequest.newBuilder()
+                                            .setNumber(1)
+                                            .setMemory(10)
+                                            .setNumberOfCores(3)
+                                            .build();
+    final String serialized = EvaluatorRequestSerializer.serialize(expected);
+    final EvaluatorRequest actual = 
EvaluatorRequestSerializer.deserialize(serialized);
+
+    Assert.assertEquals(expected.getMegaBytes(), actual.getMegaBytes());
+    Assert.assertEquals(expected.getNumber(), actual.getNumber());
+    Assert.assertEquals(expected.getNumberOfCores(), 
actual.getNumberOfCores());
+    Assert.assertTrue(actual.getRackNames().size() == 0);
+    Assert.assertTrue(actual.getNodeNames().size() == 0);
+  }
+}

Reply via email to