What does the "Allow concurrency" option do during aggregations?
How does threading work during aggregations?
How are aggregation tasks distrubuted amoungst task exectutor nodes?
The "Allow concurrency" task option will allow the same task to be run multiple times. This is different than multiple aggregations (different tasks) running at the same time.
This corresponds to the "concurrent" attribute of the TaskDefinition object. The text from the publicly available JavaDoc describes it pretty well:
* When true, allows the task to be launched even if there
* is already a task with this definition running. If false,
* an exception is thrown.
* If there is a task running, and we allow concurrent runs,
* the name of the new TaskResult is formed by adding a numeric
* qualifier, using the same convention as ResultAction.NewRename.
If multiple applications are specified in one account aggregation task, they will be run serially in the same task execution in one thread in one JVM. Issues can arise when multiple aggregations are competing for a lock on the same identity and a timeout. The general consensus amongst the services folk has been not to use this option. The task executor will not distribute the load of multiple aggregations evenly across all nodes. The first executor that gets a lock on the database table and starts the task wins, so it kind of random in that sense.