| /* |
| * Copyright 2009-2013 by The Regents of the University of California |
| * Licensed 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 from |
| * |
| * 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 edu.uci.ics.pregelix.api.graph; |
| |
| import java.io.IOException; |
| |
| import org.apache.hadoop.io.Writable; |
| import org.apache.hadoop.io.WritableComparable; |
| |
| import edu.uci.ics.hyracks.api.exceptions.HyracksDataException; |
| import edu.uci.ics.pregelix.api.io.WritableSizable; |
| |
| /** |
| * This is the abstract class to implement for aggregating the state of all the vertices globally in the graph. |
| * </p> |
| * The global aggregation of vertices in a distributed cluster include two phase: |
| * 1. a local phase which aggregates vertice sent from a single machine and produces |
| * the partially aggregated state; |
| * 2. a final phase which aggregates all partially aggregated states |
| * |
| * @param <I extends Writable> vertex identifier type |
| * @param <V extends Writable> vertex value type |
| * @param <E extends Writable> edge type |
| * @param <M extends Writable> message type |
| * @param <P extends Writable> |
| * the type of the partial aggregate state |
| * @param <F extends Writable> the type of the final aggregate value |
| */ |
| |
| @SuppressWarnings("rawtypes") |
| public abstract class GlobalAggregator<I extends WritableComparable, V extends Writable, E extends Writable, M extends WritableSizable, P extends Writable, F extends Writable> { |
| /** |
| * initialize aggregator |
| */ |
| public abstract void init(); |
| |
| /** |
| * step through all vertex at each slave partition |
| * |
| * @param vertexIndex |
| * @param msg |
| * @throws IOException |
| */ |
| public abstract void step(Vertex<I, V, E, M> v) throws HyracksDataException; |
| |
| /** |
| * step through all intermediate aggregate result |
| * |
| * @param partialResult |
| * partial aggregate value |
| */ |
| public abstract void step(P partialResult); |
| |
| /** |
| * finish partial aggregate |
| * |
| * @return the final aggregate value |
| */ |
| public abstract P finishPartial(); |
| |
| /** |
| * finish final aggregate |
| * |
| * @return the final aggregate value |
| */ |
| public abstract F finishFinal(); |
| } |