You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@giraph.apache.org by ap...@apache.org on 2013/03/07 06:37:42 UTC
[3/8] GIRAPH-528: Decouple vertex implementation from edge storage
(apresta)
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/comm/TestMessageStores.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/comm/TestMessageStores.java b/giraph-core/src/test/java/org/apache/giraph/comm/TestMessageStores.java
index 5ce7a89..92fd49b 100644
--- a/giraph-core/src/test/java/org/apache/giraph/comm/TestMessageStores.java
+++ b/giraph-core/src/test/java/org/apache/giraph/comm/TestMessageStores.java
@@ -21,23 +21,6 @@ package org.apache.giraph.comm;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Random;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import org.apache.giraph.conf.GiraphConfiguration;
-import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
import org.apache.giraph.bsp.CentralizedServiceWorker;
import org.apache.giraph.comm.messages.BasicMessageStore;
import org.apache.giraph.comm.messages.ByteArrayMessagesPerVertexStore;
@@ -47,10 +30,12 @@ import org.apache.giraph.comm.messages.FlushableMessageStore;
import org.apache.giraph.comm.messages.MessageStore;
import org.apache.giraph.comm.messages.MessageStoreFactory;
import org.apache.giraph.comm.messages.SequentialFileMessageStore;
-import org.apache.giraph.vertex.EdgeListVertex;
+import org.apache.giraph.conf.GiraphConfiguration;
+import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
import org.apache.giraph.utils.ByteArrayVertexIdMessages;
import org.apache.giraph.utils.CollectionUtils;
import org.apache.giraph.utils.MockUtils;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Writable;
@@ -59,6 +44,22 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Random;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
import static org.junit.Assert.assertTrue;
/** Test for different types of message stores */
@@ -75,8 +76,8 @@ public class TestMessageStores {
*/
private static final Random RANDOM = new Random(101);
- private static class IntVertex extends EdgeListVertex<IntWritable,
- IntWritable, IntWritable, IntWritable> {
+ private static class IntVertex extends Vertex<IntWritable,
+ IntWritable, IntWritable, IntWritable> {
@Override
public void compute(Iterable<IntWritable> messages) throws IOException {
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/conf/TestObjectCreation.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/conf/TestObjectCreation.java b/giraph-core/src/test/java/org/apache/giraph/conf/TestObjectCreation.java
new file mode 100644
index 0000000..9f0920a
--- /dev/null
+++ b/giraph-core/src/test/java/org/apache/giraph/conf/TestObjectCreation.java
@@ -0,0 +1,191 @@
+/*
+ * 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.giraph.conf;
+
+import org.apache.giraph.time.SystemTime;
+import org.apache.giraph.time.Time;
+import org.apache.giraph.time.Times;
+import org.apache.giraph.graph.Vertex;
+import org.apache.hadoop.io.DoubleWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableComparable;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Benchmark tests to insure that object creation via
+ * {@link ImmutableClassesGiraphConfiguration} is fast
+ */
+public class TestObjectCreation {
+ @Rule
+ public TestName name = new TestName();
+ private static final Time TIME = SystemTime.get();
+ private static final long COUNT = 200000;
+ private long startNanos = -1;
+ private long totalNanos = -1;
+ private long total = 0;
+ private long expected = COUNT * (COUNT - 1) / 2L;
+ private ImmutableClassesGiraphConfiguration<LongWritable, LongWritable,
+ LongWritable, LongWritable> configuration;
+
+ @Before
+ public void setUp() {
+ GiraphConfiguration conf = new GiraphConfiguration();
+ conf.setClass(GiraphConstants.VERTEX_ID_CLASS, IntWritable.class,
+ WritableComparable.class);
+ conf.setClass(GiraphConstants.VERTEX_VALUE_CLASS, LongWritable.class,
+ Writable.class);
+ conf.setClass(GiraphConstants.EDGE_VALUE_CLASS, DoubleWritable.class,
+ Writable.class);
+ conf.setClass(GiraphConstants.MESSAGE_VALUE_CLASS, LongWritable.class,
+ Writable.class);
+ conf.setVertexClass(ImmutableVertex.class);
+ configuration =
+ new ImmutableClassesGiraphConfiguration<LongWritable, LongWritable,
+ LongWritable, LongWritable>(conf);
+ total = 0;
+ System.gc();
+ }
+
+ @After
+ public void cleanUp() {
+ totalNanos = Times.getNanosSince(TIME, startNanos);
+ System.out.println(name.getMethodName() + ": took "
+ + totalNanos +
+ " ns for " + COUNT + " elements " + (totalNanos * 1f / COUNT) +
+ " ns / element");
+ assertEquals(expected, total);
+ System.gc();
+ }
+
+ @Test
+ public void testCreateClass() {
+ startNanos = TIME.getNanoseconds();
+ for (int i = 0; i < COUNT; ++i) {
+ LongWritable value = configuration.createVertexValue();
+ value.set(i);
+ total += value.get();
+ }
+ }
+
+ @Test
+ public void testNativeCreateClass() {
+ startNanos = TIME.getNanoseconds();
+ for (int i = 0; i < COUNT; ++i) {
+ LongWritable value = new LongWritable();
+ value.set(i);
+ total += value.get();
+ }
+ }
+
+ private Class<?> getLongWritableClass() {
+ return LongWritable.class;
+ }
+
+ @Test
+ public void testNewInstance()
+ throws IllegalAccessException, InstantiationException {
+ startNanos = TIME.getNanoseconds();
+ for (int i = 0; i < COUNT; ++i) {
+ LongWritable value = (LongWritable)
+ getLongWritableClass().newInstance();
+ value.set(i);
+ total += value.get();
+ }
+ }
+
+ private synchronized Class<?> getSyncLongWritableClass() {
+ return LongWritable.class;
+ }
+
+ @Test
+ public void testSyncNewInstance()
+ throws IllegalAccessException, InstantiationException {
+ startNanos = TIME.getNanoseconds();
+ for (int i = 0; i < COUNT; ++i) {
+ LongWritable value = (LongWritable)
+ getSyncLongWritableClass().newInstance();
+ value.set(i);
+ total += value.get();
+ }
+ }
+
+ @Test
+ public void testReflectionUtilsNewInstance()
+ throws IllegalAccessException, InstantiationException {
+ // Throwaway to put into cache
+ org.apache.hadoop.util.ReflectionUtils.newInstance(LongWritable.class,
+ null);
+ startNanos = TIME.getNanoseconds();
+ for (int i = 0; i < COUNT; ++i) {
+ LongWritable value = (LongWritable)
+ org.apache.hadoop.util.ReflectionUtils.newInstance(
+ getLongWritableClass(), null);
+ value.set(i);
+ total += value.get();
+ }
+ }
+
+ @Test
+ public void testConstructorNewInstance()
+ throws IllegalAccessException, InstantiationException,
+ NoSuchMethodException, InvocationTargetException {
+ Constructor<?> constructor = LongWritable.class.getDeclaredConstructor
+ (new Class[]{});
+ startNanos = TIME.getNanoseconds();
+ for (int i = 0; i < COUNT; ++i) {
+ LongWritable value = (LongWritable) constructor.newInstance();
+ value.set(i);
+ total += value.get();
+ }
+ }
+
+ private static class ImmutableVertex extends Vertex<LongWritable,
+ LongWritable, LongWritable, LongWritable> {
+ @Override
+ public void compute(Iterable<LongWritable> messages) throws IOException {
+ }
+ }
+
+ private ImmutableClassesGiraphConfiguration<LongWritable, LongWritable,
+ LongWritable, LongWritable> getConfiguration() {
+ return configuration;
+ }
+
+ @Test
+ public void testImmutableClassesGiraphConfigurationNewInstance() {
+ startNanos = TIME.getNanoseconds();
+ for (int i = 0; i < COUNT; ++i) {
+ LongWritable value = getConfiguration().createVertexValue();
+ value.set(i);
+ total += value.get();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/edge/TestMultiGraphEdges.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/edge/TestMultiGraphEdges.java b/giraph-core/src/test/java/org/apache/giraph/edge/TestMultiGraphEdges.java
new file mode 100644
index 0000000..4eeff01
--- /dev/null
+++ b/giraph-core/src/test/java/org/apache/giraph/edge/TestMultiGraphEdges.java
@@ -0,0 +1,86 @@
+/*
+ * 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.giraph.edge;
+
+import com.google.common.collect.Lists;
+import org.apache.hadoop.io.DoubleWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.List;
+
+import static org.apache.giraph.graph.TestVertexAndEdges.instantiateVertexEdges;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests {@link VertexEdges} implementations that allow parallel edges.
+ */
+public class TestMultiGraphEdges {
+ /** {@link VertexEdges} classes to be tested. */
+ private Collection<Class<? extends VertexEdges>> edgesClasses =
+ Lists.newArrayList();
+
+ @Before
+ public void setUp() {
+ edgesClasses.add(ByteArrayEdges.class);
+ edgesClasses.add(ArrayListEdges.class);
+ edgesClasses.add(HashMultimapEdges.class);
+ edgesClasses.add(LongDoubleArrayEdges.class);
+ }
+
+ /**
+ * Ensures that all multigraph {@link VertexEdges} implementations allow
+ * parallel edges.
+ */
+ @Test
+ public void testParallelEdges() {
+ for (Class<? extends VertexEdges> edgesClass : edgesClasses) {
+ testParallelEdgesClass(edgesClass);
+ }
+ }
+
+ private void testParallelEdgesClass(
+ Class<? extends VertexEdges> edgesClass) {
+ VertexEdges<LongWritable, DoubleWritable> edges =
+ instantiateVertexEdges(edgesClass);
+
+ // Initial edges list contains parallel edges.
+ List<Edge<LongWritable, DoubleWritable>> initialEdges = Lists.newArrayList(
+ EdgeFactory.create(new LongWritable(1), new DoubleWritable(1)),
+ EdgeFactory.create(new LongWritable(2), new DoubleWritable(2)),
+ EdgeFactory.create(new LongWritable(3), new DoubleWritable(3)),
+ EdgeFactory.create(new LongWritable(2), new DoubleWritable(20)));
+
+ edges.initialize(initialEdges);
+
+ // The parallel edges should still be there.
+ assertEquals(4, edges.size());
+
+ // Adding a parallel edge should increase the number of edges.
+ edges.add(EdgeFactory.create(new LongWritable(3), new DoubleWritable(30)));
+ assertEquals(5, edges.size());
+
+ // Removing edges pointing to a given vertex should remove all parallel
+ // edges.
+ edges.remove(new LongWritable(2));
+ assertEquals(3, edges.size());
+ }
+}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/edge/TestMultiRandomAccessEdges.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/edge/TestMultiRandomAccessEdges.java b/giraph-core/src/test/java/org/apache/giraph/edge/TestMultiRandomAccessEdges.java
new file mode 100644
index 0000000..b86f409
--- /dev/null
+++ b/giraph-core/src/test/java/org/apache/giraph/edge/TestMultiRandomAccessEdges.java
@@ -0,0 +1,81 @@
+/*
+ * 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.giraph.edge;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import org.apache.hadoop.io.DoubleWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.List;
+
+import static org.apache.giraph.graph.TestVertexAndEdges.instantiateVertexEdges;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests {@link MultiRandomAccessVertexEdges} implementations.
+ */
+public class TestMultiRandomAccessEdges {
+ /** {@link MultiRandomAccessVertexEdges} classes to be tested. */
+ private Collection<Class<? extends MultiRandomAccessVertexEdges>>
+ edgesClasses = Lists.newArrayList();
+
+ @Before
+ public void setUp() {
+ edgesClasses.add(HashMultimapEdges.class);
+ }
+
+ /**
+ * Ensures that all {@link MultiRandomAccessVertexEdges} implementations
+ * correctly return edge values.
+ */
+ @Test
+ public void testParallelEdges() {
+ for (Class<? extends MultiRandomAccessVertexEdges> edgesClass :
+ edgesClasses) {
+ testParallelEdgesClass(edgesClass);
+ }
+ }
+
+ private void testParallelEdgesClass(
+ Class<? extends MultiRandomAccessVertexEdges> edgesClass) {
+ MultiRandomAccessVertexEdges<LongWritable, DoubleWritable> edges =
+ (MultiRandomAccessVertexEdges<LongWritable, DoubleWritable>)
+ instantiateVertexEdges(edgesClass);
+
+ // Initial edges list contains parallel edges.
+ List<Edge<LongWritable, DoubleWritable>> initialEdges = Lists.newArrayList(
+ EdgeFactory.create(new LongWritable(1), new DoubleWritable(1)),
+ EdgeFactory.create(new LongWritable(2), new DoubleWritable(2)),
+ EdgeFactory.create(new LongWritable(3), new DoubleWritable(3)),
+ EdgeFactory.create(new LongWritable(2), new DoubleWritable(20)));
+
+ edges.initialize(initialEdges);
+
+ assertEquals(2,
+ Iterables.size(edges.getAllEdgeValues(new LongWritable(2))));
+ assertEquals(1,
+ Iterables.size(edges.getAllEdgeValues(new LongWritable(1))));
+ assertEquals(0,
+ Iterables.size(edges.getAllEdgeValues(new LongWritable(42))));
+ }
+}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/edge/TestNullValueEdges.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/edge/TestNullValueEdges.java b/giraph-core/src/test/java/org/apache/giraph/edge/TestNullValueEdges.java
new file mode 100644
index 0000000..ef3fbc8
--- /dev/null
+++ b/giraph-core/src/test/java/org/apache/giraph/edge/TestNullValueEdges.java
@@ -0,0 +1,74 @@
+/*
+ * 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.giraph.edge;
+
+import com.google.common.collect.Lists;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.NullWritable;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.List;
+
+import static org.apache.giraph.graph.TestVertexAndEdges.instantiateVertexEdges;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests {@link VertexEdges} implementations with null edge values.
+ */
+public class TestNullValueEdges {
+ /** {@link VertexEdges} classes to be tested. */
+ private Collection<Class<? extends VertexEdges>>
+ edgesClasses = Lists.newArrayList();
+
+ @Before
+ public void setUp() {
+ edgesClasses.add(LongNullArrayEdges.class);
+ edgesClasses.add(LongNullHashSetEdges.class);
+ }
+
+ @Test
+ public void testEdges() {
+ for (Class<? extends VertexEdges> edgesClass : edgesClasses) {
+ testEdgesClass(edgesClass);
+ }
+ }
+
+ private void testEdgesClass(
+ Class<? extends VertexEdges> edgesClass) {
+ VertexEdges<LongWritable, NullWritable> edges =
+ (VertexEdges<LongWritable, NullWritable>)
+ instantiateVertexEdges(edgesClass);
+
+ List<Edge<LongWritable, NullWritable>> initialEdges = Lists.newArrayList(
+ EdgeFactory.create(new LongWritable(1)),
+ EdgeFactory.create(new LongWritable(2)),
+ EdgeFactory.create(new LongWritable(3)));
+
+ edges.initialize(initialEdges);
+ assertEquals(3, edges.size());
+
+ edges.add(EdgeFactory.createMutable(new LongWritable(4)));
+ assertEquals(4, edges.size());
+
+ edges.remove(new LongWritable(2));
+ assertEquals(3, edges.size());
+ }
+}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/edge/TestStrictGraphEdges.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/edge/TestStrictGraphEdges.java b/giraph-core/src/test/java/org/apache/giraph/edge/TestStrictGraphEdges.java
new file mode 100644
index 0000000..3c57281
--- /dev/null
+++ b/giraph-core/src/test/java/org/apache/giraph/edge/TestStrictGraphEdges.java
@@ -0,0 +1,79 @@
+/*
+ * 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.giraph.edge;
+
+import com.google.common.collect.Lists;
+import org.apache.hadoop.io.DoubleWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.List;
+
+import static org.apache.giraph.graph.TestVertexAndEdges.instantiateVertexEdges;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests {@link VertexEdges} implementations that disallow parallel edges.
+ */
+public class TestStrictGraphEdges {
+ /** {@link VertexEdges} classes to be tested. */
+ private Collection<Class<? extends VertexEdges>> edgesClasses =
+ Lists.newArrayList();
+
+ @Before
+ public void setUp() {
+ edgesClasses.add(HashMapEdges.class);
+ edgesClasses.add(LongDoubleHashMapEdges.class);
+ }
+
+ /**
+ * Ensures that all strict graph {@link VertexEdges} implementations
+ * disallow parallel edges.
+ */
+ @Test
+ public void testParallelEdges() {
+ for (Class<? extends VertexEdges> edgesClass : edgesClasses) {
+ testParallelEdgesClass(edgesClass);
+ }
+ }
+
+ private void testParallelEdgesClass(
+ Class<? extends VertexEdges> edgesClass) {
+ VertexEdges<LongWritable, DoubleWritable> edges =
+ instantiateVertexEdges(edgesClass);
+
+ // Initial edges list contains parallel edges.
+ List<Edge<LongWritable, DoubleWritable>> initialEdges = Lists.newArrayList(
+ EdgeFactory.create(new LongWritable(1), new DoubleWritable(1)),
+ EdgeFactory.create(new LongWritable(2), new DoubleWritable(2)),
+ EdgeFactory.create(new LongWritable(3), new DoubleWritable(3)),
+ EdgeFactory.create(new LongWritable(2), new DoubleWritable(20)));
+
+ edges.initialize(initialEdges);
+
+ // Only one of the two parallel edges should be left.
+ assertEquals(3, edges.size());
+
+ // Adding a parallel edge shouldn't change the number of edges.
+ edges.add(EdgeFactory.create(new LongWritable(3), new DoubleWritable(30)));
+ assertEquals(3, edges.size());
+ }
+}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/edge/TestStrictRandomAccessEdges.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/edge/TestStrictRandomAccessEdges.java b/giraph-core/src/test/java/org/apache/giraph/edge/TestStrictRandomAccessEdges.java
new file mode 100644
index 0000000..e6daa94
--- /dev/null
+++ b/giraph-core/src/test/java/org/apache/giraph/edge/TestStrictRandomAccessEdges.java
@@ -0,0 +1,78 @@
+/*
+ * 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.giraph.edge;
+
+import com.google.common.collect.Lists;
+import org.apache.hadoop.io.DoubleWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.List;
+
+import static org.apache.giraph.graph.TestVertexAndEdges.instantiateVertexEdges;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+/**
+ * Tests {@link StrictRandomAccessVertexEdges} implementations.
+ */
+public class TestStrictRandomAccessEdges {
+ /** {@link StrictRandomAccessVertexEdges} classes to be tested. */
+ private Collection<Class<? extends StrictRandomAccessVertexEdges>>
+ edgesClasses = Lists.newArrayList();
+
+ @Before
+ public void setUp() {
+ edgesClasses.add(HashMapEdges.class);
+ edgesClasses.add(LongDoubleHashMapEdges.class);
+ }
+
+ /**
+ * Ensures that all {@link StrictRandomAccessVertexEdges} implementations
+ * correctly return edge values.
+ */
+ @Test
+ public void testParallelEdges() {
+ for (Class<? extends StrictRandomAccessVertexEdges> edgesClass :
+ edgesClasses) {
+ testParallelEdgesClass(edgesClass);
+ }
+ }
+
+ private void testParallelEdgesClass(
+ Class<? extends StrictRandomAccessVertexEdges> edgesClass) {
+ StrictRandomAccessVertexEdges<LongWritable, DoubleWritable> edges =
+ (StrictRandomAccessVertexEdges<LongWritable, DoubleWritable>)
+ instantiateVertexEdges(edgesClass);
+
+ // Initial edges list contains parallel edges.
+ List<Edge<LongWritable, DoubleWritable>> initialEdges = Lists.newArrayList(
+ EdgeFactory.create(new LongWritable(1), new DoubleWritable(1)),
+ EdgeFactory.create(new LongWritable(2), new DoubleWritable(2)),
+ EdgeFactory.create(new LongWritable(3), new DoubleWritable(3)),
+ EdgeFactory.create(new LongWritable(2), new DoubleWritable(20)));
+
+ edges.initialize(initialEdges);
+
+ assertEquals(3.0, edges.getEdgeValue(new LongWritable(3)).get(), 0.0);
+ assertNull(edges.getEdgeValue(new LongWritable(55)));
+ }
+}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/graph/TestVertexAndEdges.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/graph/TestVertexAndEdges.java b/giraph-core/src/test/java/org/apache/giraph/graph/TestVertexAndEdges.java
new file mode 100644
index 0000000..425abe7
--- /dev/null
+++ b/giraph-core/src/test/java/org/apache/giraph/graph/TestVertexAndEdges.java
@@ -0,0 +1,348 @@
+/*
+ * 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.giraph.graph;
+
+import com.google.common.collect.Lists;
+import org.apache.giraph.conf.GiraphConfiguration;
+import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
+import org.apache.giraph.edge.ArrayListEdges;
+import org.apache.giraph.edge.ByteArrayEdges;
+import org.apache.giraph.edge.Edge;
+import org.apache.giraph.edge.EdgeFactory;
+import org.apache.giraph.edge.HashMapEdges;
+import org.apache.giraph.edge.HashMultimapEdges;
+import org.apache.giraph.edge.LongDoubleArrayEdges;
+import org.apache.giraph.edge.LongDoubleHashMapEdges;
+import org.apache.giraph.edge.VertexEdges;
+import org.apache.giraph.time.SystemTime;
+import org.apache.giraph.time.Time;
+import org.apache.giraph.time.Times;
+import org.apache.giraph.utils.DynamicChannelBufferInputStream;
+import org.apache.giraph.utils.DynamicChannelBufferOutputStream;
+import org.apache.giraph.utils.EdgeIterables;
+import org.apache.giraph.utils.UnsafeByteArrayInputStream;
+import org.apache.giraph.utils.UnsafeByteArrayOutputStream;
+import org.apache.giraph.utils.WritableUtils;
+import org.apache.hadoop.io.DoubleWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Test {@link Vertex} functionality across the provided {@link org.apache.giraph.edge.VertexEdges}
+ * classes.
+ */
+public class TestVertexAndEdges {
+ /** Number of repetitions. */
+ public static final int REPS = 100;
+ /** {@link org.apache.giraph.edge.VertexEdges} classes to be tested. */
+ private Collection<Class<? extends VertexEdges>> edgesClasses =
+ Lists.newArrayList();
+
+ /**
+ * Dummy concrete vertex.
+ */
+ public static class TestVertex extends Vertex<LongWritable, FloatWritable,
+ DoubleWritable, LongWritable> {
+ @Override
+ public void compute(Iterable<LongWritable> messages) { }
+ }
+
+ @Before
+ public void setUp() {
+ edgesClasses.add(ByteArrayEdges.class);
+ edgesClasses.add(ArrayListEdges.class);
+ edgesClasses.add(HashMapEdges.class);
+ edgesClasses.add(HashMultimapEdges.class);
+ edgesClasses.add(LongDoubleArrayEdges.class);
+ edgesClasses.add(LongDoubleHashMapEdges.class);
+ }
+
+ private Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable>
+ instantiateVertex(Class<? extends VertexEdges> edgesClass) {
+ GiraphConfiguration giraphConfiguration = new GiraphConfiguration();
+ giraphConfiguration.setVertexClass(TestVertex.class);
+ giraphConfiguration.setVertexEdgesClass(edgesClass);
+ ImmutableClassesGiraphConfiguration immutableClassesGiraphConfiguration =
+ new ImmutableClassesGiraphConfiguration(giraphConfiguration);
+ return immutableClassesGiraphConfiguration.createVertex();
+ }
+
+ /**
+ * Test vertex instantiation, initialization, and updating the vertex value.
+ */
+ @Test
+ public void testVertexIdAndValue() {
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable> vertex =
+ instantiateVertex(ArrayListEdges.class);
+ assertNotNull(vertex);
+ vertex.initialize(new LongWritable(7), new FloatWritable(3.0f));
+ assertEquals(7, vertex.getId().get());
+ assertEquals(3.0f, vertex.getValue().get(), 0d);
+ vertex.setValue(new FloatWritable(5.5f));
+ assertEquals(5.5f, vertex.getValue().get(), 0d);
+ }
+
+ public static VertexEdges
+ instantiateVertexEdges(Class<? extends VertexEdges> edgesClass) {
+ GiraphConfiguration giraphConfiguration = new GiraphConfiguration();
+ // Needed to extract type arguments in ReflectionUtils.
+ giraphConfiguration.setVertexClass(TestVertex.class);
+ giraphConfiguration.setVertexEdgesClass(edgesClass);
+ ImmutableClassesGiraphConfiguration immutableClassesGiraphConfiguration =
+ new ImmutableClassesGiraphConfiguration(giraphConfiguration);
+ return immutableClassesGiraphConfiguration.createVertexEdges();
+ }
+
+ /**
+ * Test the provided {@link VertexEdges} implementations for instantiation,
+ * initialization, edge addition, and edge removal.
+ */
+ @Test
+ public void testEdges() {
+ for (Class<? extends VertexEdges> edgesClass : edgesClasses) {
+ testEdgesClass(edgesClass);
+ }
+ }
+
+ private void testEdgesClass(Class<? extends VertexEdges> edgesClass) {
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable> vertex =
+ instantiateVertex(edgesClass);
+ VertexEdges<LongWritable, DoubleWritable> vertexEdges =
+ instantiateVertexEdges(edgesClass);
+ assertNotNull(vertexEdges);
+
+ List<Edge<LongWritable, DoubleWritable>> edges = Lists.newLinkedList();
+ for (int i = 1000; i > 0; --i) {
+ edges.add(EdgeFactory.create(new LongWritable(i),
+ new DoubleWritable(i * 2.0)));
+ }
+
+ vertexEdges.initialize(edges);
+ vertex.initialize(new LongWritable(1), new FloatWritable(1), vertexEdges);
+
+ assertEquals(20.0, vertex.getEdgeValue(new LongWritable(10)).get(), 0.0);
+
+ assertEquals(1000, vertex.getNumEdges());
+ for (Edge<LongWritable, DoubleWritable> edge : vertex.getEdges()) {
+ assertEquals(edge.getTargetVertexId().get() * 2.0d,
+ edge.getValue().get(), 0d);
+ }
+ vertex.removeEdges(new LongWritable(500));
+ assertEquals(999, vertex.getNumEdges());
+ for (Edge<LongWritable, DoubleWritable> edge : vertex.getEdges()) {
+ assert(edge.getTargetVertexId().get() != 500);
+ }
+ }
+
+ /**
+ * Test {@link Vertex} and {@link VertexEdges} serialization.
+ * @throws IOException
+ */
+ @Test
+ public void testSerialize() throws IOException {
+ for (Class<? extends VertexEdges> edgesClass : edgesClasses) {
+ testSerializeVertexEdgesClass(edgesClass);
+ testDynamicChannelBufferSerializeVertexEdgesClass(edgesClass);
+ testUnsafeSerializeVertexEdgesClass(edgesClass);
+ }
+ }
+
+ private Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable>
+ buildVertex(Class<? extends VertexEdges> edgesClass) {
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable> vertex =
+ instantiateVertex(edgesClass);
+ VertexEdges<LongWritable, DoubleWritable> vertexEdges =
+ instantiateVertexEdges(edgesClass);
+
+ int edgesCount = 200;
+ List<Edge<LongWritable, DoubleWritable>> edges =
+ Lists.newArrayListWithCapacity(edgesCount);
+ for (int i = edgesCount; i > 0; --i) {
+ edges.add(EdgeFactory.create(new LongWritable(i),
+ new DoubleWritable(i * 2.0)));
+ }
+
+ vertexEdges.initialize(edges);
+ vertex.initialize(new LongWritable(2), new FloatWritable(3.0f),
+ vertexEdges);
+ return vertex;
+ }
+
+ private void testSerializeVertexEdgesClass(
+ Class<? extends VertexEdges> edgesClass) {
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable> vertex =
+ buildVertex(edgesClass);
+
+ long serializeNanosStart;
+ long serializeNanos = 0;
+ byte[] byteArray = null;
+ for (int i = 0; i < REPS; ++i) {
+ serializeNanosStart = SystemTime.get().getNanoseconds();
+ byteArray = WritableUtils.writeToByteArray(vertex);
+ serializeNanos += Times.getNanosecondsSince(SystemTime.get(),
+ serializeNanosStart);
+ }
+ serializeNanos /= REPS;
+ System.out.println("testSerialize: Serializing took " +
+ serializeNanos + " ns for " + byteArray.length + " bytes " +
+ (byteArray.length * 1f * Time.NS_PER_SECOND / serializeNanos) +
+ " bytes / sec for " + edgesClass.getName());
+
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable>
+ readVertex = instantiateVertex(edgesClass);
+
+ long deserializeNanosStart;
+ long deserializeNanos = 0;
+ for (int i = 0; i < REPS; ++i) {
+ deserializeNanosStart = SystemTime.get().getNanoseconds();
+ WritableUtils.readFieldsFromByteArray(byteArray, readVertex);
+ deserializeNanos += Times.getNanosecondsSince(SystemTime.get(),
+ deserializeNanosStart);
+ }
+ deserializeNanos /= REPS;
+ System.out.println("testSerialize: Deserializing took " +
+ deserializeNanos + " ns for " + byteArray.length + " bytes " +
+ (byteArray.length * 1f * Time.NS_PER_SECOND / deserializeNanos) +
+ " bytes / sec for " + edgesClass.getName());
+
+ assertEquals(vertex.getId(), readVertex.getId());
+ assertEquals(vertex.getValue(), readVertex.getValue());
+ assertTrue(EdgeIterables.sameEdges(vertex.getEdges(), readVertex.getEdges()));
+ }
+
+ private void testDynamicChannelBufferSerializeVertexEdgesClass(
+ Class<? extends VertexEdges> edgesClass)
+ throws IOException {
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable> vertex =
+ buildVertex(edgesClass);
+
+ long serializeNanosStart;
+ long serializeNanos = 0;
+ DynamicChannelBufferOutputStream outputStream = null;
+ for (int i = 0; i <
+ REPS; ++i) {
+ serializeNanosStart = SystemTime.get().getNanoseconds();
+ outputStream =
+ new DynamicChannelBufferOutputStream(32);
+ vertex.write(outputStream);
+ serializeNanos += Times.getNanosecondsSince(SystemTime.get(),
+ serializeNanosStart);
+ }
+ serializeNanos /= REPS;
+ System.out.println("testDynamicChannelBufferSerializeVertexEdgesClass: " +
+ "Serializing took " + serializeNanos + " ns for " +
+ outputStream.getDynamicChannelBuffer().writerIndex() + " bytes " +
+ (outputStream.getDynamicChannelBuffer().writerIndex() * 1f *
+ Time.NS_PER_SECOND / serializeNanos) +
+ " bytes / sec for " + edgesClass.getName());
+
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable>
+ readVertex = instantiateVertex(edgesClass);
+
+ long deserializeNanosStart;
+ long deserializeNanos = 0;
+ for (int i = 0; i < REPS; ++i) {
+ deserializeNanosStart = SystemTime.get().getNanoseconds();
+ DynamicChannelBufferInputStream inputStream = new
+ DynamicChannelBufferInputStream(
+ outputStream.getDynamicChannelBuffer());
+ readVertex.readFields(inputStream);
+ deserializeNanos += Times.getNanosecondsSince(SystemTime.get(),
+ deserializeNanosStart);
+ outputStream.getDynamicChannelBuffer().readerIndex(0);
+ }
+ deserializeNanos /= REPS;
+ System.out.println("testDynamicChannelBufferSerializeVertexEdgesClass: " +
+ "Deserializing took " + deserializeNanos + " ns for " +
+ outputStream.getDynamicChannelBuffer().writerIndex() + " bytes " +
+ (outputStream.getDynamicChannelBuffer().writerIndex() * 1f *
+ Time.NS_PER_SECOND / deserializeNanos) +
+ " bytes / sec for " + edgesClass.getName());
+
+ assertEquals(vertex.getId(), readVertex.getId());
+ assertEquals(vertex.getValue(), readVertex.getValue());
+ assertTrue(EdgeIterables.sameEdges(vertex.getEdges(), readVertex.getEdges()));
+ }
+
+ private void testUnsafeSerializeVertexEdgesClass(
+ Class<? extends VertexEdges> edgesClass)
+ throws IOException {
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable> vertex =
+ buildVertex(edgesClass);
+
+ long serializeNanosStart;
+ long serializeNanos = 0;
+ UnsafeByteArrayOutputStream outputStream = null;
+ for (int i = 0; i <
+ REPS; ++i) {
+ serializeNanosStart = SystemTime.get().getNanoseconds();
+ outputStream =
+ new UnsafeByteArrayOutputStream(32);
+ vertex.write(outputStream);
+ serializeNanos += Times.getNanosecondsSince(SystemTime.get(),
+ serializeNanosStart);
+ }
+ serializeNanos /= REPS;
+ System.out.println("testUnsafeSerializeVertexEdgesClass: " +
+ "Serializing took " +
+ serializeNanos +
+ " ns for " + outputStream.getPos()
+ + " bytes " +
+ (outputStream.getPos() * 1f *
+ Time.NS_PER_SECOND / serializeNanos) +
+ " bytes / sec for " + edgesClass.getName());
+
+ Vertex<LongWritable, FloatWritable, DoubleWritable, LongWritable>
+ readVertex = instantiateVertex(edgesClass);
+
+ long deserializeNanosStart;
+ long deserializeNanos = 0;
+ for (int i = 0; i < REPS; ++i) {
+ deserializeNanosStart = SystemTime.get().getNanoseconds();
+ UnsafeByteArrayInputStream inputStream = new
+ UnsafeByteArrayInputStream(
+ outputStream.getByteArray(), 0, outputStream.getPos());
+ readVertex.readFields(inputStream);
+ deserializeNanos += Times.getNanosecondsSince(SystemTime.get(),
+ deserializeNanosStart);
+ }
+ deserializeNanos /= REPS;
+ System.out.println("testUnsafeSerializeVertexEdgesClass: " +
+ "Deserializing took " +
+ deserializeNanos +
+ " ns for " + outputStream.getPos() +
+ " bytes " +
+ (outputStream.getPos() * 1f *
+ Time.NS_PER_SECOND / deserializeNanos) +
+ " bytes / sec for " + edgesClass.getName());
+
+ assertEquals(vertex.getId(), readVertex.getId());
+ assertEquals(vertex.getValue(), readVertex.getValue());
+ assertTrue(EdgeIterables.sameEdges(vertex.getEdges(), readVertex.getEdges()));
+ }
+}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/io/TestAdjacencyListTextVertexOutputFormat.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/io/TestAdjacencyListTextVertexOutputFormat.java b/giraph-core/src/test/java/org/apache/giraph/io/TestAdjacencyListTextVertexOutputFormat.java
index 036924f..60bfac1 100644
--- a/giraph-core/src/test/java/org/apache/giraph/io/TestAdjacencyListTextVertexOutputFormat.java
+++ b/giraph-core/src/test/java/org/apache/giraph/io/TestAdjacencyListTextVertexOutputFormat.java
@@ -17,20 +17,17 @@
*/
package org.apache.giraph.io;
-import org.apache.giraph.graph.Edge;
-import org.apache.giraph.graph.EdgeFactory;
+import com.google.common.collect.Lists;
import org.apache.giraph.io.formats.AdjacencyListTextVertexOutputFormat;
-import org.apache.giraph.vertex.Vertex;
+import org.apache.giraph.edge.Edge;
+import org.apache.giraph.edge.EdgeFactory;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
-import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.mapreduce.RecordWriter;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.junit.Test;
-import org.mockito.Matchers;
-
-import com.google.common.collect.Lists;
import java.io.IOException;
import java.util.ArrayList;
@@ -76,7 +73,6 @@ public class TestAdjacencyListTextVertexOutputFormat extends AdjacencyListTextVe
Text expected = new Text("The Beautiful South\t32.2");
verify(tw).write(expected, null);
verify(vertex, times(1)).getEdges();
- verify(vertex, times(0)).getEdgeValue(Matchers.<WritableComparable>any());
}
@Test
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/io/TestEdgeInput.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/io/TestEdgeInput.java b/giraph-core/src/test/java/org/apache/giraph/io/TestEdgeInput.java
index c080622..55c0c86 100644
--- a/giraph-core/src/test/java/org/apache/giraph/io/TestEdgeInput.java
+++ b/giraph-core/src/test/java/org/apache/giraph/io/TestEdgeInput.java
@@ -18,6 +18,8 @@
package org.apache.giraph.io;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
import org.apache.giraph.BspCase;
import org.apache.giraph.conf.GiraphClasses;
import org.apache.giraph.io.formats.IdWithValueTextOutputFormat;
@@ -25,14 +27,12 @@ import org.apache.giraph.io.formats.IntIntTextVertexValueInputFormat;
import org.apache.giraph.io.formats.IntNullReverseTextEdgeInputFormat;
import org.apache.giraph.io.formats.IntNullTextEdgeInputFormat;
import org.apache.giraph.utils.InternalVertexRunner;
-import org.apache.giraph.vertex.EdgeListVertex;
+import org.apache.giraph.edge.ByteArrayEdges;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.junit.Test;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-
import java.io.IOException;
import java.util.Map;
@@ -60,6 +60,7 @@ public class TestEdgeInput extends BspCase {
GiraphClasses classes = new GiraphClasses();
classes.setVertexClass(TestVertexWithNumEdges.class);
+ classes.setVertexEdgesClass(ByteArrayEdges.class);
classes.setEdgeInputFormatClass(IntNullTextEdgeInputFormat.class);
classes.setVertexOutputFormatClass(IdWithValueTextOutputFormat.class);
Map<String, String> params = ImmutableMap.of();
@@ -90,6 +91,7 @@ public class TestEdgeInput extends BspCase {
GiraphClasses classes = new GiraphClasses();
classes.setVertexClass(TestVertexWithNumEdges.class);
+ classes.setVertexEdgesClass(ByteArrayEdges.class);
classes.setEdgeInputFormatClass(IntNullReverseTextEdgeInputFormat.class);
classes.setVertexOutputFormatClass(IdWithValueTextOutputFormat.class);
Map<String, String> params = ImmutableMap.of();
@@ -127,6 +129,7 @@ public class TestEdgeInput extends BspCase {
GiraphClasses classes = new GiraphClasses();
classes.setVertexClass(TestVertexDoNothing.class);
+ classes.setVertexEdgesClass(ByteArrayEdges.class);
classes.setVertexInputFormatClass(IntIntTextVertexValueInputFormat.class);
classes.setEdgeInputFormatClass(IntNullTextEdgeInputFormat.class);
classes.setVertexOutputFormatClass(IdWithValueTextOutputFormat.class);
@@ -151,6 +154,7 @@ public class TestEdgeInput extends BspCase {
classes = new GiraphClasses();
classes.setVertexClass(TestVertexWithNumEdges.class);
+ classes.setVertexEdgesClass(ByteArrayEdges.class);
classes.setVertexInputFormatClass(IntIntTextVertexValueInputFormat.class);
classes.setEdgeInputFormatClass(IntNullTextEdgeInputFormat.class);
classes.setVertexOutputFormatClass(IdWithValueTextOutputFormat.class);
@@ -168,8 +172,8 @@ public class TestEdgeInput extends BspCase {
assertEquals(1, (int) values.get(5));
}
- public static class TestVertexWithNumEdges extends EdgeListVertex<IntWritable,
- IntWritable, NullWritable, NullWritable> {
+ public static class TestVertexWithNumEdges extends Vertex<IntWritable,
+ IntWritable, NullWritable, NullWritable> {
@Override
public void compute(Iterable<NullWritable> messages) throws IOException {
setValue(new IntWritable(getNumEdges()));
@@ -177,7 +181,7 @@ public class TestEdgeInput extends BspCase {
}
}
- public static class TestVertexDoNothing extends EdgeListVertex<IntWritable,
+ public static class TestVertexDoNothing extends Vertex<IntWritable,
IntWritable, NullWritable, NullWritable> {
@Override
public void compute(Iterable<NullWritable> messages) throws IOException {
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/io/TestIdWithValueTextOutputFormat.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/io/TestIdWithValueTextOutputFormat.java b/giraph-core/src/test/java/org/apache/giraph/io/TestIdWithValueTextOutputFormat.java
index e770338..3fb4bbe 100644
--- a/giraph-core/src/test/java/org/apache/giraph/io/TestIdWithValueTextOutputFormat.java
+++ b/giraph-core/src/test/java/org/apache/giraph/io/TestIdWithValueTextOutputFormat.java
@@ -18,26 +18,24 @@
package org.apache.giraph.io;
-import org.apache.giraph.vertex.Vertex;
import org.apache.giraph.io.formats.IdWithValueTextOutputFormat;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
-import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.mapreduce.RecordWriter;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.junit.Test;
-import org.mockito.Matchers;
+
+import java.io.IOException;
+import java.util.ArrayList;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import java.io.IOException;
-import java.util.ArrayList;
-
public class TestIdWithValueTextOutputFormat extends IdWithValueTextOutputFormat<Text, DoubleWritable, Writable> {
@Test
public void testHappyPath() throws IOException, InterruptedException {
@@ -91,6 +89,5 @@ public class TestIdWithValueTextOutputFormat extends IdWithValueTextOutputFormat
verify(tw).write(expected, null);
verify(vertex, times(0)).getEdges();
- verify(vertex, times(0)).getEdgeValue(Matchers.<WritableComparable>any());
}
}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/io/TestJsonBase64Format.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/io/TestJsonBase64Format.java b/giraph-core/src/test/java/org/apache/giraph/io/TestJsonBase64Format.java
index b3c63f6..0117ce9 100644
--- a/giraph-core/src/test/java/org/apache/giraph/io/TestJsonBase64Format.java
+++ b/giraph-core/src/test/java/org/apache/giraph/io/TestJsonBase64Format.java
@@ -17,16 +17,16 @@
*/
package org.apache.giraph.io;
+
import org.apache.giraph.BspCase;
-import org.apache.giraph.benchmark.EdgeListVertexPageRankBenchmark;
-import org.apache.giraph.benchmark.PageRankComputation;
+import org.apache.giraph.benchmark.PageRankVertex;
import org.apache.giraph.conf.GiraphClasses;
-import org.apache.giraph.io.formats.PseudoRandomInputFormatConstants;
-import org.apache.giraph.job.GiraphJob;
import org.apache.giraph.io.formats.GiraphFileInputFormat;
import org.apache.giraph.io.formats.JsonBase64VertexInputFormat;
import org.apache.giraph.io.formats.JsonBase64VertexOutputFormat;
+import org.apache.giraph.io.formats.PseudoRandomInputFormatConstants;
import org.apache.giraph.io.formats.PseudoRandomVertexInputFormat;
+import org.apache.giraph.job.GiraphJob;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
@@ -62,7 +62,7 @@ public class TestJsonBase64Format extends BspCase {
Path outputPath = getTempPath(getCallingMethodName());
GiraphClasses classes = new GiraphClasses();
- classes.setVertexClass(EdgeListVertexPageRankBenchmark.class);
+ classes.setVertexClass(PageRankVertex.class);
classes.setVertexInputFormatClass(PseudoRandomVertexInputFormat.class);
classes.setVertexOutputFormatClass(JsonBase64VertexOutputFormat.class);
GiraphJob job = prepareJob(getCallingMethodName(), classes, outputPath);
@@ -70,24 +70,24 @@ public class TestJsonBase64Format extends BspCase {
PseudoRandomInputFormatConstants.AGGREGATE_VERTICES, 101);
job.getConfiguration().setLong(
PseudoRandomInputFormatConstants.EDGES_PER_VERTEX, 2);
- job.getConfiguration().setInt(PageRankComputation.SUPERSTEP_COUNT, 2);
+ job.getConfiguration().setInt(PageRankVertex.SUPERSTEP_COUNT, 2);
assertTrue(job.run(true));
Path outputPath2 = getTempPath(getCallingMethodName() + "2");
classes = new GiraphClasses();
- classes.setVertexClass(EdgeListVertexPageRankBenchmark.class);
+ classes.setVertexClass(PageRankVertex.class);
classes.setVertexInputFormatClass(JsonBase64VertexInputFormat.class);
classes.setVertexOutputFormatClass(JsonBase64VertexOutputFormat.class);
job = prepareJob(getCallingMethodName(), classes, outputPath2);
- job.getConfiguration().setInt(PageRankComputation.SUPERSTEP_COUNT, 3);
+ job.getConfiguration().setInt(PageRankVertex.SUPERSTEP_COUNT, 3);
GiraphFileInputFormat.addVertexInputPath(
job.getInternalJob().getConfiguration(), outputPath);
assertTrue(job.run(true));
Path outputPath3 = getTempPath(getCallingMethodName() + "3");
classes = new GiraphClasses();
- classes.setVertexClass(EdgeListVertexPageRankBenchmark.class);
+ classes.setVertexClass(PageRankVertex.class);
classes.setVertexInputFormatClass(PseudoRandomVertexInputFormat.class);
classes.setVertexOutputFormatClass(JsonBase64VertexOutputFormat.class);
job = prepareJob(getCallingMethodName(), classes, outputPath3);
@@ -95,7 +95,7 @@ public class TestJsonBase64Format extends BspCase {
PseudoRandomInputFormatConstants.AGGREGATE_VERTICES, 101);
job.getConfiguration().setLong(
PseudoRandomInputFormatConstants.EDGES_PER_VERTEX, 2);
- job.getConfiguration().setInt(PageRankComputation.SUPERSTEP_COUNT, 5);
+ job.getConfiguration().setInt(PageRankVertex.SUPERSTEP_COUNT, 5);
assertTrue(job.run(true));
Configuration conf = job.getConfiguration();
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/io/TestLongDoubleDoubleAdjacencyListVertexInputFormat.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/io/TestLongDoubleDoubleAdjacencyListVertexInputFormat.java b/giraph-core/src/test/java/org/apache/giraph/io/TestLongDoubleDoubleAdjacencyListVertexInputFormat.java
index 7ef8eae..6a0b912 100644
--- a/giraph-core/src/test/java/org/apache/giraph/io/TestLongDoubleDoubleAdjacencyListVertexInputFormat.java
+++ b/giraph-core/src/test/java/org/apache/giraph/io/TestLongDoubleDoubleAdjacencyListVertexInputFormat.java
@@ -18,19 +18,17 @@
package org.apache.giraph.io;
-import org.apache.giraph.conf.GiraphConstants;
-import org.apache.giraph.graph.EdgeFactory;
+import org.apache.giraph.conf.GiraphConfiguration;
+import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
import org.apache.giraph.graph.GraphState;
import org.apache.giraph.io.formats.AdjacencyListTextVertexInputFormat;
import org.apache.giraph.io.formats.LongDoubleDoubleAdjacencyListVertexInputFormat;
-import org.apache.giraph.vertex.EdgeListVertex;
-import org.apache.giraph.vertex.Vertex;
-import org.apache.hadoop.conf.Configuration;
+import org.apache.giraph.edge.EdgeFactory;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
-import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
@@ -50,7 +48,8 @@ import static org.mockito.Mockito.when;
public class TestLongDoubleDoubleAdjacencyListVertexInputFormat extends LongDoubleDoubleAdjacencyListVertexInputFormat<BooleanWritable> {
private RecordReader<LongWritable, Text> rr;
- private Configuration conf;
+ private ImmutableClassesGiraphConfiguration<LongWritable, DoubleWritable,
+ DoubleWritable, BooleanWritable> conf;
private TaskAttemptContext tac;
private GraphState<LongWritable, DoubleWritable, DoubleWritable, BooleanWritable> graphState;
@@ -58,10 +57,10 @@ public class TestLongDoubleDoubleAdjacencyListVertexInputFormat extends LongDoub
public void setUp() throws IOException, InterruptedException {
rr = mock(RecordReader.class);
when(rr.nextKeyValue()).thenReturn(true);
- conf = new Configuration();
- conf.setClass(GiraphConstants.VERTEX_CLASS, DummyVertex.class, Vertex.class);
- conf.setClass(GiraphConstants.VERTEX_ID_CLASS, LongWritable.class, Writable.class);
- conf.setClass(GiraphConstants.VERTEX_VALUE_CLASS, DoubleWritable.class, Writable.class);
+ GiraphConfiguration giraphConf = new GiraphConfiguration();
+ giraphConf.setVertexClass(DummyVertex.class);
+ conf = new ImmutableClassesGiraphConfiguration<LongWritable, DoubleWritable,
+ DoubleWritable, BooleanWritable>(giraphConf);
graphState = mock(GraphState.class);
tac = mock(TaskAttemptContext.class);
when(tac.getConfiguration()).thenReturn(conf);
@@ -163,8 +162,7 @@ public class TestLongDoubleDoubleAdjacencyListVertexInputFormat extends LongDoub
assertEquals(vertex.getNumEdges(), 1);
}
- public static class DummyVertex
- extends EdgeListVertex<LongWritable, DoubleWritable,
+ public static class DummyVertex extends Vertex<LongWritable, DoubleWritable,
DoubleWritable, BooleanWritable> {
@Override
public void compute(Iterable<BooleanWritable> messages) throws IOException {
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/io/TestTextDoubleDoubleAdjacencyListVertexInputFormat.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/io/TestTextDoubleDoubleAdjacencyListVertexInputFormat.java b/giraph-core/src/test/java/org/apache/giraph/io/TestTextDoubleDoubleAdjacencyListVertexInputFormat.java
index d1e267e..6d81f51 100644
--- a/giraph-core/src/test/java/org/apache/giraph/io/TestTextDoubleDoubleAdjacencyListVertexInputFormat.java
+++ b/giraph-core/src/test/java/org/apache/giraph/io/TestTextDoubleDoubleAdjacencyListVertexInputFormat.java
@@ -17,16 +17,15 @@
*/
package org.apache.giraph.io;
-import org.apache.giraph.bsp.BspUtils;
-import org.apache.giraph.conf.GiraphConstants;
-import org.apache.giraph.graph.Edge;
-import org.apache.giraph.graph.EdgeFactory;
+import org.apache.giraph.conf.GiraphConfiguration;
+import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
import org.apache.giraph.graph.GraphState;
import org.apache.giraph.io.formats.AdjacencyListTextVertexInputFormat;
import org.apache.giraph.io.formats.TextDoubleDoubleAdjacencyListVertexInputFormat;
-import org.apache.giraph.vertex.EdgeListVertex;
-import org.apache.giraph.vertex.Vertex;
-import org.apache.hadoop.conf.Configuration;
+import org.apache.giraph.utils.EdgeIterables;
+import org.apache.giraph.edge.Edge;
+import org.apache.giraph.edge.EdgeFactory;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.LongWritable;
@@ -39,14 +38,9 @@ import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.junit.Before;
import org.junit.Test;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -57,7 +51,8 @@ import static org.mockito.Mockito.when;
public class TestTextDoubleDoubleAdjacencyListVertexInputFormat extends TextDoubleDoubleAdjacencyListVertexInputFormat<BooleanWritable> {
private RecordReader<LongWritable, Text> rr;
- private Configuration conf;
+ private ImmutableClassesGiraphConfiguration<Text, DoubleWritable,
+ DoubleWritable, BooleanWritable> conf;
private TaskAttemptContext tac;
private GraphState<Text, DoubleWritable, DoubleWritable, BooleanWritable> graphState;
@@ -65,10 +60,10 @@ public class TestTextDoubleDoubleAdjacencyListVertexInputFormat extends TextDoub
public void setUp() throws IOException, InterruptedException {
rr = mock(RecordReader.class);
when(rr.nextKeyValue()).thenReturn(true).thenReturn(false);
- conf = new Configuration();
- conf.setClass(GiraphConstants.VERTEX_CLASS, DummyVertex.class, Vertex.class);
- conf.setClass(GiraphConstants.VERTEX_ID_CLASS, Text.class, Writable.class);
- conf.setClass(GiraphConstants.VERTEX_VALUE_CLASS, DoubleWritable.class, Writable.class);
+ GiraphConfiguration giraphConf = new GiraphConfiguration();
+ giraphConf.setVertexClass(DummyVertex.class);
+ conf = new ImmutableClassesGiraphConfiguration<Text, DoubleWritable,
+ DoubleWritable, BooleanWritable>(giraphConf);
graphState = mock(GraphState.class);
tac = mock(TaskAttemptContext.class);
when(tac.getConfiguration()).thenReturn(conf);
@@ -133,31 +128,26 @@ public class TestTextDoubleDoubleAdjacencyListVertexInputFormat extends TextDoub
}
public static <I extends WritableComparable, V extends Writable,
- E extends Writable, M extends Writable> void assertValidVertex(Configuration conf,
- GraphState<I, V, E, M> graphState, Vertex<I, V, E, M> actual,
- I expectedId, V expectedValue, Edge<I, E>... edges)
- throws Exception {
- Vertex<I, V, E, M> expected = BspUtils.createVertex(conf);
+ E extends WritableComparable, M extends Writable> void assertValidVertex(
+ ImmutableClassesGiraphConfiguration<I, V, E, M> conf,
+ GraphState<I, V, E, M> graphState,
+ Vertex<I, V, E, M> actual,
+ I expectedId,
+ V expectedValue,
+ Edge<I, E>... edges) throws Exception {
+ Vertex<I, V, E, M> expected = conf.createVertex();
setGraphState(expected, graphState);
expected.initialize(expectedId, expectedValue, Arrays.asList(edges));
assertValid(expected, actual);
}
- public static
- <I extends WritableComparable, V extends Writable, E extends Writable, M extends Writable> void
- assertValid(Vertex<I, V, E, M> expected, Vertex<I, V, E, M> actual) {
+ public static <I extends WritableComparable, V extends Writable,
+ E extends WritableComparable, M extends Writable> void assertValid(
+ Vertex<I, V, E, M> expected, Vertex<I, V, E, M> actual) {
assertEquals(expected.getId(), actual.getId());
assertEquals(expected.getValue(), actual.getValue());
assertEquals(expected.getTotalNumEdges(), actual.getTotalNumEdges());
- List<Edge<I, E>> expectedEdges = Lists.newArrayList();
- List<Edge<I, E>> actualEdges = Lists.newArrayList();
- Iterables.addAll(actualEdges, actual.getEdges());
- Iterables.addAll(expectedEdges, expected.getEdges());
- Collections.sort(expectedEdges);
- Collections.sort(actualEdges);
- for(int i = 0; i < expectedEdges.size(); i++) {
- assertEquals(expectedEdges.get(i), actualEdges.get(i));
- }
+ assertTrue(EdgeIterables.equals(expected.getEdges(), actual.getEdges()));
}
@Test
@@ -172,7 +162,8 @@ public class TestTextDoubleDoubleAdjacencyListVertexInputFormat extends TextDoub
Vertex<Text, DoubleWritable, DoubleWritable, BooleanWritable> vertex =
vr.getCurrentVertex();
setGraphState(vertex, graphState);
- assertValidVertex(conf, graphState, vertex, new Text("Hi"), new DoubleWritable(0),
+ assertValidVertex(conf, graphState, vertex,
+ new Text("Hi"), new DoubleWritable(0),
EdgeFactory.create(new Text("Ciao"), new DoubleWritable(1.123d)),
EdgeFactory.create(new Text("Bomdia"), new DoubleWritable(2.234d)),
EdgeFactory.create(new Text("Ola"), new DoubleWritable(3.345d)));
@@ -221,13 +212,13 @@ public class TestTextDoubleDoubleAdjacencyListVertexInputFormat extends TextDoub
Vertex<Text, DoubleWritable, DoubleWritable, BooleanWritable> vertex =
vr.getCurrentVertex();
setGraphState(vertex, graphState);
- assertValidVertex(conf, graphState, vertex, new Text("alpha"), new DoubleWritable(42d),
+ assertValidVertex(conf, graphState, vertex,
+ new Text("alpha"), new DoubleWritable(42d),
EdgeFactory.create(new Text("beta"), new DoubleWritable(99d)));
assertEquals(vertex.getNumEdges(), 1);
}
- public static class DummyVertex
- extends EdgeListVertex<Text, DoubleWritable,
+ public static class DummyVertex extends Vertex<Text, DoubleWritable,
DoubleWritable, BooleanWritable> {
@Override
public void compute(Iterable<BooleanWritable> messages) throws IOException {
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/master/TestMasterObserver.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/master/TestMasterObserver.java b/giraph-core/src/test/java/org/apache/giraph/master/TestMasterObserver.java
index f67a6e0..ba43d8e 100644
--- a/giraph-core/src/test/java/org/apache/giraph/master/TestMasterObserver.java
+++ b/giraph-core/src/test/java/org/apache/giraph/master/TestMasterObserver.java
@@ -18,24 +18,26 @@
package org.apache.giraph.master;
+import com.google.common.collect.Maps;
import org.apache.giraph.conf.GiraphClasses;
import org.apache.giraph.conf.GiraphConstants;
-import org.apache.giraph.vertex.IntNullNullNullVertex;
import org.apache.giraph.io.formats.IntNullNullNullTextInputFormat;
import org.apache.giraph.utils.InternalVertexRunner;
+import org.apache.giraph.edge.ByteArrayEdges;
+import org.apache.giraph.graph.Vertex;
+import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.util.StringUtils;
import org.junit.Test;
-import com.google.common.collect.Maps;
-
import java.io.IOException;
import java.util.Map;
import static org.junit.Assert.assertEquals;
public class TestMasterObserver {
- public static class NoOpVertex extends IntNullNullNullVertex {
+ public static class NoOpVertex extends Vertex<IntWritable, NullWritable,
+ NullWritable, NullWritable> {
private int count = 0;
@Override
@@ -90,6 +92,7 @@ public class TestMasterObserver {
GiraphClasses classes = new GiraphClasses();
classes.setVertexClass(NoOpVertex.class);
+ classes.setVertexEdgesClass(ByteArrayEdges.class);
classes.setVertexInputFormatClass(IntNullNullNullTextInputFormat.class);
InternalVertexRunner.run(classes, params, graph);
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/partition/TestGiraphTransferRegulator.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/partition/TestGiraphTransferRegulator.java b/giraph-core/src/test/java/org/apache/giraph/partition/TestGiraphTransferRegulator.java
index 2671708..bdcc49e 100644
--- a/giraph-core/src/test/java/org/apache/giraph/partition/TestGiraphTransferRegulator.java
+++ b/giraph-core/src/test/java/org/apache/giraph/partition/TestGiraphTransferRegulator.java
@@ -17,11 +17,12 @@
*/
package org.apache.giraph.partition;
-import org.apache.giraph.graph.Edge;
-import org.apache.giraph.graph.EdgeFactory;
+import org.apache.giraph.edge.ArrayListEdges;
+import org.apache.giraph.edge.EdgeFactory;
+import org.apache.giraph.edge.VertexEdges;
import org.apache.giraph.graph.GiraphTransferRegulator;
import org.apache.giraph.job.GiraphJob;
-import org.apache.giraph.vertex.EdgeListVertex;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.IntWritable;
@@ -29,10 +30,7 @@ import org.apache.hadoop.io.LongWritable;
import org.junit.Before;
import org.junit.Test;
-import com.google.common.collect.Lists;
-
import java.io.IOException;
-import java.util.List;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -46,14 +44,13 @@ public class TestGiraphTransferRegulator {
/** Job filled in by setup() */
private GiraphJob job;
/** Instantiated vertex filled in from setup() */
- private IFDLEdgeListVertex vertex = new IFDLEdgeListVertex();
+ private TestVertex vertex = new TestVertex();
/**
- * Simple instantiable class that extends
- * {@link org.apache.giraph.vertex.EdgeListVertex}.
+ * Dummy vertex.
*/
- public static class IFDLEdgeListVertex extends
- EdgeListVertex<IntWritable, FloatWritable, DoubleWritable, LongWritable> {
+ public static class TestVertex extends
+ Vertex<IntWritable, FloatWritable, DoubleWritable, LongWritable> {
@Override
public void compute(Iterable<LongWritable> messages) throws IOException { }
}
@@ -65,7 +62,7 @@ public class TestGiraphTransferRegulator {
} catch (IOException e) {
throw new RuntimeException("setUp: Failed", e);
}
- job.getConfiguration().setVertexClass(IFDLEdgeListVertex.class);
+ job.getConfiguration().setVertexClass(TestVertex.class);
}
@Test
@@ -74,11 +71,13 @@ public class TestGiraphTransferRegulator {
.setInt(GiraphTransferRegulator.MAX_VERTICES_PER_TRANSFER, 1);
job.getConfiguration()
.setInt(GiraphTransferRegulator.MAX_EDGES_PER_TRANSFER, 3);
- List<Edge<IntWritable, DoubleWritable>> edges = Lists.newLinkedList();
+ VertexEdges<IntWritable, DoubleWritable> edges =
+ new ArrayListEdges<IntWritable, DoubleWritable>();
+ edges.initialize(3);
edges.add(EdgeFactory.create(new IntWritable(2), new DoubleWritable(22)));
edges.add(EdgeFactory.create(new IntWritable(3), new DoubleWritable(33)));
edges.add(EdgeFactory.create(new IntWritable(4), new DoubleWritable(44)));
- vertex.initialize(null, null, edges);
+ vertex.initialize(new IntWritable(1), new FloatWritable(1), edges);
GiraphTransferRegulator gtr =
new GiraphTransferRegulator(job.getConfiguration());
PartitionOwner owner = mock(PartitionOwner.class);
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/partition/TestPartitionStores.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/partition/TestPartitionStores.java b/giraph-core/src/test/java/org/apache/giraph/partition/TestPartitionStores.java
index b4cddf6..d403dd8 100644
--- a/giraph-core/src/test/java/org/apache/giraph/partition/TestPartitionStores.java
+++ b/giraph-core/src/test/java/org/apache/giraph/partition/TestPartitionStores.java
@@ -18,24 +18,20 @@
package org.apache.giraph.partition;
+import com.google.common.collect.Iterables;
import org.apache.giraph.conf.GiraphConfiguration;
import org.apache.giraph.conf.GiraphConstants;
import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
-import org.apache.giraph.vertex.IntIntNullIntVertex;
-import org.apache.giraph.vertex.Vertex;
import org.apache.giraph.utils.UnsafeByteArrayInputStream;
import org.apache.giraph.utils.UnsafeByteArrayOutputStream;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Mapper;
import org.junit.Before;
import org.junit.Test;
-import com.google.common.collect.Iterables;
-
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -46,19 +42,23 @@ import static org.mockito.Mockito.mock;
* Test case for partition stores.
*/
public class TestPartitionStores {
- private ImmutableClassesGiraphConfiguration conf;
+ private ImmutableClassesGiraphConfiguration<IntWritable, IntWritable,
+ NullWritable, IntWritable> conf;
private Mapper<?, ?, ?, ?>.Context context;
- public static class MyVertex extends IntIntNullIntVertex {
+ public static class MyVertex extends Vertex<IntWritable, IntWritable,
+ NullWritable, IntWritable> {
@Override
public void compute(Iterable<IntWritable> messages) throws IOException {}
}
private Partition<IntWritable, IntWritable, NullWritable,
- IntWritable> createPartition(ImmutableClassesGiraphConfiguration conf,
- Integer id,
- Vertex<IntWritable, IntWritable,
- NullWritable, IntWritable>... vertices) {
+ IntWritable> createPartition(
+ ImmutableClassesGiraphConfiguration<IntWritable, IntWritable,
+ NullWritable, IntWritable> conf,
+ Integer id,
+ Vertex<IntWritable, IntWritable, NullWritable,
+ IntWritable>... vertices) {
Partition<IntWritable, IntWritable, NullWritable, IntWritable> partition =
conf.createPartition(id, context);
for (Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v :
@@ -72,7 +72,8 @@ public class TestPartitionStores {
public void setUp() {
GiraphConfiguration configuration = new GiraphConfiguration();
configuration.setVertexClass(MyVertex.class);
- conf = new ImmutableClassesGiraphConfiguration(configuration);
+ conf = new ImmutableClassesGiraphConfiguration<IntWritable, IntWritable,
+ NullWritable, IntWritable>(configuration);
context = mock(Mapper.Context.class);
}
@@ -89,25 +90,25 @@ public class TestPartitionStores {
public void testUnsafePartitionSerializationClass() throws IOException {
conf.setPartitionClass(ByteArrayPartition.class);
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v1 =
- new MyVertex();
+ conf.createVertex();
v1.initialize(new IntWritable(1), new IntWritable(1));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v2 =
- new MyVertex();
+ conf.createVertex();
v2.initialize(new IntWritable(2), new IntWritable(2));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v3 =
- new MyVertex();
+ conf.createVertex();
v3.initialize(new IntWritable(3), new IntWritable(3));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v4 =
- new MyVertex();
+ conf.createVertex();
v4.initialize(new IntWritable(4), new IntWritable(4));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v5 =
- new MyVertex();
+ conf.createVertex();
v5.initialize(new IntWritable(5), new IntWritable(5));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v6 =
- new MyVertex();
+ conf.createVertex();
v6.initialize(new IntWritable(6), new IntWritable(6));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v7 =
- new MyVertex();
+ conf.createVertex();
v7.initialize(new IntWritable(7), new IntWritable(7));
Partition<IntWritable, IntWritable, NullWritable,
@@ -158,27 +159,28 @@ public class TestPartitionStores {
public void testReadWrite(
PartitionStore<IntWritable, IntWritable,
NullWritable, IntWritable> partitionStore,
- ImmutableClassesGiraphConfiguration conf) {
+ ImmutableClassesGiraphConfiguration<IntWritable, IntWritable,
+ NullWritable, IntWritable> conf) {
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v1 =
- new MyVertex();
+ conf.createVertex();
v1.initialize(new IntWritable(1), new IntWritable(1));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v2 =
- new MyVertex();
+ conf.createVertex();
v2.initialize(new IntWritable(2), new IntWritable(2));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v3 =
- new MyVertex();
+ conf.createVertex();
v3.initialize(new IntWritable(3), new IntWritable(3));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v4 =
- new MyVertex();
+ conf.createVertex();
v4.initialize(new IntWritable(4), new IntWritable(4));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v5 =
- new MyVertex();
+ conf.createVertex();
v5.initialize(new IntWritable(5), new IntWritable(5));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v6 =
- new MyVertex();
+ conf.createVertex();
v6.initialize(new IntWritable(7), new IntWritable(7));
Vertex<IntWritable, IntWritable, NullWritable, IntWritable> v7 =
- new MyVertex();
+ conf.createVertex();
v7.initialize(new IntWritable(7), new IntWritable(7));
partitionStore.addPartition(createPartition(conf, 1, v1, v2));
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/utils/ComparisonUtilsTest.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/utils/ComparisonUtilsTest.java b/giraph-core/src/test/java/org/apache/giraph/utils/ComparisonUtilsTest.java
deleted file mode 100644
index 789c9ee..0000000
--- a/giraph-core/src/test/java/org/apache/giraph/utils/ComparisonUtilsTest.java
+++ /dev/null
@@ -1,75 +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.giraph.utils;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-import com.google.common.collect.Lists;
-
-public class ComparisonUtilsTest {
-
- @Test
- public void testEquality() {
- Iterable<String> one = Lists.newArrayList("one", "two", "three");
- Iterable<String> two = Lists.newArrayList("one", "two", "three");
-
- assertTrue(ComparisonUtils.equal(one, one));
- assertTrue(ComparisonUtils.equal(one, two));
- assertTrue(ComparisonUtils.equal(two, two));
- assertTrue(ComparisonUtils.equal(two, one));
- }
-
- @Test
- public void testEqualityEmpty() {
- Iterable<String> one = Lists.newArrayList();
- Iterable<String> two = Lists.newArrayList();
-
- assertTrue(ComparisonUtils.equal(one, one));
- assertTrue(ComparisonUtils.equal(one, two));
- assertTrue(ComparisonUtils.equal(two, two));
- assertTrue(ComparisonUtils.equal(two, one));
- }
-
- @Test
- public void testInEquality() {
- Iterable<String> one = Lists.newArrayList("one", "two", "three");
- Iterable<String> two = Lists.newArrayList("two", "three", "four");
- Iterable<String> three = Lists.newArrayList();
-
- assertFalse(ComparisonUtils.equal(one, two));
- assertFalse(ComparisonUtils.equal(one, three));
- assertFalse(ComparisonUtils.equal(two, one));
- assertFalse(ComparisonUtils.equal(two, three));
- assertFalse(ComparisonUtils.equal(three, one));
- assertFalse(ComparisonUtils.equal(three, two));
- }
-
- @Test
- public void testInEqualityDifferentLengths() {
- Iterable<String> one = Lists.newArrayList("one", "two", "three");
- Iterable<String> two = Lists.newArrayList("one", "two", "three", "four");
-
- assertFalse(ComparisonUtils.equal(one, two));
- assertFalse(ComparisonUtils.equal(two, one));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/utils/MockUtils.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/utils/MockUtils.java b/giraph-core/src/test/java/org/apache/giraph/utils/MockUtils.java
index 04c7a3c..3a0e144 100644
--- a/giraph-core/src/test/java/org/apache/giraph/utils/MockUtils.java
+++ b/giraph-core/src/test/java/org/apache/giraph/utils/MockUtils.java
@@ -18,15 +18,18 @@
package org.apache.giraph.utils;
-import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
import org.apache.giraph.bsp.CentralizedServiceWorker;
import org.apache.giraph.comm.ServerData;
import org.apache.giraph.comm.WorkerClientRequestProcessor;
import org.apache.giraph.comm.messages.ByteArrayMessagesPerVertexStore;
-import org.apache.giraph.vertex.Vertex;
+import org.apache.giraph.conf.GiraphConfiguration;
+import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
import org.apache.giraph.graph.GraphState;
import org.apache.giraph.partition.BasicPartitionOwner;
import org.apache.giraph.partition.PartitionOwner;
+import org.apache.giraph.edge.ArrayListEdges;
+import org.apache.giraph.edge.ConfigurableVertexEdges;
+import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Writable;
@@ -131,8 +134,18 @@ public class MockUtils {
Mockito.when(env.getGraphState().getWorkerClientRequestProcessor())
.thenReturn(env.getWorkerClientRequestProcessor());
+ GiraphConfiguration giraphConf = new GiraphConfiguration();
+ giraphConf.setVertexClass(vertex.getClass());
+ ImmutableClassesGiraphConfiguration<I, V, E, M> conf =
+ new ImmutableClassesGiraphConfiguration<I, V, E, M>(giraphConf);
+ vertex.setConf(conf);
+ ConfigurableVertexEdges<I, E> edges = new ArrayListEdges<I, E>();
+ edges.setConf(conf);
+ edges.initialize();
+
ReflectionUtils.setField(vertex, "id", vertexId);
ReflectionUtils.setField(vertex, "value", vertexValue);
+ ReflectionUtils.setField(vertex, "edges", edges);
ReflectionUtils.setField(vertex, "graphState", env.getGraphState());
ReflectionUtils.setField(vertex, "halt", isHalted);
http://git-wip-us.apache.org/repos/asf/giraph/blob/3f5009ae/giraph-core/src/test/java/org/apache/giraph/vertex/TestIntIntNullIntVertex.java
----------------------------------------------------------------------
diff --git a/giraph-core/src/test/java/org/apache/giraph/vertex/TestIntIntNullIntVertex.java b/giraph-core/src/test/java/org/apache/giraph/vertex/TestIntIntNullIntVertex.java
deleted file mode 100644
index 37e8768..0000000
--- a/giraph-core/src/test/java/org/apache/giraph/vertex/TestIntIntNullIntVertex.java
+++ /dev/null
@@ -1,78 +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.giraph.vertex;
-
-import org.apache.giraph.graph.Edge;
-import org.apache.giraph.graph.EdgeFactory;
-import org.apache.hadoop.io.IntWritable;
-import org.apache.hadoop.io.NullWritable;
-import org.junit.Test;
-
-import com.google.common.collect.Lists;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Tests {@link org.apache.giraph.vertex.IntIntNullIntVertex}.
- */
-public class TestIntIntNullIntVertex {
- /**
- * Simple instantiable class that extends {@link org.apache.giraph.vertex.IntIntNullIntVertex}.
- */
- private static class MyIntIntNullVertex extends IntIntNullIntVertex {
- @Override
- public void compute(Iterable<IntWritable> messages) throws IOException {
- }
- }
-
- @Test
- public void testSerialize() throws IOException {
- IntIntNullIntVertex vertex = new MyIntIntNullVertex();
-
- List<Edge<IntWritable, NullWritable>> edges = Lists.newLinkedList();
- edges.add(EdgeFactory.create(new IntWritable(3)));
- edges.add(EdgeFactory.create(new IntWritable(47)));
-
- vertex.initialize(new IntWritable(23), new IntWritable(7), edges);
- vertex.voteToHalt();
-
- ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- DataOutput out = new DataOutputStream(outStream);
- vertex.write(out);
-
- IntIntNullIntVertex vertex1 = new MyIntIntNullVertex();
-
- ByteArrayInputStream inStream = new ByteArrayInputStream(
- outStream.toByteArray());
- DataInput in = new DataInputStream(inStream);
- vertex1.readFields(in);
-
- assertEquals(2, vertex1.getNumEdges());
- assertEquals(true, vertex1.isHalted());
- }
-}