You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by we...@apache.org on 2015/04/24 19:38:24 UTC
incubator-reef git commit: [REEF-278] Support ProtocolBuffer
ClassHierarchy merge in Java Tang
Repository: incubator-reef
Updated Branches:
refs/heads/master 0b464ec0f -> c1ac79639
[REEF-278] Support ProtocolBuffer ClassHierarchy merge in Java Tang
This change adds support to merge ProtocolBuffer ClassHierarchy with
other ClassHierachy instances in Tang/Java. It also contains a minor fix
for a dropped test config file.
JIRA:
[REEF-278](https://issues.apache.org/jira/browse/REEF-278)
Pull Request:
This closes #159
Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/c1ac7963
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/c1ac7963
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/c1ac7963
Branch: refs/heads/master
Commit: c1ac79639b7c4a72c2ebe74f6dc9db87480405d7
Parents: 0b464ec
Author: Julia Wang <jw...@yahoo.com>
Authored: Wed Apr 22 19:57:12 2015 -0700
Committer: Markus Weimer <we...@apache.org>
Committed: Fri Apr 24 10:30:26 2015 -0700
----------------------------------------------------------------------
.../ConfigFiles/evaluator.conf | Bin 0 -> 2837 bytes
.../Org.Apache.REEF.Tests.csproj | 3 ++
.../protobuf/ProtocolBufferClassHierarchy.java | 34 +++++++++++++++++--
.../tang/ClassHierarchyDeserializationTest.java | 34 ++++++++++++++++++-
4 files changed, 67 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1ac7963/lang/cs/Org.Apache.REEF.Tests/ConfigFiles/evaluator.conf
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Tests/ConfigFiles/evaluator.conf b/lang/cs/Org.Apache.REEF.Tests/ConfigFiles/evaluator.conf
new file mode 100644
index 0000000..67256f5
Binary files /dev/null and b/lang/cs/Org.Apache.REEF.Tests/ConfigFiles/evaluator.conf differ
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1ac7963/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj b/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj
index 44fdfe3..a256a34 100644
--- a/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj
+++ b/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj
@@ -67,6 +67,9 @@ under the License.
<Compile Include="Utility\TestExceptions.cs" />
</ItemGroup>
<ItemGroup>
+ <None Include="ConfigFiles\evaluator.conf">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </None>
<None Include="run.cmd">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1ac7963/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/protobuf/ProtocolBufferClassHierarchy.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/protobuf/ProtocolBufferClassHierarchy.java b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/protobuf/ProtocolBufferClassHierarchy.java
index 8053078..0e0a0c6 100644
--- a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/protobuf/ProtocolBufferClassHierarchy.java
+++ b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/implementation/protobuf/ProtocolBufferClassHierarchy.java
@@ -19,6 +19,7 @@
package org.apache.reef.tang.implementation.protobuf;
import org.apache.reef.tang.ClassHierarchy;
+import org.apache.reef.tang.annotations.NamedParameter;
import org.apache.reef.tang.exceptions.NameResolutionException;
import org.apache.reef.tang.implementation.types.*;
import org.apache.reef.tang.proto.ClassHierarchyProto;
@@ -384,13 +385,40 @@ public class ProtocolBufferClassHierarchy implements ClassHierarchy {
if (this == ch) {
return this;
}
- throw new UnsupportedOperationException(
- "Cannot merge ExternalClassHierarchies yet!");
+ if (!(ch instanceof ProtocolBufferClassHierarchy)) {
+ throw new UnsupportedOperationException(
+ "Cannot merge with class hierarchies of type: " + ch.getClass().getName());
+ }
+
+ final ProtocolBufferClassHierarchy pch = (ProtocolBufferClassHierarchy) ch;
+ for (final String key : pch.lookupTable.keySet()) {
+ if (!this.lookupTable.containsKey(key)) {
+ this.lookupTable.put(key, pch.lookupTable.get(key));
+ }
+
+ for (final Node n : ch.getNamespace().getChildren()) {
+ if (!this.namespace.contains(n.getFullName())) {
+ if (n instanceof NamedParameter) {
+ final NamedParameterNode np = (NamedParameterNode) n;
+ new NamedParameterNodeImpl<>(this.namespace, np.getName(),
+ np.getFullName(), np.getFullArgName(), np.getSimpleArgName(),
+ np.isSet(), np.isList(), np.getDocumentation(), np.getShortName(),
+ np.getDefaultInstanceAsStrings());
+ } else if (n instanceof ClassNode) {
+ final ClassNode cn = (ClassNode) n;
+ new ClassNodeImpl(namespace, cn.getName(), cn.getFullName(),
+ cn.isUnit(), cn.isInjectionCandidate(),
+ cn.isExternalConstructor(), cn.getInjectableConstructors(),
+ cn.getAllConstructors(), cn.getDefaultImplementation());
+ }
+ }
+ }
+ }
+ return this;
}
@Override
public Node getNamespace() {
return namespace;
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/c1ac7963/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/ClassHierarchyDeserializationTest.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/ClassHierarchyDeserializationTest.java b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/ClassHierarchyDeserializationTest.java
index 7679410..dbdc5a8 100644
--- a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/ClassHierarchyDeserializationTest.java
+++ b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/ClassHierarchyDeserializationTest.java
@@ -18,6 +18,7 @@
*/
package org.apache.reef.tang;
+import org.apache.reef.tang.exceptions.BindException;
import org.apache.reef.tang.exceptions.NameResolutionException;
import org.apache.reef.tang.formats.AvroConfigurationSerializer;
import org.apache.reef.tang.formats.ConfigurationSerializer;
@@ -44,7 +45,7 @@ public class ClassHierarchyDeserializationTest {
public void testDeserializationForTasks() {
try (final InputStream chin = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("Task.bin")) {
- final ClassHierarchyProto.Node root = ClassHierarchyProto.Node.parseFrom(chin); // A
+ final ClassHierarchyProto.Node root = ClassHierarchyProto.Node.parseFrom(chin);
final ClassHierarchy ch = new ProtocolBufferClassHierarchy(root);
Node n1 = ch.getNode("Org.Apache.REEF.Examples.Tasks.StreamingTasks.StreamTask1, Org.Apache.REEF.Examples.Tasks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
Assert.assertTrue(n1.getFullName().equals("Org.Apache.REEF.Examples.Tasks.StreamingTasks.StreamTask1, Org.Apache.REEF.Examples.Tasks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"));
@@ -67,6 +68,37 @@ public class ClassHierarchyDeserializationTest {
}
/**
+ * This is to test CLR protocol Buffer class hierarchy merge
+ */
+ @Test
+ public void testProtocolClassHierarchyMerge() {
+ final ConfigurationBuilder taskConfigurationBuilder;
+ final ConfigurationBuilder eventConfigurationBuilder;
+
+ try (final InputStream chin = Thread.currentThread().getContextClassLoader()
+ .getResourceAsStream("Task.bin")) {
+ final ClassHierarchyProto.Node root = ClassHierarchyProto.Node.parseFrom(chin);
+ final ClassHierarchy ch = new ProtocolBufferClassHierarchy(root);
+ taskConfigurationBuilder = Tang.Factory.getTang().newConfigurationBuilder(ch);
+ } catch (final IOException e) {
+ final String message = "Unable to load class hierarchy from task.bin.";
+ throw new RuntimeException(message, e);
+ }
+
+ try (final InputStream chin = Thread.currentThread().getContextClassLoader()
+ .getResourceAsStream("Event.bin")) {
+ final ClassHierarchyProto.Node root = ClassHierarchyProto.Node.parseFrom(chin);
+ final ClassHierarchy ch = new ProtocolBufferClassHierarchy(root);
+ eventConfigurationBuilder = Tang.Factory.getTang().newConfigurationBuilder(ch);
+ } catch (final Exception e) {
+ final String message = "Unable to load class hierarchy from event.bin.";
+ throw new RuntimeException(message, e);
+ }
+
+ taskConfigurationBuilder.addConfiguration(eventConfigurationBuilder.build());
+ }
+
+ /**
* generate event.bin from .Net Tang test case TestSerilization.TestGenericClass
*/
@Test