Hi Marcin,

The BspUtils factories are not meant for mutating the graph in user code. Your 
vertex should extend MutableVertex and use its methods to add vertices/edges. 
All mutation requests are processed before the next superstep and rules for 
handling conflicts can be specified.

Hope it helps,

Alessandro

From: Marcin Biczak <[email protected]<mailto:[email protected]>>
Reply-To: "[email protected]<mailto:[email protected]>" 
<[email protected]<mailto:[email protected]>>
Date: Sunday, July 22, 2012 9:48 PM
To: "[email protected]<mailto:[email protected]>" 
<[email protected]<mailto:[email protected]>>
Subject: How to create new vertices in runtime?

Hi

Is it possible to create new vertices, during runtime and "execute them"? I 
would like to create N new vertices within compute() method. Currently I use 
the same approach for vertex initialization as in Readers (BspUtils). However 
the newly created vertices do not execute the compute() method.

public void compute(Iterator<Text> msgIterator) throws IOException {
        if(this.getSuperstep() == 0) {
            // createVertex
            BasicVertex<VIntWritable, Text, VIntWritable, Text> vertex = 
BspUtils.<VIntWritable, Text, VIntWritable, Text>createVertex(getContext()
.getConfiguration());
            VIntWritable id = new VIntWritable(new Random().nextInt(100));
            Map<VIntWritable, VIntWritable> edges = Maps.newHashMap();
            edges.put(new VIntWritable(16), new VIntWritable(0));
            vertex.initialize(id, new Text(), edges, null);
            LOG.info("@@@ newly created vertex = "+id);
        } else {
            // stop
            LOG.info("@@@ vertex = "+this.getVertexId());
            voteToHalt();
        }
    }

Logs:
...
// log new vertex
INFO org.test.giraph.test.VertexCreation: @@@ new vertex created = 11
INFO org.test.giraph.test.VertexCreation: @@@ new vertex created = 55
INFO org.test.giraph.test.VertexCreation: @@@ new vertex created = 92
INFO org.test.giraph.test.VertexCreation: @@@ new vertex created = 63
INFO org.test.giraph.test.VertexCreation: @@@ new vertex created = 58
INFO org.test.giraph.test.VertexCreation: @@@ new vertex created = 45
INFO org.test.giraph.test.VertexCreation: @@@ new vertex created = 36
INFO org.test.giraph.test.VertexCreation: @@@ new vertex created = 45
...
// log all vertices
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 1
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 2
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 222
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 3
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 4
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 5
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 6
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 111
INFO org.test.giraph.test.VertexCreation: @@@ vertex = 333

Where am I making a mistake?

Best regards
Marcin

Reply via email to