Since aggregators will be re-used throughout many projects and algorithms, it makes sense to implement the most common ones in a separate sub-package. This will reduce the time required for users when they implement their projects based on Giraph, because the required aggregators are already in place. I implemented the following ones:
for int/long/float/double: min, max, product, sum, overwrite
for boolean: and, or, overwrite
Most of them speak for themselves, except for the overwrite one. This aggregator simply overwrites the stored value when a new value is aggregated. This is useful when one node is in some way a master node (for example a source node in an routing algorithm), and this node wants to broadcast a value to all other nodes.
Attached is a patch against trunk implementing the aggregators and patching some existing files so they use the .aggregators package instead of the .examples one.