This project has retired. For details please refer to its
Attic page.
DefaultVertexResolver xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.giraph.graph;
20
21 import org.apache.giraph.conf.DefaultImmutableClassesGiraphConfigurable;
22 import org.apache.giraph.conf.ImmutableClassesGiraphConfiguration;
23 import org.apache.giraph.edge.Edge;
24 import org.apache.hadoop.io.Writable;
25 import org.apache.hadoop.io.WritableComparable;
26 import org.apache.log4j.Logger;
27
28
29
30
31
32
33
34
35
36 @SuppressWarnings("rawtypes")
37 public class DefaultVertexResolver<I extends WritableComparable,
38 V extends Writable, E extends Writable>
39 extends DefaultImmutableClassesGiraphConfigurable<I, V, E>
40 implements VertexResolver<I, V, E> {
41
42 private static final Logger LOG = Logger.getLogger(
43 DefaultVertexResolver.class);
44
45
46 private boolean createVertexesOnMessages = true;
47
48 @Override
49 public Vertex<I, V, E> resolve(
50 I vertexId,
51 Vertex<I, V, E> vertex,
52 VertexChanges<I, V, E> vertexChanges,
53 boolean hasMessages) {
54
55
56
57 removeEdges(vertex, vertexChanges);
58
59
60 vertex = removeVertexIfDesired(vertex, vertexChanges);
61
62
63
64 vertex = addVertexIfDesired(vertexId, vertex, vertexChanges, hasMessages);
65
66
67 addEdges(vertex, vertexChanges);
68
69 return vertex;
70 }
71
72
73
74
75
76
77
78 protected void removeEdges(Vertex<I, V, E> vertex,
79 VertexChanges<I, V, E> vertexChanges) {
80 if (vertex == null) {
81 return;
82 }
83 if (hasEdgeRemovals(vertexChanges)) {
84 for (I removedDestVertex : vertexChanges.getRemovedEdgeList()) {
85 vertex.removeEdges(removedDestVertex);
86 }
87 }
88 }
89
90
91
92
93
94
95
96
97
98
99 protected Vertex<I, V, E> removeVertexIfDesired(
100 Vertex<I, V, E> vertex,
101 VertexChanges<I, V, E> vertexChanges) {
102 if (hasVertexRemovals(vertexChanges)) {
103 vertex = null;
104 }
105 return vertex;
106 }
107
108
109
110
111
112
113
114
115
116
117
118 protected Vertex<I, V, E> addVertexIfDesired(
119 I vertexId,
120 Vertex<I, V, E> vertex,
121 VertexChanges<I, V, E> vertexChanges,
122 boolean hasMessages) {
123 if (vertex == null) {
124 if (hasVertexAdditions(vertexChanges)) {
125 vertex = vertexChanges.getAddedVertexList().get(0);
126 } else if ((hasMessages && createVertexesOnMessages) ||
127 hasEdgeAdditions(vertexChanges)) {
128 vertex = getConf().createVertex();
129 vertex.initialize(vertexId, getConf().createVertexValue());
130 }
131 } else if (hasVertexAdditions(vertexChanges)) {
132 LOG.warn("resolve: Tried to add a vertex with id = " +
133 vertex.getId() + " when one already " +
134 "exists. Ignoring the add vertex request.");
135 }
136 return vertex;
137 }
138
139
140
141
142
143
144
145 protected void addEdges(Vertex<I, V, E> vertex,
146 VertexChanges<I, V, E> vertexChanges) {
147 if (vertex == null) {
148 return;
149 }
150 if (hasEdgeAdditions(vertexChanges)) {
151 for (Edge<I, E> edge : vertexChanges.getAddedEdgeList()) {
152 vertex.addEdge(edge);
153 }
154 }
155 }
156
157
158
159
160
161
162
163 protected boolean hasVertexRemovals(VertexChanges<I, V, E> changes) {
164 return changes != null && changes.getRemovedVertexCount() > 0;
165 }
166
167
168
169
170
171
172
173 protected boolean hasVertexAdditions(VertexChanges<I, V, E> changes) {
174 return changes != null && !changes.getAddedVertexList().isEmpty();
175 }
176
177
178
179
180
181
182
183 protected boolean hasEdgeAdditions(VertexChanges<I, V, E> changes) {
184 return changes != null && !changes.getAddedEdgeList().isEmpty();
185 }
186
187
188
189
190
191
192
193 protected boolean hasEdgeRemovals(VertexChanges<I, V, E> changes) {
194 return changes != null && !changes.getRemovedEdgeList().isEmpty();
195 }
196
197 @Override
198 public void setConf(ImmutableClassesGiraphConfiguration<I, V, E> conf) {
199 super.setConf(conf);
200 createVertexesOnMessages = conf.getResolverCreateVertexOnMessages();
201 }
202 }