Updated Branches: refs/heads/trunk f1af43d72 -> d97b39665
GIRAPH-715: Fix MessageValueFactory performance regression (nitay) Project: http://git-wip-us.apache.org/repos/asf/giraph/repo Commit: http://git-wip-us.apache.org/repos/asf/giraph/commit/d97b3966 Tree: http://git-wip-us.apache.org/repos/asf/giraph/tree/d97b3966 Diff: http://git-wip-us.apache.org/repos/asf/giraph/diff/d97b3966 Branch: refs/heads/trunk Commit: d97b396654d476fb7e9c7d15d71d3553f1c48083 Parents: f1af43d Author: Nitay Joffe <[email protected]> Authored: Thu Jul 11 14:58:43 2013 -0400 Committer: Nitay Joffe <[email protected]> Committed: Thu Jul 11 21:16:57 2013 -0400 ---------------------------------------------------------------------- CHANGELOG | 2 ++ .../ImmutableClassesGiraphConfiguration.java | 18 +++++----- .../apache/giraph/factories/ValueFactories.java | 38 ++++++++++---------- 3 files changed, 31 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/giraph/blob/d97b3966/CHANGELOG ---------------------------------------------------------------------- diff --git a/CHANGELOG b/CHANGELOG index b1f44c2..8cc0945 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ Giraph Change Log Release 1.1.0 - unreleased + GIRAPH-715: Fix MessageValueFactory performance regression (nitay) + GIRAPH-709: More flexible Jython script loading (nitay) GIRAPH-708: Factories for creation of all IVEM types (nitay) http://git-wip-us.apache.org/repos/asf/giraph/blob/d97b3966/giraph-core/src/main/java/org/apache/giraph/conf/ImmutableClassesGiraphConfiguration.java ---------------------------------------------------------------------- diff --git a/giraph-core/src/main/java/org/apache/giraph/conf/ImmutableClassesGiraphConfiguration.java b/giraph-core/src/main/java/org/apache/giraph/conf/ImmutableClassesGiraphConfiguration.java index ed63192..db24423 100644 --- a/giraph-core/src/main/java/org/apache/giraph/conf/ImmutableClassesGiraphConfiguration.java +++ b/giraph-core/src/main/java/org/apache/giraph/conf/ImmutableClassesGiraphConfiguration.java @@ -26,12 +26,12 @@ import org.apache.giraph.edge.OutEdges; import org.apache.giraph.edge.ReusableEdge; import org.apache.giraph.factories.ComputationFactory; import org.apache.giraph.factories.MessageValueFactory; -import org.apache.giraph.graph.DefaultVertex; -import org.apache.giraph.graph.Computation; import org.apache.giraph.factories.ValueFactories; +import org.apache.giraph.factories.VertexValueFactory; +import org.apache.giraph.graph.Computation; +import org.apache.giraph.graph.DefaultVertex; import org.apache.giraph.graph.Vertex; import org.apache.giraph.graph.VertexResolver; -import org.apache.giraph.factories.VertexValueFactory; import org.apache.giraph.io.EdgeInputFormat; import org.apache.giraph.io.VertexInputFormat; import org.apache.giraph.io.VertexOutputFormat; @@ -103,7 +103,7 @@ public class ImmutableClassesGiraphConfiguration<I extends WritableComparable, classes = new GiraphClasses<I, V, E>(conf); useUnsafeSerialization = USE_UNSAFE_SERIALIZATION.get(this); valueFactories = new ValueFactories<I, V, E>(conf); - valueFactories.initializeAll(this); + valueFactories.initializeIVE(this); } /** @@ -653,8 +653,9 @@ public class ImmutableClassesGiraphConfiguration<I extends WritableComparable, */ public <M extends Writable> MessageValueFactory<M> getIncomingMessageValueFactory() { - MessageValueFactory<M> factory = - INCOMING_MESSAGE_VALUE_FACTORY_CLASS.newInstance(this); + Class<? extends MessageValueFactory> klass = + valueFactories.getInMsgFactoryClass(); + MessageValueFactory<M> factory = ReflectionUtils.newInstance(klass, this); factory.initialize(this); return factory; } @@ -677,8 +678,9 @@ public class ImmutableClassesGiraphConfiguration<I extends WritableComparable, */ public <M extends Writable> MessageValueFactory<M> getOutgoingMessageValueFactory() { - MessageValueFactory<M> factory = - OUTGOING_MESSAGE_VALUE_FACTORY_CLASS.newInstance(this); + Class<? extends MessageValueFactory> klass = + valueFactories.getOutMsgFactoryClass(); + MessageValueFactory<M> factory = ReflectionUtils.newInstance(klass, this); factory.initialize(this); return factory; } http://git-wip-us.apache.org/repos/asf/giraph/blob/d97b3966/giraph-core/src/main/java/org/apache/giraph/factories/ValueFactories.java ---------------------------------------------------------------------- diff --git a/giraph-core/src/main/java/org/apache/giraph/factories/ValueFactories.java b/giraph-core/src/main/java/org/apache/giraph/factories/ValueFactories.java index 98e59b3..733d5f2 100644 --- a/giraph-core/src/main/java/org/apache/giraph/factories/ValueFactories.java +++ b/giraph-core/src/main/java/org/apache/giraph/factories/ValueFactories.java @@ -23,6 +23,8 @@ import org.apache.hadoop.io.Writable; import org.apache.hadoop.io.WritableComparable; import static org.apache.giraph.conf.GiraphConstants.EDGE_VALUE_FACTORY_CLASS; +import static org.apache.giraph.conf.GiraphConstants.INCOMING_MESSAGE_VALUE_FACTORY_CLASS; +import static org.apache.giraph.conf.GiraphConstants.OUTGOING_MESSAGE_VALUE_FACTORY_CLASS; import static org.apache.giraph.conf.GiraphConstants.VERTEX_ID_FACTORY_CLASS; import static org.apache.giraph.conf.GiraphConstants.VERTEX_VALUE_FACTORY_CLASS; @@ -45,22 +47,12 @@ public class ValueFactories<I extends WritableComparable, private final VertexValueFactory<V> vertexValueFactory; /** Edge value factory. */ private final EdgeValueFactory<E> edgeValueFactory; - - /** - * Constructor with types - * - * @param vertexIdFactory vertex id factory - * @param vertexValueFactory vertex value factory - * @param edgeValueFactory edge value factory - */ - public ValueFactories( - VertexIdFactory<I> vertexIdFactory, - VertexValueFactory<V> vertexValueFactory, - EdgeValueFactory<E> edgeValueFactory) { - this.edgeValueFactory = edgeValueFactory; - this.vertexIdFactory = vertexIdFactory; - this.vertexValueFactory = vertexValueFactory; - } + // Note that for messages we store the class not the factory itself, because + // the factory instance may change per-superstep if the graph types change. + /** Incoming message value factory class */ + private final Class<? extends MessageValueFactory> inMsgFactoryClass; + /** Outgoing message value factory class */ + private final Class<? extends MessageValueFactory> outMsgFactoryClass; /** * Constructor reading from Configuration @@ -71,6 +63,8 @@ public class ValueFactories<I extends WritableComparable, vertexIdFactory = VERTEX_ID_FACTORY_CLASS.newInstance(conf); vertexValueFactory = VERTEX_VALUE_FACTORY_CLASS.newInstance(conf); edgeValueFactory = EDGE_VALUE_FACTORY_CLASS.newInstance(conf); + inMsgFactoryClass = INCOMING_MESSAGE_VALUE_FACTORY_CLASS.get(conf); + outMsgFactoryClass = OUTGOING_MESSAGE_VALUE_FACTORY_CLASS.get(conf); } /** @@ -78,8 +72,7 @@ public class ValueFactories<I extends WritableComparable, * * @param conf ImmutableClassesGiraphConfiguration */ - public void initializeAll( - ImmutableClassesGiraphConfiguration<I, V, E> conf) { + public void initializeIVE(ImmutableClassesGiraphConfiguration<I, V, E> conf) { vertexIdFactory.initialize(conf); vertexValueFactory.initialize(conf); edgeValueFactory.initialize(conf); @@ -89,7 +82,6 @@ public class ValueFactories<I extends WritableComparable, return edgeValueFactory; } - public VertexIdFactory<I> getVertexIdFactory() { return vertexIdFactory; } @@ -97,4 +89,12 @@ public class ValueFactories<I extends WritableComparable, public VertexValueFactory<V> getVertexValueFactory() { return vertexValueFactory; } + + public Class<? extends MessageValueFactory> getInMsgFactoryClass() { + return inMsgFactoryClass; + } + + public Class<? extends MessageValueFactory> getOutMsgFactoryClass() { + return outMsgFactoryClass; + } }
